diff --git a/cornac/models/comparer/recom_comparer_sub.cpp b/cornac/models/comparer/recom_comparer_sub.cpp index c6e9105c8..fa5db3106 100644 --- a/cornac/models/comparer/recom_comparer_sub.cpp +++ b/cornac/models/comparer/recom_comparer_sub.cpp @@ -1,14 +1,14 @@ -/* Generated by Cython 0.29.36 */ +/* Generated by Cython 3.0.0 */ /* BEGIN: Cython Metadata { "distutils": { "depends": [ - "/home/hoangle/anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/core/include/numpy/arrayobject.h", - "/home/hoangle/anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/core/include/numpy/arrayscalars.h", - "/home/hoangle/anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/core/include/numpy/ndarrayobject.h", - "/home/hoangle/anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/core/include/numpy/ndarraytypes.h", - "/home/hoangle/anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/core/include/numpy/ufuncobject.h", + "/home/hoangle/anaconda3/envs/py310/lib/python3.10/site-packages/numpy/core/include/numpy/arrayobject.h", + "/home/hoangle/anaconda3/envs/py310/lib/python3.10/site-packages/numpy/core/include/numpy/arrayscalars.h", + "/home/hoangle/anaconda3/envs/py310/lib/python3.10/site-packages/numpy/core/include/numpy/ndarrayobject.h", + "/home/hoangle/anaconda3/envs/py310/lib/python3.10/site-packages/numpy/core/include/numpy/ndarraytypes.h", + "/home/hoangle/anaconda3/envs/py310/lib/python3.10/site-packages/numpy/core/include/numpy/ufuncobject.h", "cornac/models/bpr/recom_bpr.h" ], "extra_compile_args": [ @@ -25,7 +25,7 @@ ], "include_dirs": [ "cornac/models/comparer", - "/home/hoangle/anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/core/include", + "/home/hoangle/anaconda3/envs/py310/lib/python3.10/site-packages/numpy/core/include", "cornac/utils/external" ], "language": "c++", @@ -41,20 +41,32 @@ END: Cython Metadata */ #ifndef PY_SSIZE_T_CLEAN #define PY_SSIZE_T_CLEAN #endif /* PY_SSIZE_T_CLEAN */ +#if defined(CYTHON_LIMITED_API) && 0 + #ifndef Py_LIMITED_API + #if CYTHON_LIMITED_API+0 > 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + #include "Python.h" #ifndef Py_PYTHON_H #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) - #error Cython requires Python 2.6+ or Python 3.3+. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. #else -#define CYTHON_ABI "0_29_36" -#define CYTHON_HEX_VERSION 0x001D24F0 +#define CYTHON_ABI "3_0_0" +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x030000F0 #define CYTHON_FUTURE_DIVISION 1 #include #ifndef offsetof #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) #endif -#if !defined(WIN32) && !defined(MS_WINDOWS) +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) #ifndef __stdcall #define __stdcall #endif @@ -73,9 +85,7 @@ END: Cython Metadata */ #endif #define __PYX_COMMA , #ifndef HAVE_LONG_LONG - #if PY_VERSION_HEX >= 0x02070000 - #define HAVE_LONG_LONG - #endif + #define HAVE_LONG_LONG #endif #ifndef PY_LONG_LONG #define PY_LONG_LONG LONG_LONG @@ -83,13 +93,74 @@ END: Cython Metadata */ #ifndef Py_HUGE_VAL #define Py_HUGE_VAL HUGE_VAL #endif -#ifdef PYPY_VERSION +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif +#elif defined(PYPY_VERSION) #define CYTHON_COMPILING_IN_PYPY 1 - #define CYTHON_COMPILING_IN_PYSTON 0 #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 #define CYTHON_COMPILING_IN_NOGIL 0 #undef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #if PY_VERSION_HEX < 0x03050000 @@ -114,14 +185,23 @@ END: Cython Metadata */ #define CYTHON_UNPACK_METHODS 0 #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif #if PY_VERSION_HEX < 0x03090000 #undef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT 0 #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) #define CYTHON_PEP489_MULTI_PHASE_INIT 1 #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 #undef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) #undef CYTHON_USE_DICT_VERSIONS @@ -131,44 +211,56 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif -#elif defined(PYSTON_VERSION) +#elif defined(CYTHON_LIMITED_API) #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 1 #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 #define CYTHON_COMPILING_IN_NOGIL 0 - #ifndef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 1 - #endif + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #undef CYTHON_USE_ASYNC_SLOTS #define CYTHON_USE_ASYNC_SLOTS 0 #undef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 0 - #ifndef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 1 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 #endif - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 #undef CYTHON_USE_PYLONG_INTERNALS #define CYTHON_USE_PYLONG_INTERNALS 0 #ifndef CYTHON_AVOID_BORROWED_REFS #define CYTHON_AVOID_BORROWED_REFS 0 #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif #undef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 1 + #endif #undef CYTHON_USE_DICT_VERSIONS #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK @@ -178,8 +270,9 @@ END: Cython Metadata */ #endif #elif defined(PY_NOGIL) #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 0 #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 #define CYTHON_COMPILING_IN_NOGIL 1 #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 @@ -223,16 +316,17 @@ END: Cython Metadata */ #define CYTHON_USE_EXC_INFO_STACK 0 #else #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 0 #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 #define CYTHON_COMPILING_IN_NOGIL 0 #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 1 #endif #if PY_MAJOR_VERSION < 3 @@ -241,11 +335,8 @@ END: Cython Metadata */ #elif !defined(CYTHON_USE_ASYNC_SLOTS) #define CYTHON_USE_ASYNC_SLOTS 1 #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #elif !defined(CYTHON_USE_PYLONG_INTERNALS) - #define CYTHON_USE_PYLONG_INTERNALS (PY_VERSION_HEX < 0x030C00A5) + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 1 #endif #ifndef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 1 @@ -268,29 +359,47 @@ END: Cython Metadata */ #ifndef CYTHON_UNPACK_METHODS #define CYTHON_UNPACK_METHODS 1 #endif - #if PY_VERSION_HEX >= 0x030B00A4 - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #elif !defined(CYTHON_FAST_THREAD_STATE) + #ifndef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 1 #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif #ifndef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030A0000) + #define CYTHON_FAST_PYCALL 1 #endif - #ifndef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 #endif - #ifndef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 #endif - #ifndef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS ((PY_VERSION_HEX >= 0x030600B1) && (PY_VERSION_HEX < 0x030C00A5)) + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 #endif - #if PY_VERSION_HEX >= 0x030B00A4 + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) + #endif + #if PY_VERSION_HEX < 0x030700A3 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 #elif !defined(CYTHON_USE_EXC_INFO_STACK) - #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #define CYTHON_USE_EXC_INFO_STACK 1 #endif #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 @@ -299,6 +408,10 @@ END: Cython Metadata */ #if !defined(CYTHON_FAST_PYCCALL) #define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) #endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) #if CYTHON_USE_PYLONG_INTERNALS #if PY_MAJOR_VERSION < 3 #include "longintrepr.h" @@ -327,6 +440,17 @@ END: Cython Metadata */ #define CYTHON_RESTRICT #endif #endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif #ifndef CYTHON_UNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) @@ -340,13 +464,16 @@ END: Cython Metadata */ # define CYTHON_UNUSED # endif #endif -#ifndef CYTHON_MAYBE_UNUSED_VAR +#ifndef CYTHON_UNUSED_VAR # if defined(__cplusplus) - template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } + template void CYTHON_UNUSED_VAR( const T& ) { } # else -# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# define CYTHON_UNUSED_VAR(x) (void)(x) # endif #endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif #ifndef CYTHON_NCP_UNUSED # if CYTHON_COMPILING_IN_CPYTHON # define CYTHON_NCP_UNUSED @@ -358,24 +485,47 @@ END: Cython Metadata */ #ifdef _MSC_VER #ifndef _MSC_STDINT_H_ #if _MSC_VER < 1300 - typedef unsigned char uint8_t; - typedef unsigned int uint32_t; + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; #else - typedef unsigned __int8 uint8_t; - typedef unsigned __int32 uint32_t; + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; + #else + typedef unsigned __int32 __pyx_uintptr_t; #endif #endif #else - #include + #include + typedef uintptr_t __pyx_uintptr_t; #endif #ifndef CYTHON_FALLTHROUGH - #if defined(__cplusplus) && __cplusplus >= 201103L - #if __has_cpp_attribute(fallthrough) - #define CYTHON_FALLTHROUGH [[fallthrough]] - #elif __has_cpp_attribute(clang::fallthrough) - #define CYTHON_FALLTHROUGH [[clang::fallthrough]] - #elif __has_cpp_attribute(gnu::fallthrough) - #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif #endif #endif #ifndef CYTHON_FALLTHROUGH @@ -385,13 +535,26 @@ END: Cython Metadata */ #define CYTHON_FALLTHROUGH #endif #endif - #if defined(__clang__ ) && defined(__apple_build_version__) + #if defined(__clang__) && defined(__apple_build_version__) #if __apple_build_version__ < 7000000 #undef CYTHON_FALLTHROUGH #define CYTHON_FALLTHROUGH #endif #endif #endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) #ifndef __cplusplus #error "Cython files generated with the C++ option must be compiled with a C++ compiler." @@ -415,8 +578,10 @@ class __Pyx_FakeReference { T *operator->() { return ptr; } T *operator&() { return ptr; } operator T&() { return *ptr; } - template bool operator ==(U other) { return *ptr == other; } - template bool operator !=(U other) { return *ptr != other; } + template bool operator ==(const U& other) const { return *ptr == other; } + template bool operator !=(const U& other) const { return *ptr != other; } + template bool operator==(const __Pyx_FakeReference& other) const { return *ptr == *other.ptr; } + template bool operator!=(const __Pyx_FakeReference& other) const { return *ptr != *other.ptr; } private: T *ptr; }; @@ -425,28 +590,28 @@ class __Pyx_FakeReference { #define CYTHON_FORMAT_SSIZE_T "z" #if PY_MAJOR_VERSION < 3 #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else #define __Pyx_BUILTIN_MODULE_NAME "builtins" #define __Pyx_DefaultClassType PyType_Type #if PY_VERSION_HEX >= 0x030B00A1 - static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int k, int l, int s, int f, + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, PyObject *code, PyObject *c, PyObject* n, PyObject *v, PyObject *fv, PyObject *cell, PyObject* fn, PyObject *name, int fline, PyObject *lnos) { PyObject *kwds=NULL, *argcount=NULL, *posonlyargcount=NULL, *kwonlyargcount=NULL; - PyObject *nlocals=NULL, *stacksize=NULL, *flags=NULL, *replace=NULL, *call_result=NULL, *empty=NULL; + PyObject *nlocals=NULL, *stacksize=NULL, *flags=NULL, *replace=NULL, *empty=NULL; const char *fn_cstr=NULL; const char *name_cstr=NULL; - PyCodeObject* co=NULL; + PyCodeObject *co=NULL, *result=NULL; PyObject *type, *value, *traceback; PyErr_Fetch(&type, &value, &traceback); if (!(kwds=PyDict_New())) goto end; if (!(argcount=PyLong_FromLong(a))) goto end; if (PyDict_SetItemString(kwds, "co_argcount", argcount) != 0) goto end; - if (!(posonlyargcount=PyLong_FromLong(0))) goto end; + if (!(posonlyargcount=PyLong_FromLong(p))) goto end; if (PyDict_SetItemString(kwds, "co_posonlyargcount", posonlyargcount) != 0) goto end; if (!(kwonlyargcount=PyLong_FromLong(k))) goto end; if (PyDict_SetItemString(kwds, "co_kwonlyargcount", kwonlyargcount) != 0) goto end; @@ -466,18 +631,11 @@ class __Pyx_FakeReference { if (!(fn_cstr=PyUnicode_AsUTF8AndSize(fn, NULL))) goto end; if (!(name_cstr=PyUnicode_AsUTF8AndSize(name, NULL))) goto end; if (!(co = PyCode_NewEmpty(fn_cstr, name_cstr, fline))) goto end; - if (!(replace = PyObject_GetAttrString((PyObject*)co, "replace"))) goto cleanup_code_too; - if (!(empty = PyTuple_New(0))) goto cleanup_code_too; // unfortunately __pyx_empty_tuple isn't available here - if (!(call_result = PyObject_Call(replace, empty, kwds))) goto cleanup_code_too; - Py_XDECREF((PyObject*)co); - co = (PyCodeObject*)call_result; - call_result = NULL; - if (0) { - cleanup_code_too: - Py_XDECREF((PyObject*)co); - co = NULL; - } - end: + if (!(replace = PyObject_GetAttrString((PyObject*)co, "replace"))) goto end; + if (!(empty = PyTuple_New(0))) goto end; + result = (PyCodeObject*) PyObject_Call(replace, empty, kwds); + end: + Py_XDECREF((PyObject*) co); Py_XDECREF(kwds); Py_XDECREF(argcount); Py_XDECREF(posonlyargcount); @@ -485,24 +643,57 @@ class __Pyx_FakeReference { Py_XDECREF(nlocals); Py_XDECREF(stacksize); Py_XDECREF(replace); - Py_XDECREF(call_result); Py_XDECREF(empty); if (type) { PyErr_Restore(type, value, traceback); } - return co; + return result; } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #endif - #define __Pyx_DefaultClassType PyType_Type #endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) #if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) #else #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) #endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 +#endif #ifndef Py_TPFLAGS_CHECKTYPES #define Py_TPFLAGS_CHECKTYPES 0 #endif @@ -515,6 +706,12 @@ class __Pyx_FakeReference { #ifndef Py_TPFLAGS_HAVE_FINALIZE #define Py_TPFLAGS_HAVE_FINALIZE 0 #endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif #ifndef METH_STACKLESS #define METH_STACKLESS 0 #endif @@ -529,30 +726,53 @@ class __Pyx_FakeReference { #define __Pyx_PyCFunctionFast _PyCFunctionFast #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords #endif -#if CYTHON_FAST_PYCCALL -#define __Pyx_PyFastCFunction_Check(func)\ - ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords #else -#define __Pyx_PyFastCFunction_Check(func) 0 + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) +#else + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) +#endif +#if PY_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); +#else + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 #endif #if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) #define PyObject_Malloc(s) PyMem_Malloc(s) #define PyObject_Free(p) PyMem_Free(p) #define PyObject_Realloc(p) PyMem_Realloc(p) #endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 - #define PyMem_RawMalloc(n) PyMem_Malloc(n) - #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) - #define PyMem_RawFree(p) PyMem_Free(p) -#endif -#if CYTHON_COMPILING_IN_PYSTON - #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) #else #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) #endif -#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE #define __Pyx_PyThreadState_Current PyThreadState_GET() #elif PY_VERSION_HEX >= 0x03060000 #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() @@ -561,6 +781,22 @@ class __Pyx_FakeReference { #else #define __Pyx_PyThreadState_Current _PyThreadState_Current #endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif #if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) #include "pythread.h" #define Py_tss_NEEDS_INIT 0 @@ -591,6 +827,28 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { return PyThread_get_key_value(*key); } #endif +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif #if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) #define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) #else @@ -603,12 +861,64 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) #endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS -#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#else +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); #else -#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; +#endif +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem #endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) +#else + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next +#endif +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE(obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} +#else +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) #define CYTHON_PEP393_ENABLED 1 #if PY_VERSION_HEX >= 0x030C0000 #define __Pyx_PyUnicode_READY(op) (0) @@ -619,10 +929,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) #if PY_VERSION_HEX >= 0x030C0000 #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) #else @@ -640,11 +950,11 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyUnicode_READY(op) (0) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) #endif #if CYTHON_COMPILING_IN_PYPY @@ -655,14 +965,20 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) #endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) - #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) - #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) - #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif #endif #define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) #define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) @@ -691,8 +1007,14 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) #endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif #ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) #endif #if PY_VERSION_HEX >= 0x030900A4 #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) @@ -711,6 +1033,8 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define PyInt_Type PyLong_Type #define PyInt_Check(op) PyLong_Check(op) #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) #define PyInt_FromString PyLong_FromString #define PyInt_FromUnicode PyLong_FromUnicode #define PyInt_FromLong PyLong_FromLong @@ -722,6 +1046,9 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) #endif #if PY_MAJOR_VERSION >= 3 #define PyBoolObject PyLongObject @@ -739,11 +1066,6 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t #endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) -#else - #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) -#endif #if CYTHON_USE_ASYNC_SLOTS #if PY_VERSION_HEX >= 0x030500B1 #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods @@ -788,12 +1110,17 @@ static CYTHON_INLINE float __PYX_NAN() { #define __PYX_ERR(f_index, lineno, Ln_error) \ { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else + #define __PYX_EXTERN_C extern "C++" #endif #define __PYX_HAVE__cornac__models__comparer__recom_comparer_sub @@ -802,14 +1129,14 @@ static CYTHON_INLINE float __PYX_NAN() { #include #include #include + + /* Using NumPy API declarations from "numpy/__init__.cython-30.pxd" */ + #include "numpy/arrayobject.h" #include "numpy/ndarrayobject.h" #include "numpy/ndarraytypes.h" #include "numpy/arrayscalars.h" #include "numpy/ufuncobject.h" - - /* NumPy API declarations from "numpy/__init__.pxd" */ - #include "ios" #include "new" #include "stdexcept" @@ -833,7 +1160,6 @@ static CYTHON_INLINE float __PYX_NAN() { #include "../bpr/recom_bpr.h" #include "pythread.h" #include -#include "pystate.h" #ifdef _OPENMP #include #endif /* _OPENMP */ @@ -902,9 +1228,9 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); #define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) #define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) #define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) @@ -912,11 +1238,22 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); #define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) #define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) #define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const wchar_t *u) +{ + const wchar_t *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#else +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) +{ const Py_UNICODE *u_end = u; while (*u_end++) ; return (size_t)(u_end - u - 1); } +#endif +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) #define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) #define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode #define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode @@ -942,7 +1279,52 @@ static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); #else #define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) #endif -#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else // Py < 3.12 + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII static int __Pyx_sys_getdefaultencoding_not_ascii; static int __Pyx_init_sys_getdefaultencoding_params(void) { @@ -964,7 +1346,7 @@ static int __Pyx_init_sys_getdefaultencoding_params(void) { char ascii_chars[128]; int c; for (c = 0; c < 128; c++) { - ascii_chars[c] = c; + ascii_chars[c] = (char) c; } __Pyx_sys_getdefaultencoding_not_ascii = 1; ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); @@ -1029,23 +1411,19 @@ static int __Pyx_init_sys_getdefaultencoding_params(void) { #endif /* __GNUC__ */ static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } +#if !CYTHON_USE_MODULE_STATE static PyObject *__pyx_m = NULL; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_cython_runtime = NULL; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static PyObject *__pyx_empty_unicode; +#endif static int __pyx_lineno; static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; +static const char * __pyx_cfilenm = __FILE__; static const char *__pyx_filename; /* Header.proto */ #if !defined(CYTHON_CCOMPLEX) #if defined(__cplusplus) #define CYTHON_CCOMPLEX 1 - #elif defined(_Complex_I) + #elif (defined(_Complex_I) && !defined(_MSC_VER)) || ((defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) && !defined(__STDC_NO_COMPLEX__)) #define CYTHON_CCOMPLEX 1 #else #define CYTHON_CCOMPLEX 0 @@ -1063,17 +1441,30 @@ static const char *__pyx_filename; #define _Complex_I 1.0fj #endif +/* #### Code section: filename_table ### */ static const char *__pyx_f[] = { "cornac/models/comparer/recom_comparer_sub.pyx", - "__init__.pxd", - "stringsource", + "", + "__init__.cython-30.pxd", "type.pxd", "cornac/utils/fast_dict.pxd", "cornac/models/bpr/recom_bpr.pxd", }; +/* #### Code section: utility_code_proto_before_types ### */ +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* NoFastGil.proto */ +#define __Pyx_PyGILState_Ensure PyGILState_Ensure +#define __Pyx_PyGILState_Release PyGILState_Release +#define __Pyx_FastGIL_Remember() +#define __Pyx_FastGIL_Forget() +#define __Pyx_FastGilFuncInit() + /* BufferFormatStructs.proto */ -#define IS_UNSIGNED(type) (((type) -1) > 0) struct __Pyx_StructField_; #define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) typedef struct { @@ -1108,24 +1499,6 @@ typedef struct { char is_valid_array; } __Pyx_BufFmt_Context; -/* NoFastGil.proto */ -#define __Pyx_PyGILState_Ensure PyGILState_Ensure -#define __Pyx_PyGILState_Release PyGILState_Release -#define __Pyx_FastGIL_Remember() -#define __Pyx_FastGIL_Forget() -#define __Pyx_FastGilFuncInit() - -/* MemviewSliceStruct.proto */ -struct __pyx_memoryview_obj; -typedef struct { - struct __pyx_memoryview_obj *memview; - char *data; - Py_ssize_t shape[8]; - Py_ssize_t strides[8]; - Py_ssize_t suboffsets[8]; -} __Pyx_memviewslice; -#define __Pyx_MemoryView_Len(m) (m.shape[0]) - /* Atomics.proto */ #include #ifndef CYTHON_ATOMICS @@ -1133,7 +1506,44 @@ typedef struct { #endif #define __PYX_CYTHON_ATOMICS_ENABLED() CYTHON_ATOMICS #define __pyx_atomic_int_type int -#if CYTHON_ATOMICS && (__GNUC__ >= 5 || (__GNUC__ == 4 &&\ +#define __pyx_nonatomic_int_type int +#if CYTHON_ATOMICS && (defined(__STDC_VERSION__) &&\ + (__STDC_VERSION__ >= 201112L) &&\ + !defined(__STDC_NO_ATOMICS__)) + #include +#elif CYTHON_ATOMICS && (defined(__cplusplus) && (\ + (__cplusplus >= 201103L) ||\ + (defined(_MSC_VER) && _MSC_VER >= 1700))) + #include +#endif +#if CYTHON_ATOMICS && (defined(__STDC_VERSION__) &&\ + (__STDC_VERSION__ >= 201112L) &&\ + !defined(__STDC_NO_ATOMICS__) &&\ + ATOMIC_INT_LOCK_FREE == 2) + #undef __pyx_atomic_int_type + #define __pyx_atomic_int_type atomic_int + #define __pyx_atomic_incr_aligned(value) atomic_fetch_add_explicit(value, 1, memory_order_relaxed) + #define __pyx_atomic_decr_aligned(value) atomic_fetch_sub_explicit(value, 1, memory_order_acq_rel) + #if defined(__PYX_DEBUG_ATOMICS) && defined(_MSC_VER) + #pragma message ("Using standard C atomics") + #elif defined(__PYX_DEBUG_ATOMICS) + #warning "Using standard C atomics" + #endif +#elif CYTHON_ATOMICS && (defined(__cplusplus) && (\ + (__cplusplus >= 201103L) ||\ +\ + (defined(_MSC_VER) && _MSC_VER >= 1700)) &&\ + ATOMIC_INT_LOCK_FREE == 2) + #undef __pyx_atomic_int_type + #define __pyx_atomic_int_type std::atomic_int + #define __pyx_atomic_incr_aligned(value) std::atomic_fetch_add_explicit(value, 1, std::memory_order_relaxed) + #define __pyx_atomic_decr_aligned(value) std::atomic_fetch_sub_explicit(value, 1, std::memory_order_acq_rel) + #if defined(__PYX_DEBUG_ATOMICS) && defined(_MSC_VER) + #pragma message ("Using standard C++ atomics") + #elif defined(__PYX_DEBUG_ATOMICS) + #warning "Using standard C++ atomics" + #endif +#elif CYTHON_ATOMICS && (__GNUC__ >= 5 || (__GNUC__ == 4 &&\ (__GNUC_MINOR__ > 1 ||\ (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ >= 2)))) #define __pyx_atomic_incr_aligned(value) __sync_fetch_and_add(value, 1) @@ -1141,10 +1551,11 @@ typedef struct { #ifdef __PYX_DEBUG_ATOMICS #warning "Using GNU atomics" #endif -#elif CYTHON_ATOMICS && defined(_MSC_VER) && CYTHON_COMPILING_IN_NOGIL +#elif CYTHON_ATOMICS && defined(_MSC_VER) #include #undef __pyx_atomic_int_type #define __pyx_atomic_int_type long + #define __pyx_nonatomic_int_type long #pragma intrinsic (_InterlockedExchangeAdd) #define __pyx_atomic_incr_aligned(value) _InterlockedExchangeAdd(value, 1) #define __pyx_atomic_decr_aligned(value) _InterlockedExchangeAdd(value, -1) @@ -1158,7 +1569,6 @@ typedef struct { #warning "Not using atomics" #endif #endif -typedef volatile __pyx_atomic_int_type __pyx_atomic_int; #if CYTHON_ATOMICS #define __pyx_add_acquisition_count(memview)\ __pyx_atomic_incr_aligned(__pyx_get_slice_count_pointer(memview)) @@ -1171,13 +1581,20 @@ typedef volatile __pyx_atomic_int_type __pyx_atomic_int; __pyx_sub_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) #endif -/* ForceInitThreads.proto */ -#ifndef __PYX_FORCE_INIT_THREADS - #define __PYX_FORCE_INIT_THREADS 0 -#endif +/* MemviewSliceStruct.proto */ +struct __pyx_memoryview_obj; +typedef struct { + struct __pyx_memoryview_obj *memview; + char *data; + Py_ssize_t shape[8]; + Py_ssize_t strides[8]; + Py_ssize_t suboffsets[8]; +} __Pyx_memviewslice; +#define __Pyx_MemoryView_Len(m) (m.shape[0]) +/* #### Code section: numeric_typedefs ### */ -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":690 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":730 * # in Cython to enable them only on the right systems. * * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< @@ -1186,7 +1603,7 @@ typedef volatile __pyx_atomic_int_type __pyx_atomic_int; */ typedef npy_int8 __pyx_t_5numpy_int8_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":691 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":731 * * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< @@ -1195,7 +1612,7 @@ typedef npy_int8 __pyx_t_5numpy_int8_t; */ typedef npy_int16 __pyx_t_5numpy_int16_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":692 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":732 * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< @@ -1204,7 +1621,7 @@ typedef npy_int16 __pyx_t_5numpy_int16_t; */ typedef npy_int32 __pyx_t_5numpy_int32_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":693 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":733 * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< @@ -1213,7 +1630,7 @@ typedef npy_int32 __pyx_t_5numpy_int32_t; */ typedef npy_int64 __pyx_t_5numpy_int64_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":697 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":737 * #ctypedef npy_int128 int128_t * * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< @@ -1222,7 +1639,7 @@ typedef npy_int64 __pyx_t_5numpy_int64_t; */ typedef npy_uint8 __pyx_t_5numpy_uint8_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":698 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":738 * * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< @@ -1231,7 +1648,7 @@ typedef npy_uint8 __pyx_t_5numpy_uint8_t; */ typedef npy_uint16 __pyx_t_5numpy_uint16_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":699 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":739 * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< @@ -1240,7 +1657,7 @@ typedef npy_uint16 __pyx_t_5numpy_uint16_t; */ typedef npy_uint32 __pyx_t_5numpy_uint32_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":700 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":740 * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< @@ -1249,7 +1666,7 @@ typedef npy_uint32 __pyx_t_5numpy_uint32_t; */ typedef npy_uint64 __pyx_t_5numpy_uint64_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":704 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":744 * #ctypedef npy_uint128 uint128_t * * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< @@ -1258,7 +1675,7 @@ typedef npy_uint64 __pyx_t_5numpy_uint64_t; */ typedef npy_float32 __pyx_t_5numpy_float32_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":705 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":745 * * ctypedef npy_float32 float32_t * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< @@ -1267,61 +1684,43 @@ typedef npy_float32 __pyx_t_5numpy_float32_t; */ typedef npy_float64 __pyx_t_5numpy_float64_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":714 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":754 * # The int types are mapped a bit surprising -- * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t # <<<<<<<<<<<<<< - * ctypedef npy_longlong long_t * ctypedef npy_longlong longlong_t + * */ typedef npy_long __pyx_t_5numpy_int_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":715 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":755 * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t - * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< - * ctypedef npy_longlong longlong_t - * - */ -typedef npy_longlong __pyx_t_5numpy_long_t; - -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":716 - * ctypedef npy_long int_t - * ctypedef npy_longlong long_t * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< * * ctypedef npy_ulong uint_t */ typedef npy_longlong __pyx_t_5numpy_longlong_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":718 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":757 * ctypedef npy_longlong longlong_t * * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< - * ctypedef npy_ulonglong ulong_t * ctypedef npy_ulonglong ulonglong_t + * */ typedef npy_ulong __pyx_t_5numpy_uint_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":719 - * - * ctypedef npy_ulong uint_t - * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< - * ctypedef npy_ulonglong ulonglong_t +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":758 * - */ -typedef npy_ulonglong __pyx_t_5numpy_ulong_t; - -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":720 * ctypedef npy_ulong uint_t - * ctypedef npy_ulonglong ulong_t * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< * * ctypedef npy_intp intp_t */ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":722 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":760 * ctypedef npy_ulonglong ulonglong_t * * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< @@ -1330,7 +1729,7 @@ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; */ typedef npy_intp __pyx_t_5numpy_intp_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":723 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":761 * * ctypedef npy_intp intp_t * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< @@ -1339,7 +1738,7 @@ typedef npy_intp __pyx_t_5numpy_intp_t; */ typedef npy_uintp __pyx_t_5numpy_uintp_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":725 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":763 * ctypedef npy_uintp uintp_t * * ctypedef npy_double float_t # <<<<<<<<<<<<<< @@ -1348,7 +1747,7 @@ typedef npy_uintp __pyx_t_5numpy_uintp_t; */ typedef npy_double __pyx_t_5numpy_float_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":726 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":764 * * ctypedef npy_double float_t * ctypedef npy_double double_t # <<<<<<<<<<<<<< @@ -1357,7 +1756,7 @@ typedef npy_double __pyx_t_5numpy_float_t; */ typedef npy_double __pyx_t_5numpy_double_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":727 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":765 * ctypedef npy_double float_t * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< @@ -1383,8 +1782,9 @@ typedef __pyx_t_5numpy_float64_t __pyx_t_6cornac_5utils_9fast_dict_DTYPE_t; * */ typedef __pyx_t_5numpy_intp_t __pyx_t_6cornac_5utils_9fast_dict_ITYPE_t; +/* #### Code section: complex_type_declarations ### */ /* Declarations.proto */ -#if CYTHON_CCOMPLEX +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #ifdef __cplusplus typedef ::std::complex< float > __pyx_t_float_complex; #else @@ -1396,7 +1796,7 @@ typedef __pyx_t_5numpy_intp_t __pyx_t_6cornac_5utils_9fast_dict_ITYPE_t; static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); /* Declarations.proto */ -#if CYTHON_CCOMPLEX +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #ifdef __cplusplus typedef ::std::complex< double > __pyx_t_double_complex; #else @@ -1407,6 +1807,7 @@ static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(floa #endif static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); +/* #### Code section: type_declarations ### */ /*--- Type declarations ---*/ struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict; @@ -1416,7 +1817,7 @@ struct __pyx_MemviewEnum_obj; struct __pyx_memoryview_obj; struct __pyx_memoryviewslice_obj; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":729 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":767 * ctypedef npy_longdouble longdouble_t * * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< @@ -1425,7 +1826,7 @@ struct __pyx_memoryviewslice_obj; */ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":730 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":768 * * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< @@ -1434,7 +1835,7 @@ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; */ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":731 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":769 * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< @@ -1443,7 +1844,7 @@ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; */ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":733 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":771 * ctypedef npy_clongdouble clongdouble_t * * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< @@ -1451,6 +1852,11 @@ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; * cdef inline object PyArray_MultiIterNew1(a): */ typedef npy_cdouble __pyx_t_5numpy_complex_t; +struct __pyx_defaults; +typedef struct __pyx_defaults __pyx_defaults; +struct __pyx_defaults { + PyObject *__pyx_arg__fused_sigindex; +}; /* "utils/fast_dict.pxd":27 * @@ -1481,8 +1887,8 @@ struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector { }; -/* "View.MemoryView":106 - * +/* "View.MemoryView":114 + * @cython.collection_type("sequence") * @cname("__pyx_array") * cdef class array: # <<<<<<<<<<<<<< * @@ -1506,7 +1912,7 @@ struct __pyx_array_obj { }; -/* "View.MemoryView":280 +/* "View.MemoryView":302 * * @cname('__pyx_MemviewEnum') * cdef class Enum(object): # <<<<<<<<<<<<<< @@ -1519,10 +1925,10 @@ struct __pyx_MemviewEnum_obj { }; -/* "View.MemoryView":331 +/* "View.MemoryView":337 * * @cname('__pyx_memoryview') - * cdef class memoryview(object): # <<<<<<<<<<<<<< + * cdef class memoryview: # <<<<<<<<<<<<<< * * cdef object obj */ @@ -1533,8 +1939,7 @@ struct __pyx_memoryview_obj { PyObject *_size; PyObject *_array_interface; PyThread_type_lock lock; - __pyx_atomic_int acquisition_count[2]; - __pyx_atomic_int *acquisition_count_aligned_p; + __pyx_atomic_int_type acquisition_count; Py_buffer view; int flags; int dtype_is_object; @@ -1542,8 +1947,8 @@ struct __pyx_memoryview_obj { }; -/* "View.MemoryView":967 - * +/* "View.MemoryView":952 + * @cython.collection_type("sequence") * @cname('__pyx_memoryviewslice') * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< * "Internal class for passing memoryview slices to Python" @@ -1587,8 +1992,8 @@ struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector { static struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_vtabptr_6cornac_6models_3bpr_9recom_bpr_RNGVector; -/* "View.MemoryView":106 - * +/* "View.MemoryView":114 + * @cython.collection_type("sequence") * @cname("__pyx_array") * cdef class array: # <<<<<<<<<<<<<< * @@ -1601,10 +2006,10 @@ struct __pyx_vtabstruct_array { static struct __pyx_vtabstruct_array *__pyx_vtabptr_array; -/* "View.MemoryView":331 +/* "View.MemoryView":337 * * @cname('__pyx_memoryview') - * cdef class memoryview(object): # <<<<<<<<<<<<<< + * cdef class memoryview: # <<<<<<<<<<<<<< * * cdef object obj */ @@ -1617,12 +2022,13 @@ struct __pyx_vtabstruct_memoryview { PyObject *(*setitem_indexed)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); PyObject *(*convert_item_to_object)(struct __pyx_memoryview_obj *, char *); PyObject *(*assign_item_from_object)(struct __pyx_memoryview_obj *, char *, PyObject *); + PyObject *(*_get_base)(struct __pyx_memoryview_obj *); }; static struct __pyx_vtabstruct_memoryview *__pyx_vtabptr_memoryview; -/* "View.MemoryView":967 - * +/* "View.MemoryView":952 + * @cython.collection_type("sequence") * @cname('__pyx_memoryviewslice') * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< * "Internal class for passing memoryview slices to Python" @@ -1633,6 +2039,7 @@ struct __pyx_vtabstruct__memoryviewslice { struct __pyx_vtabstruct_memoryview __pyx_base; }; static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; +/* #### Code section: utility_code_proto ### */ /* --- Runtime support code (head) --- */ /* Refnanny.proto */ @@ -1641,11 +2048,11 @@ static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; #endif #if CYTHON_REFNANNY typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); void (*FinishContext)(void**); } __Pyx_RefNannyAPIStruct; static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; @@ -1655,28 +2062,40 @@ static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; #define __Pyx_RefNannySetupContext(name, acquire_gil)\ if (acquire_gil) {\ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ PyGILState_Release(__pyx_gilstate_save);\ } else {\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ } #else #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() #endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } #define __Pyx_RefNannyFinishContext()\ __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) #else #define __Pyx_RefNannyDeclarations #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() #define __Pyx_RefNannyFinishContext() #define __Pyx_INCREF(r) Py_INCREF(r) #define __Pyx_DECREF(r) Py_DECREF(r) @@ -1687,6 +2106,10 @@ static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; #define __Pyx_XGOTREF(r) #define __Pyx_XGIVEREF(r) #endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) #define __Pyx_XDECREF_SET(r, v) do {\ PyObject *tmp = (PyObject *) r;\ r = v; __Pyx_XDECREF(tmp);\ @@ -1698,6 +2121,57 @@ static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; #define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) #define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + /* PyObjectGetAttrStr.proto */ #if CYTHON_USE_TYPE_SLOTS static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); @@ -1705,20 +2179,110 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) #endif +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + /* GetBuiltinName.proto */ static PyObject *__Pyx_GetBuiltinName(PyObject *name); +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* fastcall.proto */ +#define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + /* RaiseDoubleKeywords.proto */ static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /* ParseKeywords.proto */ -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name); -/* RaiseArgTupleInvalid.proto */ -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + __Pyx__ArgTypeTest(obj, type, name, exact)) +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#if !CYTHON_VECTORCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif +#if !CYTHON_VECTORCALL +#if PY_VERSION_HEX >= 0x03080000 + #include "frameobject.h" +#if PY_VERSION_HEX >= 0x030b00a6 + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif + #define __Pxy_PyFrame_Initialize_Offsets() + #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus) +#else + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif +#endif +#endif /* PyObjectCall.proto */ #if CYTHON_COMPILING_IN_CPYTHON @@ -1727,15 +2291,116 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg #define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) #endif -/* PyObjectSetAttrStr.proto */ +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectFastCall.proto */ +#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL) +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs); + +/* RaiseUnexpectedTypeError.proto */ +static int __Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj); + +/* GCCDiagnostics.proto */ +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* BuildPyUnicode.proto */ +static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, char* chars, int clength, + int prepend_sign, char padding_char); + +/* CIntToPyUnicode.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_int(int value, Py_ssize_t width, char padding_char, char format_char); + +/* CIntToPyUnicode.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_Py_ssize_t(Py_ssize_t value, Py_ssize_t width, char padding_char, char format_char); + +/* JoinPyUnicode.proto */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char); + +/* StrEquals.proto */ +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals +#else +#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals +#endif + +/* PyObjectFormatSimple.proto */ +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#elif PY_MAJOR_VERSION < 3 + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyString_CheckExact(s)) ? PyUnicode_FromEncodedObject(s, NULL, "strict") :\ + PyObject_Format(s, f)) +#elif CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\ + likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\ + PyObject_Format(s, f)) +#else + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#endif + +CYTHON_UNUSED static int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *); /*proto*/ +/* GetAttr.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* ObjectGetItem.proto */ #if CYTHON_USE_TYPE_SLOTS -#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL) -static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value); +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key); #else -#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) -#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) #endif +/* KeywordStringCheck.proto */ +static int __Pyx_CheckKeywordStrings(PyObject *kw, const char* function_name, int kw_allowed); + +/* DivInt[Py_ssize_t].proto */ +static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t); + +/* UnaryNegOverflows.proto */ +#define __Pyx_UNARY_NEG_WOULD_OVERFLOW(x)\ + (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x))) + +/* GetAttr3.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); + /* PyDictVersioning.proto */ #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS #define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) @@ -1783,80 +2448,170 @@ static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_ve static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); #endif -/* PyFunctionFastCall.proto */ -#if CYTHON_FAST_PYCALL -#define __Pyx_PyFunction_FastCall(func, args, nargs)\ - __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +/* AssertionsEnabled.proto */ +#define __Pyx_init_assertions_enabled() +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define __pyx_assertions_enabled() (1) +#elif PY_VERSION_HEX < 0x03080000 || CYTHON_COMPILING_IN_PYPY || defined(Py_LIMITED_API) + #define __pyx_assertions_enabled() (!Py_OptimizeFlag) +#elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030900A6 + static int __pyx_assertions_enabled_flag; + #define __pyx_assertions_enabled() (__pyx_assertions_enabled_flag) + #undef __Pyx_init_assertions_enabled + static void __Pyx_init_assertions_enabled(void) { + __pyx_assertions_enabled_flag = ! _PyInterpreterState_GetConfig(__Pyx_PyThreadState_Current->interp)->optimization_level; + } #else -#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) + #define __pyx_assertions_enabled() (!Py_OptimizeFlag) #endif -#define __Pyx_BUILD_ASSERT_EXPR(cond)\ - (sizeof(char [1 - 2*!(cond)]) - 1) -#ifndef Py_MEMBER_SIZE -#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* RaiseNoneIterError.proto */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); + +/* ExtTypeTest.proto */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); #endif -#if CYTHON_FAST_PYCALL - static size_t __pyx_pyframe_localsplus_offset = 0; - #include "frameobject.h" -#if PY_VERSION_HEX >= 0x030b00a6 - #ifndef Py_BUILD_CORE - #define Py_BUILD_CORE 1 - #endif - #include "internal/pycore_frame.h" + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) #endif - #define __Pxy_PyFrame_Initialize_Offsets()\ - ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ - (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) - #define __Pyx_PyFrame_GetLocalsplus(frame)\ - (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) -#endif // CYTHON_FAST_PYCALL + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); #endif -/* PyObjectCallMethO.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); #endif -/* PyObjectCallNoArg.proto */ +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportDottedModule.proto */ +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple); +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple); +#endif + +/* ssize_strlen.proto */ +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); + +/* FastTypeChecks.proto */ #if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); #else -#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL) +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) #endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) -/* PyCFunctionFastCall.proto */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +CYTHON_UNUSED static int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +/* ListCompAppend.proto */ +#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS +static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len)) { + Py_INCREF(x); + PyList_SET_ITEM(list, len, x); + __Pyx_SET_SIZE(list, len + 1); + return 0; + } + return PyList_Append(list, x); +} #else -#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) +#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) #endif -/* PyObjectCallOneArg.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); +/* PySequenceMultiply.proto */ +#define __Pyx_PySequence_Multiply_Left(mul, seq) __Pyx_PySequence_Multiply(seq, mul) +static CYTHON_INLINE PyObject* __Pyx_PySequence_Multiply(PyObject *seq, Py_ssize_t mul); + +/* SetItemInt.proto */ +#define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) :\ + __Pyx_SetItemInt_Generic(o, to_py_func(i), v))) +static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v); +static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, + int is_list, int wraparound, int boundscheck); + +/* RaiseUnboundLocalError.proto */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); + +/* DivInt[long].proto */ +static CYTHON_INLINE long __Pyx_div_long(long, long); + +/* PySequenceContains.proto */ +static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) { + int result = PySequence_Contains(seq, item); + return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); +} + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* HasAttr.proto */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); + +/* PyObjectSetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL) +static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value); +#else +#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) +#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) +#endif /* IterFinish.proto */ static CYTHON_INLINE int __Pyx_IterFinish(void); +/* PyObjectCallNoArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); + /* PyObjectGetMethod.proto */ static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); /* PyObjectCallMethod0.proto */ static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); -/* RaiseNeedMoreValuesToUnpack.proto */ -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); - -/* RaiseTooManyValuesToUnpack.proto */ -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); - /* UnpackItemEndCheck.proto */ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); -/* RaiseNoneIterError.proto */ -static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); - /* UnpackTupleError.proto */ static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); @@ -1878,55 +2633,6 @@ static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos, PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict); -/* PyObjectCall2Args.proto */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); - -/* GetItemInt.proto */ -#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ - (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ - __Pyx_GetItemInt_Generic(o, to_py_func(i)))) -#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ - (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ - (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck); - -/* ObjectGetItem.proto */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key); -#else -#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) -#endif - -/* ListCompAppend.proto */ -#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS -static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { - PyListObject* L = (PyListObject*) list; - Py_ssize_t len = Py_SIZE(list); - if (likely(L->allocated > len)) { - Py_INCREF(x); - PyList_SET_ITEM(list, len, x); - __Pyx_SET_SIZE(list, len + 1); - return 0; - } - return PyList_Append(list, x); -} -#else -#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) -#endif - /* ListAppend.proto */ #if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { @@ -1944,18 +2650,15 @@ static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { #define __Pyx_PyList_Append(L,x) PyList_Append(L,x) #endif +/* PyObjectCall2Args.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + /* PyObjectCallMethod1.proto */ static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); /* append.proto */ static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x); -/* Import.proto */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); - -/* ImportFrom.proto */ -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); - /* dict_getitem_default.proto */ static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value); @@ -2057,48 +2760,13 @@ static PyObject* __Pyx_PyObject_Format(PyObject* s, PyObject* f); #define __Pyx_PyObject_Format(s, f) PyObject_Format(s, f) #endif -/* IncludeStringH.proto */ -#include - -/* JoinPyUnicode.proto */ -static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, - Py_UCS4 max_char); - -/* GCCDiagnostics.proto */ -#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) -#define __Pyx_HAS_GCC_DIAGNOSTIC -#endif - -/* BuildPyUnicode.proto */ -static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, char* chars, int clength, - int prepend_sign, char padding_char); - -/* CIntToPyUnicode.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_Py_ssize_t(Py_ssize_t value, Py_ssize_t width, char padding_char, char format_char); - /* PyObjectLookupSpecial.proto */ #if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name) { - PyObject *res; - PyTypeObject *tp = Py_TYPE(obj); -#if PY_MAJOR_VERSION < 3 - if (unlikely(PyInstance_Check(obj))) - return __Pyx_PyObject_GetAttrStr(obj, attr_name); -#endif - res = _PyType_Lookup(tp, attr_name); - if (likely(res)) { - descrgetfunc f = Py_TYPE(res)->tp_descr_get; - if (!f) { - Py_INCREF(res); - } else { - res = f(res, obj, (PyObject *)tp); - } - } else { - PyErr_SetObject(PyExc_AttributeError, attr_name); - } - return res; -} +#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 0) +#define __Pyx_PyObject_LookupSpecial(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 1) +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error); #else +#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n) #define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) #endif @@ -2110,102 +2778,55 @@ static PyObject* __Pyx_PyInt_TrueDivideObjC(PyObject *op1, PyObject *op2, long i (inplace ? PyNumber_InPlaceTrueDivide(op1, op2) : PyNumber_TrueDivide(op1, op2)) #endif -/* GetTopmostException.proto */ -#if CYTHON_USE_EXC_INFO_STACK -static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); -#endif +/* PyDictContains.proto */ +static CYTHON_INLINE int __Pyx_PyDict_ContainsTF(PyObject* item, PyObject* dict, int eq) { + int result = PyDict_Contains(dict, item); + return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); +} -/* PyThreadStateGet.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; -#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; -#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type +/* UnicodeAsUCS4.proto */ +static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject*); + +/* object_ord.proto */ +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyObject_Ord(c)\ + (likely(PyUnicode_Check(c)) ? (long)__Pyx_PyUnicode_AsPy_UCS4(c) : __Pyx__PyObject_Ord(c)) #else -#define __Pyx_PyThreadState_declare -#define __Pyx_PyThreadState_assign -#define __Pyx_PyErr_Occurred() PyErr_Occurred() +#define __Pyx_PyObject_Ord(c) __Pyx__PyObject_Ord(c) #endif +static long __Pyx__PyObject_Ord(PyObject* c); -/* SaveResetException.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +/* memoryview_get_from_buffer.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API || CYTHON_LIMITED_API >= 0x030b0000 +#define __Pyx_PyMemoryView_Get_itemsize(o) PyMemoryView_GET_BUFFER(o)->itemsize #else -#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) -#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) + // can't get format like this unfortunately. It's unicode via getattr +static Py_ssize_t __Pyx_PyMemoryView_Get_itemsize(PyObject *obj); #endif -/* GetException.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) -static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +/* memoryview_get_from_buffer.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API || CYTHON_LIMITED_API >= 0x030b0000 +#define __Pyx_PyMemoryView_Get_ndim(o) PyMemoryView_GET_BUFFER(o)->ndim #else -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); + // can't get format like this unfortunately. It's unicode via getattr +static int __Pyx_PyMemoryView_Get_ndim(PyObject *obj); #endif -/* PyErrFetchRestore.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) -#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +/* ListExtend.proto */ +static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) { #if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) -#else -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#endif + PyObject* none = _PyList_Extend((PyListObject*)L, v); + if (unlikely(!none)) + return -1; + Py_DECREF(none); + return 0; #else -#define __Pyx_PyErr_Clear() PyErr_Clear() -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) + return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v); #endif - -/* PyDictContains.proto */ -static CYTHON_INLINE int __Pyx_PyDict_ContainsTF(PyObject* item, PyObject* dict, int eq) { - int result = PyDict_Contains(dict, item); - return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); } -/* RaiseException.proto */ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); - -/* UnicodeAsUCS4.proto */ -static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject*); - -/* object_ord.proto */ -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyObject_Ord(c)\ - (likely(PyUnicode_Check(c)) ? (long)__Pyx_PyUnicode_AsPy_UCS4(c) : __Pyx__PyObject_Ord(c)) -#else -#define __Pyx_PyObject_Ord(c) __Pyx__PyObject_Ord(c) -#endif -static long __Pyx__PyObject_Ord(PyObject* c); - -/* SetItemInt.proto */ -#define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) :\ - (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) :\ - __Pyx_SetItemInt_Generic(o, to_py_func(i), v))) -static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v); -static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, - int is_list, int wraparound, int boundscheck); - -/* ArgTypeTest.proto */ -#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ - ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\ - __Pyx__ArgTypeTest(obj, type, name, exact)) -static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); +/* py_dict_values.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d); /* IsLittleEndian.proto */ static CYTHON_INLINE int __Pyx_Is_Little_Endian(void); @@ -2228,34 +2849,11 @@ static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); static Py_ssize_t __Pyx_minusones[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; static Py_ssize_t __Pyx_zeros[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; +/* ErrOccurredWithGIL.proto */ +static CYTHON_INLINE int __Pyx_ErrOccurredWithGIL(void); + #define __Pyx_BufPtrStrided3d(type, buf, i0, s0, i1, s1, i2, s2) (type)((char*)buf + i0 * s0 + i1 * s1 + i2 * s2) #define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1) -/* MemviewSliceInit.proto */ -#define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d -#define __Pyx_MEMVIEW_DIRECT 1 -#define __Pyx_MEMVIEW_PTR 2 -#define __Pyx_MEMVIEW_FULL 4 -#define __Pyx_MEMVIEW_CONTIG 8 -#define __Pyx_MEMVIEW_STRIDED 16 -#define __Pyx_MEMVIEW_FOLLOW 32 -#define __Pyx_IS_C_CONTIG 1 -#define __Pyx_IS_F_CONTIG 2 -static int __Pyx_init_memviewslice( - struct __pyx_memoryview_obj *memview, - int ndim, - __Pyx_memviewslice *memviewslice, - int memview_is_new_reference); -static CYTHON_INLINE int __pyx_add_acquisition_count_locked( - __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); -static CYTHON_INLINE int __pyx_sub_acquisition_count_locked( - __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); -#define __pyx_get_slice_count_pointer(memview) (memview->acquisition_count_aligned_p) -#define __pyx_get_slice_count(memview) (*__pyx_get_slice_count_pointer(memview)) -#define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__) -#define __PYX_XDEC_MEMVIEW(slice, have_gil) __Pyx_XDEC_MEMVIEW(slice, have_gil, __LINE__) -static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int); -static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *, int, int); - /* PyIntBinop.proto */ #if !CYTHON_COMPILING_IN_PYPY static PyObject* __Pyx_PyInt_SubtractCObj(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); @@ -2264,131 +2862,13 @@ static PyObject* __Pyx_PyInt_SubtractCObj(PyObject *op1, PyObject *op2, long int (inplace ? PyNumber_InPlaceSubtract(op1, op2) : PyNumber_Subtract(op1, op2)) #endif -/* PyErrExceptionMatches.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) -static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); -#else -#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) -#endif - -/* BytesEquals.proto */ -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); - -/* UnicodeEquals.proto */ -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); - -/* StrEquals.proto */ -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals -#else -#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals -#endif - -/* DivInt[Py_ssize_t].proto */ -static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t); - -/* UnaryNegOverflows.proto */ -#define UNARY_NEG_WOULD_OVERFLOW(x)\ - (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x))) - -static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ -static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *); /*proto*/ -/* GetAttr.proto */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); - -/* decode_c_string_utf16.proto */ -static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors) { - int byteorder = 0; - return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); -} -static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16LE(const char *s, Py_ssize_t size, const char *errors) { - int byteorder = -1; - return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); -} -static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16BE(const char *s, Py_ssize_t size, const char *errors) { - int byteorder = 1; - return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); -} - -/* decode_c_string.proto */ -static CYTHON_INLINE PyObject* __Pyx_decode_c_string( - const char* cstring, Py_ssize_t start, Py_ssize_t stop, - const char* encoding, const char* errors, - PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)); - -/* GetAttr3.proto */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); - -/* ExtTypeTest.proto */ -static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); - -/* SwapException.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#else -static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); -#endif - -/* FastTypeChecks.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); -#else -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) -#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) -#endif -#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) - -static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ -/* ListExtend.proto */ -static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject* none = _PyList_Extend((PyListObject*)L, v); - if (unlikely(!none)) - return -1; - Py_DECREF(none); - return 0; -#else - return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v); -#endif -} - -/* AssertionsEnabled.proto */ -#define __Pyx_init_assertions_enabled() -#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) - #define __pyx_assertions_enabled() (1) -#elif PY_VERSION_HEX < 0x03080000 || CYTHON_COMPILING_IN_PYPY || defined(Py_LIMITED_API) - #define __pyx_assertions_enabled() (!Py_OptimizeFlag) -#elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030900A6 - static int __pyx_assertions_enabled_flag; - #define __pyx_assertions_enabled() (__pyx_assertions_enabled_flag) - #undef __Pyx_init_assertions_enabled - static void __Pyx_init_assertions_enabled(void) { - __pyx_assertions_enabled_flag = ! _PyInterpreterState_GetConfig(__Pyx_PyThreadState_Current->interp)->optimization_level; - } -#else - #define __pyx_assertions_enabled() (!Py_OptimizeFlag) -#endif - -/* None.proto */ -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); - -/* DivInt[long].proto */ -static CYTHON_INLINE long __Pyx_div_long(long, long); - -/* PySequenceContains.proto */ -static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) { - int result = PySequence_Contains(seq, item); - return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); -} - -/* HasAttr.proto */ -static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); +/* SliceObject.proto */ +#define __Pyx_PyObject_DelSlice(obj, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound)\ + __Pyx_PyObject_SetSlice(obj, (PyObject*)NULL, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound) +static CYTHON_INLINE int __Pyx_PyObject_SetSlice( + PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop, + PyObject** py_start, PyObject** py_stop, PyObject** py_slice, + int has_cstart, int has_cstop, int wraparound); /* PyObject_GenericGetAttrNoDict.proto */ #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 @@ -2404,58 +2884,120 @@ static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_nam #define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr #endif +/* IncludeStructmemberH.proto */ +#include + +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); +#endif + +/* ValidateBasesTuple.proto */ +#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases); +#endif + +/* PyType_Ready.proto */ +CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t); + /* SetVTable.proto */ -static int __Pyx_SetVtable(PyObject *dict, void *vtable); +static int __Pyx_SetVtable(PyTypeObject* typeptr , void* vtable); -/* PyObjectGetAttrStrNoError.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); +/* GetVTable.proto */ +static void* __Pyx_GetVtable(PyTypeObject *type); + +/* MergeVTables.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_MergeVtables(PyTypeObject *type); +#endif /* SetupReduce.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API static int __Pyx_setup_reduce(PyObject* type_obj); +#endif /* TypeImport.proto */ -#ifndef __PYX_HAVE_RT_ImportType_proto_0_29_36 -#define __PYX_HAVE_RT_ImportType_proto_0_29_36 -#if __STDC_VERSION__ >= 201112L +#ifndef __PYX_HAVE_RT_ImportType_proto_3_0_0 +#define __PYX_HAVE_RT_ImportType_proto_3_0_0 +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L #include #endif -#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L -#define __PYX_GET_STRUCT_ALIGNMENT_0_29_36(s) alignof(s) +#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || __cplusplus >= 201103L +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_0(s) alignof(s) #else -#define __PYX_GET_STRUCT_ALIGNMENT_0_29_36(s) sizeof(void*) +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_0(s) sizeof(void*) #endif -enum __Pyx_ImportType_CheckSize_0_29_36 { - __Pyx_ImportType_CheckSize_Error_0_29_36 = 0, - __Pyx_ImportType_CheckSize_Warn_0_29_36 = 1, - __Pyx_ImportType_CheckSize_Ignore_0_29_36 = 2 +enum __Pyx_ImportType_CheckSize_3_0_0 { + __Pyx_ImportType_CheckSize_Error_3_0_0 = 0, + __Pyx_ImportType_CheckSize_Warn_3_0_0 = 1, + __Pyx_ImportType_CheckSize_Ignore_3_0_0 = 2 }; -static PyTypeObject *__Pyx_ImportType_0_29_36(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_0_29_36 check_size); +static PyTypeObject *__Pyx_ImportType_3_0_0(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_0 check_size); #endif -/* GetVTable.proto */ -static void* __Pyx_GetVtable(PyObject *dict); +/* Py3UpdateBases.proto */ +static PyObject* __Pyx_PEP560_update_bases(PyObject *bases); /* CalculateMetaclass.proto */ static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); + /* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); +#else +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); +#endif + +/* PyMethodNew.proto */ +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} +#else + #define __Pyx_PyMethod_New PyMethod_New +#endif + +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); +#endif /* CythonFunctionShared.proto */ -#define __Pyx_CyFunction_USED 1 +#define __Pyx_CyFunction_USED #define __Pyx_CYFUNCTION_STATICMETHOD 0x01 #define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 #define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 #define __Pyx_CyFunction_GetClosure(f)\ (((__pyx_CyFunctionObject *) (f))->func_closure) -#define __Pyx_CyFunction_GetClassObj(f)\ - (((__pyx_CyFunctionObject *) (f))->func_classobj) +#if PY_VERSION_HEX < 0x030900B1 + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) #define __Pyx_CyFunction_Defaults(type, f)\ ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) #define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) typedef struct { +#if PY_VERSION_HEX < 0x030900B1 PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif #if PY_VERSION_HEX < 0x030500A0 PyObject *func_weakreflist; #endif @@ -2466,7 +3008,9 @@ typedef struct { PyObject *func_globals; PyObject *func_code; PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 PyObject *func_classobj; +#endif void *defaults; int defaults_pyobjects; size_t defaults_size; // used by FusedFunction for copying defaults @@ -2475,14 +3019,17 @@ typedef struct { PyObject *defaults_kwdict; PyObject *(*defaults_getter)(PyObject *); PyObject *func_annotations; + PyObject *func_is_coroutine; } __pyx_CyFunctionObject; -static PyTypeObject *__pyx_CyFunctionType = 0; -#define __Pyx_CyFunction_Check(obj) (__Pyx_TypeCheck(obj, __pyx_CyFunctionType)) +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_IsCyOrPyCFunction(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, int flags, PyObject* qualname, - PyObject *self, + PyObject *closure, PyObject *module, PyObject *globals, PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, size_t size, int pyobjects); @@ -2492,7 +3039,18 @@ static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, PyObject *dict); static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, PyObject *dict); -static int __pyx_CyFunction_init(void); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif /* CythonFunction.proto */ static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, @@ -2516,7 +3074,6 @@ static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, typedef struct { __pyx_CyFunctionObject func; PyObject *__signatures__; - PyObject *type; PyObject *self; } __pyx_FusedFunctionObject; static PyObject *__pyx_FusedFunction_New(PyMethodDef *ml, int flags, @@ -2524,8 +3081,7 @@ static PyObject *__pyx_FusedFunction_New(PyMethodDef *ml, int flags, PyObject *module, PyObject *globals, PyObject *code); static int __pyx_FusedFunction_clear(__pyx_FusedFunctionObject *self); -static PyTypeObject *__pyx_FusedFunctionType = NULL; -static int __pyx_FusedFunction_init(void); +static int __pyx_FusedFunction_init(PyObject *module); #define __Pyx_FusedFunction_USED /* Py3ClassCreate.proto */ @@ -2545,6 +3101,7 @@ static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); #endif /* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API typedef struct { PyCodeObject* code_object; int code_line; @@ -2558,6 +3115,7 @@ static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); static PyCodeObject *__pyx_find_code_object(int code_line); static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif /* AddTraceback.proto */ static void __Pyx_AddTraceback(const char *funcname, int c_line, @@ -2594,9 +3152,6 @@ static int __pyx_slices_overlap(__Pyx_memviewslice *slice1, __Pyx_memviewslice *slice2, int ndim, size_t itemsize); -/* Capsule.proto */ -static CYTHON_INLINE PyObject *__pyx_capsule_create(void *p, const char *sig); - /* TypeInfoCompare.proto */ static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b); @@ -2661,7 +3216,7 @@ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_d #endif /* Arithmetic.proto */ -#if CYTHON_CCOMPLEX +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #define __Pyx_c_eq_float(a, b) ((a)==(b)) #define __Pyx_c_sum_float(a, b) ((a)+(b)) #define __Pyx_c_diff_float(a, b) ((a)-(b)) @@ -2699,7 +3254,7 @@ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_d #endif /* Arithmetic.proto */ -#if CYTHON_CCOMPLEX +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #define __Pyx_c_eq_double(a, b) ((a)==(b)) #define __Pyx_c_sum_double(a, b) ((a)+(b)) #define __Pyx_c_diff_double(a, b) ((a)-(b)) @@ -2746,6 +3301,31 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, size_t sizeof_dtype, int contig_flag, int dtype_is_object); +/* MemviewSliceInit.proto */ +#define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d +#define __Pyx_MEMVIEW_DIRECT 1 +#define __Pyx_MEMVIEW_PTR 2 +#define __Pyx_MEMVIEW_FULL 4 +#define __Pyx_MEMVIEW_CONTIG 8 +#define __Pyx_MEMVIEW_STRIDED 16 +#define __Pyx_MEMVIEW_FOLLOW 32 +#define __Pyx_IS_C_CONTIG 1 +#define __Pyx_IS_F_CONTIG 2 +static int __Pyx_init_memviewslice( + struct __pyx_memoryview_obj *memview, + int ndim, + __Pyx_memviewslice *memviewslice, + int memview_is_new_reference); +static CYTHON_INLINE int __pyx_add_acquisition_count_locked( + __pyx_atomic_int_type *acquisition_count, PyThread_type_lock lock); +static CYTHON_INLINE int __pyx_sub_acquisition_count_locked( + __pyx_atomic_int_type *acquisition_count, PyThread_type_lock lock); +#define __pyx_get_slice_count_pointer(memview) (&memview->acquisition_count) +#define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__) +#define __PYX_XCLEAR_MEMVIEW(slice, have_gil) __Pyx_XCLEAR_MEMVIEW(slice, have_gil, __LINE__) +static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int); +static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *, int, int); + /* CIntFromPy.proto */ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); @@ -2771,15 +3351,29 @@ static PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void); /* CIntFromPy.proto */ static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *); +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif + /* CheckBinaryVersion.proto */ static int __Pyx_check_binary_version(void); /* FunctionImport.proto */ -static int __Pyx_ImportFunction_0_29_36(PyObject *module, const char *funcname, void (**f)(void), const char *sig); +static int __Pyx_ImportFunction_3_0_0(PyObject *module, const char *funcname, void (**f)(void), const char *sig); /* InitStrings.proto */ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); +/* #### Code section: module_declarations ### */ static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self); /* proto*/ static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto*/ static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj); /* proto*/ @@ -2788,80 +3382,66 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto*/ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryview__get_base(struct __pyx_memoryview_obj *__pyx_v_self); /* proto*/ static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryviewslice__get_base(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self); /* proto*/ -/* Module declarations from 'cython.view' */ +/* Module declarations from "cython.view" */ -/* Module declarations from 'cython' */ +/* Module declarations from "cython.dataclasses" */ -/* Module declarations from 'libc.math' */ +/* Module declarations from "cython" */ -/* Module declarations from 'cpython.buffer' */ +/* Module declarations from "libc.math" */ -/* Module declarations from 'libc.string' */ +/* Module declarations from "libc.string" */ -/* Module declarations from 'libc.stdio' */ +/* Module declarations from "libc.stdio" */ -/* Module declarations from '__builtin__' */ +/* Module declarations from "__builtin__" */ -/* Module declarations from 'cpython.type' */ -static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; +/* Module declarations from "cpython.type" */ -/* Module declarations from 'cpython' */ +/* Module declarations from "cpython" */ -/* Module declarations from 'cpython.object' */ +/* Module declarations from "cpython.object" */ -/* Module declarations from 'cpython.ref' */ +/* Module declarations from "cpython.ref" */ -/* Module declarations from 'cpython.mem' */ +/* Module declarations from "numpy" */ -/* Module declarations from 'numpy' */ +/* Module declarations from "numpy" */ -/* Module declarations from 'numpy' */ -static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; -static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; -static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; -static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; -static PyTypeObject *__pyx_ptype_5numpy_generic = 0; -static PyTypeObject *__pyx_ptype_5numpy_number = 0; -static PyTypeObject *__pyx_ptype_5numpy_integer = 0; -static PyTypeObject *__pyx_ptype_5numpy_signedinteger = 0; -static PyTypeObject *__pyx_ptype_5numpy_unsignedinteger = 0; -static PyTypeObject *__pyx_ptype_5numpy_inexact = 0; -static PyTypeObject *__pyx_ptype_5numpy_floating = 0; -static PyTypeObject *__pyx_ptype_5numpy_complexfloating = 0; -static PyTypeObject *__pyx_ptype_5numpy_flexible = 0; -static PyTypeObject *__pyx_ptype_5numpy_character = 0; -static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; +/* Module declarations from "libcpp.utility" */ -/* Module declarations from 'libcpp.utility' */ +/* Module declarations from "libcpp.map" */ -/* Module declarations from 'libcpp.map' */ +/* Module declarations from "cornac.utils.fast_dict" */ -/* Module declarations from 'cornac.utils.fast_dict' */ -static PyTypeObject *__pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict = 0; +/* Module declarations from "libcpp" */ -/* Module declarations from 'libcpp' */ +/* Module declarations from "libcpp.vector" */ -/* Module declarations from 'libcpp.vector' */ - -/* Module declarations from 'cornac.models.bpr.recom_bpr' */ -static PyTypeObject *__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector = 0; +/* Module declarations from "cornac.models.bpr.recom_bpr" */ static bool (*__pyx_fuse_0__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero)(__Pyx_memviewslice, __Pyx_memviewslice, short, short); /*proto*/ static bool (*__pyx_fuse_1__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero)(__Pyx_memviewslice, __Pyx_memviewslice, int, int); /*proto*/ static bool (*__pyx_fuse_2__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero)(__Pyx_memviewslice, __Pyx_memviewslice, long, long); /*proto*/ -/* Module declarations from 'cornac.models.mter.recom_mter' */ +/* Module declarations from "cornac.models.mter.recom_mter" */ static int (*__pyx_f_6cornac_6models_4mter_10recom_mter_get_key)(int, int); /*proto*/ static float (*__pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score)(__Pyx_memviewslice, int, int, int, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/ static double (*__pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score)(__Pyx_memviewslice, int, int, int, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/ -/* Module declarations from 'cornac.models.comparer.recom_comparer_sub' */ -static PyTypeObject *__pyx_array_type = 0; -static PyTypeObject *__pyx_MemviewEnum_type = 0; -static PyTypeObject *__pyx_memoryview_type = 0; -static PyTypeObject *__pyx_memoryviewslice_type = 0; +/* Module declarations from "cornac.models.comparer.recom_comparer_sub" */ +static PyObject *__pyx_collections_abc_Sequence = 0; static PyObject *generic = 0; static PyObject *strided = 0; static PyObject *indirect = 0; @@ -2869,12 +3449,12 @@ static PyObject *contiguous = 0; static PyObject *indirect_contiguous = 0; static int __pyx_memoryview_thread_locks_used; static PyThread_type_lock __pyx_memoryview_thread_locks[8]; +static int __pyx_array_allocate_buffer(struct __pyx_array_obj *); /*proto*/ static struct __pyx_array_obj *__pyx_array_new(PyObject *, Py_ssize_t, char *, char *, char *); /*proto*/ -static void *__pyx_align_pointer(void *, size_t); /*proto*/ static PyObject *__pyx_memoryview_new(PyObject *, int, int, __Pyx_TypeInfo *); /*proto*/ static CYTHON_INLINE int __pyx_memoryview_check(PyObject *); /*proto*/ static PyObject *_unellipsify(PyObject *, int); /*proto*/ -static PyObject *assert_direct_dimensions(Py_ssize_t *, int); /*proto*/ +static int assert_direct_dimensions(Py_ssize_t *, int); /*proto*/ static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *, PyObject *); /*proto*/ static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int, int); /*proto*/ static char *__pyx_pybuffer_index(Py_buffer *, char *, Py_ssize_t, Py_ssize_t); /*proto*/ @@ -2892,8 +3472,9 @@ static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *, int); /* static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *, Py_ssize_t *, Py_ssize_t, int, char); /*proto*/ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *, __Pyx_memviewslice *, char, int); /*proto*/ static int __pyx_memoryview_err_extents(int, Py_ssize_t, Py_ssize_t); /*proto*/ -static int __pyx_memoryview_err_dim(PyObject *, char *, int); /*proto*/ -static int __pyx_memoryview_err(PyObject *, char *); /*proto*/ +static int __pyx_memoryview_err_dim(PyObject *, PyObject *, int); /*proto*/ +static int __pyx_memoryview_err(PyObject *, PyObject *); /*proto*/ +static int __pyx_memoryview_err_no_memory(void); /*proto*/ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *, int, int); /*proto*/ static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *, int, int, int); /*proto*/ @@ -2902,30 +3483,37 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *, Py_ssize_t *, Py_ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *, int, size_t, void *, int); /*proto*/ static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/ static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *, PyObject *); /*proto*/ +/* #### Code section: typeinfo ### */ static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t = { "float32_t", NULL, sizeof(__pyx_t_5numpy_float32_t), { 0 }, 0, 'R', 0, 0 }; static __Pyx_TypeInfo __Pyx_TypeInfo_float = { "float", NULL, sizeof(float), { 0 }, 0, 'R', 0, 0 }; static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 0 }, 0, 'R', 0, 0 }; -static __Pyx_TypeInfo __Pyx_TypeInfo_short = { "short", NULL, sizeof(short), { 0 }, 0, IS_UNSIGNED(short) ? 'U' : 'I', IS_UNSIGNED(short), 0 }; -static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, IS_UNSIGNED(int) ? 'U' : 'I', IS_UNSIGNED(int), 0 }; -static __Pyx_TypeInfo __Pyx_TypeInfo_long = { "long", NULL, sizeof(long), { 0 }, 0, IS_UNSIGNED(long) ? 'U' : 'I', IS_UNSIGNED(long), 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_short = { "short", NULL, sizeof(short), { 0 }, 0, __PYX_IS_UNSIGNED(short) ? 'U' : 'I', __PYX_IS_UNSIGNED(short), 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, __PYX_IS_UNSIGNED(int) ? 'U' : 'I', __PYX_IS_UNSIGNED(int), 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_long = { "long", NULL, sizeof(long), { 0 }, 0, __PYX_IS_UNSIGNED(long) ? 'U' : 'I', __PYX_IS_UNSIGNED(long), 0 }; +/* #### Code section: before_global_var ### */ #define __Pyx_MODULE_NAME "cornac.models.comparer.recom_comparer_sub" extern int __pyx_module_is_main_cornac__models__comparer__recom_comparer_sub; int __pyx_module_is_main_cornac__models__comparer__recom_comparer_sub = 0; -/* Implementation of 'cornac.models.comparer.recom_comparer_sub' */ +/* Implementation of "cornac.models.comparer.recom_comparer_sub" */ +/* #### Code section: global_var ### */ static PyObject *__pyx_builtin_super; static PyObject *__pyx_builtin_print; static PyObject *__pyx_builtin_zip; static PyObject *__pyx_builtin_range; static PyObject *__pyx_builtin_sum; static PyObject *__pyx_builtin_TypeError; -static PyObject *__pyx_builtin_ImportError; static PyObject *__pyx_builtin_ValueError; +static PyObject *__pyx_builtin___import__; static PyObject *__pyx_builtin_MemoryError; static PyObject *__pyx_builtin_enumerate; +static PyObject *__pyx_builtin_AssertionError; static PyObject *__pyx_builtin_Ellipsis; static PyObject *__pyx_builtin_id; static PyObject *__pyx_builtin_IndexError; +static PyObject *__pyx_builtin_ImportError; +/* #### Code section: string_decls ### */ +static const char __pyx_k_[] = ": "; static const char __pyx_k_A[] = "A"; static const char __pyx_k_I[] = "I"; static const char __pyx_k_O[] = "O"; @@ -2946,23 +3534,30 @@ static const char __pyx_k_G2[] = "G2"; static const char __pyx_k_G3[] = "G3"; static const char __pyx_k_YI[] = "YI"; static const char __pyx_k_YU[] = "YU"; -static const char __pyx_k__2[] = " = "; -static const char __pyx_k__3[] = ")"; -static const char __pyx_k__6[] = "()"; -static const char __pyx_k__7[] = "|"; +static const char __pyx_k__2[] = "."; +static const char __pyx_k__3[] = "*"; +static const char __pyx_k__6[] = "'"; +static const char __pyx_k__7[] = ")"; +static const char __pyx_k_gc[] = "gc"; static const char __pyx_k_id[] = "id"; static const char __pyx_k_lr[] = "lr"; static const char __pyx_k_mp[] = "mp"; static const char __pyx_k_np[] = "np"; static const char __pyx_k_sp[] = "sp"; -static const char __pyx_k__35[] = "*"; -static const char __pyx_k__39[] = "_"; +static const char __pyx_k__12[] = " = "; +static const char __pyx_k__15[] = "()"; +static const char __pyx_k__16[] = "|"; +static const char __pyx_k__38[] = "_"; +static const char __pyx_k__53[] = "?"; +static const char __pyx_k_abc[] = "abc"; static const char __pyx_k_aid[] = "aid"; +static const char __pyx_k_and[] = " and "; static const char __pyx_k_avg[] = "), avg("; static const char __pyx_k_doc[] = "__doc__"; static const char __pyx_k_eps[] = "eps"; static const char __pyx_k_fit[] = "fit"; static const char __pyx_k_get[] = "get"; +static const char __pyx_k_got[] = " (got "; static const char __pyx_k_idx[] = "idx"; static const char __pyx_k_iid[] = "iid"; static const char __pyx_k_int[] = "int"; @@ -2975,6 +3570,7 @@ static const char __pyx_k_obj[] = "obj"; static const char __pyx_k_oid[] = "oid"; static const char __pyx_k_rng[] = "rng"; static const char __pyx_k_sum[] = "sum"; +static const char __pyx_k_sys[] = "sys"; static const char __pyx_k_ts1[] = "ts1"; static const char __pyx_k_ts2[] = "ts2"; static const char __pyx_k_ts3[] = "ts3"; @@ -3005,12 +3601,14 @@ static const char __pyx_k_mode[] = "mode"; static const char __pyx_k_mter[] = "mter"; static const char __pyx_k_name[] = "name"; static const char __pyx_k_ndim[] = "ndim"; +static const char __pyx_k_ones[] = "ones"; static const char __pyx_k_pack[] = "pack"; static const char __pyx_k_pred[] = "pred"; static const char __pyx_k_rank[] = "rank"; static const char __pyx_k_seed[] = "seed"; static const char __pyx_k_self[] = "self"; static const char __pyx_k_size[] = "size"; +static const char __pyx_k_spec[] = "__spec__"; static const char __pyx_k_step[] = "step"; static const char __pyx_k_stop[] = "stop"; static const char __pyx_k_temp[] = "temp"; @@ -3034,6 +3632,7 @@ static const char __pyx_k_error[] = "error"; static const char __pyx_k_flags[] = "flags"; static const char __pyx_k_float[] = "float"; static const char __pyx_k_i_idx[] = "i_idx"; +static const char __pyx_k_index[] = "index"; static const char __pyx_k_int32[] = "int32"; static const char __pyx_k_items[] = "items"; static const char __pyx_k_j_idx[] = "j_idx"; @@ -3043,6 +3642,7 @@ static const char __pyx_k_numpy[] = "numpy"; static const char __pyx_k_o_idx[] = "o_idx"; static const char __pyx_k_print[] = "print"; static const char __pyx_k_range[] = "range"; +static const char __pyx_k_scipy[] = "scipy"; static const char __pyx_k_score[] = "score"; static const char __pyx_k_shape[] = "shape"; static const char __pyx_k_short[] = "short"; @@ -3063,6 +3663,7 @@ static const char __pyx_k_del_g2[] = "del_g2"; static const char __pyx_k_del_g3[] = "del_g3"; static const char __pyx_k_double[] = "double"; static const char __pyx_k_einsum[] = "einsum"; +static const char __pyx_k_enable[] = "enable"; static const char __pyx_k_encode[] = "encode"; static const char __pyx_k_format[] = "format"; static const char __pyx_k_import[] = "__import__"; @@ -3076,6 +3677,7 @@ static const char __pyx_k_name_2[] = "__name__"; static const char __pyx_k_pickle[] = "pickle"; static const char __pyx_k_reduce[] = "__reduce__"; static const char __pyx_k_repeat[] = "repeat"; +static const char __pyx_k_sparse[] = "sparse"; static const char __pyx_k_struct[] = "struct"; static const char __pyx_k_trange[] = "trange"; static const char __pyx_k_tup_id[] = "tup_id"; @@ -3122,11 +3724,11 @@ static const char __pyx_k_sgrad_U[] = "sgrad_U"; static const char __pyx_k_skipped[] = "skipped"; static const char __pyx_k_tup_idx[] = "tup_idx"; static const char __pyx_k_uniform[] = "uniform"; -static const char __pyx_k_user_id[] = "user_id"; static const char __pyx_k_val_set[] = "val_set"; static const char __pyx_k_verbose[] = "verbose"; static const char __pyx_k_Ellipsis[] = "Ellipsis"; static const char __pyx_k_Mc_Nc_MN[] = "Mc,Nc->MN"; +static const char __pyx_k_Sequence[] = "Sequence"; static const char __pyx_k_abc_a_bc[] = "abc,a->bc"; static const char __pyx_k_bc_Mb_Mc[] = "bc,Mb->Mc"; static const char __pyx_k_bpr_loss[] = "bpr_loss"; @@ -3143,6 +3745,8 @@ static const char __pyx_k_progress[] = "progress"; static const char __pyx_k_pyx_type[] = "__pyx_type"; static const char __pyx_k_qualname[] = "__qualname__"; static const char __pyx_k_r_values[] = "r_values"; +static const char __pyx_k_register[] = "register"; +static const char __pyx_k_set_name[] = "__set_name__"; static const char __pyx_k_setstate[] = "__setstate__"; static const char __pyx_k_sgrad_G1[] = "sgrad_G1"; static const char __pyx_k_sgrad_G2[] = "sgrad_G2"; @@ -3159,6 +3763,7 @@ static const char __pyx_k_enumerate[] = "enumerate"; static const char __pyx_k_exception[] = "exception"; static const char __pyx_k_float_int[] = "float|int"; static const char __pyx_k_i_indices[] = "i_indices"; +static const char __pyx_k_isenabled[] = "isenabled"; static const char __pyx_k_item_rank[] = "item_rank"; static const char __pyx_k_itertools[] = "itertools"; static const char __pyx_k_metaclass[] = "__metaclass__"; @@ -3212,6 +3817,7 @@ static const char __pyx_k_is_unk_item[] = "is_unk_item"; static const char __pyx_k_is_unk_user[] = "is_unk_user"; static const char __pyx_k_item_scores[] = "item_scores"; static const char __pyx_k_most_common[] = "most_common"; +static const char __pyx_k_mro_entries[] = "__mro_entries__"; static const char __pyx_k_num_aspects[] = "num_aspects"; static const char __pyx_k_num_samples[] = "num_samples"; static const char __pyx_k_pair_counts[] = "pair_counts"; @@ -3221,35 +3827,43 @@ static const char __pyx_k_rng_pos_iao[] = "rng_pos_iao"; static const char __pyx_k_rng_pos_uao[] = "rng_pos_uao"; static const char __pyx_k_rng_pos_uia[] = "rng_pos_uia"; static const char __pyx_k_set_postfix[] = "set_postfix"; +static const char __pyx_k_total_items[] = "total_items"; static const char __pyx_k_user_counts[] = "user_counts"; static const char __pyx_k_combinations[] = "combinations"; static const char __pyx_k_double_short[] = "double|short"; +static const char __pyx_k_initializing[] = "_initializing"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; static const char __pyx_k_item_aspects[] = "item_aspects"; +static const char __pyx_k_item_indices[] = "item_indices"; static const char __pyx_k_neg_item_ids[] = "neg_item_ids"; static const char __pyx_k_num_opinions[] = "num_opinions"; static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; static const char __pyx_k_rating_scale[] = "rating_scale"; static const char __pyx_k_rng_pos_pair[] = "rng_pos_pair"; static const char __pyx_k_scipy_sparse[] = "scipy.sparse"; -static const char __pyx_k_stringsource[] = "stringsource"; +static const char __pyx_k_stringsource[] = ""; static const char __pyx_k_sub_item_ids[] = "sub_item_ids"; static const char __pyx_k_user_indices[] = "user_indices"; +static const char __pyx_k_version_info[] = "version_info"; static const char __pyx_k_Count_aspects[] = "Count aspects"; static const char __pyx_k_avg_sentiment[] = "avg_sentiment"; +static const char __pyx_k_class_getitem[] = "__class_getitem__"; static const char __pyx_k_counted_pairs[] = "counted_pairs"; +static const char __pyx_k_init_subclass[] = "__init_subclass__"; static const char __pyx_k_later_indices[] = "later_indices"; static const char __pyx_k_map_aspect_id[] = "map_aspect_id"; static const char __pyx_k_min_pair_freq[] = "min_pair_freq"; static const char __pyx_k_min_user_freq[] = "min_user_freq"; static const char __pyx_k_n_bpr_samples[] = "n_bpr_samples"; static const char __pyx_k_n_top_aspects[] = "n_top_aspects"; -static const char __pyx_k_pyx_getbuffer[] = "__pyx_getbuffer"; static const char __pyx_k_rating_matrix[] = "rating_matrix"; static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; +static const char __pyx_k_AssertionError[] = "AssertionError"; static const char __pyx_k_ScoreException[] = "ScoreException"; static const char __pyx_k_aspect_correct[] = "aspect_correct"; static const char __pyx_k_aspect_indices[] = "aspect_indices"; static const char __pyx_k_del_aspect_bpr[] = "del_aspect_bpr"; +static const char __pyx_k_fused_sigindex[] = "_fused_sigindex"; static const char __pyx_k_item_sentiment[] = "item_sentiment"; static const char __pyx_k_later_item_idx[] = "later_item_idx"; static const char __pyx_k_n_item_factors[] = "n_item_factors"; @@ -3261,8 +3875,10 @@ static const char __pyx_k_user_sentiment[] = "user_sentiment"; static const char __pyx_k_ComparERSub_fit[] = "ComparERSub.fit"; static const char __pyx_k_Enumerate_index[] = "Enumerate index"; static const char __pyx_k_View_MemoryView[] = "View.MemoryView"; +static const char __pyx_k_all_item_scores[] = "all_item_scores"; static const char __pyx_k_allocate_buffer[] = "allocate_buffer"; static const char __pyx_k_aspect_bpr_loss[] = "aspect_bpr_loss"; +static const char __pyx_k_collections_abc[] = "collections.abc"; static const char __pyx_k_dtype_is_object[] = "dtype_is_object"; static const char __pyx_k_earlier_indices[] = "earlier_indices"; static const char __pyx_k_min_common_freq[] = "min_common_freq"; @@ -3280,11 +3896,13 @@ static const char __pyx_k_num_pair_samples[] = "num_pair_samples"; static const char __pyx_k_user_item_aspect[] = "user_item_aspect"; static const char __pyx_k_utils_init_utils[] = "utils.init_utils"; static const char __pyx_k_item_aspect_count[] = "item_aspect_count"; +static const char __pyx_k_known_item_scores[] = "known_item_scores"; static const char __pyx_k_n_element_samples[] = "n_element_samples"; static const char __pyx_k_n_opinion_factors[] = "n_opinion_factors"; static const char __pyx_k_pyx_unpickle_Enum[] = "__pyx_unpickle_Enum"; static const char __pyx_k_top_aspect_scores[] = "top_aspect_scores"; static const char __pyx_k_ComparERSub___init[] = "ComparERSub.__init__"; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; static const char __pyx_k_sentiment_polarity[] = "sentiment_polarity"; static const char __pyx_k_strided_and_direct[] = ""; @@ -3298,10 +3916,12 @@ static const char __pyx_k_common_aspect_counts[] = "common_aspect_counts"; static const char __pyx_k_strided_and_indirect[] = ""; static const char __pyx_k_Building_data_started[] = "Building data started!"; static const char __pyx_k_ComparERSub__fit_mter[] = "ComparERSub._fit_mter"; +static const char __pyx_k_Invalid_shape_in_axis[] = "Invalid shape in axis "; static const char __pyx_k_Optimization_finished[] = "Optimization finished!"; static const char __pyx_k_compute_quality_score[] = "_compute_quality_score"; static const char __pyx_k_contiguous_and_direct[] = ""; static const char __pyx_k_not_dominated_pairs_2[] = "not_dominated_pairs"; +static const char __pyx_k_Cannot_index_with_type[] = "Cannot index with type '"; static const char __pyx_k_MemoryView_of_r_object[] = ""; static const char __pyx_k_chrono_purchased_pairs[] = "chrono_purchased_pairs"; static const char __pyx_k_ComparERSub__build_data[] = "ComparERSub._build_data"; @@ -3309,15 +3929,16 @@ static const char __pyx_k_MemoryView_of_r_at_0x_x[] = "__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_4type_type); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_dtype); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_flatiter); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_broadcast); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_ndarray); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_generic); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_number); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_integer); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_signedinteger); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_unsignedinteger); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_inexact); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_floating); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_complexfloating); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_flexible); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_character); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_ufunc); + Py_CLEAR(clear_module_state->__pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict); + Py_CLEAR(clear_module_state->__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector); + Py_CLEAR(clear_module_state->__pyx_array_type); + Py_CLEAR(clear_module_state->__pyx_type___pyx_array); + Py_CLEAR(clear_module_state->__pyx_MemviewEnum_type); + Py_CLEAR(clear_module_state->__pyx_type___pyx_MemviewEnum); + Py_CLEAR(clear_module_state->__pyx_memoryview_type); + Py_CLEAR(clear_module_state->__pyx_type___pyx_memoryview); + Py_CLEAR(clear_module_state->__pyx_memoryviewslice_type); + Py_CLEAR(clear_module_state->__pyx_type___pyx_memoryviewslice); + Py_CLEAR(clear_module_state->__pyx_kp_u_); + Py_CLEAR(clear_module_state->__pyx_kp_u_2f); + Py_CLEAR(clear_module_state->__pyx_kp_u_2f_2); + Py_CLEAR(clear_module_state->__pyx_kp_u_2f_3); + Py_CLEAR(clear_module_state->__pyx_n_s_A); + Py_CLEAR(clear_module_state->__pyx_n_s_ASCII); + Py_CLEAR(clear_module_state->__pyx_kp_s_All_dimensions_preceding_dimensi); + Py_CLEAR(clear_module_state->__pyx_n_s_AssertionError); + Py_CLEAR(clear_module_state->__pyx_kp_s_Buffer_view_does_not_expose_stri); + Py_CLEAR(clear_module_state->__pyx_kp_u_Building_chrono_purchared_items); + Py_CLEAR(clear_module_state->__pyx_kp_u_Building_data_completed_in_d_s); + Py_CLEAR(clear_module_state->__pyx_kp_u_Building_data_started); + Py_CLEAR(clear_module_state->__pyx_kp_u_Building_item_aspect_quality_mat); + Py_CLEAR(clear_module_state->__pyx_kp_s_Can_only_create_a_buffer_that_is); + Py_CLEAR(clear_module_state->__pyx_kp_s_Cannot_assign_to_read_only_memor); + Py_CLEAR(clear_module_state->__pyx_kp_s_Cannot_create_writable_memory_vi); + Py_CLEAR(clear_module_state->__pyx_kp_u_Cannot_index_with_type); + Py_CLEAR(clear_module_state->__pyx_kp_s_Cannot_transpose_memoryview_with); + Py_CLEAR(clear_module_state->__pyx_n_s_ComparERSub); + Py_CLEAR(clear_module_state->__pyx_n_u_ComparERSub); + Py_CLEAR(clear_module_state->__pyx_n_s_ComparERSub___init); + Py_CLEAR(clear_module_state->__pyx_n_s_ComparERSub__build_chrono_purcha); + Py_CLEAR(clear_module_state->__pyx_n_s_ComparERSub__build_data); + Py_CLEAR(clear_module_state->__pyx_n_s_ComparERSub__build_item_quality); + Py_CLEAR(clear_module_state->__pyx_n_s_ComparERSub__fit_mter); + Py_CLEAR(clear_module_state->__pyx_n_s_ComparERSub_fit); + Py_CLEAR(clear_module_state->__pyx_n_s_ComparERSub_rank); + Py_CLEAR(clear_module_state->__pyx_kp_u_Compute_X); + Py_CLEAR(clear_module_state->__pyx_kp_u_Compute_YI); + Py_CLEAR(clear_module_state->__pyx_kp_u_Compute_YU); + Py_CLEAR(clear_module_state->__pyx_kp_u_Count_aspects); + Py_CLEAR(clear_module_state->__pyx_n_s_Counter); + Py_CLEAR(clear_module_state->__pyx_kp_s_Dimension_d_is_not_direct); + Py_CLEAR(clear_module_state->__pyx_n_s_Ellipsis); + Py_CLEAR(clear_module_state->__pyx_kp_s_Empty_shape_tuple_for_cython_arr); + Py_CLEAR(clear_module_state->__pyx_kp_u_Enumerate_index); + Py_CLEAR(clear_module_state->__pyx_kp_s_Expected_at_least_d_argument_s_g); + Py_CLEAR(clear_module_state->__pyx_kp_s_Explainable_Recommendation_with); + Py_CLEAR(clear_module_state->__pyx_kp_s_Function_call_with_ambiguous_arg); + Py_CLEAR(clear_module_state->__pyx_n_s_G1); + Py_CLEAR(clear_module_state->__pyx_n_s_G2); + Py_CLEAR(clear_module_state->__pyx_n_s_G3); + Py_CLEAR(clear_module_state->__pyx_kp_u_Get_purchased_pairs); + Py_CLEAR(clear_module_state->__pyx_kp_u_Get_skyline_aspects); + Py_CLEAR(clear_module_state->__pyx_n_s_I); + Py_CLEAR(clear_module_state->__pyx_n_s_ImportError); + Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0); + Py_CLEAR(clear_module_state->__pyx_n_s_IndexError); + Py_CLEAR(clear_module_state->__pyx_kp_s_Index_out_of_bounds_axis_d); + Py_CLEAR(clear_module_state->__pyx_kp_s_Indirect_dimensions_not_supporte); + Py_CLEAR(clear_module_state->__pyx_kp_u_Invalid_mode_expected_c_or_fortr); + Py_CLEAR(clear_module_state->__pyx_kp_u_Invalid_shape_in_axis); + Py_CLEAR(clear_module_state->__pyx_n_s_MTER); + Py_CLEAR(clear_module_state->__pyx_kp_u_Mc_Nc_MN); + Py_CLEAR(clear_module_state->__pyx_n_s_MemoryError); + Py_CLEAR(clear_module_state->__pyx_kp_s_MemoryView_of_r_at_0x_x); + Py_CLEAR(clear_module_state->__pyx_kp_s_MemoryView_of_r_object); + Py_CLEAR(clear_module_state->__pyx_kp_s_No_matching_signature_found); + Py_CLEAR(clear_module_state->__pyx_n_b_O); + Py_CLEAR(clear_module_state->__pyx_n_s_O); + Py_CLEAR(clear_module_state->__pyx_kp_u_Optimization_finished); + Py_CLEAR(clear_module_state->__pyx_n_s_OrderedDict); + Py_CLEAR(clear_module_state->__pyx_kp_u_Out_of_bounds_on_buffer_access_a); + Py_CLEAR(clear_module_state->__pyx_n_s_PickleError); + Py_CLEAR(clear_module_state->__pyx_n_s_Recommender); + Py_CLEAR(clear_module_state->__pyx_n_s_ScoreException); + Py_CLEAR(clear_module_state->__pyx_n_s_Sequence); + Py_CLEAR(clear_module_state->__pyx_kp_u_Statistics_aspect_pairs); + Py_CLEAR(clear_module_state->__pyx_kp_s_Step_may_not_be_zero_axis_d); + Py_CLEAR(clear_module_state->__pyx_n_s_TypeError); + Py_CLEAR(clear_module_state->__pyx_n_s_U); + Py_CLEAR(clear_module_state->__pyx_kp_s_Unable_to_convert_item_to_object); + Py_CLEAR(clear_module_state->__pyx_n_s_ValueError); + Py_CLEAR(clear_module_state->__pyx_n_s_View_MemoryView); + Py_CLEAR(clear_module_state->__pyx_n_s_X); + Py_CLEAR(clear_module_state->__pyx_n_s_X_aids); + Py_CLEAR(clear_module_state->__pyx_n_s_X_iids); + Py_CLEAR(clear_module_state->__pyx_n_s_X_uids); + Py_CLEAR(clear_module_state->__pyx_n_s_Y); + Py_CLEAR(clear_module_state->__pyx_n_s_YI); + Py_CLEAR(clear_module_state->__pyx_n_s_YI_aids); + Py_CLEAR(clear_module_state->__pyx_n_s_YI_iids); + Py_CLEAR(clear_module_state->__pyx_n_s_YI_oids); + Py_CLEAR(clear_module_state->__pyx_n_s_YU); + Py_CLEAR(clear_module_state->__pyx_n_s_YU_aids); + Py_CLEAR(clear_module_state->__pyx_n_s_YU_oids); + Py_CLEAR(clear_module_state->__pyx_n_s_YU_uids); + Py_CLEAR(clear_module_state->__pyx_kp_u__12); + Py_CLEAR(clear_module_state->__pyx_kp_s__15); + Py_CLEAR(clear_module_state->__pyx_kp_s__16); + Py_CLEAR(clear_module_state->__pyx_kp_u__16); + Py_CLEAR(clear_module_state->__pyx_kp_u__2); + Py_CLEAR(clear_module_state->__pyx_n_s__3); + Py_CLEAR(clear_module_state->__pyx_n_s__38); + Py_CLEAR(clear_module_state->__pyx_n_s__53); + Py_CLEAR(clear_module_state->__pyx_kp_u__6); + Py_CLEAR(clear_module_state->__pyx_kp_u__7); + Py_CLEAR(clear_module_state->__pyx_n_s_a_idx); + Py_CLEAR(clear_module_state->__pyx_n_s_a_ji); + Py_CLEAR(clear_module_state->__pyx_n_s_abc); + Py_CLEAR(clear_module_state->__pyx_kp_u_abc_a_bc); + Py_CLEAR(clear_module_state->__pyx_n_s_aid); + Py_CLEAR(clear_module_state->__pyx_n_s_all_item_scores); + Py_CLEAR(clear_module_state->__pyx_n_s_allocate_buffer); + Py_CLEAR(clear_module_state->__pyx_n_s_alpha); + Py_CLEAR(clear_module_state->__pyx_kp_u_and); + Py_CLEAR(clear_module_state->__pyx_n_s_append); + Py_CLEAR(clear_module_state->__pyx_n_s_arange); + Py_CLEAR(clear_module_state->__pyx_n_s_args); + Py_CLEAR(clear_module_state->__pyx_n_s_argsort); + Py_CLEAR(clear_module_state->__pyx_n_s_array); + Py_CLEAR(clear_module_state->__pyx_n_s_asarray); + Py_CLEAR(clear_module_state->__pyx_n_s_aspect_bpr_loss); + Py_CLEAR(clear_module_state->__pyx_n_s_aspect_correct); + Py_CLEAR(clear_module_state->__pyx_n_s_aspect_idx); + Py_CLEAR(clear_module_state->__pyx_n_s_aspect_indices); + Py_CLEAR(clear_module_state->__pyx_n_s_astype); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_kp_u_avg); + Py_CLEAR(clear_module_state->__pyx_n_s_avg_sentiment); + Py_CLEAR(clear_module_state->__pyx_n_s_axis); + Py_CLEAR(clear_module_state->__pyx_n_s_base); + Py_CLEAR(clear_module_state->__pyx_kp_u_bc_Mb_Mc); + Py_CLEAR(clear_module_state->__pyx_n_s_bpr_loss); + Py_CLEAR(clear_module_state->__pyx_n_u_bpr_loss); + Py_CLEAR(clear_module_state->__pyx_n_s_build_chrono_purchased_pairs); + Py_CLEAR(clear_module_state->__pyx_n_s_build_data); + Py_CLEAR(clear_module_state->__pyx_n_s_build_item_quality_matrix); + Py_CLEAR(clear_module_state->__pyx_n_s_c); + Py_CLEAR(clear_module_state->__pyx_n_u_c); + Py_CLEAR(clear_module_state->__pyx_n_s_chrono_purchased_pairs); + Py_CLEAR(clear_module_state->__pyx_n_s_chrono_user_data); + Py_CLEAR(clear_module_state->__pyx_n_s_class); + Py_CLEAR(clear_module_state->__pyx_n_s_class_getitem); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_collections); + Py_CLEAR(clear_module_state->__pyx_kp_s_collections_abc); + Py_CLEAR(clear_module_state->__pyx_n_s_combinations); + Py_CLEAR(clear_module_state->__pyx_n_s_common_aspect_counts); + Py_CLEAR(clear_module_state->__pyx_kp_u_comparable_pairs); + Py_CLEAR(clear_module_state->__pyx_n_s_compute_attention_score); + Py_CLEAR(clear_module_state->__pyx_n_s_compute_quality_score); + Py_CLEAR(clear_module_state->__pyx_kp_s_contiguous_and_direct); + Py_CLEAR(clear_module_state->__pyx_kp_s_contiguous_and_indirect); + Py_CLEAR(clear_module_state->__pyx_n_s_cornac_models_comparer_recom_com); + Py_CLEAR(clear_module_state->__pyx_kp_s_cornac_models_comparer_recom_com_2); + Py_CLEAR(clear_module_state->__pyx_n_s_correct); + Py_CLEAR(clear_module_state->__pyx_n_u_correct); + Py_CLEAR(clear_module_state->__pyx_n_s_count); + Py_CLEAR(clear_module_state->__pyx_n_s_counted_pairs); + Py_CLEAR(clear_module_state->__pyx_n_s_csr_matrix); + Py_CLEAR(clear_module_state->__pyx_n_u_d); + Py_CLEAR(clear_module_state->__pyx_n_s_data_set); + Py_CLEAR(clear_module_state->__pyx_n_s_defaults); + Py_CLEAR(clear_module_state->__pyx_n_s_del_a); + Py_CLEAR(clear_module_state->__pyx_n_s_del_a_reg); + Py_CLEAR(clear_module_state->__pyx_n_s_del_aspect_bpr); + Py_CLEAR(clear_module_state->__pyx_n_s_del_bpr); + Py_CLEAR(clear_module_state->__pyx_n_s_del_g1); + Py_CLEAR(clear_module_state->__pyx_n_s_del_g1_reg); + Py_CLEAR(clear_module_state->__pyx_n_s_del_g2); + Py_CLEAR(clear_module_state->__pyx_n_s_del_g2_reg); + Py_CLEAR(clear_module_state->__pyx_n_s_del_g3); + Py_CLEAR(clear_module_state->__pyx_n_s_del_g3_reg); + Py_CLEAR(clear_module_state->__pyx_n_s_del_i); + Py_CLEAR(clear_module_state->__pyx_n_s_del_i_reg); + Py_CLEAR(clear_module_state->__pyx_n_s_del_o); + Py_CLEAR(clear_module_state->__pyx_n_s_del_o_reg); + Py_CLEAR(clear_module_state->__pyx_n_s_del_sqerror); + Py_CLEAR(clear_module_state->__pyx_n_s_del_u); + Py_CLEAR(clear_module_state->__pyx_n_s_del_u_reg); + Py_CLEAR(clear_module_state->__pyx_n_s_desc); + Py_CLEAR(clear_module_state->__pyx_n_s_dict); + Py_CLEAR(clear_module_state->__pyx_n_s_disable); + Py_CLEAR(clear_module_state->__pyx_kp_u_disable); + Py_CLEAR(clear_module_state->__pyx_n_s_doc); + Py_CLEAR(clear_module_state->__pyx_n_s_double); + Py_CLEAR(clear_module_state->__pyx_kp_s_double_int); + Py_CLEAR(clear_module_state->__pyx_kp_s_double_long); + Py_CLEAR(clear_module_state->__pyx_kp_s_double_short); + Py_CLEAR(clear_module_state->__pyx_n_s_dtype); + Py_CLEAR(clear_module_state->__pyx_n_s_dtype_is_object); + Py_CLEAR(clear_module_state->__pyx_n_s_earlier_indices); + Py_CLEAR(clear_module_state->__pyx_n_s_earlier_item_idx); + Py_CLEAR(clear_module_state->__pyx_kp_u_earlier_later_pairs); + Py_CLEAR(clear_module_state->__pyx_n_s_ediff1d); + Py_CLEAR(clear_module_state->__pyx_n_s_einsum); + Py_CLEAR(clear_module_state->__pyx_kp_u_enable); + Py_CLEAR(clear_module_state->__pyx_n_s_encode); + Py_CLEAR(clear_module_state->__pyx_n_s_enter); + Py_CLEAR(clear_module_state->__pyx_n_s_enum_window); + Py_CLEAR(clear_module_state->__pyx_n_s_enumerate); + Py_CLEAR(clear_module_state->__pyx_n_s_epoch); + Py_CLEAR(clear_module_state->__pyx_n_s_eps); + Py_CLEAR(clear_module_state->__pyx_n_s_error); + Py_CLEAR(clear_module_state->__pyx_n_s_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_exit); + Py_CLEAR(clear_module_state->__pyx_n_s_fill); + Py_CLEAR(clear_module_state->__pyx_n_s_fit); + Py_CLEAR(clear_module_state->__pyx_n_s_fit_mter); + Py_CLEAR(clear_module_state->__pyx_n_s_flags); + Py_CLEAR(clear_module_state->__pyx_n_s_flatten); + Py_CLEAR(clear_module_state->__pyx_n_s_float); + Py_CLEAR(clear_module_state->__pyx_n_s_float32); + Py_CLEAR(clear_module_state->__pyx_n_s_float64); + Py_CLEAR(clear_module_state->__pyx_kp_s_float_int); + Py_CLEAR(clear_module_state->__pyx_kp_s_float_long); + Py_CLEAR(clear_module_state->__pyx_kp_s_float_short); + Py_CLEAR(clear_module_state->__pyx_n_s_format); + Py_CLEAR(clear_module_state->__pyx_n_s_fortran); + Py_CLEAR(clear_module_state->__pyx_n_u_fortran); + Py_CLEAR(clear_module_state->__pyx_n_s_fused_sigindex); + Py_CLEAR(clear_module_state->__pyx_kp_u_gc); + Py_CLEAR(clear_module_state->__pyx_n_s_get); + Py_CLEAR(clear_module_state->__pyx_n_s_get_rng); + Py_CLEAR(clear_module_state->__pyx_n_s_getstate); + Py_CLEAR(clear_module_state->__pyx_kp_u_got); + Py_CLEAR(clear_module_state->__pyx_kp_u_got_differing_extents_in_dimensi); + Py_CLEAR(clear_module_state->__pyx_n_s_i); + Py_CLEAR(clear_module_state->__pyx_n_s_i_idx); + Py_CLEAR(clear_module_state->__pyx_n_s_i_ij); + Py_CLEAR(clear_module_state->__pyx_n_s_i_index); + Py_CLEAR(clear_module_state->__pyx_n_s_i_indices); + Py_CLEAR(clear_module_state->__pyx_n_s_i_score); + Py_CLEAR(clear_module_state->__pyx_n_s_id); + Py_CLEAR(clear_module_state->__pyx_n_s_idx); + Py_CLEAR(clear_module_state->__pyx_n_s_iid); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_index); + Py_CLEAR(clear_module_state->__pyx_n_s_indices); + Py_CLEAR(clear_module_state->__pyx_n_s_indptr); + Py_CLEAR(clear_module_state->__pyx_n_s_init); + Py_CLEAR(clear_module_state->__pyx_n_s_init_2); + Py_CLEAR(clear_module_state->__pyx_n_s_init_params); + Py_CLEAR(clear_module_state->__pyx_n_s_init_subclass); + Py_CLEAR(clear_module_state->__pyx_n_s_initializing); + Py_CLEAR(clear_module_state->__pyx_n_s_int); + Py_CLEAR(clear_module_state->__pyx_n_s_int32); + Py_CLEAR(clear_module_state->__pyx_n_s_intp); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_n_s_is_unk_item); + Py_CLEAR(clear_module_state->__pyx_n_s_is_unk_user); + Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled); + Py_CLEAR(clear_module_state->__pyx_n_s_item_aspect_count); + Py_CLEAR(clear_module_state->__pyx_n_s_item_aspect_opinion); + Py_CLEAR(clear_module_state->__pyx_n_s_item_aspects); + Py_CLEAR(clear_module_state->__pyx_n_s_item_ids); + Py_CLEAR(clear_module_state->__pyx_n_s_item_indices); + Py_CLEAR(clear_module_state->__pyx_n_s_item_rank); + Py_CLEAR(clear_module_state->__pyx_n_s_item_scores); + Py_CLEAR(clear_module_state->__pyx_n_s_item_sentiment); + Py_CLEAR(clear_module_state->__pyx_n_s_items); + Py_CLEAR(clear_module_state->__pyx_n_s_itemsize); + Py_CLEAR(clear_module_state->__pyx_kp_s_itemsize_0_for_cython_array); + Py_CLEAR(clear_module_state->__pyx_n_s_itertools); + Py_CLEAR(clear_module_state->__pyx_n_s_j); + Py_CLEAR(clear_module_state->__pyx_n_s_j_idx); + Py_CLEAR(clear_module_state->__pyx_n_s_j_index); + Py_CLEAR(clear_module_state->__pyx_n_s_j_score); + Py_CLEAR(clear_module_state->__pyx_n_s_jdx); + Py_CLEAR(clear_module_state->__pyx_n_s_k); + Py_CLEAR(clear_module_state->__pyx_n_s_key); + Py_CLEAR(clear_module_state->__pyx_n_s_keys); + Py_CLEAR(clear_module_state->__pyx_n_s_kind); + Py_CLEAR(clear_module_state->__pyx_n_s_known_item_scores); + Py_CLEAR(clear_module_state->__pyx_n_s_kwargs); + Py_CLEAR(clear_module_state->__pyx_n_s_lambda_bpr); + Py_CLEAR(clear_module_state->__pyx_n_s_lambda_d); + Py_CLEAR(clear_module_state->__pyx_n_s_lambda_reg); + Py_CLEAR(clear_module_state->__pyx_n_s_later_indices); + Py_CLEAR(clear_module_state->__pyx_n_s_later_item_idx); + Py_CLEAR(clear_module_state->__pyx_n_s_ld_bpr); + Py_CLEAR(clear_module_state->__pyx_n_s_ld_reg); + Py_CLEAR(clear_module_state->__pyx_n_s_long); + Py_CLEAR(clear_module_state->__pyx_n_s_loss); + Py_CLEAR(clear_module_state->__pyx_n_u_loss); + Py_CLEAR(clear_module_state->__pyx_n_s_lr); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_map_aspect_id); + Py_CLEAR(clear_module_state->__pyx_n_s_map_iid); + Py_CLEAR(clear_module_state->__pyx_kp_u_max); + Py_CLEAR(clear_module_state->__pyx_n_s_max_2); + Py_CLEAR(clear_module_state->__pyx_n_s_max_iter); + Py_CLEAR(clear_module_state->__pyx_n_s_mean); + Py_CLEAR(clear_module_state->__pyx_n_s_memview); + Py_CLEAR(clear_module_state->__pyx_n_s_metaclass); + Py_CLEAR(clear_module_state->__pyx_kp_u_min); + Py_CLEAR(clear_module_state->__pyx_n_s_min_2); + Py_CLEAR(clear_module_state->__pyx_n_s_min_common_freq); + Py_CLEAR(clear_module_state->__pyx_n_s_min_pair_freq); + Py_CLEAR(clear_module_state->__pyx_n_s_min_user_freq); + Py_CLEAR(clear_module_state->__pyx_n_s_mode); + Py_CLEAR(clear_module_state->__pyx_n_s_module); + Py_CLEAR(clear_module_state->__pyx_n_s_most_common); + Py_CLEAR(clear_module_state->__pyx_n_s_mp); + Py_CLEAR(clear_module_state->__pyx_n_s_mro_entries); + Py_CLEAR(clear_module_state->__pyx_n_s_mter); + Py_CLEAR(clear_module_state->__pyx_n_s_multiprocessing); + Py_CLEAR(clear_module_state->__pyx_n_s_n_aspect_factors); + Py_CLEAR(clear_module_state->__pyx_n_s_n_aspects); + Py_CLEAR(clear_module_state->__pyx_n_s_n_bpr_samples); + Py_CLEAR(clear_module_state->__pyx_n_s_n_element_samples); + Py_CLEAR(clear_module_state->__pyx_n_s_n_item_factors); + Py_CLEAR(clear_module_state->__pyx_n_s_n_items); + Py_CLEAR(clear_module_state->__pyx_n_s_n_opinion_factors); + Py_CLEAR(clear_module_state->__pyx_n_s_n_opinions); + Py_CLEAR(clear_module_state->__pyx_n_s_n_pair_samples); + Py_CLEAR(clear_module_state->__pyx_n_s_n_threads); + Py_CLEAR(clear_module_state->__pyx_n_s_n_top_aspects); + Py_CLEAR(clear_module_state->__pyx_n_s_n_user_factors); + Py_CLEAR(clear_module_state->__pyx_n_s_n_users); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_s_name_2); + Py_CLEAR(clear_module_state->__pyx_n_s_ndim); + Py_CLEAR(clear_module_state->__pyx_n_s_neg_item_ids); + Py_CLEAR(clear_module_state->__pyx_n_s_new); + Py_CLEAR(clear_module_state->__pyx_kp_s_no_default___reduce___due_to_non); + Py_CLEAR(clear_module_state->__pyx_kp_u_not_dominated_pairs); + Py_CLEAR(clear_module_state->__pyx_n_s_not_dominated_pairs_2); + Py_CLEAR(clear_module_state->__pyx_n_s_np); + Py_CLEAR(clear_module_state->__pyx_n_s_num_aspects); + Py_CLEAR(clear_module_state->__pyx_n_s_num_bpr_samples); + Py_CLEAR(clear_module_state->__pyx_n_s_num_items); + Py_CLEAR(clear_module_state->__pyx_n_s_num_opinions); + Py_CLEAR(clear_module_state->__pyx_n_s_num_pair_samples); + Py_CLEAR(clear_module_state->__pyx_n_s_num_samples); + Py_CLEAR(clear_module_state->__pyx_n_s_num_users); + Py_CLEAR(clear_module_state->__pyx_n_s_numpy); + Py_CLEAR(clear_module_state->__pyx_kp_u_numpy_core_multiarray_failed_to); + Py_CLEAR(clear_module_state->__pyx_kp_u_numpy_core_umath_failed_to_impor); + Py_CLEAR(clear_module_state->__pyx_n_s_o_idx); + Py_CLEAR(clear_module_state->__pyx_n_s_obj); + Py_CLEAR(clear_module_state->__pyx_n_s_oid); + Py_CLEAR(clear_module_state->__pyx_n_s_ones); + Py_CLEAR(clear_module_state->__pyx_n_s_p_user_indices); + Py_CLEAR(clear_module_state->__pyx_n_s_pack); + Py_CLEAR(clear_module_state->__pyx_n_s_pair_counts); + Py_CLEAR(clear_module_state->__pyx_n_s_pair_freq); + Py_CLEAR(clear_module_state->__pyx_n_s_pickle); + Py_CLEAR(clear_module_state->__pyx_n_s_polarity); + Py_CLEAR(clear_module_state->__pyx_n_s_pred); + Py_CLEAR(clear_module_state->__pyx_n_s_prepare); + Py_CLEAR(clear_module_state->__pyx_n_s_print); + Py_CLEAR(clear_module_state->__pyx_n_s_progress); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_PickleError); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_checksum); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_result); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_state); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_type); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_Enum); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_vtable); + Py_CLEAR(clear_module_state->__pyx_n_s_quality_scores); + Py_CLEAR(clear_module_state->__pyx_n_s_qualname); + Py_CLEAR(clear_module_state->__pyx_n_s_r_values); + Py_CLEAR(clear_module_state->__pyx_n_s_randint); + Py_CLEAR(clear_module_state->__pyx_n_s_range); + Py_CLEAR(clear_module_state->__pyx_n_s_rank); + Py_CLEAR(clear_module_state->__pyx_n_s_rating_dict); + Py_CLEAR(clear_module_state->__pyx_n_s_rating_matrix); + Py_CLEAR(clear_module_state->__pyx_n_s_rating_scale); + Py_CLEAR(clear_module_state->__pyx_n_s_recommender); + Py_CLEAR(clear_module_state->__pyx_n_s_reduce); + Py_CLEAR(clear_module_state->__pyx_n_s_reduce_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_reduce_ex); + Py_CLEAR(clear_module_state->__pyx_n_s_register); + Py_CLEAR(clear_module_state->__pyx_n_s_repeat); + Py_CLEAR(clear_module_state->__pyx_n_s_reshape); + Py_CLEAR(clear_module_state->__pyx_n_s_rng); + Py_CLEAR(clear_module_state->__pyx_n_s_rng_neg); + Py_CLEAR(clear_module_state->__pyx_n_s_rng_pos); + Py_CLEAR(clear_module_state->__pyx_n_s_rng_pos_iao); + Py_CLEAR(clear_module_state->__pyx_n_s_rng_pos_pair); + Py_CLEAR(clear_module_state->__pyx_n_s_rng_pos_uao); + Py_CLEAR(clear_module_state->__pyx_n_s_rng_pos_uia); + Py_CLEAR(clear_module_state->__pyx_n_s_s); + Py_CLEAR(clear_module_state->__pyx_n_s_scipy); + Py_CLEAR(clear_module_state->__pyx_n_s_scipy_sparse); + Py_CLEAR(clear_module_state->__pyx_n_s_score); + Py_CLEAR(clear_module_state->__pyx_n_s_seed); + Py_CLEAR(clear_module_state->__pyx_n_s_self); + Py_CLEAR(clear_module_state->__pyx_n_s_sentiment); + Py_CLEAR(clear_module_state->__pyx_n_s_sentiment_polarity); + Py_CLEAR(clear_module_state->__pyx_n_s_sentiment_tup_ids_by_item); + Py_CLEAR(clear_module_state->__pyx_n_s_sentiment_tup_ids_by_user); + Py_CLEAR(clear_module_state->__pyx_n_s_set_name); + Py_CLEAR(clear_module_state->__pyx_n_s_set_postfix); + Py_CLEAR(clear_module_state->__pyx_n_s_setstate); + Py_CLEAR(clear_module_state->__pyx_n_s_setstate_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_sgrad_A); + Py_CLEAR(clear_module_state->__pyx_n_s_sgrad_G1); + Py_CLEAR(clear_module_state->__pyx_n_s_sgrad_G2); + Py_CLEAR(clear_module_state->__pyx_n_s_sgrad_G3); + Py_CLEAR(clear_module_state->__pyx_n_s_sgrad_I); + Py_CLEAR(clear_module_state->__pyx_n_s_sgrad_O); + Py_CLEAR(clear_module_state->__pyx_n_s_sgrad_U); + Py_CLEAR(clear_module_state->__pyx_n_s_shape); + Py_CLEAR(clear_module_state->__pyx_n_s_short); + Py_CLEAR(clear_module_state->__pyx_n_s_signatures); + Py_CLEAR(clear_module_state->__pyx_n_s_size); + Py_CLEAR(clear_module_state->__pyx_n_s_skipped); + Py_CLEAR(clear_module_state->__pyx_n_u_skipped); + Py_CLEAR(clear_module_state->__pyx_n_s_sp); + Py_CLEAR(clear_module_state->__pyx_n_s_sparse); + Py_CLEAR(clear_module_state->__pyx_n_s_spec); + Py_CLEAR(clear_module_state->__pyx_n_s_split); + Py_CLEAR(clear_module_state->__pyx_n_s_start); + Py_CLEAR(clear_module_state->__pyx_n_s_start_time); + Py_CLEAR(clear_module_state->__pyx_n_s_step); + Py_CLEAR(clear_module_state->__pyx_n_s_stop); + Py_CLEAR(clear_module_state->__pyx_kp_s_strided_and_direct); + Py_CLEAR(clear_module_state->__pyx_kp_s_strided_and_direct_or_indirect); + Py_CLEAR(clear_module_state->__pyx_kp_s_strided_and_indirect); + Py_CLEAR(clear_module_state->__pyx_kp_s_stringsource); + Py_CLEAR(clear_module_state->__pyx_n_s_strip); + Py_CLEAR(clear_module_state->__pyx_n_s_struct); + Py_CLEAR(clear_module_state->__pyx_n_s_sub_item_ids); + Py_CLEAR(clear_module_state->__pyx_n_s_sum); + Py_CLEAR(clear_module_state->__pyx_n_s_super); + Py_CLEAR(clear_module_state->__pyx_n_s_sys); + Py_CLEAR(clear_module_state->__pyx_n_s_temp); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_thread_id); + Py_CLEAR(clear_module_state->__pyx_n_s_time); + Py_CLEAR(clear_module_state->__pyx_n_s_top_aspect_scores); + Py_CLEAR(clear_module_state->__pyx_n_s_total_items); + Py_CLEAR(clear_module_state->__pyx_n_s_total_sentiment); + Py_CLEAR(clear_module_state->__pyx_n_s_total_sentiment_by_aspect); + Py_CLEAR(clear_module_state->__pyx_n_s_total_time); + Py_CLEAR(clear_module_state->__pyx_n_s_tqdm); + Py_CLEAR(clear_module_state->__pyx_n_s_train_set); + Py_CLEAR(clear_module_state->__pyx_n_s_trainable); + Py_CLEAR(clear_module_state->__pyx_n_s_trange); + Py_CLEAR(clear_module_state->__pyx_n_s_ts1); + Py_CLEAR(clear_module_state->__pyx_n_s_ts2); + Py_CLEAR(clear_module_state->__pyx_n_s_ts3); + Py_CLEAR(clear_module_state->__pyx_n_s_tup); + Py_CLEAR(clear_module_state->__pyx_n_s_tup_id); + Py_CLEAR(clear_module_state->__pyx_n_s_tup_idx); + Py_CLEAR(clear_module_state->__pyx_n_s_u); + Py_CLEAR(clear_module_state->__pyx_n_s_u_idx); + Py_CLEAR(clear_module_state->__pyx_n_s_u_indices); + Py_CLEAR(clear_module_state->__pyx_n_s_uid); + Py_CLEAR(clear_module_state->__pyx_n_s_uir_tuple); + Py_CLEAR(clear_module_state->__pyx_kp_s_unable_to_allocate_array_data); + Py_CLEAR(clear_module_state->__pyx_kp_s_unable_to_allocate_shape_and_str); + Py_CLEAR(clear_module_state->__pyx_n_s_uniform); + Py_CLEAR(clear_module_state->__pyx_kp_u_unique_earlier_later_pairs); + Py_CLEAR(clear_module_state->__pyx_n_s_unpack); + Py_CLEAR(clear_module_state->__pyx_n_s_update); + Py_CLEAR(clear_module_state->__pyx_n_s_use_item_aspect_popularity); + Py_CLEAR(clear_module_state->__pyx_n_s_user_aspect_opinion); + Py_CLEAR(clear_module_state->__pyx_n_s_user_counts); + Py_CLEAR(clear_module_state->__pyx_n_s_user_ids); + Py_CLEAR(clear_module_state->__pyx_n_s_user_idx); + Py_CLEAR(clear_module_state->__pyx_n_s_user_indices); + Py_CLEAR(clear_module_state->__pyx_n_s_user_item_aspect); + Py_CLEAR(clear_module_state->__pyx_n_s_user_sentiment); + Py_CLEAR(clear_module_state->__pyx_n_s_utils); + Py_CLEAR(clear_module_state->__pyx_n_s_utils_init_utils); + Py_CLEAR(clear_module_state->__pyx_n_s_val_set); + Py_CLEAR(clear_module_state->__pyx_n_s_values); + Py_CLEAR(clear_module_state->__pyx_n_s_verbose); + Py_CLEAR(clear_module_state->__pyx_n_s_version_info); + Py_CLEAR(clear_module_state->__pyx_n_s_window); + Py_CLEAR(clear_module_state->__pyx_n_s_z); + Py_CLEAR(clear_module_state->__pyx_n_s_zeros_like); + Py_CLEAR(clear_module_state->__pyx_n_s_zip); + Py_CLEAR(clear_module_state->__pyx_float_0_1); + Py_CLEAR(clear_module_state->__pyx_float_0_5); + Py_CLEAR(clear_module_state->__pyx_float_5_0); + Py_CLEAR(clear_module_state->__pyx_float_0_01); + Py_CLEAR(clear_module_state->__pyx_float_100_0); + Py_CLEAR(clear_module_state->__pyx_int_0); + Py_CLEAR(clear_module_state->__pyx_int_1); + Py_CLEAR(clear_module_state->__pyx_int_2); + Py_CLEAR(clear_module_state->__pyx_int_3); + Py_CLEAR(clear_module_state->__pyx_int_8); + Py_CLEAR(clear_module_state->__pyx_int_10); + Py_CLEAR(clear_module_state->__pyx_int_50); + Py_CLEAR(clear_module_state->__pyx_int_58); + Py_CLEAR(clear_module_state->__pyx_int_100); + Py_CLEAR(clear_module_state->__pyx_int_1000); + Py_CLEAR(clear_module_state->__pyx_int_200000); + Py_CLEAR(clear_module_state->__pyx_int_112105877); + Py_CLEAR(clear_module_state->__pyx_int_136983863); + Py_CLEAR(clear_module_state->__pyx_int_184977713); + Py_CLEAR(clear_module_state->__pyx_int_2147483648); + Py_CLEAR(clear_module_state->__pyx_int_neg_1); + Py_CLEAR(clear_module_state->__pyx_slice__5); + Py_CLEAR(clear_module_state->__pyx_tuple__4); + Py_CLEAR(clear_module_state->__pyx_tuple__8); + Py_CLEAR(clear_module_state->__pyx_tuple__9); + Py_CLEAR(clear_module_state->__pyx_slice__19); + Py_CLEAR(clear_module_state->__pyx_slice__21); + Py_CLEAR(clear_module_state->__pyx_tuple__10); + Py_CLEAR(clear_module_state->__pyx_tuple__11); + Py_CLEAR(clear_module_state->__pyx_tuple__13); + Py_CLEAR(clear_module_state->__pyx_tuple__14); + Py_CLEAR(clear_module_state->__pyx_tuple__17); + Py_CLEAR(clear_module_state->__pyx_tuple__18); + Py_CLEAR(clear_module_state->__pyx_tuple__20); + Py_CLEAR(clear_module_state->__pyx_tuple__22); + Py_CLEAR(clear_module_state->__pyx_tuple__23); + Py_CLEAR(clear_module_state->__pyx_tuple__24); + Py_CLEAR(clear_module_state->__pyx_tuple__25); + Py_CLEAR(clear_module_state->__pyx_tuple__26); + Py_CLEAR(clear_module_state->__pyx_tuple__27); + Py_CLEAR(clear_module_state->__pyx_tuple__28); + Py_CLEAR(clear_module_state->__pyx_tuple__29); + Py_CLEAR(clear_module_state->__pyx_tuple__30); + Py_CLEAR(clear_module_state->__pyx_tuple__31); + Py_CLEAR(clear_module_state->__pyx_tuple__32); + Py_CLEAR(clear_module_state->__pyx_tuple__34); + Py_CLEAR(clear_module_state->__pyx_tuple__35); + Py_CLEAR(clear_module_state->__pyx_tuple__37); + Py_CLEAR(clear_module_state->__pyx_tuple__39); + Py_CLEAR(clear_module_state->__pyx_tuple__41); + Py_CLEAR(clear_module_state->__pyx_tuple__43); + Py_CLEAR(clear_module_state->__pyx_tuple__45); + Py_CLEAR(clear_module_state->__pyx_tuple__47); + Py_CLEAR(clear_module_state->__pyx_tuple__48); + Py_CLEAR(clear_module_state->__pyx_tuple__50); + Py_CLEAR(clear_module_state->__pyx_tuple__52); + Py_CLEAR(clear_module_state->__pyx_codeobj__33); + Py_CLEAR(clear_module_state->__pyx_codeobj__36); + Py_CLEAR(clear_module_state->__pyx_codeobj__40); + Py_CLEAR(clear_module_state->__pyx_codeobj__42); + Py_CLEAR(clear_module_state->__pyx_codeobj__44); + Py_CLEAR(clear_module_state->__pyx_codeobj__46); + Py_CLEAR(clear_module_state->__pyx_codeobj__49); + Py_CLEAR(clear_module_state->__pyx_codeobj__51); + return 0; +} +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_4type_type); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_dtype); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_flatiter); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_broadcast); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_ndarray); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_generic); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_number); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_integer); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_signedinteger); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_unsignedinteger); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_inexact); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_floating); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_complexfloating); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_flexible); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_character); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_ufunc); + Py_VISIT(traverse_module_state->__pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict); + Py_VISIT(traverse_module_state->__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector); + Py_VISIT(traverse_module_state->__pyx_array_type); + Py_VISIT(traverse_module_state->__pyx_type___pyx_array); + Py_VISIT(traverse_module_state->__pyx_MemviewEnum_type); + Py_VISIT(traverse_module_state->__pyx_type___pyx_MemviewEnum); + Py_VISIT(traverse_module_state->__pyx_memoryview_type); + Py_VISIT(traverse_module_state->__pyx_type___pyx_memoryview); + Py_VISIT(traverse_module_state->__pyx_memoryviewslice_type); + Py_VISIT(traverse_module_state->__pyx_type___pyx_memoryviewslice); + Py_VISIT(traverse_module_state->__pyx_kp_u_); + Py_VISIT(traverse_module_state->__pyx_kp_u_2f); + Py_VISIT(traverse_module_state->__pyx_kp_u_2f_2); + Py_VISIT(traverse_module_state->__pyx_kp_u_2f_3); + Py_VISIT(traverse_module_state->__pyx_n_s_A); + Py_VISIT(traverse_module_state->__pyx_n_s_ASCII); + Py_VISIT(traverse_module_state->__pyx_kp_s_All_dimensions_preceding_dimensi); + Py_VISIT(traverse_module_state->__pyx_n_s_AssertionError); + Py_VISIT(traverse_module_state->__pyx_kp_s_Buffer_view_does_not_expose_stri); + Py_VISIT(traverse_module_state->__pyx_kp_u_Building_chrono_purchared_items); + Py_VISIT(traverse_module_state->__pyx_kp_u_Building_data_completed_in_d_s); + Py_VISIT(traverse_module_state->__pyx_kp_u_Building_data_started); + Py_VISIT(traverse_module_state->__pyx_kp_u_Building_item_aspect_quality_mat); + Py_VISIT(traverse_module_state->__pyx_kp_s_Can_only_create_a_buffer_that_is); + Py_VISIT(traverse_module_state->__pyx_kp_s_Cannot_assign_to_read_only_memor); + Py_VISIT(traverse_module_state->__pyx_kp_s_Cannot_create_writable_memory_vi); + Py_VISIT(traverse_module_state->__pyx_kp_u_Cannot_index_with_type); + Py_VISIT(traverse_module_state->__pyx_kp_s_Cannot_transpose_memoryview_with); + Py_VISIT(traverse_module_state->__pyx_n_s_ComparERSub); + Py_VISIT(traverse_module_state->__pyx_n_u_ComparERSub); + Py_VISIT(traverse_module_state->__pyx_n_s_ComparERSub___init); + Py_VISIT(traverse_module_state->__pyx_n_s_ComparERSub__build_chrono_purcha); + Py_VISIT(traverse_module_state->__pyx_n_s_ComparERSub__build_data); + Py_VISIT(traverse_module_state->__pyx_n_s_ComparERSub__build_item_quality); + Py_VISIT(traverse_module_state->__pyx_n_s_ComparERSub__fit_mter); + Py_VISIT(traverse_module_state->__pyx_n_s_ComparERSub_fit); + Py_VISIT(traverse_module_state->__pyx_n_s_ComparERSub_rank); + Py_VISIT(traverse_module_state->__pyx_kp_u_Compute_X); + Py_VISIT(traverse_module_state->__pyx_kp_u_Compute_YI); + Py_VISIT(traverse_module_state->__pyx_kp_u_Compute_YU); + Py_VISIT(traverse_module_state->__pyx_kp_u_Count_aspects); + Py_VISIT(traverse_module_state->__pyx_n_s_Counter); + Py_VISIT(traverse_module_state->__pyx_kp_s_Dimension_d_is_not_direct); + Py_VISIT(traverse_module_state->__pyx_n_s_Ellipsis); + Py_VISIT(traverse_module_state->__pyx_kp_s_Empty_shape_tuple_for_cython_arr); + Py_VISIT(traverse_module_state->__pyx_kp_u_Enumerate_index); + Py_VISIT(traverse_module_state->__pyx_kp_s_Expected_at_least_d_argument_s_g); + Py_VISIT(traverse_module_state->__pyx_kp_s_Explainable_Recommendation_with); + Py_VISIT(traverse_module_state->__pyx_kp_s_Function_call_with_ambiguous_arg); + Py_VISIT(traverse_module_state->__pyx_n_s_G1); + Py_VISIT(traverse_module_state->__pyx_n_s_G2); + Py_VISIT(traverse_module_state->__pyx_n_s_G3); + Py_VISIT(traverse_module_state->__pyx_kp_u_Get_purchased_pairs); + Py_VISIT(traverse_module_state->__pyx_kp_u_Get_skyline_aspects); + Py_VISIT(traverse_module_state->__pyx_n_s_I); + Py_VISIT(traverse_module_state->__pyx_n_s_ImportError); + Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0); + Py_VISIT(traverse_module_state->__pyx_n_s_IndexError); + Py_VISIT(traverse_module_state->__pyx_kp_s_Index_out_of_bounds_axis_d); + Py_VISIT(traverse_module_state->__pyx_kp_s_Indirect_dimensions_not_supporte); + Py_VISIT(traverse_module_state->__pyx_kp_u_Invalid_mode_expected_c_or_fortr); + Py_VISIT(traverse_module_state->__pyx_kp_u_Invalid_shape_in_axis); + Py_VISIT(traverse_module_state->__pyx_n_s_MTER); + Py_VISIT(traverse_module_state->__pyx_kp_u_Mc_Nc_MN); + Py_VISIT(traverse_module_state->__pyx_n_s_MemoryError); + Py_VISIT(traverse_module_state->__pyx_kp_s_MemoryView_of_r_at_0x_x); + Py_VISIT(traverse_module_state->__pyx_kp_s_MemoryView_of_r_object); + Py_VISIT(traverse_module_state->__pyx_kp_s_No_matching_signature_found); + Py_VISIT(traverse_module_state->__pyx_n_b_O); + Py_VISIT(traverse_module_state->__pyx_n_s_O); + Py_VISIT(traverse_module_state->__pyx_kp_u_Optimization_finished); + Py_VISIT(traverse_module_state->__pyx_n_s_OrderedDict); + Py_VISIT(traverse_module_state->__pyx_kp_u_Out_of_bounds_on_buffer_access_a); + Py_VISIT(traverse_module_state->__pyx_n_s_PickleError); + Py_VISIT(traverse_module_state->__pyx_n_s_Recommender); + Py_VISIT(traverse_module_state->__pyx_n_s_ScoreException); + Py_VISIT(traverse_module_state->__pyx_n_s_Sequence); + Py_VISIT(traverse_module_state->__pyx_kp_u_Statistics_aspect_pairs); + Py_VISIT(traverse_module_state->__pyx_kp_s_Step_may_not_be_zero_axis_d); + Py_VISIT(traverse_module_state->__pyx_n_s_TypeError); + Py_VISIT(traverse_module_state->__pyx_n_s_U); + Py_VISIT(traverse_module_state->__pyx_kp_s_Unable_to_convert_item_to_object); + Py_VISIT(traverse_module_state->__pyx_n_s_ValueError); + Py_VISIT(traverse_module_state->__pyx_n_s_View_MemoryView); + Py_VISIT(traverse_module_state->__pyx_n_s_X); + Py_VISIT(traverse_module_state->__pyx_n_s_X_aids); + Py_VISIT(traverse_module_state->__pyx_n_s_X_iids); + Py_VISIT(traverse_module_state->__pyx_n_s_X_uids); + Py_VISIT(traverse_module_state->__pyx_n_s_Y); + Py_VISIT(traverse_module_state->__pyx_n_s_YI); + Py_VISIT(traverse_module_state->__pyx_n_s_YI_aids); + Py_VISIT(traverse_module_state->__pyx_n_s_YI_iids); + Py_VISIT(traverse_module_state->__pyx_n_s_YI_oids); + Py_VISIT(traverse_module_state->__pyx_n_s_YU); + Py_VISIT(traverse_module_state->__pyx_n_s_YU_aids); + Py_VISIT(traverse_module_state->__pyx_n_s_YU_oids); + Py_VISIT(traverse_module_state->__pyx_n_s_YU_uids); + Py_VISIT(traverse_module_state->__pyx_kp_u__12); + Py_VISIT(traverse_module_state->__pyx_kp_s__15); + Py_VISIT(traverse_module_state->__pyx_kp_s__16); + Py_VISIT(traverse_module_state->__pyx_kp_u__16); + Py_VISIT(traverse_module_state->__pyx_kp_u__2); + Py_VISIT(traverse_module_state->__pyx_n_s__3); + Py_VISIT(traverse_module_state->__pyx_n_s__38); + Py_VISIT(traverse_module_state->__pyx_n_s__53); + Py_VISIT(traverse_module_state->__pyx_kp_u__6); + Py_VISIT(traverse_module_state->__pyx_kp_u__7); + Py_VISIT(traverse_module_state->__pyx_n_s_a_idx); + Py_VISIT(traverse_module_state->__pyx_n_s_a_ji); + Py_VISIT(traverse_module_state->__pyx_n_s_abc); + Py_VISIT(traverse_module_state->__pyx_kp_u_abc_a_bc); + Py_VISIT(traverse_module_state->__pyx_n_s_aid); + Py_VISIT(traverse_module_state->__pyx_n_s_all_item_scores); + Py_VISIT(traverse_module_state->__pyx_n_s_allocate_buffer); + Py_VISIT(traverse_module_state->__pyx_n_s_alpha); + Py_VISIT(traverse_module_state->__pyx_kp_u_and); + Py_VISIT(traverse_module_state->__pyx_n_s_append); + Py_VISIT(traverse_module_state->__pyx_n_s_arange); + Py_VISIT(traverse_module_state->__pyx_n_s_args); + Py_VISIT(traverse_module_state->__pyx_n_s_argsort); + Py_VISIT(traverse_module_state->__pyx_n_s_array); + Py_VISIT(traverse_module_state->__pyx_n_s_asarray); + Py_VISIT(traverse_module_state->__pyx_n_s_aspect_bpr_loss); + Py_VISIT(traverse_module_state->__pyx_n_s_aspect_correct); + Py_VISIT(traverse_module_state->__pyx_n_s_aspect_idx); + Py_VISIT(traverse_module_state->__pyx_n_s_aspect_indices); + Py_VISIT(traverse_module_state->__pyx_n_s_astype); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_kp_u_avg); + Py_VISIT(traverse_module_state->__pyx_n_s_avg_sentiment); + Py_VISIT(traverse_module_state->__pyx_n_s_axis); + Py_VISIT(traverse_module_state->__pyx_n_s_base); + Py_VISIT(traverse_module_state->__pyx_kp_u_bc_Mb_Mc); + Py_VISIT(traverse_module_state->__pyx_n_s_bpr_loss); + Py_VISIT(traverse_module_state->__pyx_n_u_bpr_loss); + Py_VISIT(traverse_module_state->__pyx_n_s_build_chrono_purchased_pairs); + Py_VISIT(traverse_module_state->__pyx_n_s_build_data); + Py_VISIT(traverse_module_state->__pyx_n_s_build_item_quality_matrix); + Py_VISIT(traverse_module_state->__pyx_n_s_c); + Py_VISIT(traverse_module_state->__pyx_n_u_c); + Py_VISIT(traverse_module_state->__pyx_n_s_chrono_purchased_pairs); + Py_VISIT(traverse_module_state->__pyx_n_s_chrono_user_data); + Py_VISIT(traverse_module_state->__pyx_n_s_class); + Py_VISIT(traverse_module_state->__pyx_n_s_class_getitem); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_collections); + Py_VISIT(traverse_module_state->__pyx_kp_s_collections_abc); + Py_VISIT(traverse_module_state->__pyx_n_s_combinations); + Py_VISIT(traverse_module_state->__pyx_n_s_common_aspect_counts); + Py_VISIT(traverse_module_state->__pyx_kp_u_comparable_pairs); + Py_VISIT(traverse_module_state->__pyx_n_s_compute_attention_score); + Py_VISIT(traverse_module_state->__pyx_n_s_compute_quality_score); + Py_VISIT(traverse_module_state->__pyx_kp_s_contiguous_and_direct); + Py_VISIT(traverse_module_state->__pyx_kp_s_contiguous_and_indirect); + Py_VISIT(traverse_module_state->__pyx_n_s_cornac_models_comparer_recom_com); + Py_VISIT(traverse_module_state->__pyx_kp_s_cornac_models_comparer_recom_com_2); + Py_VISIT(traverse_module_state->__pyx_n_s_correct); + Py_VISIT(traverse_module_state->__pyx_n_u_correct); + Py_VISIT(traverse_module_state->__pyx_n_s_count); + Py_VISIT(traverse_module_state->__pyx_n_s_counted_pairs); + Py_VISIT(traverse_module_state->__pyx_n_s_csr_matrix); + Py_VISIT(traverse_module_state->__pyx_n_u_d); + Py_VISIT(traverse_module_state->__pyx_n_s_data_set); + Py_VISIT(traverse_module_state->__pyx_n_s_defaults); + Py_VISIT(traverse_module_state->__pyx_n_s_del_a); + Py_VISIT(traverse_module_state->__pyx_n_s_del_a_reg); + Py_VISIT(traverse_module_state->__pyx_n_s_del_aspect_bpr); + Py_VISIT(traverse_module_state->__pyx_n_s_del_bpr); + Py_VISIT(traverse_module_state->__pyx_n_s_del_g1); + Py_VISIT(traverse_module_state->__pyx_n_s_del_g1_reg); + Py_VISIT(traverse_module_state->__pyx_n_s_del_g2); + Py_VISIT(traverse_module_state->__pyx_n_s_del_g2_reg); + Py_VISIT(traverse_module_state->__pyx_n_s_del_g3); + Py_VISIT(traverse_module_state->__pyx_n_s_del_g3_reg); + Py_VISIT(traverse_module_state->__pyx_n_s_del_i); + Py_VISIT(traverse_module_state->__pyx_n_s_del_i_reg); + Py_VISIT(traverse_module_state->__pyx_n_s_del_o); + Py_VISIT(traverse_module_state->__pyx_n_s_del_o_reg); + Py_VISIT(traverse_module_state->__pyx_n_s_del_sqerror); + Py_VISIT(traverse_module_state->__pyx_n_s_del_u); + Py_VISIT(traverse_module_state->__pyx_n_s_del_u_reg); + Py_VISIT(traverse_module_state->__pyx_n_s_desc); + Py_VISIT(traverse_module_state->__pyx_n_s_dict); + Py_VISIT(traverse_module_state->__pyx_n_s_disable); + Py_VISIT(traverse_module_state->__pyx_kp_u_disable); + Py_VISIT(traverse_module_state->__pyx_n_s_doc); + Py_VISIT(traverse_module_state->__pyx_n_s_double); + Py_VISIT(traverse_module_state->__pyx_kp_s_double_int); + Py_VISIT(traverse_module_state->__pyx_kp_s_double_long); + Py_VISIT(traverse_module_state->__pyx_kp_s_double_short); + Py_VISIT(traverse_module_state->__pyx_n_s_dtype); + Py_VISIT(traverse_module_state->__pyx_n_s_dtype_is_object); + Py_VISIT(traverse_module_state->__pyx_n_s_earlier_indices); + Py_VISIT(traverse_module_state->__pyx_n_s_earlier_item_idx); + Py_VISIT(traverse_module_state->__pyx_kp_u_earlier_later_pairs); + Py_VISIT(traverse_module_state->__pyx_n_s_ediff1d); + Py_VISIT(traverse_module_state->__pyx_n_s_einsum); + Py_VISIT(traverse_module_state->__pyx_kp_u_enable); + Py_VISIT(traverse_module_state->__pyx_n_s_encode); + Py_VISIT(traverse_module_state->__pyx_n_s_enter); + Py_VISIT(traverse_module_state->__pyx_n_s_enum_window); + Py_VISIT(traverse_module_state->__pyx_n_s_enumerate); + Py_VISIT(traverse_module_state->__pyx_n_s_epoch); + Py_VISIT(traverse_module_state->__pyx_n_s_eps); + Py_VISIT(traverse_module_state->__pyx_n_s_error); + Py_VISIT(traverse_module_state->__pyx_n_s_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_exit); + Py_VISIT(traverse_module_state->__pyx_n_s_fill); + Py_VISIT(traverse_module_state->__pyx_n_s_fit); + Py_VISIT(traverse_module_state->__pyx_n_s_fit_mter); + Py_VISIT(traverse_module_state->__pyx_n_s_flags); + Py_VISIT(traverse_module_state->__pyx_n_s_flatten); + Py_VISIT(traverse_module_state->__pyx_n_s_float); + Py_VISIT(traverse_module_state->__pyx_n_s_float32); + Py_VISIT(traverse_module_state->__pyx_n_s_float64); + Py_VISIT(traverse_module_state->__pyx_kp_s_float_int); + Py_VISIT(traverse_module_state->__pyx_kp_s_float_long); + Py_VISIT(traverse_module_state->__pyx_kp_s_float_short); + Py_VISIT(traverse_module_state->__pyx_n_s_format); + Py_VISIT(traverse_module_state->__pyx_n_s_fortran); + Py_VISIT(traverse_module_state->__pyx_n_u_fortran); + Py_VISIT(traverse_module_state->__pyx_n_s_fused_sigindex); + Py_VISIT(traverse_module_state->__pyx_kp_u_gc); + Py_VISIT(traverse_module_state->__pyx_n_s_get); + Py_VISIT(traverse_module_state->__pyx_n_s_get_rng); + Py_VISIT(traverse_module_state->__pyx_n_s_getstate); + Py_VISIT(traverse_module_state->__pyx_kp_u_got); + Py_VISIT(traverse_module_state->__pyx_kp_u_got_differing_extents_in_dimensi); + Py_VISIT(traverse_module_state->__pyx_n_s_i); + Py_VISIT(traverse_module_state->__pyx_n_s_i_idx); + Py_VISIT(traverse_module_state->__pyx_n_s_i_ij); + Py_VISIT(traverse_module_state->__pyx_n_s_i_index); + Py_VISIT(traverse_module_state->__pyx_n_s_i_indices); + Py_VISIT(traverse_module_state->__pyx_n_s_i_score); + Py_VISIT(traverse_module_state->__pyx_n_s_id); + Py_VISIT(traverse_module_state->__pyx_n_s_idx); + Py_VISIT(traverse_module_state->__pyx_n_s_iid); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_index); + Py_VISIT(traverse_module_state->__pyx_n_s_indices); + Py_VISIT(traverse_module_state->__pyx_n_s_indptr); + Py_VISIT(traverse_module_state->__pyx_n_s_init); + Py_VISIT(traverse_module_state->__pyx_n_s_init_2); + Py_VISIT(traverse_module_state->__pyx_n_s_init_params); + Py_VISIT(traverse_module_state->__pyx_n_s_init_subclass); + Py_VISIT(traverse_module_state->__pyx_n_s_initializing); + Py_VISIT(traverse_module_state->__pyx_n_s_int); + Py_VISIT(traverse_module_state->__pyx_n_s_int32); + Py_VISIT(traverse_module_state->__pyx_n_s_intp); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_n_s_is_unk_item); + Py_VISIT(traverse_module_state->__pyx_n_s_is_unk_user); + Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled); + Py_VISIT(traverse_module_state->__pyx_n_s_item_aspect_count); + Py_VISIT(traverse_module_state->__pyx_n_s_item_aspect_opinion); + Py_VISIT(traverse_module_state->__pyx_n_s_item_aspects); + Py_VISIT(traverse_module_state->__pyx_n_s_item_ids); + Py_VISIT(traverse_module_state->__pyx_n_s_item_indices); + Py_VISIT(traverse_module_state->__pyx_n_s_item_rank); + Py_VISIT(traverse_module_state->__pyx_n_s_item_scores); + Py_VISIT(traverse_module_state->__pyx_n_s_item_sentiment); + Py_VISIT(traverse_module_state->__pyx_n_s_items); + Py_VISIT(traverse_module_state->__pyx_n_s_itemsize); + Py_VISIT(traverse_module_state->__pyx_kp_s_itemsize_0_for_cython_array); + Py_VISIT(traverse_module_state->__pyx_n_s_itertools); + Py_VISIT(traverse_module_state->__pyx_n_s_j); + Py_VISIT(traverse_module_state->__pyx_n_s_j_idx); + Py_VISIT(traverse_module_state->__pyx_n_s_j_index); + Py_VISIT(traverse_module_state->__pyx_n_s_j_score); + Py_VISIT(traverse_module_state->__pyx_n_s_jdx); + Py_VISIT(traverse_module_state->__pyx_n_s_k); + Py_VISIT(traverse_module_state->__pyx_n_s_key); + Py_VISIT(traverse_module_state->__pyx_n_s_keys); + Py_VISIT(traverse_module_state->__pyx_n_s_kind); + Py_VISIT(traverse_module_state->__pyx_n_s_known_item_scores); + Py_VISIT(traverse_module_state->__pyx_n_s_kwargs); + Py_VISIT(traverse_module_state->__pyx_n_s_lambda_bpr); + Py_VISIT(traverse_module_state->__pyx_n_s_lambda_d); + Py_VISIT(traverse_module_state->__pyx_n_s_lambda_reg); + Py_VISIT(traverse_module_state->__pyx_n_s_later_indices); + Py_VISIT(traverse_module_state->__pyx_n_s_later_item_idx); + Py_VISIT(traverse_module_state->__pyx_n_s_ld_bpr); + Py_VISIT(traverse_module_state->__pyx_n_s_ld_reg); + Py_VISIT(traverse_module_state->__pyx_n_s_long); + Py_VISIT(traverse_module_state->__pyx_n_s_loss); + Py_VISIT(traverse_module_state->__pyx_n_u_loss); + Py_VISIT(traverse_module_state->__pyx_n_s_lr); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_map_aspect_id); + Py_VISIT(traverse_module_state->__pyx_n_s_map_iid); + Py_VISIT(traverse_module_state->__pyx_kp_u_max); + Py_VISIT(traverse_module_state->__pyx_n_s_max_2); + Py_VISIT(traverse_module_state->__pyx_n_s_max_iter); + Py_VISIT(traverse_module_state->__pyx_n_s_mean); + Py_VISIT(traverse_module_state->__pyx_n_s_memview); + Py_VISIT(traverse_module_state->__pyx_n_s_metaclass); + Py_VISIT(traverse_module_state->__pyx_kp_u_min); + Py_VISIT(traverse_module_state->__pyx_n_s_min_2); + Py_VISIT(traverse_module_state->__pyx_n_s_min_common_freq); + Py_VISIT(traverse_module_state->__pyx_n_s_min_pair_freq); + Py_VISIT(traverse_module_state->__pyx_n_s_min_user_freq); + Py_VISIT(traverse_module_state->__pyx_n_s_mode); + Py_VISIT(traverse_module_state->__pyx_n_s_module); + Py_VISIT(traverse_module_state->__pyx_n_s_most_common); + Py_VISIT(traverse_module_state->__pyx_n_s_mp); + Py_VISIT(traverse_module_state->__pyx_n_s_mro_entries); + Py_VISIT(traverse_module_state->__pyx_n_s_mter); + Py_VISIT(traverse_module_state->__pyx_n_s_multiprocessing); + Py_VISIT(traverse_module_state->__pyx_n_s_n_aspect_factors); + Py_VISIT(traverse_module_state->__pyx_n_s_n_aspects); + Py_VISIT(traverse_module_state->__pyx_n_s_n_bpr_samples); + Py_VISIT(traverse_module_state->__pyx_n_s_n_element_samples); + Py_VISIT(traverse_module_state->__pyx_n_s_n_item_factors); + Py_VISIT(traverse_module_state->__pyx_n_s_n_items); + Py_VISIT(traverse_module_state->__pyx_n_s_n_opinion_factors); + Py_VISIT(traverse_module_state->__pyx_n_s_n_opinions); + Py_VISIT(traverse_module_state->__pyx_n_s_n_pair_samples); + Py_VISIT(traverse_module_state->__pyx_n_s_n_threads); + Py_VISIT(traverse_module_state->__pyx_n_s_n_top_aspects); + Py_VISIT(traverse_module_state->__pyx_n_s_n_user_factors); + Py_VISIT(traverse_module_state->__pyx_n_s_n_users); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_s_name_2); + Py_VISIT(traverse_module_state->__pyx_n_s_ndim); + Py_VISIT(traverse_module_state->__pyx_n_s_neg_item_ids); + Py_VISIT(traverse_module_state->__pyx_n_s_new); + Py_VISIT(traverse_module_state->__pyx_kp_s_no_default___reduce___due_to_non); + Py_VISIT(traverse_module_state->__pyx_kp_u_not_dominated_pairs); + Py_VISIT(traverse_module_state->__pyx_n_s_not_dominated_pairs_2); + Py_VISIT(traverse_module_state->__pyx_n_s_np); + Py_VISIT(traverse_module_state->__pyx_n_s_num_aspects); + Py_VISIT(traverse_module_state->__pyx_n_s_num_bpr_samples); + Py_VISIT(traverse_module_state->__pyx_n_s_num_items); + Py_VISIT(traverse_module_state->__pyx_n_s_num_opinions); + Py_VISIT(traverse_module_state->__pyx_n_s_num_pair_samples); + Py_VISIT(traverse_module_state->__pyx_n_s_num_samples); + Py_VISIT(traverse_module_state->__pyx_n_s_num_users); + Py_VISIT(traverse_module_state->__pyx_n_s_numpy); + Py_VISIT(traverse_module_state->__pyx_kp_u_numpy_core_multiarray_failed_to); + Py_VISIT(traverse_module_state->__pyx_kp_u_numpy_core_umath_failed_to_impor); + Py_VISIT(traverse_module_state->__pyx_n_s_o_idx); + Py_VISIT(traverse_module_state->__pyx_n_s_obj); + Py_VISIT(traverse_module_state->__pyx_n_s_oid); + Py_VISIT(traverse_module_state->__pyx_n_s_ones); + Py_VISIT(traverse_module_state->__pyx_n_s_p_user_indices); + Py_VISIT(traverse_module_state->__pyx_n_s_pack); + Py_VISIT(traverse_module_state->__pyx_n_s_pair_counts); + Py_VISIT(traverse_module_state->__pyx_n_s_pair_freq); + Py_VISIT(traverse_module_state->__pyx_n_s_pickle); + Py_VISIT(traverse_module_state->__pyx_n_s_polarity); + Py_VISIT(traverse_module_state->__pyx_n_s_pred); + Py_VISIT(traverse_module_state->__pyx_n_s_prepare); + Py_VISIT(traverse_module_state->__pyx_n_s_print); + Py_VISIT(traverse_module_state->__pyx_n_s_progress); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_PickleError); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_checksum); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_result); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_state); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_type); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_Enum); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_vtable); + Py_VISIT(traverse_module_state->__pyx_n_s_quality_scores); + Py_VISIT(traverse_module_state->__pyx_n_s_qualname); + Py_VISIT(traverse_module_state->__pyx_n_s_r_values); + Py_VISIT(traverse_module_state->__pyx_n_s_randint); + Py_VISIT(traverse_module_state->__pyx_n_s_range); + Py_VISIT(traverse_module_state->__pyx_n_s_rank); + Py_VISIT(traverse_module_state->__pyx_n_s_rating_dict); + Py_VISIT(traverse_module_state->__pyx_n_s_rating_matrix); + Py_VISIT(traverse_module_state->__pyx_n_s_rating_scale); + Py_VISIT(traverse_module_state->__pyx_n_s_recommender); + Py_VISIT(traverse_module_state->__pyx_n_s_reduce); + Py_VISIT(traverse_module_state->__pyx_n_s_reduce_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_reduce_ex); + Py_VISIT(traverse_module_state->__pyx_n_s_register); + Py_VISIT(traverse_module_state->__pyx_n_s_repeat); + Py_VISIT(traverse_module_state->__pyx_n_s_reshape); + Py_VISIT(traverse_module_state->__pyx_n_s_rng); + Py_VISIT(traverse_module_state->__pyx_n_s_rng_neg); + Py_VISIT(traverse_module_state->__pyx_n_s_rng_pos); + Py_VISIT(traverse_module_state->__pyx_n_s_rng_pos_iao); + Py_VISIT(traverse_module_state->__pyx_n_s_rng_pos_pair); + Py_VISIT(traverse_module_state->__pyx_n_s_rng_pos_uao); + Py_VISIT(traverse_module_state->__pyx_n_s_rng_pos_uia); + Py_VISIT(traverse_module_state->__pyx_n_s_s); + Py_VISIT(traverse_module_state->__pyx_n_s_scipy); + Py_VISIT(traverse_module_state->__pyx_n_s_scipy_sparse); + Py_VISIT(traverse_module_state->__pyx_n_s_score); + Py_VISIT(traverse_module_state->__pyx_n_s_seed); + Py_VISIT(traverse_module_state->__pyx_n_s_self); + Py_VISIT(traverse_module_state->__pyx_n_s_sentiment); + Py_VISIT(traverse_module_state->__pyx_n_s_sentiment_polarity); + Py_VISIT(traverse_module_state->__pyx_n_s_sentiment_tup_ids_by_item); + Py_VISIT(traverse_module_state->__pyx_n_s_sentiment_tup_ids_by_user); + Py_VISIT(traverse_module_state->__pyx_n_s_set_name); + Py_VISIT(traverse_module_state->__pyx_n_s_set_postfix); + Py_VISIT(traverse_module_state->__pyx_n_s_setstate); + Py_VISIT(traverse_module_state->__pyx_n_s_setstate_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_sgrad_A); + Py_VISIT(traverse_module_state->__pyx_n_s_sgrad_G1); + Py_VISIT(traverse_module_state->__pyx_n_s_sgrad_G2); + Py_VISIT(traverse_module_state->__pyx_n_s_sgrad_G3); + Py_VISIT(traverse_module_state->__pyx_n_s_sgrad_I); + Py_VISIT(traverse_module_state->__pyx_n_s_sgrad_O); + Py_VISIT(traverse_module_state->__pyx_n_s_sgrad_U); + Py_VISIT(traverse_module_state->__pyx_n_s_shape); + Py_VISIT(traverse_module_state->__pyx_n_s_short); + Py_VISIT(traverse_module_state->__pyx_n_s_signatures); + Py_VISIT(traverse_module_state->__pyx_n_s_size); + Py_VISIT(traverse_module_state->__pyx_n_s_skipped); + Py_VISIT(traverse_module_state->__pyx_n_u_skipped); + Py_VISIT(traverse_module_state->__pyx_n_s_sp); + Py_VISIT(traverse_module_state->__pyx_n_s_sparse); + Py_VISIT(traverse_module_state->__pyx_n_s_spec); + Py_VISIT(traverse_module_state->__pyx_n_s_split); + Py_VISIT(traverse_module_state->__pyx_n_s_start); + Py_VISIT(traverse_module_state->__pyx_n_s_start_time); + Py_VISIT(traverse_module_state->__pyx_n_s_step); + Py_VISIT(traverse_module_state->__pyx_n_s_stop); + Py_VISIT(traverse_module_state->__pyx_kp_s_strided_and_direct); + Py_VISIT(traverse_module_state->__pyx_kp_s_strided_and_direct_or_indirect); + Py_VISIT(traverse_module_state->__pyx_kp_s_strided_and_indirect); + Py_VISIT(traverse_module_state->__pyx_kp_s_stringsource); + Py_VISIT(traverse_module_state->__pyx_n_s_strip); + Py_VISIT(traverse_module_state->__pyx_n_s_struct); + Py_VISIT(traverse_module_state->__pyx_n_s_sub_item_ids); + Py_VISIT(traverse_module_state->__pyx_n_s_sum); + Py_VISIT(traverse_module_state->__pyx_n_s_super); + Py_VISIT(traverse_module_state->__pyx_n_s_sys); + Py_VISIT(traverse_module_state->__pyx_n_s_temp); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_thread_id); + Py_VISIT(traverse_module_state->__pyx_n_s_time); + Py_VISIT(traverse_module_state->__pyx_n_s_top_aspect_scores); + Py_VISIT(traverse_module_state->__pyx_n_s_total_items); + Py_VISIT(traverse_module_state->__pyx_n_s_total_sentiment); + Py_VISIT(traverse_module_state->__pyx_n_s_total_sentiment_by_aspect); + Py_VISIT(traverse_module_state->__pyx_n_s_total_time); + Py_VISIT(traverse_module_state->__pyx_n_s_tqdm); + Py_VISIT(traverse_module_state->__pyx_n_s_train_set); + Py_VISIT(traverse_module_state->__pyx_n_s_trainable); + Py_VISIT(traverse_module_state->__pyx_n_s_trange); + Py_VISIT(traverse_module_state->__pyx_n_s_ts1); + Py_VISIT(traverse_module_state->__pyx_n_s_ts2); + Py_VISIT(traverse_module_state->__pyx_n_s_ts3); + Py_VISIT(traverse_module_state->__pyx_n_s_tup); + Py_VISIT(traverse_module_state->__pyx_n_s_tup_id); + Py_VISIT(traverse_module_state->__pyx_n_s_tup_idx); + Py_VISIT(traverse_module_state->__pyx_n_s_u); + Py_VISIT(traverse_module_state->__pyx_n_s_u_idx); + Py_VISIT(traverse_module_state->__pyx_n_s_u_indices); + Py_VISIT(traverse_module_state->__pyx_n_s_uid); + Py_VISIT(traverse_module_state->__pyx_n_s_uir_tuple); + Py_VISIT(traverse_module_state->__pyx_kp_s_unable_to_allocate_array_data); + Py_VISIT(traverse_module_state->__pyx_kp_s_unable_to_allocate_shape_and_str); + Py_VISIT(traverse_module_state->__pyx_n_s_uniform); + Py_VISIT(traverse_module_state->__pyx_kp_u_unique_earlier_later_pairs); + Py_VISIT(traverse_module_state->__pyx_n_s_unpack); + Py_VISIT(traverse_module_state->__pyx_n_s_update); + Py_VISIT(traverse_module_state->__pyx_n_s_use_item_aspect_popularity); + Py_VISIT(traverse_module_state->__pyx_n_s_user_aspect_opinion); + Py_VISIT(traverse_module_state->__pyx_n_s_user_counts); + Py_VISIT(traverse_module_state->__pyx_n_s_user_ids); + Py_VISIT(traverse_module_state->__pyx_n_s_user_idx); + Py_VISIT(traverse_module_state->__pyx_n_s_user_indices); + Py_VISIT(traverse_module_state->__pyx_n_s_user_item_aspect); + Py_VISIT(traverse_module_state->__pyx_n_s_user_sentiment); + Py_VISIT(traverse_module_state->__pyx_n_s_utils); + Py_VISIT(traverse_module_state->__pyx_n_s_utils_init_utils); + Py_VISIT(traverse_module_state->__pyx_n_s_val_set); + Py_VISIT(traverse_module_state->__pyx_n_s_values); + Py_VISIT(traverse_module_state->__pyx_n_s_verbose); + Py_VISIT(traverse_module_state->__pyx_n_s_version_info); + Py_VISIT(traverse_module_state->__pyx_n_s_window); + Py_VISIT(traverse_module_state->__pyx_n_s_z); + Py_VISIT(traverse_module_state->__pyx_n_s_zeros_like); + Py_VISIT(traverse_module_state->__pyx_n_s_zip); + Py_VISIT(traverse_module_state->__pyx_float_0_1); + Py_VISIT(traverse_module_state->__pyx_float_0_5); + Py_VISIT(traverse_module_state->__pyx_float_5_0); + Py_VISIT(traverse_module_state->__pyx_float_0_01); + Py_VISIT(traverse_module_state->__pyx_float_100_0); + Py_VISIT(traverse_module_state->__pyx_int_0); + Py_VISIT(traverse_module_state->__pyx_int_1); + Py_VISIT(traverse_module_state->__pyx_int_2); + Py_VISIT(traverse_module_state->__pyx_int_3); + Py_VISIT(traverse_module_state->__pyx_int_8); + Py_VISIT(traverse_module_state->__pyx_int_10); + Py_VISIT(traverse_module_state->__pyx_int_50); + Py_VISIT(traverse_module_state->__pyx_int_58); + Py_VISIT(traverse_module_state->__pyx_int_100); + Py_VISIT(traverse_module_state->__pyx_int_1000); + Py_VISIT(traverse_module_state->__pyx_int_200000); + Py_VISIT(traverse_module_state->__pyx_int_112105877); + Py_VISIT(traverse_module_state->__pyx_int_136983863); + Py_VISIT(traverse_module_state->__pyx_int_184977713); + Py_VISIT(traverse_module_state->__pyx_int_2147483648); + Py_VISIT(traverse_module_state->__pyx_int_neg_1); + Py_VISIT(traverse_module_state->__pyx_slice__5); + Py_VISIT(traverse_module_state->__pyx_tuple__4); + Py_VISIT(traverse_module_state->__pyx_tuple__8); + Py_VISIT(traverse_module_state->__pyx_tuple__9); + Py_VISIT(traverse_module_state->__pyx_slice__19); + Py_VISIT(traverse_module_state->__pyx_slice__21); + Py_VISIT(traverse_module_state->__pyx_tuple__10); + Py_VISIT(traverse_module_state->__pyx_tuple__11); + Py_VISIT(traverse_module_state->__pyx_tuple__13); + Py_VISIT(traverse_module_state->__pyx_tuple__14); + Py_VISIT(traverse_module_state->__pyx_tuple__17); + Py_VISIT(traverse_module_state->__pyx_tuple__18); + Py_VISIT(traverse_module_state->__pyx_tuple__20); + Py_VISIT(traverse_module_state->__pyx_tuple__22); + Py_VISIT(traverse_module_state->__pyx_tuple__23); + Py_VISIT(traverse_module_state->__pyx_tuple__24); + Py_VISIT(traverse_module_state->__pyx_tuple__25); + Py_VISIT(traverse_module_state->__pyx_tuple__26); + Py_VISIT(traverse_module_state->__pyx_tuple__27); + Py_VISIT(traverse_module_state->__pyx_tuple__28); + Py_VISIT(traverse_module_state->__pyx_tuple__29); + Py_VISIT(traverse_module_state->__pyx_tuple__30); + Py_VISIT(traverse_module_state->__pyx_tuple__31); + Py_VISIT(traverse_module_state->__pyx_tuple__32); + Py_VISIT(traverse_module_state->__pyx_tuple__34); + Py_VISIT(traverse_module_state->__pyx_tuple__35); + Py_VISIT(traverse_module_state->__pyx_tuple__37); + Py_VISIT(traverse_module_state->__pyx_tuple__39); + Py_VISIT(traverse_module_state->__pyx_tuple__41); + Py_VISIT(traverse_module_state->__pyx_tuple__43); + Py_VISIT(traverse_module_state->__pyx_tuple__45); + Py_VISIT(traverse_module_state->__pyx_tuple__47); + Py_VISIT(traverse_module_state->__pyx_tuple__48); + Py_VISIT(traverse_module_state->__pyx_tuple__50); + Py_VISIT(traverse_module_state->__pyx_tuple__52); + Py_VISIT(traverse_module_state->__pyx_codeobj__33); + Py_VISIT(traverse_module_state->__pyx_codeobj__36); + Py_VISIT(traverse_module_state->__pyx_codeobj__40); + Py_VISIT(traverse_module_state->__pyx_codeobj__42); + Py_VISIT(traverse_module_state->__pyx_codeobj__44); + Py_VISIT(traverse_module_state->__pyx_codeobj__46); + Py_VISIT(traverse_module_state->__pyx_codeobj__49); + Py_VISIT(traverse_module_state->__pyx_codeobj__51); + return 0; +} +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_7cpython_4type_type __pyx_mstate_global->__pyx_ptype_7cpython_4type_type +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_5numpy_dtype __pyx_mstate_global->__pyx_ptype_5numpy_dtype +#define __pyx_ptype_5numpy_flatiter __pyx_mstate_global->__pyx_ptype_5numpy_flatiter +#define __pyx_ptype_5numpy_broadcast __pyx_mstate_global->__pyx_ptype_5numpy_broadcast +#define __pyx_ptype_5numpy_ndarray __pyx_mstate_global->__pyx_ptype_5numpy_ndarray +#define __pyx_ptype_5numpy_generic __pyx_mstate_global->__pyx_ptype_5numpy_generic +#define __pyx_ptype_5numpy_number __pyx_mstate_global->__pyx_ptype_5numpy_number +#define __pyx_ptype_5numpy_integer __pyx_mstate_global->__pyx_ptype_5numpy_integer +#define __pyx_ptype_5numpy_signedinteger __pyx_mstate_global->__pyx_ptype_5numpy_signedinteger +#define __pyx_ptype_5numpy_unsignedinteger __pyx_mstate_global->__pyx_ptype_5numpy_unsignedinteger +#define __pyx_ptype_5numpy_inexact __pyx_mstate_global->__pyx_ptype_5numpy_inexact +#define __pyx_ptype_5numpy_floating __pyx_mstate_global->__pyx_ptype_5numpy_floating +#define __pyx_ptype_5numpy_complexfloating __pyx_mstate_global->__pyx_ptype_5numpy_complexfloating +#define __pyx_ptype_5numpy_flexible __pyx_mstate_global->__pyx_ptype_5numpy_flexible +#define __pyx_ptype_5numpy_character __pyx_mstate_global->__pyx_ptype_5numpy_character +#define __pyx_ptype_5numpy_ufunc __pyx_mstate_global->__pyx_ptype_5numpy_ufunc +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict __pyx_mstate_global->__pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector __pyx_mstate_global->__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#define __pyx_type___pyx_array __pyx_mstate_global->__pyx_type___pyx_array +#define __pyx_type___pyx_MemviewEnum __pyx_mstate_global->__pyx_type___pyx_MemviewEnum +#define __pyx_type___pyx_memoryview __pyx_mstate_global->__pyx_type___pyx_memoryview +#define __pyx_type___pyx_memoryviewslice __pyx_mstate_global->__pyx_type___pyx_memoryviewslice +#endif +#define __pyx_array_type __pyx_mstate_global->__pyx_array_type +#define __pyx_MemviewEnum_type __pyx_mstate_global->__pyx_MemviewEnum_type +#define __pyx_memoryview_type __pyx_mstate_global->__pyx_memoryview_type +#define __pyx_memoryviewslice_type __pyx_mstate_global->__pyx_memoryviewslice_type +#define __pyx_kp_u_ __pyx_mstate_global->__pyx_kp_u_ +#define __pyx_kp_u_2f __pyx_mstate_global->__pyx_kp_u_2f +#define __pyx_kp_u_2f_2 __pyx_mstate_global->__pyx_kp_u_2f_2 +#define __pyx_kp_u_2f_3 __pyx_mstate_global->__pyx_kp_u_2f_3 +#define __pyx_n_s_A __pyx_mstate_global->__pyx_n_s_A +#define __pyx_n_s_ASCII __pyx_mstate_global->__pyx_n_s_ASCII +#define __pyx_kp_s_All_dimensions_preceding_dimensi __pyx_mstate_global->__pyx_kp_s_All_dimensions_preceding_dimensi +#define __pyx_n_s_AssertionError __pyx_mstate_global->__pyx_n_s_AssertionError +#define __pyx_kp_s_Buffer_view_does_not_expose_stri __pyx_mstate_global->__pyx_kp_s_Buffer_view_does_not_expose_stri +#define __pyx_kp_u_Building_chrono_purchared_items __pyx_mstate_global->__pyx_kp_u_Building_chrono_purchared_items +#define __pyx_kp_u_Building_data_completed_in_d_s __pyx_mstate_global->__pyx_kp_u_Building_data_completed_in_d_s +#define __pyx_kp_u_Building_data_started __pyx_mstate_global->__pyx_kp_u_Building_data_started +#define __pyx_kp_u_Building_item_aspect_quality_mat __pyx_mstate_global->__pyx_kp_u_Building_item_aspect_quality_mat +#define __pyx_kp_s_Can_only_create_a_buffer_that_is __pyx_mstate_global->__pyx_kp_s_Can_only_create_a_buffer_that_is +#define __pyx_kp_s_Cannot_assign_to_read_only_memor __pyx_mstate_global->__pyx_kp_s_Cannot_assign_to_read_only_memor +#define __pyx_kp_s_Cannot_create_writable_memory_vi __pyx_mstate_global->__pyx_kp_s_Cannot_create_writable_memory_vi +#define __pyx_kp_u_Cannot_index_with_type __pyx_mstate_global->__pyx_kp_u_Cannot_index_with_type +#define __pyx_kp_s_Cannot_transpose_memoryview_with __pyx_mstate_global->__pyx_kp_s_Cannot_transpose_memoryview_with +#define __pyx_n_s_ComparERSub __pyx_mstate_global->__pyx_n_s_ComparERSub +#define __pyx_n_u_ComparERSub __pyx_mstate_global->__pyx_n_u_ComparERSub +#define __pyx_n_s_ComparERSub___init __pyx_mstate_global->__pyx_n_s_ComparERSub___init +#define __pyx_n_s_ComparERSub__build_chrono_purcha __pyx_mstate_global->__pyx_n_s_ComparERSub__build_chrono_purcha +#define __pyx_n_s_ComparERSub__build_data __pyx_mstate_global->__pyx_n_s_ComparERSub__build_data +#define __pyx_n_s_ComparERSub__build_item_quality __pyx_mstate_global->__pyx_n_s_ComparERSub__build_item_quality +#define __pyx_n_s_ComparERSub__fit_mter __pyx_mstate_global->__pyx_n_s_ComparERSub__fit_mter +#define __pyx_n_s_ComparERSub_fit __pyx_mstate_global->__pyx_n_s_ComparERSub_fit +#define __pyx_n_s_ComparERSub_rank __pyx_mstate_global->__pyx_n_s_ComparERSub_rank +#define __pyx_kp_u_Compute_X __pyx_mstate_global->__pyx_kp_u_Compute_X +#define __pyx_kp_u_Compute_YI __pyx_mstate_global->__pyx_kp_u_Compute_YI +#define __pyx_kp_u_Compute_YU __pyx_mstate_global->__pyx_kp_u_Compute_YU +#define __pyx_kp_u_Count_aspects __pyx_mstate_global->__pyx_kp_u_Count_aspects +#define __pyx_n_s_Counter __pyx_mstate_global->__pyx_n_s_Counter +#define __pyx_kp_s_Dimension_d_is_not_direct __pyx_mstate_global->__pyx_kp_s_Dimension_d_is_not_direct +#define __pyx_n_s_Ellipsis __pyx_mstate_global->__pyx_n_s_Ellipsis +#define __pyx_kp_s_Empty_shape_tuple_for_cython_arr __pyx_mstate_global->__pyx_kp_s_Empty_shape_tuple_for_cython_arr +#define __pyx_kp_u_Enumerate_index __pyx_mstate_global->__pyx_kp_u_Enumerate_index +#define __pyx_kp_s_Expected_at_least_d_argument_s_g __pyx_mstate_global->__pyx_kp_s_Expected_at_least_d_argument_s_g +#define __pyx_kp_s_Explainable_Recommendation_with __pyx_mstate_global->__pyx_kp_s_Explainable_Recommendation_with +#define __pyx_kp_s_Function_call_with_ambiguous_arg __pyx_mstate_global->__pyx_kp_s_Function_call_with_ambiguous_arg +#define __pyx_n_s_G1 __pyx_mstate_global->__pyx_n_s_G1 +#define __pyx_n_s_G2 __pyx_mstate_global->__pyx_n_s_G2 +#define __pyx_n_s_G3 __pyx_mstate_global->__pyx_n_s_G3 +#define __pyx_kp_u_Get_purchased_pairs __pyx_mstate_global->__pyx_kp_u_Get_purchased_pairs +#define __pyx_kp_u_Get_skyline_aspects __pyx_mstate_global->__pyx_kp_u_Get_skyline_aspects +#define __pyx_n_s_I __pyx_mstate_global->__pyx_n_s_I +#define __pyx_n_s_ImportError __pyx_mstate_global->__pyx_n_s_ImportError +#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0 +#define __pyx_n_s_IndexError __pyx_mstate_global->__pyx_n_s_IndexError +#define __pyx_kp_s_Index_out_of_bounds_axis_d __pyx_mstate_global->__pyx_kp_s_Index_out_of_bounds_axis_d +#define __pyx_kp_s_Indirect_dimensions_not_supporte __pyx_mstate_global->__pyx_kp_s_Indirect_dimensions_not_supporte +#define __pyx_kp_u_Invalid_mode_expected_c_or_fortr __pyx_mstate_global->__pyx_kp_u_Invalid_mode_expected_c_or_fortr +#define __pyx_kp_u_Invalid_shape_in_axis __pyx_mstate_global->__pyx_kp_u_Invalid_shape_in_axis +#define __pyx_n_s_MTER __pyx_mstate_global->__pyx_n_s_MTER +#define __pyx_kp_u_Mc_Nc_MN __pyx_mstate_global->__pyx_kp_u_Mc_Nc_MN +#define __pyx_n_s_MemoryError __pyx_mstate_global->__pyx_n_s_MemoryError +#define __pyx_kp_s_MemoryView_of_r_at_0x_x __pyx_mstate_global->__pyx_kp_s_MemoryView_of_r_at_0x_x +#define __pyx_kp_s_MemoryView_of_r_object __pyx_mstate_global->__pyx_kp_s_MemoryView_of_r_object +#define __pyx_kp_s_No_matching_signature_found __pyx_mstate_global->__pyx_kp_s_No_matching_signature_found +#define __pyx_n_b_O __pyx_mstate_global->__pyx_n_b_O +#define __pyx_n_s_O __pyx_mstate_global->__pyx_n_s_O +#define __pyx_kp_u_Optimization_finished __pyx_mstate_global->__pyx_kp_u_Optimization_finished +#define __pyx_n_s_OrderedDict __pyx_mstate_global->__pyx_n_s_OrderedDict +#define __pyx_kp_u_Out_of_bounds_on_buffer_access_a __pyx_mstate_global->__pyx_kp_u_Out_of_bounds_on_buffer_access_a +#define __pyx_n_s_PickleError __pyx_mstate_global->__pyx_n_s_PickleError +#define __pyx_n_s_Recommender __pyx_mstate_global->__pyx_n_s_Recommender +#define __pyx_n_s_ScoreException __pyx_mstate_global->__pyx_n_s_ScoreException +#define __pyx_n_s_Sequence __pyx_mstate_global->__pyx_n_s_Sequence +#define __pyx_kp_u_Statistics_aspect_pairs __pyx_mstate_global->__pyx_kp_u_Statistics_aspect_pairs +#define __pyx_kp_s_Step_may_not_be_zero_axis_d __pyx_mstate_global->__pyx_kp_s_Step_may_not_be_zero_axis_d +#define __pyx_n_s_TypeError __pyx_mstate_global->__pyx_n_s_TypeError +#define __pyx_n_s_U __pyx_mstate_global->__pyx_n_s_U +#define __pyx_kp_s_Unable_to_convert_item_to_object __pyx_mstate_global->__pyx_kp_s_Unable_to_convert_item_to_object +#define __pyx_n_s_ValueError __pyx_mstate_global->__pyx_n_s_ValueError +#define __pyx_n_s_View_MemoryView __pyx_mstate_global->__pyx_n_s_View_MemoryView +#define __pyx_n_s_X __pyx_mstate_global->__pyx_n_s_X +#define __pyx_n_s_X_aids __pyx_mstate_global->__pyx_n_s_X_aids +#define __pyx_n_s_X_iids __pyx_mstate_global->__pyx_n_s_X_iids +#define __pyx_n_s_X_uids __pyx_mstate_global->__pyx_n_s_X_uids +#define __pyx_n_s_Y __pyx_mstate_global->__pyx_n_s_Y +#define __pyx_n_s_YI __pyx_mstate_global->__pyx_n_s_YI +#define __pyx_n_s_YI_aids __pyx_mstate_global->__pyx_n_s_YI_aids +#define __pyx_n_s_YI_iids __pyx_mstate_global->__pyx_n_s_YI_iids +#define __pyx_n_s_YI_oids __pyx_mstate_global->__pyx_n_s_YI_oids +#define __pyx_n_s_YU __pyx_mstate_global->__pyx_n_s_YU +#define __pyx_n_s_YU_aids __pyx_mstate_global->__pyx_n_s_YU_aids +#define __pyx_n_s_YU_oids __pyx_mstate_global->__pyx_n_s_YU_oids +#define __pyx_n_s_YU_uids __pyx_mstate_global->__pyx_n_s_YU_uids +#define __pyx_kp_u__12 __pyx_mstate_global->__pyx_kp_u__12 +#define __pyx_kp_s__15 __pyx_mstate_global->__pyx_kp_s__15 +#define __pyx_kp_s__16 __pyx_mstate_global->__pyx_kp_s__16 +#define __pyx_kp_u__16 __pyx_mstate_global->__pyx_kp_u__16 +#define __pyx_kp_u__2 __pyx_mstate_global->__pyx_kp_u__2 +#define __pyx_n_s__3 __pyx_mstate_global->__pyx_n_s__3 +#define __pyx_n_s__38 __pyx_mstate_global->__pyx_n_s__38 +#define __pyx_n_s__53 __pyx_mstate_global->__pyx_n_s__53 +#define __pyx_kp_u__6 __pyx_mstate_global->__pyx_kp_u__6 +#define __pyx_kp_u__7 __pyx_mstate_global->__pyx_kp_u__7 +#define __pyx_n_s_a_idx __pyx_mstate_global->__pyx_n_s_a_idx +#define __pyx_n_s_a_ji __pyx_mstate_global->__pyx_n_s_a_ji +#define __pyx_n_s_abc __pyx_mstate_global->__pyx_n_s_abc +#define __pyx_kp_u_abc_a_bc __pyx_mstate_global->__pyx_kp_u_abc_a_bc +#define __pyx_n_s_aid __pyx_mstate_global->__pyx_n_s_aid +#define __pyx_n_s_all_item_scores __pyx_mstate_global->__pyx_n_s_all_item_scores +#define __pyx_n_s_allocate_buffer __pyx_mstate_global->__pyx_n_s_allocate_buffer +#define __pyx_n_s_alpha __pyx_mstate_global->__pyx_n_s_alpha +#define __pyx_kp_u_and __pyx_mstate_global->__pyx_kp_u_and +#define __pyx_n_s_append __pyx_mstate_global->__pyx_n_s_append +#define __pyx_n_s_arange __pyx_mstate_global->__pyx_n_s_arange +#define __pyx_n_s_args __pyx_mstate_global->__pyx_n_s_args +#define __pyx_n_s_argsort __pyx_mstate_global->__pyx_n_s_argsort +#define __pyx_n_s_array __pyx_mstate_global->__pyx_n_s_array +#define __pyx_n_s_asarray __pyx_mstate_global->__pyx_n_s_asarray +#define __pyx_n_s_aspect_bpr_loss __pyx_mstate_global->__pyx_n_s_aspect_bpr_loss +#define __pyx_n_s_aspect_correct __pyx_mstate_global->__pyx_n_s_aspect_correct +#define __pyx_n_s_aspect_idx __pyx_mstate_global->__pyx_n_s_aspect_idx +#define __pyx_n_s_aspect_indices __pyx_mstate_global->__pyx_n_s_aspect_indices +#define __pyx_n_s_astype __pyx_mstate_global->__pyx_n_s_astype +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_kp_u_avg __pyx_mstate_global->__pyx_kp_u_avg +#define __pyx_n_s_avg_sentiment __pyx_mstate_global->__pyx_n_s_avg_sentiment +#define __pyx_n_s_axis __pyx_mstate_global->__pyx_n_s_axis +#define __pyx_n_s_base __pyx_mstate_global->__pyx_n_s_base +#define __pyx_kp_u_bc_Mb_Mc __pyx_mstate_global->__pyx_kp_u_bc_Mb_Mc +#define __pyx_n_s_bpr_loss __pyx_mstate_global->__pyx_n_s_bpr_loss +#define __pyx_n_u_bpr_loss __pyx_mstate_global->__pyx_n_u_bpr_loss +#define __pyx_n_s_build_chrono_purchased_pairs __pyx_mstate_global->__pyx_n_s_build_chrono_purchased_pairs +#define __pyx_n_s_build_data __pyx_mstate_global->__pyx_n_s_build_data +#define __pyx_n_s_build_item_quality_matrix __pyx_mstate_global->__pyx_n_s_build_item_quality_matrix +#define __pyx_n_s_c __pyx_mstate_global->__pyx_n_s_c +#define __pyx_n_u_c __pyx_mstate_global->__pyx_n_u_c +#define __pyx_n_s_chrono_purchased_pairs __pyx_mstate_global->__pyx_n_s_chrono_purchased_pairs +#define __pyx_n_s_chrono_user_data __pyx_mstate_global->__pyx_n_s_chrono_user_data +#define __pyx_n_s_class __pyx_mstate_global->__pyx_n_s_class +#define __pyx_n_s_class_getitem __pyx_mstate_global->__pyx_n_s_class_getitem +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_collections __pyx_mstate_global->__pyx_n_s_collections +#define __pyx_kp_s_collections_abc __pyx_mstate_global->__pyx_kp_s_collections_abc +#define __pyx_n_s_combinations __pyx_mstate_global->__pyx_n_s_combinations +#define __pyx_n_s_common_aspect_counts __pyx_mstate_global->__pyx_n_s_common_aspect_counts +#define __pyx_kp_u_comparable_pairs __pyx_mstate_global->__pyx_kp_u_comparable_pairs +#define __pyx_n_s_compute_attention_score __pyx_mstate_global->__pyx_n_s_compute_attention_score +#define __pyx_n_s_compute_quality_score __pyx_mstate_global->__pyx_n_s_compute_quality_score +#define __pyx_kp_s_contiguous_and_direct __pyx_mstate_global->__pyx_kp_s_contiguous_and_direct +#define __pyx_kp_s_contiguous_and_indirect __pyx_mstate_global->__pyx_kp_s_contiguous_and_indirect +#define __pyx_n_s_cornac_models_comparer_recom_com __pyx_mstate_global->__pyx_n_s_cornac_models_comparer_recom_com +#define __pyx_kp_s_cornac_models_comparer_recom_com_2 __pyx_mstate_global->__pyx_kp_s_cornac_models_comparer_recom_com_2 +#define __pyx_n_s_correct __pyx_mstate_global->__pyx_n_s_correct +#define __pyx_n_u_correct __pyx_mstate_global->__pyx_n_u_correct +#define __pyx_n_s_count __pyx_mstate_global->__pyx_n_s_count +#define __pyx_n_s_counted_pairs __pyx_mstate_global->__pyx_n_s_counted_pairs +#define __pyx_n_s_csr_matrix __pyx_mstate_global->__pyx_n_s_csr_matrix +#define __pyx_n_u_d __pyx_mstate_global->__pyx_n_u_d +#define __pyx_n_s_data_set __pyx_mstate_global->__pyx_n_s_data_set +#define __pyx_n_s_defaults __pyx_mstate_global->__pyx_n_s_defaults +#define __pyx_n_s_del_a __pyx_mstate_global->__pyx_n_s_del_a +#define __pyx_n_s_del_a_reg __pyx_mstate_global->__pyx_n_s_del_a_reg +#define __pyx_n_s_del_aspect_bpr __pyx_mstate_global->__pyx_n_s_del_aspect_bpr +#define __pyx_n_s_del_bpr __pyx_mstate_global->__pyx_n_s_del_bpr +#define __pyx_n_s_del_g1 __pyx_mstate_global->__pyx_n_s_del_g1 +#define __pyx_n_s_del_g1_reg __pyx_mstate_global->__pyx_n_s_del_g1_reg +#define __pyx_n_s_del_g2 __pyx_mstate_global->__pyx_n_s_del_g2 +#define __pyx_n_s_del_g2_reg __pyx_mstate_global->__pyx_n_s_del_g2_reg +#define __pyx_n_s_del_g3 __pyx_mstate_global->__pyx_n_s_del_g3 +#define __pyx_n_s_del_g3_reg __pyx_mstate_global->__pyx_n_s_del_g3_reg +#define __pyx_n_s_del_i __pyx_mstate_global->__pyx_n_s_del_i +#define __pyx_n_s_del_i_reg __pyx_mstate_global->__pyx_n_s_del_i_reg +#define __pyx_n_s_del_o __pyx_mstate_global->__pyx_n_s_del_o +#define __pyx_n_s_del_o_reg __pyx_mstate_global->__pyx_n_s_del_o_reg +#define __pyx_n_s_del_sqerror __pyx_mstate_global->__pyx_n_s_del_sqerror +#define __pyx_n_s_del_u __pyx_mstate_global->__pyx_n_s_del_u +#define __pyx_n_s_del_u_reg __pyx_mstate_global->__pyx_n_s_del_u_reg +#define __pyx_n_s_desc __pyx_mstate_global->__pyx_n_s_desc +#define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict +#define __pyx_n_s_disable __pyx_mstate_global->__pyx_n_s_disable +#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable +#define __pyx_n_s_doc __pyx_mstate_global->__pyx_n_s_doc +#define __pyx_n_s_double __pyx_mstate_global->__pyx_n_s_double +#define __pyx_kp_s_double_int __pyx_mstate_global->__pyx_kp_s_double_int +#define __pyx_kp_s_double_long __pyx_mstate_global->__pyx_kp_s_double_long +#define __pyx_kp_s_double_short __pyx_mstate_global->__pyx_kp_s_double_short +#define __pyx_n_s_dtype __pyx_mstate_global->__pyx_n_s_dtype +#define __pyx_n_s_dtype_is_object __pyx_mstate_global->__pyx_n_s_dtype_is_object +#define __pyx_n_s_earlier_indices __pyx_mstate_global->__pyx_n_s_earlier_indices +#define __pyx_n_s_earlier_item_idx __pyx_mstate_global->__pyx_n_s_earlier_item_idx +#define __pyx_kp_u_earlier_later_pairs __pyx_mstate_global->__pyx_kp_u_earlier_later_pairs +#define __pyx_n_s_ediff1d __pyx_mstate_global->__pyx_n_s_ediff1d +#define __pyx_n_s_einsum __pyx_mstate_global->__pyx_n_s_einsum +#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable +#define __pyx_n_s_encode __pyx_mstate_global->__pyx_n_s_encode +#define __pyx_n_s_enter __pyx_mstate_global->__pyx_n_s_enter +#define __pyx_n_s_enum_window __pyx_mstate_global->__pyx_n_s_enum_window +#define __pyx_n_s_enumerate __pyx_mstate_global->__pyx_n_s_enumerate +#define __pyx_n_s_epoch __pyx_mstate_global->__pyx_n_s_epoch +#define __pyx_n_s_eps __pyx_mstate_global->__pyx_n_s_eps +#define __pyx_n_s_error __pyx_mstate_global->__pyx_n_s_error +#define __pyx_n_s_exception __pyx_mstate_global->__pyx_n_s_exception +#define __pyx_n_s_exit __pyx_mstate_global->__pyx_n_s_exit +#define __pyx_n_s_fill __pyx_mstate_global->__pyx_n_s_fill +#define __pyx_n_s_fit __pyx_mstate_global->__pyx_n_s_fit +#define __pyx_n_s_fit_mter __pyx_mstate_global->__pyx_n_s_fit_mter +#define __pyx_n_s_flags __pyx_mstate_global->__pyx_n_s_flags +#define __pyx_n_s_flatten __pyx_mstate_global->__pyx_n_s_flatten +#define __pyx_n_s_float __pyx_mstate_global->__pyx_n_s_float +#define __pyx_n_s_float32 __pyx_mstate_global->__pyx_n_s_float32 +#define __pyx_n_s_float64 __pyx_mstate_global->__pyx_n_s_float64 +#define __pyx_kp_s_float_int __pyx_mstate_global->__pyx_kp_s_float_int +#define __pyx_kp_s_float_long __pyx_mstate_global->__pyx_kp_s_float_long +#define __pyx_kp_s_float_short __pyx_mstate_global->__pyx_kp_s_float_short +#define __pyx_n_s_format __pyx_mstate_global->__pyx_n_s_format +#define __pyx_n_s_fortran __pyx_mstate_global->__pyx_n_s_fortran +#define __pyx_n_u_fortran __pyx_mstate_global->__pyx_n_u_fortran +#define __pyx_n_s_fused_sigindex __pyx_mstate_global->__pyx_n_s_fused_sigindex +#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc +#define __pyx_n_s_get __pyx_mstate_global->__pyx_n_s_get +#define __pyx_n_s_get_rng __pyx_mstate_global->__pyx_n_s_get_rng +#define __pyx_n_s_getstate __pyx_mstate_global->__pyx_n_s_getstate +#define __pyx_kp_u_got __pyx_mstate_global->__pyx_kp_u_got +#define __pyx_kp_u_got_differing_extents_in_dimensi __pyx_mstate_global->__pyx_kp_u_got_differing_extents_in_dimensi +#define __pyx_n_s_i __pyx_mstate_global->__pyx_n_s_i +#define __pyx_n_s_i_idx __pyx_mstate_global->__pyx_n_s_i_idx +#define __pyx_n_s_i_ij __pyx_mstate_global->__pyx_n_s_i_ij +#define __pyx_n_s_i_index __pyx_mstate_global->__pyx_n_s_i_index +#define __pyx_n_s_i_indices __pyx_mstate_global->__pyx_n_s_i_indices +#define __pyx_n_s_i_score __pyx_mstate_global->__pyx_n_s_i_score +#define __pyx_n_s_id __pyx_mstate_global->__pyx_n_s_id +#define __pyx_n_s_idx __pyx_mstate_global->__pyx_n_s_idx +#define __pyx_n_s_iid __pyx_mstate_global->__pyx_n_s_iid +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_index __pyx_mstate_global->__pyx_n_s_index +#define __pyx_n_s_indices __pyx_mstate_global->__pyx_n_s_indices +#define __pyx_n_s_indptr __pyx_mstate_global->__pyx_n_s_indptr +#define __pyx_n_s_init __pyx_mstate_global->__pyx_n_s_init +#define __pyx_n_s_init_2 __pyx_mstate_global->__pyx_n_s_init_2 +#define __pyx_n_s_init_params __pyx_mstate_global->__pyx_n_s_init_params +#define __pyx_n_s_init_subclass __pyx_mstate_global->__pyx_n_s_init_subclass +#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing +#define __pyx_n_s_int __pyx_mstate_global->__pyx_n_s_int +#define __pyx_n_s_int32 __pyx_mstate_global->__pyx_n_s_int32 +#define __pyx_n_s_intp __pyx_mstate_global->__pyx_n_s_intp +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_n_s_is_unk_item __pyx_mstate_global->__pyx_n_s_is_unk_item +#define __pyx_n_s_is_unk_user __pyx_mstate_global->__pyx_n_s_is_unk_user +#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled +#define __pyx_n_s_item_aspect_count __pyx_mstate_global->__pyx_n_s_item_aspect_count +#define __pyx_n_s_item_aspect_opinion __pyx_mstate_global->__pyx_n_s_item_aspect_opinion +#define __pyx_n_s_item_aspects __pyx_mstate_global->__pyx_n_s_item_aspects +#define __pyx_n_s_item_ids __pyx_mstate_global->__pyx_n_s_item_ids +#define __pyx_n_s_item_indices __pyx_mstate_global->__pyx_n_s_item_indices +#define __pyx_n_s_item_rank __pyx_mstate_global->__pyx_n_s_item_rank +#define __pyx_n_s_item_scores __pyx_mstate_global->__pyx_n_s_item_scores +#define __pyx_n_s_item_sentiment __pyx_mstate_global->__pyx_n_s_item_sentiment +#define __pyx_n_s_items __pyx_mstate_global->__pyx_n_s_items +#define __pyx_n_s_itemsize __pyx_mstate_global->__pyx_n_s_itemsize +#define __pyx_kp_s_itemsize_0_for_cython_array __pyx_mstate_global->__pyx_kp_s_itemsize_0_for_cython_array +#define __pyx_n_s_itertools __pyx_mstate_global->__pyx_n_s_itertools +#define __pyx_n_s_j __pyx_mstate_global->__pyx_n_s_j +#define __pyx_n_s_j_idx __pyx_mstate_global->__pyx_n_s_j_idx +#define __pyx_n_s_j_index __pyx_mstate_global->__pyx_n_s_j_index +#define __pyx_n_s_j_score __pyx_mstate_global->__pyx_n_s_j_score +#define __pyx_n_s_jdx __pyx_mstate_global->__pyx_n_s_jdx +#define __pyx_n_s_k __pyx_mstate_global->__pyx_n_s_k +#define __pyx_n_s_key __pyx_mstate_global->__pyx_n_s_key +#define __pyx_n_s_keys __pyx_mstate_global->__pyx_n_s_keys +#define __pyx_n_s_kind __pyx_mstate_global->__pyx_n_s_kind +#define __pyx_n_s_known_item_scores __pyx_mstate_global->__pyx_n_s_known_item_scores +#define __pyx_n_s_kwargs __pyx_mstate_global->__pyx_n_s_kwargs +#define __pyx_n_s_lambda_bpr __pyx_mstate_global->__pyx_n_s_lambda_bpr +#define __pyx_n_s_lambda_d __pyx_mstate_global->__pyx_n_s_lambda_d +#define __pyx_n_s_lambda_reg __pyx_mstate_global->__pyx_n_s_lambda_reg +#define __pyx_n_s_later_indices __pyx_mstate_global->__pyx_n_s_later_indices +#define __pyx_n_s_later_item_idx __pyx_mstate_global->__pyx_n_s_later_item_idx +#define __pyx_n_s_ld_bpr __pyx_mstate_global->__pyx_n_s_ld_bpr +#define __pyx_n_s_ld_reg __pyx_mstate_global->__pyx_n_s_ld_reg +#define __pyx_n_s_long __pyx_mstate_global->__pyx_n_s_long +#define __pyx_n_s_loss __pyx_mstate_global->__pyx_n_s_loss +#define __pyx_n_u_loss __pyx_mstate_global->__pyx_n_u_loss +#define __pyx_n_s_lr __pyx_mstate_global->__pyx_n_s_lr +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_map_aspect_id __pyx_mstate_global->__pyx_n_s_map_aspect_id +#define __pyx_n_s_map_iid __pyx_mstate_global->__pyx_n_s_map_iid +#define __pyx_kp_u_max __pyx_mstate_global->__pyx_kp_u_max +#define __pyx_n_s_max_2 __pyx_mstate_global->__pyx_n_s_max_2 +#define __pyx_n_s_max_iter __pyx_mstate_global->__pyx_n_s_max_iter +#define __pyx_n_s_mean __pyx_mstate_global->__pyx_n_s_mean +#define __pyx_n_s_memview __pyx_mstate_global->__pyx_n_s_memview +#define __pyx_n_s_metaclass __pyx_mstate_global->__pyx_n_s_metaclass +#define __pyx_kp_u_min __pyx_mstate_global->__pyx_kp_u_min +#define __pyx_n_s_min_2 __pyx_mstate_global->__pyx_n_s_min_2 +#define __pyx_n_s_min_common_freq __pyx_mstate_global->__pyx_n_s_min_common_freq +#define __pyx_n_s_min_pair_freq __pyx_mstate_global->__pyx_n_s_min_pair_freq +#define __pyx_n_s_min_user_freq __pyx_mstate_global->__pyx_n_s_min_user_freq +#define __pyx_n_s_mode __pyx_mstate_global->__pyx_n_s_mode +#define __pyx_n_s_module __pyx_mstate_global->__pyx_n_s_module +#define __pyx_n_s_most_common __pyx_mstate_global->__pyx_n_s_most_common +#define __pyx_n_s_mp __pyx_mstate_global->__pyx_n_s_mp +#define __pyx_n_s_mro_entries __pyx_mstate_global->__pyx_n_s_mro_entries +#define __pyx_n_s_mter __pyx_mstate_global->__pyx_n_s_mter +#define __pyx_n_s_multiprocessing __pyx_mstate_global->__pyx_n_s_multiprocessing +#define __pyx_n_s_n_aspect_factors __pyx_mstate_global->__pyx_n_s_n_aspect_factors +#define __pyx_n_s_n_aspects __pyx_mstate_global->__pyx_n_s_n_aspects +#define __pyx_n_s_n_bpr_samples __pyx_mstate_global->__pyx_n_s_n_bpr_samples +#define __pyx_n_s_n_element_samples __pyx_mstate_global->__pyx_n_s_n_element_samples +#define __pyx_n_s_n_item_factors __pyx_mstate_global->__pyx_n_s_n_item_factors +#define __pyx_n_s_n_items __pyx_mstate_global->__pyx_n_s_n_items +#define __pyx_n_s_n_opinion_factors __pyx_mstate_global->__pyx_n_s_n_opinion_factors +#define __pyx_n_s_n_opinions __pyx_mstate_global->__pyx_n_s_n_opinions +#define __pyx_n_s_n_pair_samples __pyx_mstate_global->__pyx_n_s_n_pair_samples +#define __pyx_n_s_n_threads __pyx_mstate_global->__pyx_n_s_n_threads +#define __pyx_n_s_n_top_aspects __pyx_mstate_global->__pyx_n_s_n_top_aspects +#define __pyx_n_s_n_user_factors __pyx_mstate_global->__pyx_n_s_n_user_factors +#define __pyx_n_s_n_users __pyx_mstate_global->__pyx_n_s_n_users +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_s_name_2 __pyx_mstate_global->__pyx_n_s_name_2 +#define __pyx_n_s_ndim __pyx_mstate_global->__pyx_n_s_ndim +#define __pyx_n_s_neg_item_ids __pyx_mstate_global->__pyx_n_s_neg_item_ids +#define __pyx_n_s_new __pyx_mstate_global->__pyx_n_s_new +#define __pyx_kp_s_no_default___reduce___due_to_non __pyx_mstate_global->__pyx_kp_s_no_default___reduce___due_to_non +#define __pyx_kp_u_not_dominated_pairs __pyx_mstate_global->__pyx_kp_u_not_dominated_pairs +#define __pyx_n_s_not_dominated_pairs_2 __pyx_mstate_global->__pyx_n_s_not_dominated_pairs_2 +#define __pyx_n_s_np __pyx_mstate_global->__pyx_n_s_np +#define __pyx_n_s_num_aspects __pyx_mstate_global->__pyx_n_s_num_aspects +#define __pyx_n_s_num_bpr_samples __pyx_mstate_global->__pyx_n_s_num_bpr_samples +#define __pyx_n_s_num_items __pyx_mstate_global->__pyx_n_s_num_items +#define __pyx_n_s_num_opinions __pyx_mstate_global->__pyx_n_s_num_opinions +#define __pyx_n_s_num_pair_samples __pyx_mstate_global->__pyx_n_s_num_pair_samples +#define __pyx_n_s_num_samples __pyx_mstate_global->__pyx_n_s_num_samples +#define __pyx_n_s_num_users __pyx_mstate_global->__pyx_n_s_num_users +#define __pyx_n_s_numpy __pyx_mstate_global->__pyx_n_s_numpy +#define __pyx_kp_u_numpy_core_multiarray_failed_to __pyx_mstate_global->__pyx_kp_u_numpy_core_multiarray_failed_to +#define __pyx_kp_u_numpy_core_umath_failed_to_impor __pyx_mstate_global->__pyx_kp_u_numpy_core_umath_failed_to_impor +#define __pyx_n_s_o_idx __pyx_mstate_global->__pyx_n_s_o_idx +#define __pyx_n_s_obj __pyx_mstate_global->__pyx_n_s_obj +#define __pyx_n_s_oid __pyx_mstate_global->__pyx_n_s_oid +#define __pyx_n_s_ones __pyx_mstate_global->__pyx_n_s_ones +#define __pyx_n_s_p_user_indices __pyx_mstate_global->__pyx_n_s_p_user_indices +#define __pyx_n_s_pack __pyx_mstate_global->__pyx_n_s_pack +#define __pyx_n_s_pair_counts __pyx_mstate_global->__pyx_n_s_pair_counts +#define __pyx_n_s_pair_freq __pyx_mstate_global->__pyx_n_s_pair_freq +#define __pyx_n_s_pickle __pyx_mstate_global->__pyx_n_s_pickle +#define __pyx_n_s_polarity __pyx_mstate_global->__pyx_n_s_polarity +#define __pyx_n_s_pred __pyx_mstate_global->__pyx_n_s_pred +#define __pyx_n_s_prepare __pyx_mstate_global->__pyx_n_s_prepare +#define __pyx_n_s_print __pyx_mstate_global->__pyx_n_s_print +#define __pyx_n_s_progress __pyx_mstate_global->__pyx_n_s_progress +#define __pyx_n_s_pyx_PickleError __pyx_mstate_global->__pyx_n_s_pyx_PickleError +#define __pyx_n_s_pyx_checksum __pyx_mstate_global->__pyx_n_s_pyx_checksum +#define __pyx_n_s_pyx_result __pyx_mstate_global->__pyx_n_s_pyx_result +#define __pyx_n_s_pyx_state __pyx_mstate_global->__pyx_n_s_pyx_state +#define __pyx_n_s_pyx_type __pyx_mstate_global->__pyx_n_s_pyx_type +#define __pyx_n_s_pyx_unpickle_Enum __pyx_mstate_global->__pyx_n_s_pyx_unpickle_Enum +#define __pyx_n_s_pyx_vtable __pyx_mstate_global->__pyx_n_s_pyx_vtable +#define __pyx_n_s_quality_scores __pyx_mstate_global->__pyx_n_s_quality_scores +#define __pyx_n_s_qualname __pyx_mstate_global->__pyx_n_s_qualname +#define __pyx_n_s_r_values __pyx_mstate_global->__pyx_n_s_r_values +#define __pyx_n_s_randint __pyx_mstate_global->__pyx_n_s_randint +#define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range +#define __pyx_n_s_rank __pyx_mstate_global->__pyx_n_s_rank +#define __pyx_n_s_rating_dict __pyx_mstate_global->__pyx_n_s_rating_dict +#define __pyx_n_s_rating_matrix __pyx_mstate_global->__pyx_n_s_rating_matrix +#define __pyx_n_s_rating_scale __pyx_mstate_global->__pyx_n_s_rating_scale +#define __pyx_n_s_recommender __pyx_mstate_global->__pyx_n_s_recommender +#define __pyx_n_s_reduce __pyx_mstate_global->__pyx_n_s_reduce +#define __pyx_n_s_reduce_cython __pyx_mstate_global->__pyx_n_s_reduce_cython +#define __pyx_n_s_reduce_ex __pyx_mstate_global->__pyx_n_s_reduce_ex +#define __pyx_n_s_register __pyx_mstate_global->__pyx_n_s_register +#define __pyx_n_s_repeat __pyx_mstate_global->__pyx_n_s_repeat +#define __pyx_n_s_reshape __pyx_mstate_global->__pyx_n_s_reshape +#define __pyx_n_s_rng __pyx_mstate_global->__pyx_n_s_rng +#define __pyx_n_s_rng_neg __pyx_mstate_global->__pyx_n_s_rng_neg +#define __pyx_n_s_rng_pos __pyx_mstate_global->__pyx_n_s_rng_pos +#define __pyx_n_s_rng_pos_iao __pyx_mstate_global->__pyx_n_s_rng_pos_iao +#define __pyx_n_s_rng_pos_pair __pyx_mstate_global->__pyx_n_s_rng_pos_pair +#define __pyx_n_s_rng_pos_uao __pyx_mstate_global->__pyx_n_s_rng_pos_uao +#define __pyx_n_s_rng_pos_uia __pyx_mstate_global->__pyx_n_s_rng_pos_uia +#define __pyx_n_s_s __pyx_mstate_global->__pyx_n_s_s +#define __pyx_n_s_scipy __pyx_mstate_global->__pyx_n_s_scipy +#define __pyx_n_s_scipy_sparse __pyx_mstate_global->__pyx_n_s_scipy_sparse +#define __pyx_n_s_score __pyx_mstate_global->__pyx_n_s_score +#define __pyx_n_s_seed __pyx_mstate_global->__pyx_n_s_seed +#define __pyx_n_s_self __pyx_mstate_global->__pyx_n_s_self +#define __pyx_n_s_sentiment __pyx_mstate_global->__pyx_n_s_sentiment +#define __pyx_n_s_sentiment_polarity __pyx_mstate_global->__pyx_n_s_sentiment_polarity +#define __pyx_n_s_sentiment_tup_ids_by_item __pyx_mstate_global->__pyx_n_s_sentiment_tup_ids_by_item +#define __pyx_n_s_sentiment_tup_ids_by_user __pyx_mstate_global->__pyx_n_s_sentiment_tup_ids_by_user +#define __pyx_n_s_set_name __pyx_mstate_global->__pyx_n_s_set_name +#define __pyx_n_s_set_postfix __pyx_mstate_global->__pyx_n_s_set_postfix +#define __pyx_n_s_setstate __pyx_mstate_global->__pyx_n_s_setstate +#define __pyx_n_s_setstate_cython __pyx_mstate_global->__pyx_n_s_setstate_cython +#define __pyx_n_s_sgrad_A __pyx_mstate_global->__pyx_n_s_sgrad_A +#define __pyx_n_s_sgrad_G1 __pyx_mstate_global->__pyx_n_s_sgrad_G1 +#define __pyx_n_s_sgrad_G2 __pyx_mstate_global->__pyx_n_s_sgrad_G2 +#define __pyx_n_s_sgrad_G3 __pyx_mstate_global->__pyx_n_s_sgrad_G3 +#define __pyx_n_s_sgrad_I __pyx_mstate_global->__pyx_n_s_sgrad_I +#define __pyx_n_s_sgrad_O __pyx_mstate_global->__pyx_n_s_sgrad_O +#define __pyx_n_s_sgrad_U __pyx_mstate_global->__pyx_n_s_sgrad_U +#define __pyx_n_s_shape __pyx_mstate_global->__pyx_n_s_shape +#define __pyx_n_s_short __pyx_mstate_global->__pyx_n_s_short +#define __pyx_n_s_signatures __pyx_mstate_global->__pyx_n_s_signatures +#define __pyx_n_s_size __pyx_mstate_global->__pyx_n_s_size +#define __pyx_n_s_skipped __pyx_mstate_global->__pyx_n_s_skipped +#define __pyx_n_u_skipped __pyx_mstate_global->__pyx_n_u_skipped +#define __pyx_n_s_sp __pyx_mstate_global->__pyx_n_s_sp +#define __pyx_n_s_sparse __pyx_mstate_global->__pyx_n_s_sparse +#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec +#define __pyx_n_s_split __pyx_mstate_global->__pyx_n_s_split +#define __pyx_n_s_start __pyx_mstate_global->__pyx_n_s_start +#define __pyx_n_s_start_time __pyx_mstate_global->__pyx_n_s_start_time +#define __pyx_n_s_step __pyx_mstate_global->__pyx_n_s_step +#define __pyx_n_s_stop __pyx_mstate_global->__pyx_n_s_stop +#define __pyx_kp_s_strided_and_direct __pyx_mstate_global->__pyx_kp_s_strided_and_direct +#define __pyx_kp_s_strided_and_direct_or_indirect __pyx_mstate_global->__pyx_kp_s_strided_and_direct_or_indirect +#define __pyx_kp_s_strided_and_indirect __pyx_mstate_global->__pyx_kp_s_strided_and_indirect +#define __pyx_kp_s_stringsource __pyx_mstate_global->__pyx_kp_s_stringsource +#define __pyx_n_s_strip __pyx_mstate_global->__pyx_n_s_strip +#define __pyx_n_s_struct __pyx_mstate_global->__pyx_n_s_struct +#define __pyx_n_s_sub_item_ids __pyx_mstate_global->__pyx_n_s_sub_item_ids +#define __pyx_n_s_sum __pyx_mstate_global->__pyx_n_s_sum +#define __pyx_n_s_super __pyx_mstate_global->__pyx_n_s_super +#define __pyx_n_s_sys __pyx_mstate_global->__pyx_n_s_sys +#define __pyx_n_s_temp __pyx_mstate_global->__pyx_n_s_temp +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_thread_id __pyx_mstate_global->__pyx_n_s_thread_id +#define __pyx_n_s_time __pyx_mstate_global->__pyx_n_s_time +#define __pyx_n_s_top_aspect_scores __pyx_mstate_global->__pyx_n_s_top_aspect_scores +#define __pyx_n_s_total_items __pyx_mstate_global->__pyx_n_s_total_items +#define __pyx_n_s_total_sentiment __pyx_mstate_global->__pyx_n_s_total_sentiment +#define __pyx_n_s_total_sentiment_by_aspect __pyx_mstate_global->__pyx_n_s_total_sentiment_by_aspect +#define __pyx_n_s_total_time __pyx_mstate_global->__pyx_n_s_total_time +#define __pyx_n_s_tqdm __pyx_mstate_global->__pyx_n_s_tqdm +#define __pyx_n_s_train_set __pyx_mstate_global->__pyx_n_s_train_set +#define __pyx_n_s_trainable __pyx_mstate_global->__pyx_n_s_trainable +#define __pyx_n_s_trange __pyx_mstate_global->__pyx_n_s_trange +#define __pyx_n_s_ts1 __pyx_mstate_global->__pyx_n_s_ts1 +#define __pyx_n_s_ts2 __pyx_mstate_global->__pyx_n_s_ts2 +#define __pyx_n_s_ts3 __pyx_mstate_global->__pyx_n_s_ts3 +#define __pyx_n_s_tup __pyx_mstate_global->__pyx_n_s_tup +#define __pyx_n_s_tup_id __pyx_mstate_global->__pyx_n_s_tup_id +#define __pyx_n_s_tup_idx __pyx_mstate_global->__pyx_n_s_tup_idx +#define __pyx_n_s_u __pyx_mstate_global->__pyx_n_s_u +#define __pyx_n_s_u_idx __pyx_mstate_global->__pyx_n_s_u_idx +#define __pyx_n_s_u_indices __pyx_mstate_global->__pyx_n_s_u_indices +#define __pyx_n_s_uid __pyx_mstate_global->__pyx_n_s_uid +#define __pyx_n_s_uir_tuple __pyx_mstate_global->__pyx_n_s_uir_tuple +#define __pyx_kp_s_unable_to_allocate_array_data __pyx_mstate_global->__pyx_kp_s_unable_to_allocate_array_data +#define __pyx_kp_s_unable_to_allocate_shape_and_str __pyx_mstate_global->__pyx_kp_s_unable_to_allocate_shape_and_str +#define __pyx_n_s_uniform __pyx_mstate_global->__pyx_n_s_uniform +#define __pyx_kp_u_unique_earlier_later_pairs __pyx_mstate_global->__pyx_kp_u_unique_earlier_later_pairs +#define __pyx_n_s_unpack __pyx_mstate_global->__pyx_n_s_unpack +#define __pyx_n_s_update __pyx_mstate_global->__pyx_n_s_update +#define __pyx_n_s_use_item_aspect_popularity __pyx_mstate_global->__pyx_n_s_use_item_aspect_popularity +#define __pyx_n_s_user_aspect_opinion __pyx_mstate_global->__pyx_n_s_user_aspect_opinion +#define __pyx_n_s_user_counts __pyx_mstate_global->__pyx_n_s_user_counts +#define __pyx_n_s_user_ids __pyx_mstate_global->__pyx_n_s_user_ids +#define __pyx_n_s_user_idx __pyx_mstate_global->__pyx_n_s_user_idx +#define __pyx_n_s_user_indices __pyx_mstate_global->__pyx_n_s_user_indices +#define __pyx_n_s_user_item_aspect __pyx_mstate_global->__pyx_n_s_user_item_aspect +#define __pyx_n_s_user_sentiment __pyx_mstate_global->__pyx_n_s_user_sentiment +#define __pyx_n_s_utils __pyx_mstate_global->__pyx_n_s_utils +#define __pyx_n_s_utils_init_utils __pyx_mstate_global->__pyx_n_s_utils_init_utils +#define __pyx_n_s_val_set __pyx_mstate_global->__pyx_n_s_val_set +#define __pyx_n_s_values __pyx_mstate_global->__pyx_n_s_values +#define __pyx_n_s_verbose __pyx_mstate_global->__pyx_n_s_verbose +#define __pyx_n_s_version_info __pyx_mstate_global->__pyx_n_s_version_info +#define __pyx_n_s_window __pyx_mstate_global->__pyx_n_s_window +#define __pyx_n_s_z __pyx_mstate_global->__pyx_n_s_z +#define __pyx_n_s_zeros_like __pyx_mstate_global->__pyx_n_s_zeros_like +#define __pyx_n_s_zip __pyx_mstate_global->__pyx_n_s_zip +#define __pyx_float_0_1 __pyx_mstate_global->__pyx_float_0_1 +#define __pyx_float_0_5 __pyx_mstate_global->__pyx_float_0_5 +#define __pyx_float_5_0 __pyx_mstate_global->__pyx_float_5_0 +#define __pyx_float_0_01 __pyx_mstate_global->__pyx_float_0_01 +#define __pyx_float_100_0 __pyx_mstate_global->__pyx_float_100_0 +#define __pyx_int_0 __pyx_mstate_global->__pyx_int_0 +#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 +#define __pyx_int_2 __pyx_mstate_global->__pyx_int_2 +#define __pyx_int_3 __pyx_mstate_global->__pyx_int_3 +#define __pyx_int_8 __pyx_mstate_global->__pyx_int_8 +#define __pyx_int_10 __pyx_mstate_global->__pyx_int_10 +#define __pyx_int_50 __pyx_mstate_global->__pyx_int_50 +#define __pyx_int_58 __pyx_mstate_global->__pyx_int_58 +#define __pyx_int_100 __pyx_mstate_global->__pyx_int_100 +#define __pyx_int_1000 __pyx_mstate_global->__pyx_int_1000 +#define __pyx_int_200000 __pyx_mstate_global->__pyx_int_200000 +#define __pyx_int_112105877 __pyx_mstate_global->__pyx_int_112105877 +#define __pyx_int_136983863 __pyx_mstate_global->__pyx_int_136983863 +#define __pyx_int_184977713 __pyx_mstate_global->__pyx_int_184977713 +#define __pyx_int_2147483648 __pyx_mstate_global->__pyx_int_2147483648 +#define __pyx_int_neg_1 __pyx_mstate_global->__pyx_int_neg_1 +#define __pyx_slice__5 __pyx_mstate_global->__pyx_slice__5 +#define __pyx_tuple__4 __pyx_mstate_global->__pyx_tuple__4 +#define __pyx_tuple__8 __pyx_mstate_global->__pyx_tuple__8 +#define __pyx_tuple__9 __pyx_mstate_global->__pyx_tuple__9 +#define __pyx_slice__19 __pyx_mstate_global->__pyx_slice__19 +#define __pyx_slice__21 __pyx_mstate_global->__pyx_slice__21 +#define __pyx_tuple__10 __pyx_mstate_global->__pyx_tuple__10 +#define __pyx_tuple__11 __pyx_mstate_global->__pyx_tuple__11 +#define __pyx_tuple__13 __pyx_mstate_global->__pyx_tuple__13 +#define __pyx_tuple__14 __pyx_mstate_global->__pyx_tuple__14 +#define __pyx_tuple__17 __pyx_mstate_global->__pyx_tuple__17 +#define __pyx_tuple__18 __pyx_mstate_global->__pyx_tuple__18 +#define __pyx_tuple__20 __pyx_mstate_global->__pyx_tuple__20 +#define __pyx_tuple__22 __pyx_mstate_global->__pyx_tuple__22 +#define __pyx_tuple__23 __pyx_mstate_global->__pyx_tuple__23 +#define __pyx_tuple__24 __pyx_mstate_global->__pyx_tuple__24 +#define __pyx_tuple__25 __pyx_mstate_global->__pyx_tuple__25 +#define __pyx_tuple__26 __pyx_mstate_global->__pyx_tuple__26 +#define __pyx_tuple__27 __pyx_mstate_global->__pyx_tuple__27 +#define __pyx_tuple__28 __pyx_mstate_global->__pyx_tuple__28 +#define __pyx_tuple__29 __pyx_mstate_global->__pyx_tuple__29 +#define __pyx_tuple__30 __pyx_mstate_global->__pyx_tuple__30 +#define __pyx_tuple__31 __pyx_mstate_global->__pyx_tuple__31 +#define __pyx_tuple__32 __pyx_mstate_global->__pyx_tuple__32 +#define __pyx_tuple__34 __pyx_mstate_global->__pyx_tuple__34 +#define __pyx_tuple__35 __pyx_mstate_global->__pyx_tuple__35 +#define __pyx_tuple__37 __pyx_mstate_global->__pyx_tuple__37 +#define __pyx_tuple__39 __pyx_mstate_global->__pyx_tuple__39 +#define __pyx_tuple__41 __pyx_mstate_global->__pyx_tuple__41 +#define __pyx_tuple__43 __pyx_mstate_global->__pyx_tuple__43 +#define __pyx_tuple__45 __pyx_mstate_global->__pyx_tuple__45 +#define __pyx_tuple__47 __pyx_mstate_global->__pyx_tuple__47 +#define __pyx_tuple__48 __pyx_mstate_global->__pyx_tuple__48 +#define __pyx_tuple__50 __pyx_mstate_global->__pyx_tuple__50 +#define __pyx_tuple__52 __pyx_mstate_global->__pyx_tuple__52 +#define __pyx_codeobj__33 __pyx_mstate_global->__pyx_codeobj__33 +#define __pyx_codeobj__36 __pyx_mstate_global->__pyx_codeobj__36 +#define __pyx_codeobj__40 __pyx_mstate_global->__pyx_codeobj__40 +#define __pyx_codeobj__42 __pyx_mstate_global->__pyx_codeobj__42 +#define __pyx_codeobj__44 __pyx_mstate_global->__pyx_codeobj__44 +#define __pyx_codeobj__46 __pyx_mstate_global->__pyx_codeobj__46 +#define __pyx_codeobj__49 __pyx_mstate_global->__pyx_codeobj__49 +#define __pyx_codeobj__51 __pyx_mstate_global->__pyx_codeobj__51 +/* #### Code section: module_code ### */ + +/* "View.MemoryView":131 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * */ /* Python wrapper */ -static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_1__init__ = {"__init__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_1__init__, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_name = 0; - PyObject *__pyx_v_rating_scale = 0; - PyObject *__pyx_v_n_user_factors = 0; - PyObject *__pyx_v_n_item_factors = 0; - PyObject *__pyx_v_n_aspect_factors = 0; - PyObject *__pyx_v_n_opinion_factors = 0; - PyObject *__pyx_v_n_pair_samples = 0; - PyObject *__pyx_v_n_bpr_samples = 0; - PyObject *__pyx_v_n_element_samples = 0; - PyObject *__pyx_v_n_top_aspects = 0; - PyObject *__pyx_v_alpha = 0; - PyObject *__pyx_v_min_user_freq = 0; - PyObject *__pyx_v_min_pair_freq = 0; - PyObject *__pyx_v_min_common_freq = 0; - PyObject *__pyx_v_use_item_aspect_popularity = 0; - PyObject *__pyx_v_enum_window = 0; - PyObject *__pyx_v_lambda_reg = 0; - PyObject *__pyx_v_lambda_bpr = 0; - PyObject *__pyx_v_lambda_d = 0; - PyObject *__pyx_v_max_iter = 0; - PyObject *__pyx_v_lr = 0; - PyObject *__pyx_v_n_threads = 0; - PyObject *__pyx_v_trainable = 0; - PyObject *__pyx_v_verbose = 0; - PyObject *__pyx_v_init_params = 0; - PyObject *__pyx_v_seed = 0; +static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_shape = 0; + Py_ssize_t __pyx_v_itemsize; + PyObject *__pyx_v_format = 0; + PyObject *__pyx_v_mode = 0; + int __pyx_v_allocate_buffer; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - PyObject *__pyx_r = 0; + int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_name,&__pyx_n_s_rating_scale,&__pyx_n_s_n_user_factors,&__pyx_n_s_n_item_factors,&__pyx_n_s_n_aspect_factors,&__pyx_n_s_n_opinion_factors,&__pyx_n_s_n_pair_samples,&__pyx_n_s_n_bpr_samples,&__pyx_n_s_n_element_samples,&__pyx_n_s_n_top_aspects,&__pyx_n_s_alpha,&__pyx_n_s_min_user_freq,&__pyx_n_s_min_pair_freq,&__pyx_n_s_min_common_freq,&__pyx_n_s_use_item_aspect_popularity,&__pyx_n_s_enum_window,&__pyx_n_s_lambda_reg,&__pyx_n_s_lambda_bpr,&__pyx_n_s_lambda_d,&__pyx_n_s_max_iter,&__pyx_n_s_lr,&__pyx_n_s_n_threads,&__pyx_n_s_trainable,&__pyx_n_s_verbose,&__pyx_n_s_init_params,&__pyx_n_s_seed,0}; - PyObject* values[27] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - values[1] = ((PyObject *)((PyObject*)__pyx_n_u_ComparERSub)); - values[2] = ((PyObject *)((PyObject*)__pyx_float_5_0)); - values[3] = ((PyObject *)((PyObject *)__pyx_int_8)); - values[4] = ((PyObject *)((PyObject *)__pyx_int_8)); - values[5] = ((PyObject *)((PyObject *)__pyx_int_8)); - values[6] = ((PyObject *)((PyObject *)__pyx_int_8)); - values[7] = ((PyObject *)((PyObject *)__pyx_int_1000)); - values[8] = ((PyObject *)((PyObject *)__pyx_int_1000)); - values[9] = ((PyObject *)((PyObject *)__pyx_int_50)); - values[10] = ((PyObject *)((PyObject *)__pyx_int_100)); - values[11] = ((PyObject *)((PyObject*)__pyx_float_0_5)); - values[12] = ((PyObject *)((PyObject *)__pyx_int_2)); - values[13] = ((PyObject *)((PyObject *)__pyx_int_1)); - values[14] = ((PyObject *)((PyObject *)__pyx_int_1)); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":153 - * min_pair_freq=1, - * min_common_freq=1, - * use_item_aspect_popularity=True, # <<<<<<<<<<<<<< - * enum_window=None, - * lambda_reg=0.1, - */ - values[15] = ((PyObject *)((PyObject *)Py_True)); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":154 - * min_common_freq=1, - * use_item_aspect_popularity=True, - * enum_window=None, # <<<<<<<<<<<<<< - * lambda_reg=0.1, - * lambda_bpr=10, - */ - values[16] = ((PyObject *)((PyObject *)Py_None)); - values[17] = ((PyObject *)((PyObject*)__pyx_float_0_1)); - values[18] = ((PyObject *)((PyObject *)__pyx_int_10)); - values[19] = ((PyObject *)((PyObject*)__pyx_float_0_01)); - values[20] = ((PyObject *)((PyObject *)__pyx_int_200000)); - values[21] = ((PyObject *)((PyObject*)__pyx_float_0_5)); - values[22] = ((PyObject *)((PyObject *)__pyx_int_0)); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":161 - * lr=0.5, - * n_threads=0, - * trainable=True, # <<<<<<<<<<<<<< - * verbose=False, - * init_params=None, - */ - values[23] = ((PyObject *)((PyObject *)Py_True)); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":162 - * n_threads=0, - * trainable=True, - * verbose=False, # <<<<<<<<<<<<<< - * init_params=None, - * seed=None, - */ - values[24] = ((PyObject *)((PyObject *)Py_False)); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":163 - * trainable=True, - * verbose=False, - * init_params=None, # <<<<<<<<<<<<<< - * seed=None, - * ): - */ - values[25] = ((PyObject *)((PyObject *)Py_None)); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":164 - * verbose=False, - * init_params=None, - * seed=None, # <<<<<<<<<<<<<< - * ): - * super().__init__(name=name, rating_scale = rating_scale, n_user_factors = n_user_factors, n_item_factors = n_item_factors, n_aspect_factors = n_aspect_factors, n_opinion_factors = n_opinion_factors, n_bpr_samples = n_bpr_samples, n_element_samples = n_element_samples, lambda_reg = lambda_reg, lambda_bpr = lambda_bpr, max_iter = max_iter, lr = lr, n_threads=n_threads, seed = seed, trainable=trainable, init_params=init_params, verbose=verbose) - */ - values[26] = ((PyObject *)((PyObject *)Py_None)); - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shape,&__pyx_n_s_itemsize,&__pyx_n_s_format,&__pyx_n_s_mode,&__pyx_n_s_allocate_buffer,0}; + PyObject* values[5] = {0,0,0,0,0}; + values[3] = ((PyObject *)__pyx_n_s_c); + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 27: values[26] = PyTuple_GET_ITEM(__pyx_args, 26); - CYTHON_FALLTHROUGH; - case 26: values[25] = PyTuple_GET_ITEM(__pyx_args, 25); - CYTHON_FALLTHROUGH; - case 25: values[24] = PyTuple_GET_ITEM(__pyx_args, 24); - CYTHON_FALLTHROUGH; - case 24: values[23] = PyTuple_GET_ITEM(__pyx_args, 23); + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); CYTHON_FALLTHROUGH; - case 23: values[22] = PyTuple_GET_ITEM(__pyx_args, 22); + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); CYTHON_FALLTHROUGH; - case 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21); + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20); + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - CYTHON_FALLTHROUGH; - case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - CYTHON_FALLTHROUGH; - case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - CYTHON_FALLTHROUGH; - case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - CYTHON_FALLTHROUGH; - case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - CYTHON_FALLTHROUGH; - case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - CYTHON_FALLTHROUGH; - case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - CYTHON_FALLTHROUGH; - case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - CYTHON_FALLTHROUGH; - case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - CYTHON_FALLTHROUGH; - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_shape)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name); - if (value) { values[1] = value; kw_args--; } + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_itemsize)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); __PYX_ERR(1, 131, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rating_scale); - if (value) { values[2] = value; kw_args--; } + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_format)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); __PYX_ERR(1, 131, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_user_factors); + PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mode); if (value) { values[3] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_item_factors); + PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_allocate_buffer); if (value) { values[4] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 5: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_aspect_factors); - if (value) { values[5] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 6: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_opinion_factors); - if (value) { values[6] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 7: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_pair_samples); - if (value) { values[7] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 8: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_bpr_samples); - if (value) { values[8] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 9: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_element_samples); - if (value) { values[9] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 10: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_top_aspects); - if (value) { values[10] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 11: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_alpha); - if (value) { values[11] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 12: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_min_user_freq); - if (value) { values[12] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 13: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_min_pair_freq); - if (value) { values[13] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 14: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_min_common_freq); - if (value) { values[14] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 15: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_use_item_aspect_popularity); - if (value) { values[15] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 16: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_enum_window); - if (value) { values[16] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 17: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lambda_reg); - if (value) { values[17] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 18: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lambda_bpr); - if (value) { values[18] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 19: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lambda_d); - if (value) { values[19] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 20: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_iter); - if (value) { values[20] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 21: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lr); - if (value) { values[21] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 22: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_threads); - if (value) { values[22] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 23: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_trainable); - if (value) { values[23] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 24: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_verbose); - if (value) { values[24] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 25: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_params); - if (value) { values[25] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 26: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_seed); - if (value) { values[26] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 137, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__cinit__") < 0)) __PYX_ERR(1, 131, __pyx_L3_error) } } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 27: values[26] = PyTuple_GET_ITEM(__pyx_args, 26); - CYTHON_FALLTHROUGH; - case 26: values[25] = PyTuple_GET_ITEM(__pyx_args, 25); - CYTHON_FALLTHROUGH; - case 25: values[24] = PyTuple_GET_ITEM(__pyx_args, 24); - CYTHON_FALLTHROUGH; - case 24: values[23] = PyTuple_GET_ITEM(__pyx_args, 23); - CYTHON_FALLTHROUGH; - case 23: values[22] = PyTuple_GET_ITEM(__pyx_args, 22); - CYTHON_FALLTHROUGH; - case 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - CYTHON_FALLTHROUGH; - case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - CYTHON_FALLTHROUGH; - case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - CYTHON_FALLTHROUGH; - case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - CYTHON_FALLTHROUGH; - case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); CYTHON_FALLTHROUGH; - case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); CYTHON_FALLTHROUGH; - case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - CYTHON_FALLTHROUGH; - case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - CYTHON_FALLTHROUGH; - case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - CYTHON_FALLTHROUGH; - case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - CYTHON_FALLTHROUGH; - case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - CYTHON_FALLTHROUGH; - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } - __pyx_v_self = values[0]; - __pyx_v_name = values[1]; - __pyx_v_rating_scale = values[2]; - __pyx_v_n_user_factors = values[3]; - __pyx_v_n_item_factors = values[4]; - __pyx_v_n_aspect_factors = values[5]; - __pyx_v_n_opinion_factors = values[6]; - __pyx_v_n_pair_samples = values[7]; - __pyx_v_n_bpr_samples = values[8]; - __pyx_v_n_element_samples = values[9]; - __pyx_v_n_top_aspects = values[10]; - __pyx_v_alpha = values[11]; - __pyx_v_min_user_freq = values[12]; - __pyx_v_min_pair_freq = values[13]; - __pyx_v_min_common_freq = values[14]; - __pyx_v_use_item_aspect_popularity = values[15]; - __pyx_v_enum_window = values[16]; - __pyx_v_lambda_reg = values[17]; - __pyx_v_lambda_bpr = values[18]; - __pyx_v_lambda_d = values[19]; - __pyx_v_max_iter = values[20]; - __pyx_v_lr = values[21]; - __pyx_v_n_threads = values[22]; - __pyx_v_trainable = values[23]; - __pyx_v_verbose = values[24]; - __pyx_v_init_params = values[25]; - __pyx_v_seed = values[26]; + __pyx_v_shape = ((PyObject*)values[0]); + __pyx_v_itemsize = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_itemsize == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error) + __pyx_v_format = values[2]; + __pyx_v_mode = values[3]; + if (values[4]) { + __pyx_v_allocate_buffer = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_allocate_buffer == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 132, __pyx_L3_error) + } else { + + /* "View.MemoryView":132 + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, + * mode="c", bint allocate_buffer=True): # <<<<<<<<<<<<<< + * + * cdef int idx + */ + __pyx_v_allocate_buffer = ((int)1); + } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 27, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 137, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, __pyx_nargs); __PYX_ERR(1, 131, __pyx_L3_error) __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); - return NULL; + return -1; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub___init__(__pyx_self, __pyx_v_self, __pyx_v_name, __pyx_v_rating_scale, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_n_pair_samples, __pyx_v_n_bpr_samples, __pyx_v_n_element_samples, __pyx_v_n_top_aspects, __pyx_v_alpha, __pyx_v_min_user_freq, __pyx_v_min_pair_freq, __pyx_v_min_common_freq, __pyx_v_use_item_aspect_popularity, __pyx_v_enum_window, __pyx_v_lambda_reg, __pyx_v_lambda_bpr, __pyx_v_lambda_d, __pyx_v_max_iter, __pyx_v_lr, __pyx_v_n_threads, __pyx_v_trainable, __pyx_v_verbose, __pyx_v_init_params, __pyx_v_seed); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shape), (&PyTuple_Type), 1, "shape", 1))) __PYX_ERR(1, 131, __pyx_L1_error) + if (unlikely(((PyObject *)__pyx_v_format) == Py_None)) { + PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "format"); __PYX_ERR(1, 131, __pyx_L1_error) + } + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v_shape, __pyx_v_itemsize, __pyx_v_format, __pyx_v_mode, __pyx_v_allocate_buffer); - /* "cornac/models/comparer/recom_comparer_sub.pyx":137 - * ACM International Conference on Web Search and Data Mining (WSDM). 2021. - * """ - * def __init__( # <<<<<<<<<<<<<< - * self, - * name="ComparERSub", + /* "View.MemoryView":131 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * */ /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_rating_scale, PyObject *__pyx_v_n_user_factors, PyObject *__pyx_v_n_item_factors, PyObject *__pyx_v_n_aspect_factors, PyObject *__pyx_v_n_opinion_factors, PyObject *__pyx_v_n_pair_samples, PyObject *__pyx_v_n_bpr_samples, PyObject *__pyx_v_n_element_samples, PyObject *__pyx_v_n_top_aspects, PyObject *__pyx_v_alpha, PyObject *__pyx_v_min_user_freq, PyObject *__pyx_v_min_pair_freq, PyObject *__pyx_v_min_common_freq, PyObject *__pyx_v_use_item_aspect_popularity, PyObject *__pyx_v_enum_window, PyObject *__pyx_v_lambda_reg, PyObject *__pyx_v_lambda_bpr, PyObject *__pyx_v_lambda_d, PyObject *__pyx_v_max_iter, PyObject *__pyx_v_lr, PyObject *__pyx_v_n_threads, PyObject *__pyx_v_trainable, PyObject *__pyx_v_verbose, PyObject *__pyx_v_init_params, PyObject *__pyx_v_seed) { - PyObject *__pyx_r = NULL; +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer) { + int __pyx_v_idx; + Py_ssize_t __pyx_v_dim; + char __pyx_v_order; + int __pyx_r; __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + char *__pyx_t_8; + Py_ssize_t __pyx_t_9; + Py_UCS4 __pyx_t_10; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); + __Pyx_RefNannySetupContext("__cinit__", 0); + __Pyx_INCREF(__pyx_v_format); - /* "cornac/models/comparer/recom_comparer_sub.pyx":166 - * seed=None, - * ): - * super().__init__(name=name, rating_scale = rating_scale, n_user_factors = n_user_factors, n_item_factors = n_item_factors, n_aspect_factors = n_aspect_factors, n_opinion_factors = n_opinion_factors, n_bpr_samples = n_bpr_samples, n_element_samples = n_element_samples, lambda_reg = lambda_reg, lambda_bpr = lambda_bpr, max_iter = max_iter, lr = lr, n_threads=n_threads, seed = seed, trainable=trainable, init_params=init_params, verbose=verbose) # <<<<<<<<<<<<<< - * self.lambda_d = lambda_d - * self.n_pair_samples = n_pair_samples + /* "View.MemoryView":137 + * cdef Py_ssize_t dim + * + * self.ndim = len(shape) # <<<<<<<<<<<<<< + * self.itemsize = itemsize + * */ - __pyx_t_1 = __Pyx_CyFunction_GetClassObj(__pyx_self); - if (!__pyx_t_1) { PyErr_SetString(PyExc_SystemError, "super(): empty __class__ cell"); __PYX_ERR(0, 166, __pyx_L1_error) } - __Pyx_INCREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 166, __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_self); - __Pyx_GIVEREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 166, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(17); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_name, __pyx_v_name) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_rating_scale, __pyx_v_rating_scale) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_n_user_factors, __pyx_v_n_user_factors) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_n_item_factors, __pyx_v_n_item_factors) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_n_aspect_factors, __pyx_v_n_aspect_factors) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_n_opinion_factors, __pyx_v_n_opinion_factors) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_n_bpr_samples, __pyx_v_n_bpr_samples) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_n_element_samples, __pyx_v_n_element_samples) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_lambda_reg, __pyx_v_lambda_reg) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_lambda_bpr, __pyx_v_lambda_bpr) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_max_iter, __pyx_v_max_iter) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_lr, __pyx_v_lr) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_n_threads, __pyx_v_n_threads) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_seed, __pyx_v_seed) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_trainable, __pyx_v_trainable) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_init_params, __pyx_v_init_params) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_verbose, __pyx_v_verbose) < 0) __PYX_ERR(0, 166, __pyx_L1_error) - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 166, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(__pyx_v_shape == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 137, __pyx_L1_error) + } + __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(1, 137, __pyx_L1_error) + __pyx_v_self->ndim = ((int)__pyx_t_1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":167 - * ): - * super().__init__(name=name, rating_scale = rating_scale, n_user_factors = n_user_factors, n_item_factors = n_item_factors, n_aspect_factors = n_aspect_factors, n_opinion_factors = n_opinion_factors, n_bpr_samples = n_bpr_samples, n_element_samples = n_element_samples, lambda_reg = lambda_reg, lambda_bpr = lambda_bpr, max_iter = max_iter, lr = lr, n_threads=n_threads, seed = seed, trainable=trainable, init_params=init_params, verbose=verbose) - * self.lambda_d = lambda_d # <<<<<<<<<<<<<< - * self.n_pair_samples = n_pair_samples - * self.n_top_aspects = n_top_aspects + /* "View.MemoryView":138 + * + * self.ndim = len(shape) + * self.itemsize = itemsize # <<<<<<<<<<<<<< + * + * if not self.ndim: */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lambda_d, __pyx_v_lambda_d) < 0) __PYX_ERR(0, 167, __pyx_L1_error) + __pyx_v_self->itemsize = __pyx_v_itemsize; - /* "cornac/models/comparer/recom_comparer_sub.pyx":168 - * super().__init__(name=name, rating_scale = rating_scale, n_user_factors = n_user_factors, n_item_factors = n_item_factors, n_aspect_factors = n_aspect_factors, n_opinion_factors = n_opinion_factors, n_bpr_samples = n_bpr_samples, n_element_samples = n_element_samples, lambda_reg = lambda_reg, lambda_bpr = lambda_bpr, max_iter = max_iter, lr = lr, n_threads=n_threads, seed = seed, trainable=trainable, init_params=init_params, verbose=verbose) - * self.lambda_d = lambda_d - * self.n_pair_samples = n_pair_samples # <<<<<<<<<<<<<< - * self.n_top_aspects = n_top_aspects - * self.alpha = alpha + /* "View.MemoryView":140 + * self.itemsize = itemsize + * + * if not self.ndim: # <<<<<<<<<<<<<< + * raise ValueError, "Empty shape tuple for cython.array" + * */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_n_pair_samples, __pyx_v_n_pair_samples) < 0) __PYX_ERR(0, 168, __pyx_L1_error) + __pyx_t_2 = (!(__pyx_v_self->ndim != 0)); + if (unlikely(__pyx_t_2)) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":169 - * self.lambda_d = lambda_d - * self.n_pair_samples = n_pair_samples - * self.n_top_aspects = n_top_aspects # <<<<<<<<<<<<<< - * self.alpha = alpha - * self.min_user_freq = min_user_freq + /* "View.MemoryView":141 + * + * if not self.ndim: + * raise ValueError, "Empty shape tuple for cython.array" # <<<<<<<<<<<<<< + * + * if itemsize <= 0: */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_n_top_aspects, __pyx_v_n_top_aspects) < 0) __PYX_ERR(0, 169, __pyx_L1_error) + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Empty_shape_tuple_for_cython_arr, 0, 0); + __PYX_ERR(1, 141, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":170 - * self.n_pair_samples = n_pair_samples - * self.n_top_aspects = n_top_aspects - * self.alpha = alpha # <<<<<<<<<<<<<< - * self.min_user_freq = min_user_freq - * self.min_pair_freq = min_pair_freq + /* "View.MemoryView":140 + * self.itemsize = itemsize + * + * if not self.ndim: # <<<<<<<<<<<<<< + * raise ValueError, "Empty shape tuple for cython.array" + * */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_alpha, __pyx_v_alpha) < 0) __PYX_ERR(0, 170, __pyx_L1_error) + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":171 - * self.n_top_aspects = n_top_aspects - * self.alpha = alpha - * self.min_user_freq = min_user_freq # <<<<<<<<<<<<<< - * self.min_pair_freq = min_pair_freq - * self.min_common_freq = min_common_freq + /* "View.MemoryView":143 + * raise ValueError, "Empty shape tuple for cython.array" + * + * if itemsize <= 0: # <<<<<<<<<<<<<< + * raise ValueError, "itemsize <= 0 for cython.array" + * */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_min_user_freq, __pyx_v_min_user_freq) < 0) __PYX_ERR(0, 171, __pyx_L1_error) + __pyx_t_2 = (__pyx_v_itemsize <= 0); + if (unlikely(__pyx_t_2)) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":172 - * self.alpha = alpha - * self.min_user_freq = min_user_freq - * self.min_pair_freq = min_pair_freq # <<<<<<<<<<<<<< - * self.min_common_freq = min_common_freq - * self.use_item_aspect_popularity = use_item_aspect_popularity + /* "View.MemoryView":144 + * + * if itemsize <= 0: + * raise ValueError, "itemsize <= 0 for cython.array" # <<<<<<<<<<<<<< + * + * if not isinstance(format, bytes): */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_min_pair_freq, __pyx_v_min_pair_freq) < 0) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_itemsize_0_for_cython_array, 0, 0); + __PYX_ERR(1, 144, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":173 - * self.min_user_freq = min_user_freq - * self.min_pair_freq = min_pair_freq - * self.min_common_freq = min_common_freq # <<<<<<<<<<<<<< - * self.use_item_aspect_popularity = use_item_aspect_popularity - * self.enum_window = enum_window + /* "View.MemoryView":143 + * raise ValueError, "Empty shape tuple for cython.array" + * + * if itemsize <= 0: # <<<<<<<<<<<<<< + * raise ValueError, "itemsize <= 0 for cython.array" + * */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_min_common_freq, __pyx_v_min_common_freq) < 0) __PYX_ERR(0, 173, __pyx_L1_error) + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":174 - * self.min_pair_freq = min_pair_freq - * self.min_common_freq = min_common_freq - * self.use_item_aspect_popularity = use_item_aspect_popularity # <<<<<<<<<<<<<< - * self.enum_window = enum_window + /* "View.MemoryView":146 + * raise ValueError, "itemsize <= 0 for cython.array" * + * if not isinstance(format, bytes): # <<<<<<<<<<<<<< + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_use_item_aspect_popularity, __pyx_v_use_item_aspect_popularity) < 0) __PYX_ERR(0, 174, __pyx_L1_error) + __pyx_t_2 = PyBytes_Check(__pyx_v_format); + __pyx_t_3 = (!__pyx_t_2); + if (__pyx_t_3) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":175 - * self.min_common_freq = min_common_freq - * self.use_item_aspect_popularity = use_item_aspect_popularity - * self.enum_window = enum_window # <<<<<<<<<<<<<< + /* "View.MemoryView":147 * + * if not isinstance(format, bytes): + * format = format.encode('ASCII') # <<<<<<<<<<<<<< + * self._format = format # keep a reference to the byte string + * self.format = self._format + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_format, __pyx_n_s_encode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_n_s_ASCII}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":146 + * raise ValueError, "itemsize <= 0 for cython.array" * + * if not isinstance(format, bytes): # <<<<<<<<<<<<<< + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_enum_window, __pyx_v_enum_window) < 0) __PYX_ERR(0, 175, __pyx_L1_error) + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":137 - * ACM International Conference on Web Search and Data Mining (WSDM). 2021. - * """ - * def __init__( # <<<<<<<<<<<<<< - * self, - * name="ComparERSub", + /* "View.MemoryView":148 + * if not isinstance(format, bytes): + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string # <<<<<<<<<<<<<< + * self.format = self._format + * */ + if (!(likely(PyBytes_CheckExact(__pyx_v_format))||((__pyx_v_format) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_v_format))) __PYX_ERR(1, 148, __pyx_L1_error) + __pyx_t_4 = __pyx_v_format; + __Pyx_INCREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + __Pyx_GOTREF(__pyx_v_self->_format); + __Pyx_DECREF(__pyx_v_self->_format); + __pyx_v_self->_format = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 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_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "View.MemoryView":149 + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + * self.format = self._format # <<<<<<<<<<<<<< + * + * + */ + if (unlikely(__pyx_v_self->_format == Py_None)) { + PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found"); + __PYX_ERR(1, 149, __pyx_L1_error) + } + __pyx_t_8 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->_format); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(1, 149, __pyx_L1_error) + __pyx_v_self->format = __pyx_t_8; -/* "cornac/models/comparer/recom_comparer_sub.pyx":178 + /* "View.MemoryView":152 * * - * def _build_item_quality_matrix(self, data_set, sentiment): # <<<<<<<<<<<<<< - * start_time = time() - * quality_scores = [] + * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) # <<<<<<<<<<<<<< + * self._strides = self._shape + self.ndim + * */ + __pyx_v_self->_shape = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * __pyx_v_self->ndim) * 2))); -/* Python wrapper */ -static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_3_build_item_quality_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_3_build_item_quality_matrix = {"_build_item_quality_matrix", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_3_build_item_quality_matrix, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_3_build_item_quality_matrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - CYTHON_UNUSED PyObject *__pyx_v_data_set = 0; - PyObject *__pyx_v_sentiment = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_build_item_quality_matrix (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_data_set,&__pyx_n_s_sentiment,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_data_set)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_build_item_quality_matrix", 1, 3, 3, 1); __PYX_ERR(0, 178, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sentiment)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_build_item_quality_matrix", 1, 3, 3, 2); __PYX_ERR(0, 178, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_build_item_quality_matrix") < 0)) __PYX_ERR(0, 178, __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_self = values[0]; - __pyx_v_data_set = values[1]; - __pyx_v_sentiment = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_build_item_quality_matrix", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 178, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._build_item_quality_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_2_build_item_quality_matrix(__pyx_self, __pyx_v_self, __pyx_v_data_set, __pyx_v_sentiment); + /* "View.MemoryView":153 + * + * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) + * self._strides = self._shape + self.ndim # <<<<<<<<<<<<<< + * + * if not self._shape: + */ + __pyx_v_self->_strides = (__pyx_v_self->_shape + __pyx_v_self->ndim); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "View.MemoryView":155 + * self._strides = self._shape + self.ndim + * + * if not self._shape: # <<<<<<<<<<<<<< + * raise MemoryError, "unable to allocate shape and strides." + * + */ + __pyx_t_3 = (!(__pyx_v_self->_shape != 0)); + if (unlikely(__pyx_t_3)) { -static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_2_build_item_quality_matrix(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_data_set, PyObject *__pyx_v_sentiment) { - PyObject *__pyx_v_start_time = NULL; - PyObject *__pyx_v_quality_scores = NULL; - PyObject *__pyx_v_map_iid = NULL; - PyObject *__pyx_v_map_aspect_id = NULL; - PyObject *__pyx_v_iid = NULL; - PyObject *__pyx_v_sentiment_tup_ids_by_user = NULL; - PyObject *__pyx_v_item_aspects = NULL; - PyObject *__pyx_v_item_aspect_count = NULL; - PyObject *__pyx_v_total_sentiment_by_aspect = NULL; - PyObject *__pyx_v_tup_id = NULL; - PyObject *__pyx_v_aid = NULL; - CYTHON_UNUSED PyObject *__pyx_v__ = NULL; - PyObject *__pyx_v_sentiment_polarity = NULL; - PyObject *__pyx_v_total_sentiment = NULL; - PyObject *__pyx_v_avg_sentiment = NULL; - PyObject *__pyx_v_Y = NULL; - PyObject *__pyx_7genexpr__pyx_v_tup_id = NULL; - PyObject *__pyx_7genexpr__pyx_v_tup = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - Py_ssize_t __pyx_t_5; - int __pyx_t_6; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - Py_ssize_t __pyx_t_10; - Py_ssize_t __pyx_t_11; - int __pyx_t_12; - PyObject *__pyx_t_13 = NULL; - Py_ssize_t __pyx_t_14; - PyObject *(*__pyx_t_15)(PyObject *); - PyObject *__pyx_t_16 = NULL; - PyObject *__pyx_t_17 = NULL; - PyObject *__pyx_t_18 = NULL; - PyObject *(*__pyx_t_19)(PyObject *); - int __pyx_t_20; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_build_item_quality_matrix", 0); + /* "View.MemoryView":156 + * + * if not self._shape: + * raise MemoryError, "unable to allocate shape and strides." # <<<<<<<<<<<<<< + * + * + */ + __Pyx_Raise(__pyx_builtin_MemoryError, __pyx_kp_s_unable_to_allocate_shape_and_str, 0, 0); + __PYX_ERR(1, 156, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":179 + /* "View.MemoryView":155 + * self._strides = self._shape + self.ndim + * + * if not self._shape: # <<<<<<<<<<<<<< + * raise MemoryError, "unable to allocate shape and strides." * - * def _build_item_quality_matrix(self, data_set, sentiment): - * start_time = time() # <<<<<<<<<<<<<< - * quality_scores = [] - * map_iid = [] */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_start_time = __pyx_t_1; - __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":180 - * def _build_item_quality_matrix(self, data_set, sentiment): - * start_time = time() - * quality_scores = [] # <<<<<<<<<<<<<< - * map_iid = [] - * map_aspect_id = [] + /* "View.MemoryView":159 + * + * + * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< + * if dim <= 0: + * raise ValueError, f"Invalid shape in axis {idx}: {dim}." */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_quality_scores = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_t_7 = 0; + __pyx_t_4 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_4); __pyx_t_1 = 0; + for (;;) { + if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely((0 < 0))) __PYX_ERR(1, 159, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 159, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 159, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_dim = __pyx_t_9; + __pyx_v_idx = __pyx_t_7; + __pyx_t_7 = (__pyx_t_7 + 1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":181 - * start_time = time() - * quality_scores = [] - * map_iid = [] # <<<<<<<<<<<<<< - * map_aspect_id = [] - * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): + /* "View.MemoryView":160 + * + * for idx, dim in enumerate(shape): + * if dim <= 0: # <<<<<<<<<<<<<< + * raise ValueError, f"Invalid shape in axis {idx}: {dim}." + * self._shape[idx] = dim */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_map_iid = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_t_3 = (__pyx_v_dim <= 0); + if (unlikely(__pyx_t_3)) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":182 - * quality_scores = [] - * map_iid = [] - * map_aspect_id = [] # <<<<<<<<<<<<<< - * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): - * if self.train_set.is_unk_item(iid): + /* "View.MemoryView":161 + * for idx, dim in enumerate(shape): + * if dim <= 0: + * raise ValueError, f"Invalid shape in axis {idx}: {dim}." # <<<<<<<<<<<<<< + * self._shape[idx] = dim + * */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 182, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_map_aspect_id = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_9 = 0; + __pyx_t_10 = 127; + __Pyx_INCREF(__pyx_kp_u_Invalid_shape_in_axis); + __pyx_t_9 += 22; + __Pyx_GIVEREF(__pyx_kp_u_Invalid_shape_in_axis); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Invalid_shape_in_axis); + __pyx_t_6 = __Pyx_PyUnicode_From_int(__pyx_v_idx, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u_); + __pyx_t_9 += 2; + __Pyx_GIVEREF(__pyx_kp_u_); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_); + __pyx_t_6 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_dim, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u__2); + __pyx_t_9 += 1; + __Pyx_GIVEREF(__pyx_kp_u__2); + PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u__2); + __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_5, 5, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_6, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(1, 161, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":183 - * map_iid = [] - * map_aspect_id = [] - * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): # <<<<<<<<<<<<<< - * if self.train_set.is_unk_item(iid): - * continue + /* "View.MemoryView":160 + * + * for idx, dim in enumerate(shape): + * if dim <= 0: # <<<<<<<<<<<<<< + * raise ValueError, f"Invalid shape in axis {idx}: {dim}." + * self._shape[idx] = dim */ - __pyx_t_4 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_item_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 183, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (unlikely(__pyx_t_2 == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); - __PYX_ERR(0, 183, __pyx_L1_error) - } - __pyx_t_3 = __Pyx_dict_iterator(__pyx_t_2, 0, __pyx_n_s_items, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 183, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_1); - __pyx_t_1 = __pyx_t_3; - __pyx_t_3 = 0; - while (1) { - __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_5, &__pyx_t_4, &__pyx_t_3, &__pyx_t_2, NULL, __pyx_t_6); - if (unlikely(__pyx_t_7 == 0)) break; - if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 183, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_t_2); - __Pyx_XDECREF_SET(__pyx_v_iid, __pyx_t_3); - __pyx_t_3 = 0; - __Pyx_XDECREF_SET(__pyx_v_sentiment_tup_ids_by_user, __pyx_t_2); - __pyx_t_2 = 0; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":184 - * map_aspect_id = [] - * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): - * if self.train_set.is_unk_item(iid): # <<<<<<<<<<<<<< - * continue - * item_aspects = [tup[0] + /* "View.MemoryView":162 + * if dim <= 0: + * raise ValueError, f"Invalid shape in axis {idx}: {dim}." + * self._shape[idx] = dim # <<<<<<<<<<<<<< + * + * cdef char order */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_is_unk_item); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 184, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } - } - __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_3, __pyx_v_iid) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_iid); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 184, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_9) { + (__pyx_v_self->_shape[__pyx_v_idx]) = __pyx_v_dim; - /* "cornac/models/comparer/recom_comparer_sub.pyx":185 - * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): - * if self.train_set.is_unk_item(iid): - * continue # <<<<<<<<<<<<<< - * item_aspects = [tup[0] - * for tup_id in sentiment_tup_ids_by_user.values() + /* "View.MemoryView":159 + * + * + * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< + * if dim <= 0: + * raise ValueError, f"Invalid shape in axis {idx}: {dim}." */ - goto __pyx_L3_continue; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":184 - * map_aspect_id = [] - * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): - * if self.train_set.is_unk_item(iid): # <<<<<<<<<<<<<< - * continue - * item_aspects = [tup[0] + /* "View.MemoryView":165 + * + * cdef char order + * if mode == 'c': # <<<<<<<<<<<<<< + * order = b'C' + * self.mode = u'c' */ - } + __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 165, __pyx_L1_error) + if (__pyx_t_3) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":186 - * if self.train_set.is_unk_item(iid): - * continue - * item_aspects = [tup[0] # <<<<<<<<<<<<<< - * for tup_id in sentiment_tup_ids_by_user.values() - * for tup in sentiment.sentiment[tup_id]] + /* "View.MemoryView":166 + * cdef char order + * if mode == 'c': + * order = b'C' # <<<<<<<<<<<<<< + * self.mode = u'c' + * elif mode == 'fortran': */ - { /* enter inner scope */ - __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 186, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_v_order = 'C'; - /* "cornac/models/comparer/recom_comparer_sub.pyx":187 - * continue - * item_aspects = [tup[0] - * for tup_id in sentiment_tup_ids_by_user.values() # <<<<<<<<<<<<<< - * for tup in sentiment.sentiment[tup_id]] - * item_aspect_count = Counter(item_aspects) + /* "View.MemoryView":167 + * if mode == 'c': + * order = b'C' + * self.mode = u'c' # <<<<<<<<<<<<<< + * elif mode == 'fortran': + * order = b'F' */ - __pyx_t_10 = 0; - if (unlikely(__pyx_v_sentiment_tup_ids_by_user == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); - __PYX_ERR(0, 187, __pyx_L8_error) - } - __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_sentiment_tup_ids_by_user, 0, __pyx_n_s_values, (&__pyx_t_11), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 187, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_8); - __pyx_t_8 = __pyx_t_3; - __pyx_t_3 = 0; - while (1) { - __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_8, __pyx_t_11, &__pyx_t_10, NULL, &__pyx_t_3, NULL, __pyx_t_7); - if (unlikely(__pyx_t_12 == 0)) break; - if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 187, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_tup_id, __pyx_t_3); - __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_n_u_c); + __Pyx_GIVEREF(__pyx_n_u_c); + __Pyx_GOTREF(__pyx_v_self->mode); + __Pyx_DECREF(__pyx_v_self->mode); + __pyx_v_self->mode = __pyx_n_u_c; - /* "cornac/models/comparer/recom_comparer_sub.pyx":188 - * item_aspects = [tup[0] - * for tup_id in sentiment_tup_ids_by_user.values() - * for tup in sentiment.sentiment[tup_id]] # <<<<<<<<<<<<<< - * item_aspect_count = Counter(item_aspects) - * total_sentiment_by_aspect = OrderedDict() + /* "View.MemoryView":165 + * + * cdef char order + * if mode == 'c': # <<<<<<<<<<<<<< + * order = b'C' + * self.mode = u'c' */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 188, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_13 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_7genexpr__pyx_v_tup_id); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 188, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (likely(PyList_CheckExact(__pyx_t_13)) || PyTuple_CheckExact(__pyx_t_13)) { - __pyx_t_3 = __pyx_t_13; __Pyx_INCREF(__pyx_t_3); __pyx_t_14 = 0; - __pyx_t_15 = NULL; - } else { - __pyx_t_14 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 188, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_15 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 188, __pyx_L8_error) - } - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - for (;;) { - if (likely(!__pyx_t_15)) { - if (likely(PyList_CheckExact(__pyx_t_3))) { - if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_13 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_14); __Pyx_INCREF(__pyx_t_13); __pyx_t_14++; if (unlikely(0 < 0)) __PYX_ERR(0, 188, __pyx_L8_error) - #else - __pyx_t_13 = PySequence_ITEM(__pyx_t_3, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 188, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_13); - #endif - } else { - if (__pyx_t_14 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_13 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_14); __Pyx_INCREF(__pyx_t_13); __pyx_t_14++; if (unlikely(0 < 0)) __PYX_ERR(0, 188, __pyx_L8_error) - #else - __pyx_t_13 = PySequence_ITEM(__pyx_t_3, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 188, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_13); - #endif - } - } else { - __pyx_t_13 = __pyx_t_15(__pyx_t_3); - if (unlikely(!__pyx_t_13)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 188, __pyx_L8_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_13); - } - __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_tup, __pyx_t_13); - __pyx_t_13 = 0; + goto __pyx_L11; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":186 - * if self.train_set.is_unk_item(iid): - * continue - * item_aspects = [tup[0] # <<<<<<<<<<<<<< - * for tup_id in sentiment_tup_ids_by_user.values() - * for tup in sentiment.sentiment[tup_id]] + /* "View.MemoryView":168 + * order = b'C' + * self.mode = u'c' + * elif mode == 'fortran': # <<<<<<<<<<<<<< + * order = b'F' + * self.mode = u'fortran' */ - __pyx_t_13 = __Pyx_GetItemInt(__pyx_7genexpr__pyx_v_tup, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 186, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_13); - if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_13))) __PYX_ERR(0, 186, __pyx_L8_error) - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_fortran, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 168, __pyx_L1_error) + if (likely(__pyx_t_3)) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":188 - * item_aspects = [tup[0] - * for tup_id in sentiment_tup_ids_by_user.values() - * for tup in sentiment.sentiment[tup_id]] # <<<<<<<<<<<<<< - * item_aspect_count = Counter(item_aspects) - * total_sentiment_by_aspect = OrderedDict() + /* "View.MemoryView":169 + * self.mode = u'c' + * elif mode == 'fortran': + * order = b'F' # <<<<<<<<<<<<<< + * self.mode = u'fortran' + * else: */ - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup); __pyx_7genexpr__pyx_v_tup = 0; - __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup_id); __pyx_7genexpr__pyx_v_tup_id = 0; - goto __pyx_L13_exit_scope; - __pyx_L8_error:; - __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup); __pyx_7genexpr__pyx_v_tup = 0; - __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup_id); __pyx_7genexpr__pyx_v_tup_id = 0; - goto __pyx_L1_error; - __pyx_L13_exit_scope:; - } /* exit inner scope */ - __Pyx_XDECREF_SET(__pyx_v_item_aspects, ((PyObject*)__pyx_t_2)); - __pyx_t_2 = 0; + __pyx_v_order = 'F'; - /* "cornac/models/comparer/recom_comparer_sub.pyx":189 - * for tup_id in sentiment_tup_ids_by_user.values() - * for tup in sentiment.sentiment[tup_id]] - * item_aspect_count = Counter(item_aspects) # <<<<<<<<<<<<<< - * total_sentiment_by_aspect = OrderedDict() - * for tup_id in sentiment_tup_ids_by_user.values(): + /* "View.MemoryView":170 + * elif mode == 'fortran': + * order = b'F' + * self.mode = u'fortran' # <<<<<<<<<<<<<< + * else: + * raise ValueError, f"Invalid mode, expected 'c' or 'fortran', got {mode}" */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_Counter); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 189, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } - } - __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_3, __pyx_v_item_aspects) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_item_aspects); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 189, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF_SET(__pyx_v_item_aspect_count, __pyx_t_2); - __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_n_u_fortran); + __Pyx_GIVEREF(__pyx_n_u_fortran); + __Pyx_GOTREF(__pyx_v_self->mode); + __Pyx_DECREF(__pyx_v_self->mode); + __pyx_v_self->mode = __pyx_n_u_fortran; - /* "cornac/models/comparer/recom_comparer_sub.pyx":190 - * for tup in sentiment.sentiment[tup_id]] - * item_aspect_count = Counter(item_aspects) - * total_sentiment_by_aspect = OrderedDict() # <<<<<<<<<<<<<< - * for tup_id in sentiment_tup_ids_by_user.values(): - * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: + /* "View.MemoryView":168 + * order = b'C' + * self.mode = u'c' + * elif mode == 'fortran': # <<<<<<<<<<<<<< + * order = b'F' + * self.mode = u'fortran' */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_OrderedDict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 190, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } - } - __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 190, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF_SET(__pyx_v_total_sentiment_by_aspect, __pyx_t_2); - __pyx_t_2 = 0; + goto __pyx_L11; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":191 - * item_aspect_count = Counter(item_aspects) - * total_sentiment_by_aspect = OrderedDict() - * for tup_id in sentiment_tup_ids_by_user.values(): # <<<<<<<<<<<<<< - * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: - * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity + /* "View.MemoryView":172 + * self.mode = u'fortran' + * else: + * raise ValueError, f"Invalid mode, expected 'c' or 'fortran', got {mode}" # <<<<<<<<<<<<<< + * + * self.len = fill_contig_strides_array(self._shape, self._strides, itemsize, self.ndim, order) */ - __pyx_t_11 = 0; - if (unlikely(__pyx_v_sentiment_tup_ids_by_user == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); - __PYX_ERR(0, 191, __pyx_L1_error) - } - __pyx_t_8 = __Pyx_dict_iterator(__pyx_v_sentiment_tup_ids_by_user, 0, __pyx_n_s_values, (&__pyx_t_10), (&__pyx_t_7)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 191, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_2); - __pyx_t_2 = __pyx_t_8; - __pyx_t_8 = 0; - while (1) { - __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_10, &__pyx_t_11, NULL, &__pyx_t_8, NULL, __pyx_t_7); - if (unlikely(__pyx_t_12 == 0)) break; - if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 191, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_XDECREF_SET(__pyx_v_tup_id, __pyx_t_8); - __pyx_t_8 = 0; + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_mode, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 172, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_mode_expected_c_or_fortr, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 172, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_6, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(1, 172, __pyx_L1_error) + } + __pyx_L11:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":192 - * total_sentiment_by_aspect = OrderedDict() - * for tup_id in sentiment_tup_ids_by_user.values(): - * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: # <<<<<<<<<<<<<< - * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity - * for aid, total_sentiment in total_sentiment_by_aspect.items(): + /* "View.MemoryView":174 + * raise ValueError, f"Invalid mode, expected 'c' or 'fortran', got {mode}" + * + * self.len = fill_contig_strides_array(self._shape, self._strides, itemsize, self.ndim, order) # <<<<<<<<<<<<<< + * + * self.free_data = allocate_buffer */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 192, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_8, __pyx_v_tup_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 192, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { - __pyx_t_8 = __pyx_t_3; __Pyx_INCREF(__pyx_t_8); __pyx_t_14 = 0; - __pyx_t_15 = NULL; - } else { - __pyx_t_14 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 192, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_15 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 192, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - for (;;) { - if (likely(!__pyx_t_15)) { - if (likely(PyList_CheckExact(__pyx_t_8))) { - if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_14); __Pyx_INCREF(__pyx_t_3); __pyx_t_14++; if (unlikely(0 < 0)) __PYX_ERR(0, 192, __pyx_L1_error) - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_8, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 192, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - } else { - if (__pyx_t_14 >= PyTuple_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_14); __Pyx_INCREF(__pyx_t_3); __pyx_t_14++; if (unlikely(0 < 0)) __PYX_ERR(0, 192, __pyx_L1_error) - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_8, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 192, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - } - } else { - __pyx_t_3 = __pyx_t_15(__pyx_t_8); - if (unlikely(!__pyx_t_3)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 192, __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; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 3)) { - if (size > 3) __Pyx_RaiseTooManyValuesError(3); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 192, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_13 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_16 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_17 = PyTuple_GET_ITEM(sequence, 2); - } else { - __pyx_t_13 = PyList_GET_ITEM(sequence, 0); - __pyx_t_16 = PyList_GET_ITEM(sequence, 1); - __pyx_t_17 = PyList_GET_ITEM(sequence, 2); - } - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(__pyx_t_16); - __Pyx_INCREF(__pyx_t_17); - #else - __pyx_t_13 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 192, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_16 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 192, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_16); - __pyx_t_17 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 192, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - #endif - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_18 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 192, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_19 = Py_TYPE(__pyx_t_18)->tp_iternext; - index = 0; __pyx_t_13 = __pyx_t_19(__pyx_t_18); if (unlikely(!__pyx_t_13)) goto __pyx_L18_unpacking_failed; - __Pyx_GOTREF(__pyx_t_13); - index = 1; __pyx_t_16 = __pyx_t_19(__pyx_t_18); if (unlikely(!__pyx_t_16)) goto __pyx_L18_unpacking_failed; - __Pyx_GOTREF(__pyx_t_16); - index = 2; __pyx_t_17 = __pyx_t_19(__pyx_t_18); if (unlikely(!__pyx_t_17)) goto __pyx_L18_unpacking_failed; - __Pyx_GOTREF(__pyx_t_17); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_18), 3) < 0) __PYX_ERR(0, 192, __pyx_L1_error) - __pyx_t_19 = NULL; - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - goto __pyx_L19_unpacking_done; - __pyx_L18_unpacking_failed:; - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - __pyx_t_19 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 192, __pyx_L1_error) - __pyx_L19_unpacking_done:; - } - __Pyx_XDECREF_SET(__pyx_v_aid, __pyx_t_13); - __pyx_t_13 = 0; - __Pyx_XDECREF_SET(__pyx_v__, __pyx_t_16); - __pyx_t_16 = 0; - __Pyx_XDECREF_SET(__pyx_v_sentiment_polarity, __pyx_t_17); - __pyx_t_17 = 0; + __pyx_v_self->len = __pyx_fill_contig_strides_array(__pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_itemsize, __pyx_v_self->ndim, __pyx_v_order); - /* "cornac/models/comparer/recom_comparer_sub.pyx":193 - * for tup_id in sentiment_tup_ids_by_user.values(): - * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: - * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity # <<<<<<<<<<<<<< - * for aid, total_sentiment in total_sentiment_by_aspect.items(): - * map_iid.append(iid) + /* "View.MemoryView":176 + * self.len = fill_contig_strides_array(self._shape, self._strides, itemsize, self.ndim, order) + * + * self.free_data = allocate_buffer # <<<<<<<<<<<<<< + * self.dtype_is_object = format == b'O' + * */ - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_total_sentiment_by_aspect, __pyx_n_s_get); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 193, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_16 = NULL; - __pyx_t_12 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) { - __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_17); - if (likely(__pyx_t_16)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17); - __Pyx_INCREF(__pyx_t_16); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_17, function); - __pyx_t_12 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_17)) { - PyObject *__pyx_temp[3] = {__pyx_t_16, __pyx_v_aid, __pyx_int_0}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_17, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 193, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; - __Pyx_GOTREF(__pyx_t_3); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_17)) { - PyObject *__pyx_temp[3] = {__pyx_t_16, __pyx_v_aid, __pyx_int_0}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_17, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 193, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; - __Pyx_GOTREF(__pyx_t_3); - } else - #endif - { - __pyx_t_13 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 193, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - if (__pyx_t_16) { - __Pyx_GIVEREF(__pyx_t_16); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_16); __pyx_t_16 = NULL; - } - __Pyx_INCREF(__pyx_v_aid); - __Pyx_GIVEREF(__pyx_v_aid); - PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_12, __pyx_v_aid); - __Pyx_INCREF(__pyx_int_0); - __Pyx_GIVEREF(__pyx_int_0); - PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_12, __pyx_int_0); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_t_13, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 193, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - } - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __pyx_t_17 = PyNumber_Add(__pyx_t_3, __pyx_v_sentiment_polarity); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 193, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(PyObject_SetItem(__pyx_v_total_sentiment_by_aspect, __pyx_v_aid, __pyx_t_17) < 0)) __PYX_ERR(0, 193, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_v_self->free_data = __pyx_v_allocate_buffer; - /* "cornac/models/comparer/recom_comparer_sub.pyx":192 - * total_sentiment_by_aspect = OrderedDict() - * for tup_id in sentiment_tup_ids_by_user.values(): - * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: # <<<<<<<<<<<<<< - * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity - * for aid, total_sentiment in total_sentiment_by_aspect.items(): + /* "View.MemoryView":177 + * + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' # <<<<<<<<<<<<<< + * + * if allocate_buffer: */ - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_6 = PyObject_RichCompare(__pyx_v_format, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 177, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 177, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_self->dtype_is_object = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":194 - * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: - * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity - * for aid, total_sentiment in total_sentiment_by_aspect.items(): # <<<<<<<<<<<<<< - * map_iid.append(iid) - * map_aspect_id.append(aid) + /* "View.MemoryView":179 + * self.dtype_is_object = format == b'O' + * + * if allocate_buffer: # <<<<<<<<<<<<<< + * _allocate_buffer(self) + * */ - __pyx_t_10 = 0; - if (unlikely(__pyx_v_total_sentiment_by_aspect == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); - __PYX_ERR(0, 194, __pyx_L1_error) - } - __pyx_t_8 = __Pyx_dict_iterator(__pyx_v_total_sentiment_by_aspect, 0, __pyx_n_s_items, (&__pyx_t_11), (&__pyx_t_7)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 194, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_2); - __pyx_t_2 = __pyx_t_8; - __pyx_t_8 = 0; - while (1) { - __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_11, &__pyx_t_10, &__pyx_t_8, &__pyx_t_17, NULL, __pyx_t_7); - if (unlikely(__pyx_t_12 == 0)) break; - if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 194, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_17); - __Pyx_XDECREF_SET(__pyx_v_aid, __pyx_t_8); - __pyx_t_8 = 0; - __Pyx_XDECREF_SET(__pyx_v_total_sentiment, __pyx_t_17); - __pyx_t_17 = 0; + if (__pyx_v_allocate_buffer) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":195 - * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity - * for aid, total_sentiment in total_sentiment_by_aspect.items(): - * map_iid.append(iid) # <<<<<<<<<<<<<< - * map_aspect_id.append(aid) - * if self.use_item_aspect_popularity: + /* "View.MemoryView":180 + * + * if allocate_buffer: + * _allocate_buffer(self) # <<<<<<<<<<<<<< + * + * @cname('getbuffer') */ - __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_map_iid, __pyx_v_iid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 195, __pyx_L1_error) + __pyx_t_7 = __pyx_array_allocate_buffer(__pyx_v_self); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(1, 180, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":196 - * for aid, total_sentiment in total_sentiment_by_aspect.items(): - * map_iid.append(iid) - * map_aspect_id.append(aid) # <<<<<<<<<<<<<< - * if self.use_item_aspect_popularity: - * quality_scores.append(self._compute_quality_score(total_sentiment)) + /* "View.MemoryView":179 + * self.dtype_is_object = format == b'O' + * + * if allocate_buffer: # <<<<<<<<<<<<<< + * _allocate_buffer(self) + * */ - __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_map_aspect_id, __pyx_v_aid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 196, __pyx_L1_error) + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":197 - * map_iid.append(iid) - * map_aspect_id.append(aid) - * if self.use_item_aspect_popularity: # <<<<<<<<<<<<<< - * quality_scores.append(self._compute_quality_score(total_sentiment)) - * else: + /* "View.MemoryView":131 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * */ - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_use_item_aspect_popularity); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 197, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 197, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - if (__pyx_t_9) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":198 - * map_aspect_id.append(aid) - * if self.use_item_aspect_popularity: - * quality_scores.append(self._compute_quality_score(total_sentiment)) # <<<<<<<<<<<<<< - * else: - * avg_sentiment = total_sentiment / item_aspect_count[aid] - */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_compute_quality_score); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 198, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } - } - __pyx_t_17 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_3, __pyx_v_total_sentiment) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_total_sentiment); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 198, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_quality_scores, __pyx_t_17); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 198, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_format); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":197 - * map_iid.append(iid) - * map_aspect_id.append(aid) - * if self.use_item_aspect_popularity: # <<<<<<<<<<<<<< - * quality_scores.append(self._compute_quality_score(total_sentiment)) - * else: +/* "View.MemoryView":182 + * _allocate_buffer(self) + * + * @cname('getbuffer') # <<<<<<<<<<<<<< + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 */ - goto __pyx_L22; - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":200 - * quality_scores.append(self._compute_quality_score(total_sentiment)) - * else: - * avg_sentiment = total_sentiment / item_aspect_count[aid] # <<<<<<<<<<<<<< - * quality_scores.append(self._compute_quality_score(avg_sentiment)) - * quality_scores = np.asarray(quality_scores, dtype=np.float32).flatten() - */ - /*else*/ { - __pyx_t_17 = __Pyx_PyObject_GetItem(__pyx_v_item_aspect_count, __pyx_v_aid); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 200, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_v_total_sentiment, __pyx_t_17); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 200, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_XDECREF_SET(__pyx_v_avg_sentiment, __pyx_t_8); - __pyx_t_8 = 0; +/* Python wrapper */ +CYTHON_UNUSED static int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +CYTHON_UNUSED static int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(((struct __pyx_array_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":201 - * else: - * avg_sentiment = total_sentiment / item_aspect_count[aid] - * quality_scores.append(self._compute_quality_score(avg_sentiment)) # <<<<<<<<<<<<<< - * quality_scores = np.asarray(quality_scores, dtype=np.float32).flatten() - * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() - */ - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_compute_quality_score); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 201, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_17); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_17, function); - } - } - __pyx_t_8 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_17, __pyx_t_3, __pyx_v_avg_sentiment) : __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_v_avg_sentiment); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 201, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_quality_scores, __pyx_t_8); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 201, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __pyx_L22:; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_L3_continue:; + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_v_bufmode; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + char *__pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + Py_ssize_t *__pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (unlikely(__pyx_v_info == NULL)) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); - /* "cornac/models/comparer/recom_comparer_sub.pyx":202 - * avg_sentiment = total_sentiment / item_aspect_count[aid] - * quality_scores.append(self._compute_quality_score(avg_sentiment)) - * quality_scores = np.asarray(quality_scores, dtype=np.float32).flatten() # <<<<<<<<<<<<<< - * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() + /* "View.MemoryView":184 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 # <<<<<<<<<<<<<< + * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS): + * if self.mode == u"c": */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 202, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 202, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 202, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_quality_scores); - __Pyx_GIVEREF(__pyx_v_quality_scores); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_quality_scores); - __pyx_t_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 202, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 202, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float32); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 202, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyDict_SetItem(__pyx_t_17, __pyx_n_s_dtype, __pyx_t_13) < 0) __PYX_ERR(0, 202, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_2, __pyx_t_17); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 202, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_flatten); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 202, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_17); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_17, function); + __pyx_v_bufmode = -1; + + /* "View.MemoryView":185 + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 + * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS): # <<<<<<<<<<<<<< + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ + __pyx_t_1 = ((__pyx_v_flags & ((PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS) | PyBUF_ANY_CONTIGUOUS)) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":186 + * cdef int bufmode = -1 + * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS): + * if self.mode == u"c": # <<<<<<<<<<<<<< + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + */ + __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_c, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 186, __pyx_L1_error) + if (__pyx_t_1) { + + /* "View.MemoryView":187 + * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS): + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ + __pyx_v_bufmode = (PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); + + /* "View.MemoryView":186 + * cdef int bufmode = -1 + * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS): + * if self.mode == u"c": # <<<<<<<<<<<<<< + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + */ + goto __pyx_L4; } - } - __pyx_t_1 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_17); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 202, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF_SET(__pyx_v_quality_scores, __pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":203 - * quality_scores.append(self._compute_quality_score(avg_sentiment)) - * quality_scores = np.asarray(quality_scores, dtype=np.float32).flatten() - * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() # <<<<<<<<<<<<<< - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() - * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), + /* "View.MemoryView":188 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": # <<<<<<<<<<<<<< + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + */ + __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_fortran, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 188, __pyx_L1_error) + if (__pyx_t_1) { + + /* "View.MemoryView":189 + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< + * if not (flags & bufmode): + * raise ValueError, "Can only create a buffer that is contiguous in memory." + */ + __pyx_v_bufmode = (PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); + + /* "View.MemoryView":188 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": # <<<<<<<<<<<<<< + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): */ - __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_n_s_np); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 203, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_asarray); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 203, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __pyx_t_17 = PyTuple_New(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 203, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __Pyx_INCREF(__pyx_v_map_iid); - __Pyx_GIVEREF(__pyx_v_map_iid); - PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_v_map_iid); - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 203, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 203, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_int32); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 203, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 203, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_17, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 203, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_flatten); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 203, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); } - } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF_SET(__pyx_v_map_iid, __pyx_t_1); - __pyx_t_1 = 0; + __pyx_L4:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":204 - * quality_scores = np.asarray(quality_scores, dtype=np.float32).flatten() - * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() # <<<<<<<<<<<<<< - * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), - * shape=(self.train_set.num_items, sentiment.num_aspects)) + /* "View.MemoryView":190 + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): # <<<<<<<<<<<<<< + * raise ValueError, "Can only create a buffer that is contiguous in memory." + * info.buf = self.data + */ + __pyx_t_1 = (!((__pyx_v_flags & __pyx_v_bufmode) != 0)); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":191 + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + * raise ValueError, "Can only create a buffer that is contiguous in memory." # <<<<<<<<<<<<<< + * info.buf = self.data + * info.len = self.len + */ + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Can_only_create_a_buffer_that_is, 0, 0); + __PYX_ERR(1, 191, __pyx_L1_error) + + /* "View.MemoryView":190 + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): # <<<<<<<<<<<<<< + * raise ValueError, "Can only create a buffer that is contiguous in memory." + * info.buf = self.data */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 204, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 204, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 204, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_map_aspect_id); - __Pyx_GIVEREF(__pyx_v_map_aspect_id); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_map_aspect_id); - __pyx_t_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 204, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 204, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_int32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 204, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - if (PyDict_SetItem(__pyx_t_17, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 204, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_17); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 204, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_flatten); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 204, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_17); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_17, function); } + + /* "View.MemoryView":185 + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 + * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS): # <<<<<<<<<<<<<< + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ } - __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_17); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 204, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF_SET(__pyx_v_map_aspect_id, __pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":205 - * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() - * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), # <<<<<<<<<<<<<< - * shape=(self.train_set.num_items, sentiment.num_aspects)) + /* "View.MemoryView":192 + * if not (flags & bufmode): + * raise ValueError, "Can only create a buffer that is contiguous in memory." + * info.buf = self.data # <<<<<<<<<<<<<< + * info.len = self.len * */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_sp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 205, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_csr_matrix); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 205, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 205, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_map_iid); - __Pyx_GIVEREF(__pyx_v_map_iid); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_map_iid); - __Pyx_INCREF(__pyx_v_map_aspect_id); - __Pyx_GIVEREF(__pyx_v_map_aspect_id); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_map_aspect_id); - __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 205, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_quality_scores); - __Pyx_GIVEREF(__pyx_v_quality_scores); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_quality_scores); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 205, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8); - __pyx_t_8 = 0; + __pyx_t_2 = __pyx_v_self->data; + __pyx_v_info->buf = __pyx_t_2; - /* "cornac/models/comparer/recom_comparer_sub.pyx":206 - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() - * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), - * shape=(self.train_set.num_items, sentiment.num_aspects)) # <<<<<<<<<<<<<< + /* "View.MemoryView":193 + * raise ValueError, "Can only create a buffer that is contiguous in memory." + * info.buf = self.data + * info.len = self.len # <<<<<<<<<<<<<< * - * if self.verbose: + * if flags & PyBUF_STRIDES: */ - __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 206, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 206, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 206, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 206, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 206, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_2); - __pyx_t_3 = 0; - __pyx_t_2 = 0; - if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_shape, __pyx_t_13) < 0) __PYX_ERR(0, 206, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_3 = __pyx_v_self->len; + __pyx_v_info->len = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":205 - * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() - * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), # <<<<<<<<<<<<<< - * shape=(self.train_set.num_items, sentiment.num_aspects)) + /* "View.MemoryView":195 + * info.len = self.len * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.ndim = self.ndim + * info.shape = self._shape */ - __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 205, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_Y = __pyx_t_13; - __pyx_t_13 = 0; + __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":208 - * shape=(self.train_set.num_items, sentiment.num_aspects)) - * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Building item aspect quality matrix completed in %d s' % (time() - start_time)) + /* "View.MemoryView":196 * + * if flags & PyBUF_STRIDES: + * info.ndim = self.ndim # <<<<<<<<<<<<<< + * info.shape = self._shape + * info.strides = self._strides */ - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 208, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 208, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - if (__pyx_t_9) { + __pyx_t_4 = __pyx_v_self->ndim; + __pyx_v_info->ndim = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":209 + /* "View.MemoryView":197 + * if flags & PyBUF_STRIDES: + * info.ndim = self.ndim + * info.shape = self._shape # <<<<<<<<<<<<<< + * info.strides = self._strides + * else: + */ + __pyx_t_5 = __pyx_v_self->_shape; + __pyx_v_info->shape = __pyx_t_5; + + /* "View.MemoryView":198 + * info.ndim = self.ndim + * info.shape = self._shape + * info.strides = self._strides # <<<<<<<<<<<<<< + * else: + * info.ndim = 1 + */ + __pyx_t_5 = __pyx_v_self->_strides; + __pyx_v_info->strides = __pyx_t_5; + + /* "View.MemoryView":195 + * info.len = self.len * - * if self.verbose: - * print('Building item aspect quality matrix completed in %d s' % (time() - start_time)) # <<<<<<<<<<<<<< + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.ndim = self.ndim + * info.shape = self._shape + */ + goto __pyx_L6; + } + + /* "View.MemoryView":200 + * info.strides = self._strides + * else: + * info.ndim = 1 # <<<<<<<<<<<<<< + * info.shape = &self.len if flags & PyBUF_ND else NULL + * info.strides = NULL + */ + /*else*/ { + __pyx_v_info->ndim = 1; + + /* "View.MemoryView":201 + * else: + * info.ndim = 1 + * info.shape = &self.len if flags & PyBUF_ND else NULL # <<<<<<<<<<<<<< + * info.strides = NULL * - * return Y */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_time); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } + if (((__pyx_v_flags & PyBUF_ND) != 0)) { + __pyx_t_5 = (&__pyx_v_self->len); + } else { + __pyx_t_5 = NULL; } - __pyx_t_13 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Subtract(__pyx_t_13, __pyx_v_start_time); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_Building_item_aspect_quality_mat, __pyx_t_8); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_info->shape = __pyx_t_5; - /* "cornac/models/comparer/recom_comparer_sub.pyx":208 - * shape=(self.train_set.num_items, sentiment.num_aspects)) - * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Building item aspect quality matrix completed in %d s' % (time() - start_time)) + /* "View.MemoryView":202 + * info.ndim = 1 + * info.shape = &self.len if flags & PyBUF_ND else NULL + * info.strides = NULL # <<<<<<<<<<<<<< * + * info.suboffsets = NULL */ + __pyx_v_info->strides = NULL; } + __pyx_L6:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":211 - * print('Building item aspect quality matrix completed in %d s' % (time() - start_time)) + /* "View.MemoryView":204 + * info.strides = NULL * - * return Y # <<<<<<<<<<<<<< + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * info.itemsize = self.itemsize + * info.readonly = 0 + */ + __pyx_v_info->suboffsets = NULL; + + /* "View.MemoryView":205 * - * def _build_data(self, data_set): + * info.suboffsets = NULL + * info.itemsize = self.itemsize # <<<<<<<<<<<<<< + * info.readonly = 0 + * info.format = self.format if flags & PyBUF_FORMAT else NULL */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_Y); - __pyx_r = __pyx_v_Y; - goto __pyx_L0; + __pyx_t_3 = __pyx_v_self->itemsize; + __pyx_v_info->itemsize = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":178 + /* "View.MemoryView":206 + * info.suboffsets = NULL + * info.itemsize = self.itemsize + * info.readonly = 0 # <<<<<<<<<<<<<< + * info.format = self.format if flags & PyBUF_FORMAT else NULL + * info.obj = self + */ + __pyx_v_info->readonly = 0; + + /* "View.MemoryView":207 + * info.itemsize = self.itemsize + * info.readonly = 0 + * info.format = self.format if flags & PyBUF_FORMAT else NULL # <<<<<<<<<<<<<< + * info.obj = self + * + */ + if (((__pyx_v_flags & PyBUF_FORMAT) != 0)) { + __pyx_t_2 = __pyx_v_self->format; + } else { + __pyx_t_2 = NULL; + } + __pyx_v_info->format = __pyx_t_2; + + /* "View.MemoryView":208 + * info.readonly = 0 + * info.format = self.format if flags & PyBUF_FORMAT else NULL + * info.obj = self # <<<<<<<<<<<<<< * + * def __dealloc__(array self): + */ + __Pyx_INCREF((PyObject *)__pyx_v_self); + __Pyx_GIVEREF((PyObject *)__pyx_v_self); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + + /* "View.MemoryView":182 + * _allocate_buffer(self) * - * def _build_item_quality_matrix(self, data_set, sentiment): # <<<<<<<<<<<<<< - * start_time = time() - * quality_scores = [] + * @cname('getbuffer') # <<<<<<<<<<<<<< + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 */ /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_13); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_XDECREF(__pyx_t_17); - __Pyx_XDECREF(__pyx_t_18); - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._build_item_quality_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; + __Pyx_AddTraceback("View.MemoryView.array.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_start_time); - __Pyx_XDECREF(__pyx_v_quality_scores); - __Pyx_XDECREF(__pyx_v_map_iid); - __Pyx_XDECREF(__pyx_v_map_aspect_id); - __Pyx_XDECREF(__pyx_v_iid); - __Pyx_XDECREF(__pyx_v_sentiment_tup_ids_by_user); - __Pyx_XDECREF(__pyx_v_item_aspects); - __Pyx_XDECREF(__pyx_v_item_aspect_count); - __Pyx_XDECREF(__pyx_v_total_sentiment_by_aspect); - __Pyx_XDECREF(__pyx_v_tup_id); - __Pyx_XDECREF(__pyx_v_aid); - __Pyx_XDECREF(__pyx_v__); - __Pyx_XDECREF(__pyx_v_sentiment_polarity); - __Pyx_XDECREF(__pyx_v_total_sentiment); - __Pyx_XDECREF(__pyx_v_avg_sentiment); - __Pyx_XDECREF(__pyx_v_Y); - __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup_id); - __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup); - __Pyx_XGIVEREF(__pyx_r); + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "cornac/models/comparer/recom_comparer_sub.pyx":213 - * return Y +/* "View.MemoryView":210 + * info.obj = self * - * def _build_data(self, data_set): # <<<<<<<<<<<<<< - * import time - * from tqdm import tqdm + * def __dealloc__(array self): # <<<<<<<<<<<<<< + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) */ /* Python wrapper */ -static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_5_build_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_5_build_data = {"_build_data", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_5_build_data, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_5_build_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_data_set = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; +static void __pyx_array___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_array___dealloc__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_build_data (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_data_set,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_data_set)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_build_data", 1, 2, 2, 1); __PYX_ERR(0, 213, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_build_data") < 0)) __PYX_ERR(0, 213, __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_self = values[0]; - __pyx_v_data_set = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_build_data", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 213, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._build_data", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_4_build_data(__pyx_self, __pyx_v_self, __pyx_v_data_set); + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(((struct __pyx_array_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); - return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_4_build_data(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_data_set) { - PyObject *__pyx_v_time = NULL; - PyObject *__pyx_v_tqdm = NULL; - PyObject *__pyx_v_start_time = NULL; - PyObject *__pyx_v_sentiment = NULL; - PyObject *__pyx_v_u_indices = NULL; - PyObject *__pyx_v_i_indices = NULL; - PyObject *__pyx_v_r_values = NULL; - PyObject *__pyx_v_keys = NULL; - struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict = 0; - PyObject *__pyx_v_rating_matrix = NULL; - PyObject *__pyx_v_user_item_aspect = NULL; - PyObject *__pyx_v_user_aspect_opinion = NULL; - PyObject *__pyx_v_item_aspect_opinion = NULL; - PyObject *__pyx_v_u_idx = NULL; - PyObject *__pyx_v_sentiment_tup_ids_by_item = NULL; - PyObject *__pyx_v_i_idx = NULL; - PyObject *__pyx_v_tup_idx = NULL; - PyObject *__pyx_v_a_idx = NULL; - PyObject *__pyx_v_o_idx = NULL; - PyObject *__pyx_v_polarity = NULL; - PyObject *__pyx_v_key = NULL; - PyObject *__pyx_v_Y = NULL; - PyObject *__pyx_v_user_indices = NULL; - PyObject *__pyx_v_earlier_indices = NULL; - PyObject *__pyx_v_later_indices = NULL; - PyObject *__pyx_v_aspect_indices = NULL; - PyObject *__pyx_v_pair_freq = NULL; - PyObject *__pyx_v_total_time = NULL; - PyObject *__pyx_8genexpr1__pyx_v_u = NULL; - PyObject *__pyx_8genexpr1__pyx_v_i = NULL; - PyObject *__pyx_r = NULL; +static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self) { __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *(*__pyx_t_7)(PyObject *); - Py_ssize_t __pyx_t_8; - PyObject *(*__pyx_t_9)(PyObject *); - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - int __pyx_t_12; - int __pyx_t_13; - Py_ssize_t __pyx_t_14; - Py_ssize_t __pyx_t_15; - Py_ssize_t __pyx_t_16; - PyObject *(*__pyx_t_17)(PyObject *); - PyObject *__pyx_t_18 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_build_data", 0); + int __pyx_t_1; + int __pyx_t_2; + __Pyx_RefNannySetupContext("__dealloc__", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":214 - * - * def _build_data(self, data_set): - * import time # <<<<<<<<<<<<<< - * from tqdm import tqdm + /* "View.MemoryView":211 * + * def __dealloc__(array self): + * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< + * self.callback_free_data(self.data) + * elif self.free_data and self.data is not NULL: */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_time, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 214, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_time = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_t_1 = (__pyx_v_self->callback_free_data != NULL); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":215 - * def _build_data(self, data_set): - * import time - * from tqdm import tqdm # <<<<<<<<<<<<<< - * - * start_time = time.time() + /* "View.MemoryView":212 + * def __dealloc__(array self): + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) # <<<<<<<<<<<<<< + * elif self.free_data and self.data is not NULL: + * if self.dtype_is_object: */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_tqdm); - __Pyx_GIVEREF(__pyx_n_s_tqdm); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_tqdm); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_tqdm, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 215, __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_tqdm); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_tqdm = __pyx_t_1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_self->callback_free_data(__pyx_v_self->data); - /* "cornac/models/comparer/recom_comparer_sub.pyx":217 - * from tqdm import tqdm + /* "View.MemoryView":211 * - * start_time = time.time() # <<<<<<<<<<<<<< - * if self.verbose: - * print("Building data started!") + * def __dealloc__(array self): + * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< + * self.callback_free_data(self.data) + * elif self.free_data and self.data is not NULL: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_time, __pyx_n_s_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 217, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } + goto __pyx_L3; } - __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 217, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_start_time = __pyx_t_2; - __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":218 - * - * start_time = time.time() - * if self.verbose: # <<<<<<<<<<<<<< - * print("Building data started!") + /* "View.MemoryView":213 + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + * elif self.free_data and self.data is not NULL: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False) + */ + if (__pyx_v_self->free_data) { + } else { + __pyx_t_1 = __pyx_v_self->free_data; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_self->data != NULL); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (__pyx_t_1) { + + /* "View.MemoryView":214 + * self.callback_free_data(self.data) + * elif self.free_data and self.data is not NULL: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False) + * free(self.data) + */ + if (__pyx_v_self->dtype_is_object) { + + /* "View.MemoryView":215 + * elif self.free_data and self.data is not NULL: + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False) # <<<<<<<<<<<<<< + * free(self.data) + * PyObject_Free(self._shape) + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_self->data, __pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_self->ndim, 0); + + /* "View.MemoryView":214 + * self.callback_free_data(self.data) + * elif self.free_data and self.data is not NULL: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False) + * free(self.data) + */ + } + + /* "View.MemoryView":216 + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False) + * free(self.data) # <<<<<<<<<<<<<< + * PyObject_Free(self._shape) * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 218, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_4) { + free(__pyx_v_self->data); - /* "cornac/models/comparer/recom_comparer_sub.pyx":219 - * start_time = time.time() - * if self.verbose: - * print("Building data started!") # <<<<<<<<<<<<<< + /* "View.MemoryView":213 + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + * elif self.free_data and self.data is not NULL: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False) + */ + } + __pyx_L3:; + + /* "View.MemoryView":217 + * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False) + * free(self.data) + * PyObject_Free(self._shape) # <<<<<<<<<<<<<< * - * sentiment = self.train_set.sentiment + * @property */ - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 219, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyObject_Free(__pyx_v_self->_shape); - /* "cornac/models/comparer/recom_comparer_sub.pyx":218 + /* "View.MemoryView":210 + * info.obj = self * - * start_time = time.time() - * if self.verbose: # <<<<<<<<<<<<<< - * print("Building data started!") + * def __dealloc__(array self): # <<<<<<<<<<<<<< + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":219 + * PyObject_Free(self._shape) * + * @property # <<<<<<<<<<<<<< + * def memview(self): + * return self.get_memview() */ - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":221 - * print("Building data started!") +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_5array_7memview___get__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":221 + * @property + * def memview(self): + * return self.get_memview() # <<<<<<<<<<<<<< * - * sentiment = self.train_set.sentiment # <<<<<<<<<<<<<< - * (u_indices, i_indices, r_values) = data_set.uir_tuple - * keys = np.array([get_key(u, i) for u, i in zip(u_indices, i_indices)], dtype=np.intp) + * @cname('get_memview') */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 221, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((struct __pyx_vtabstruct_array *)__pyx_v_self->__pyx_vtab)->get_memview(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 221, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_sentiment = __pyx_t_1; + __pyx_r = __pyx_t_1; __pyx_t_1 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":222 + /* "View.MemoryView":219 + * PyObject_Free(self._shape) * - * sentiment = self.train_set.sentiment - * (u_indices, i_indices, r_values) = data_set.uir_tuple # <<<<<<<<<<<<<< - * keys = np.array([get_key(u, i) for u, i in zip(u_indices, i_indices)], dtype=np.intp) - * cdef IntFloatDict rating_dict = IntFloatDict(keys, np.array(r_values, dtype=np.float64)) + * @property # <<<<<<<<<<<<<< + * def memview(self): + * return self.get_memview() */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_data_set, __pyx_n_s_uir_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { - PyObject* sequence = __pyx_t_1; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 3)) { - if (size > 3) __Pyx_RaiseTooManyValuesError(3); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 222, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); - } else { - __pyx_t_2 = PyList_GET_ITEM(sequence, 0); - __pyx_t_3 = PyList_GET_ITEM(sequence, 1); - __pyx_t_5 = PyList_GET_ITEM(sequence, 2); - } - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_5); - #else - __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 222, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 222, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 222, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 222, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; - index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L4_unpacking_failed; - __Pyx_GOTREF(__pyx_t_2); - index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed; - __Pyx_GOTREF(__pyx_t_3); - index = 2; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; - __Pyx_GOTREF(__pyx_t_5); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 3) < 0) __PYX_ERR(0, 222, __pyx_L1_error) - __pyx_t_7 = NULL; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L5_unpacking_done; - __pyx_L4_unpacking_failed:; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 222, __pyx_L1_error) - __pyx_L5_unpacking_done:; - } - __pyx_v_u_indices = __pyx_t_2; - __pyx_t_2 = 0; - __pyx_v_i_indices = __pyx_t_3; - __pyx_t_3 = 0; - __pyx_v_r_values = __pyx_t_5; - __pyx_t_5 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":223 - * sentiment = self.train_set.sentiment - * (u_indices, i_indices, r_values) = data_set.uir_tuple - * keys = np.array([get_key(u, i) for u, i in zip(u_indices, i_indices)], dtype=np.intp) # <<<<<<<<<<<<<< - * cdef IntFloatDict rating_dict = IntFloatDict(keys, np.array(r_values, dtype=np.float64)) - * rating_matrix = sp.csr_matrix( + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":224 + * + * @cname('get_memview') + * cdef get_memview(self): # <<<<<<<<<<<<<< + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 223, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - { /* enter inner scope */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_u_indices); - __Pyx_GIVEREF(__pyx_v_u_indices); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_u_indices); - __Pyx_INCREF(__pyx_v_i_indices); - __Pyx_GIVEREF(__pyx_v_i_indices); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_i_indices); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_8 = 0; - __pyx_t_9 = NULL; - } else { - __pyx_t_8 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_9 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 223, __pyx_L8_error) - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (likely(!__pyx_t_9)) { - if (likely(PyList_CheckExact(__pyx_t_3))) { - if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 223, __pyx_L8_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } else { - if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 223, __pyx_L8_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } - } else { - __pyx_t_2 = __pyx_t_9(__pyx_t_3); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 223, __pyx_L8_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { - PyObject* sequence = __pyx_t_2; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 223, __pyx_L8_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_6 = PyList_GET_ITEM(sequence, 0); - __pyx_t_10 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_10); - #else - __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 223, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 223, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_10); - #endif - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_11 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 223, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_7 = Py_TYPE(__pyx_t_11)->tp_iternext; - index = 0; __pyx_t_6 = __pyx_t_7(__pyx_t_11); if (unlikely(!__pyx_t_6)) goto __pyx_L11_unpacking_failed; - __Pyx_GOTREF(__pyx_t_6); - index = 1; __pyx_t_10 = __pyx_t_7(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L11_unpacking_failed; - __Pyx_GOTREF(__pyx_t_10); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_11), 2) < 0) __PYX_ERR(0, 223, __pyx_L8_error) - __pyx_t_7 = NULL; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L12_unpacking_done; - __pyx_L11_unpacking_failed:; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_7 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 223, __pyx_L8_error) - __pyx_L12_unpacking_done:; - } - __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_u, __pyx_t_6); - __pyx_t_6 = 0; - __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_i, __pyx_t_10); - __pyx_t_10 = 0; - __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_8genexpr1__pyx_v_u); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 223, __pyx_L8_error) - __pyx_t_13 = __Pyx_PyInt_As_int(__pyx_8genexpr1__pyx_v_i); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 223, __pyx_L8_error) - __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_t_12, __pyx_t_13)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_2); - if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 223, __pyx_L8_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_i); __pyx_8genexpr1__pyx_v_i = 0; - __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_u); __pyx_8genexpr1__pyx_v_u = 0; - goto __pyx_L13_exit_scope; - __pyx_L8_error:; - __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_i); __pyx_8genexpr1__pyx_v_i = 0; - __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_u); __pyx_8genexpr1__pyx_v_u = 0; - goto __pyx_L1_error; - __pyx_L13_exit_scope:; - } /* exit inner scope */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_intp); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 223, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_10) < 0) __PYX_ERR(0, 223, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 223, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_keys = __pyx_t_10; - __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":224 - * (u_indices, i_indices, r_values) = data_set.uir_tuple - * keys = np.array([get_key(u, i) for u, i in zip(u_indices, i_indices)], dtype=np.intp) - * cdef IntFloatDict rating_dict = IntFloatDict(keys, np.array(r_values, dtype=np.float64)) # <<<<<<<<<<<<<< - * rating_matrix = sp.csr_matrix( - * (r_values, (u_indices, i_indices)), +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self) { + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_memview", 0); + + /* "View.MemoryView":225 + * @cname('get_memview') + * cdef get_memview(self): + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE # <<<<<<<<<<<<<< + * return memoryview(self, flags, self.dtype_is_object) + * */ - __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 224, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 224, __pyx_L1_error) + __pyx_v_flags = ((PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) | PyBUF_WRITABLE); + + /* "View.MemoryView":226 + * cdef get_memview(self): + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) # <<<<<<<<<<<<<< + * + * def __len__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 224, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_INCREF(__pyx_v_r_values); - __Pyx_GIVEREF(__pyx_v_r_values); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_r_values); - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 224, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 224, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 224, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 224, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_keys); - __Pyx_GIVEREF(__pyx_v_keys); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_keys); + __Pyx_INCREF((PyObject *)__pyx_v_self); + __Pyx_GIVEREF((PyObject *)__pyx_v_self); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_1 = 0; __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_rating_dict = ((struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *)__pyx_t_2); + __pyx_r = __pyx_t_2; __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":225 - * keys = np.array([get_key(u, i) for u, i in zip(u_indices, i_indices)], dtype=np.intp) - * cdef IntFloatDict rating_dict = IntFloatDict(keys, np.array(r_values, dtype=np.float64)) - * rating_matrix = sp.csr_matrix( # <<<<<<<<<<<<<< - * (r_values, (u_indices, i_indices)), - * shape=(self.train_set.num_users, self.train_set.num_items), + /* "View.MemoryView":224 + * + * @cname('get_memview') + * cdef get_memview(self): # <<<<<<<<<<<<<< + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_sp); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_csr_matrix); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 225, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":226 - * cdef IntFloatDict rating_dict = IntFloatDict(keys, np.array(r_values, dtype=np.float64)) - * rating_matrix = sp.csr_matrix( - * (r_values, (u_indices, i_indices)), # <<<<<<<<<<<<<< - * shape=(self.train_set.num_users, self.train_set.num_items), - * ) + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.array.get_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":228 + * return memoryview(self, flags, self.dtype_is_object) + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._shape[0] + * */ - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 226, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_u_indices); - __Pyx_GIVEREF(__pyx_v_u_indices); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_u_indices); - __Pyx_INCREF(__pyx_v_i_indices); - __Pyx_GIVEREF(__pyx_v_i_indices); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_i_indices); - __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 226, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_INCREF(__pyx_v_r_values); - __Pyx_GIVEREF(__pyx_v_r_values); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_r_values); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_2); - __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":225 - * keys = np.array([get_key(u, i) for u, i in zip(u_indices, i_indices)], dtype=np.intp) - * cdef IntFloatDict rating_dict = IntFloatDict(keys, np.array(r_values, dtype=np.float64)) - * rating_matrix = sp.csr_matrix( # <<<<<<<<<<<<<< - * (r_values, (u_indices, i_indices)), - * shape=(self.train_set.num_users, self.train_set.num_items), +/* Python wrapper */ +static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__", 0); + + /* "View.MemoryView":229 + * + * def __len__(self): + * return self._shape[0] # <<<<<<<<<<<<<< + * + * def __getattr__(self, attr): */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_10); - __pyx_t_10 = 0; + __pyx_r = (__pyx_v_self->_shape[0]); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":227 - * rating_matrix = sp.csr_matrix( - * (r_values, (u_indices, i_indices)), - * shape=(self.train_set.num_users, self.train_set.num_items), # <<<<<<<<<<<<<< - * ) - * user_item_aspect = {} + /* "View.MemoryView":228 + * return memoryview(self, flags, self.dtype_is_object) + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._shape[0] + * */ - __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 227, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 227, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_items); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 227, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_6); - __pyx_t_5 = 0; - __pyx_t_6 = 0; - if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_shape, __pyx_t_1) < 0) __PYX_ERR(0, 227, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":225 - * keys = np.array([get_key(u, i) for u, i in zip(u_indices, i_indices)], dtype=np.intp) - * cdef IntFloatDict rating_dict = IntFloatDict(keys, np.array(r_values, dtype=np.float64)) - * rating_matrix = sp.csr_matrix( # <<<<<<<<<<<<<< - * (r_values, (u_indices, i_indices)), - * shape=(self.train_set.num_users, self.train_set.num_items), + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":231 + * return self._shape[0] + * + * def __getattr__(self, attr): # <<<<<<<<<<<<<< + * return getattr(self.memview, attr) + * */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 225, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_v_rating_matrix = __pyx_t_1; - __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":229 - * shape=(self.train_set.num_users, self.train_set.num_items), - * ) - * user_item_aspect = {} # <<<<<<<<<<<<<< - * user_aspect_opinion = {} - * item_aspect_opinion = {} +/* Python wrapper */ +static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/ +static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_attr)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getattr__", 0); + + /* "View.MemoryView":232 + * + * def __getattr__(self, attr): + * return getattr(self.memview, attr) # <<<<<<<<<<<<<< + * + * def __getitem__(self, item): */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 229, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_v_user_item_aspect = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 232, __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; - /* "cornac/models/comparer/recom_comparer_sub.pyx":230 - * ) - * user_item_aspect = {} - * user_aspect_opinion = {} # <<<<<<<<<<<<<< - * item_aspect_opinion = {} - * for u_idx, sentiment_tup_ids_by_item in tqdm(sentiment.user_sentiment.items(), disable=not self.verbose, desc='Count aspects'): + /* "View.MemoryView":231 + * return self._shape[0] + * + * def __getattr__(self, attr): # <<<<<<<<<<<<<< + * return getattr(self.memview, attr) + * */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_user_aspect_opinion = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":231 - * user_item_aspect = {} - * user_aspect_opinion = {} - * item_aspect_opinion = {} # <<<<<<<<<<<<<< - * for u_idx, sentiment_tup_ids_by_item in tqdm(sentiment.user_sentiment.items(), disable=not self.verbose, desc='Count aspects'): - * if self.train_set.is_unk_user(u_idx): + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.array.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":234 + * return getattr(self.memview, attr) + * + * def __getitem__(self, item): # <<<<<<<<<<<<<< + * return self.memview[item] + * */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_item_aspect_opinion = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":232 - * user_aspect_opinion = {} - * item_aspect_opinion = {} - * for u_idx, sentiment_tup_ids_by_item in tqdm(sentiment.user_sentiment.items(), disable=not self.verbose, desc='Count aspects'): # <<<<<<<<<<<<<< - * if self.train_set.is_unk_user(u_idx): - * continue +/* Python wrapper */ +static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ +static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getitem__", 0); + + /* "View.MemoryView":235 + * + * def __getitem__(self, item): + * return self.memview[item] # <<<<<<<<<<<<<< + * + * def __setitem__(self, item, value): */ - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_user_sentiment); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_items); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_10)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_10); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 235, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 232, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 235, __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_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyBool_FromLong((!__pyx_t_4)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_disable, __pyx_t_10) < 0) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_desc, __pyx_kp_u_Count_aspects) < 0) __PYX_ERR(0, 232, __pyx_L1_error) - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_v_tqdm, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_t_10)) || PyTuple_CheckExact(__pyx_t_10)) { - __pyx_t_1 = __pyx_t_10; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0; - __pyx_t_9 = NULL; - } else { - __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 232, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - for (;;) { - if (likely(!__pyx_t_9)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_10 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 232, __pyx_L1_error) - #else - __pyx_t_10 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - #endif - } else { - if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 232, __pyx_L1_error) - #else - __pyx_t_10 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - #endif - } - } else { - __pyx_t_10 = __pyx_t_9(__pyx_t_1); - if (unlikely(!__pyx_t_10)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 232, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_10); - } - if ((likely(PyTuple_CheckExact(__pyx_t_10))) || (PyList_CheckExact(__pyx_t_10))) { - PyObject* sequence = __pyx_t_10; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 232, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_2 = PyList_GET_ITEM(sequence, 0); - __pyx_t_3 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - #else - __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_6 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; - index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L16_unpacking_failed; - __Pyx_GOTREF(__pyx_t_2); - index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L16_unpacking_failed; - __Pyx_GOTREF(__pyx_t_3); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 232, __pyx_L1_error) - __pyx_t_7 = NULL; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L17_unpacking_done; - __pyx_L16_unpacking_failed:; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 232, __pyx_L1_error) - __pyx_L17_unpacking_done:; - } - __Pyx_XDECREF_SET(__pyx_v_u_idx, __pyx_t_2); - __pyx_t_2 = 0; - __Pyx_XDECREF_SET(__pyx_v_sentiment_tup_ids_by_item, __pyx_t_3); - __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":233 - * item_aspect_opinion = {} - * for u_idx, sentiment_tup_ids_by_item in tqdm(sentiment.user_sentiment.items(), disable=not self.verbose, desc='Count aspects'): - * if self.train_set.is_unk_user(u_idx): # <<<<<<<<<<<<<< - * continue - * for i_idx, tup_idx in sentiment_tup_ids_by_item.items(): + /* "View.MemoryView":234 + * return getattr(self.memview, attr) + * + * def __getitem__(self, item): # <<<<<<<<<<<<<< + * return self.memview[item] + * */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 233, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_is_unk_user); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 233, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_10 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_u_idx) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_u_idx); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 233, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 233, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__pyx_t_4) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":234 - * for u_idx, sentiment_tup_ids_by_item in tqdm(sentiment.user_sentiment.items(), disable=not self.verbose, desc='Count aspects'): - * if self.train_set.is_unk_user(u_idx): - * continue # <<<<<<<<<<<<<< - * for i_idx, tup_idx in sentiment_tup_ids_by_item.items(): - * user_item_aspect[ - */ - goto __pyx_L14_continue; + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.array.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":233 - * item_aspect_opinion = {} - * for u_idx, sentiment_tup_ids_by_item in tqdm(sentiment.user_sentiment.items(), disable=not self.verbose, desc='Count aspects'): - * if self.train_set.is_unk_user(u_idx): # <<<<<<<<<<<<<< - * continue - * for i_idx, tup_idx in sentiment_tup_ids_by_item.items(): +/* "View.MemoryView":237 + * return self.memview[item] + * + * def __setitem__(self, item, value): # <<<<<<<<<<<<<< + * self.memview[item] = value + * */ - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":235 - * if self.train_set.is_unk_user(u_idx): - * continue - * for i_idx, tup_idx in sentiment_tup_ids_by_item.items(): # <<<<<<<<<<<<<< - * user_item_aspect[ - * (u_idx, i_idx, sentiment.num_aspects) - */ - __pyx_t_14 = 0; - if (unlikely(__pyx_v_sentiment_tup_ids_by_item == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); - __PYX_ERR(0, 235, __pyx_L1_error) - } - __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_sentiment_tup_ids_by_item, 0, __pyx_n_s_items, (&__pyx_t_15), (&__pyx_t_13)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 235, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_10); - __pyx_t_10 = __pyx_t_2; - __pyx_t_2 = 0; - while (1) { - __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_10, __pyx_t_15, &__pyx_t_14, &__pyx_t_2, &__pyx_t_3, NULL, __pyx_t_13); - if (unlikely(__pyx_t_12 == 0)) break; - if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 235, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_t_3); - __Pyx_XDECREF_SET(__pyx_v_i_idx, __pyx_t_2); - __pyx_t_2 = 0; - __Pyx_XDECREF_SET(__pyx_v_tup_idx, __pyx_t_3); - __pyx_t_3 = 0; +/* Python wrapper */ +static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":238 - * user_item_aspect[ - * (u_idx, i_idx, sentiment.num_aspects) - * ] = rating_matrix[u_idx, i_idx] # <<<<<<<<<<<<<< - * for a_idx, o_idx, polarity in sentiment.sentiment[tup_idx]: - * user_item_aspect[(u_idx, i_idx, a_idx)] = ( + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setitem__", 0); + + /* "View.MemoryView":238 + * + * def __setitem__(self, item, value): + * self.memview[item] = value # <<<<<<<<<<<<<< + * + * */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_u_idx); - __Pyx_GIVEREF(__pyx_v_u_idx); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_u_idx); - __Pyx_INCREF(__pyx_v_i_idx); - __Pyx_GIVEREF(__pyx_v_i_idx); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_i_idx); - __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_rating_matrix, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely((PyObject_SetItem(__pyx_t_1, __pyx_v_item, __pyx_v_value) < 0))) __PYX_ERR(1, 238, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":237 - * for i_idx, tup_idx in sentiment_tup_ids_by_item.items(): - * user_item_aspect[ - * (u_idx, i_idx, sentiment.num_aspects) # <<<<<<<<<<<<<< - * ] = rating_matrix[u_idx, i_idx] - * for a_idx, o_idx, polarity in sentiment.sentiment[tup_idx]: + /* "View.MemoryView":237 + * return self.memview[item] + * + * def __setitem__(self, item, value): # <<<<<<<<<<<<<< + * self.memview[item] = value + * */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 237, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 237, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_v_u_idx); - __Pyx_GIVEREF(__pyx_v_u_idx); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_u_idx); - __Pyx_INCREF(__pyx_v_i_idx); - __Pyx_GIVEREF(__pyx_v_i_idx); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_i_idx); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_3); - __pyx_t_3 = 0; - if (unlikely(PyDict_SetItem(__pyx_v_user_item_aspect, __pyx_t_6, __pyx_t_2) < 0)) __PYX_ERR(0, 236, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":239 - * (u_idx, i_idx, sentiment.num_aspects) - * ] = rating_matrix[u_idx, i_idx] - * for a_idx, o_idx, polarity in sentiment.sentiment[tup_idx]: # <<<<<<<<<<<<<< - * user_item_aspect[(u_idx, i_idx, a_idx)] = ( - * user_item_aspect.get((u_idx, i_idx, a_idx), 0) + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_v_tup_idx); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) { - __pyx_t_2 = __pyx_t_6; __Pyx_INCREF(__pyx_t_2); __pyx_t_16 = 0; - __pyx_t_17 = NULL; - } else { - __pyx_t_16 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_17 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 239, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - for (;;) { - if (likely(!__pyx_t_17)) { - if (likely(PyList_CheckExact(__pyx_t_2))) { - if (__pyx_t_16 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_6 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_16); __Pyx_INCREF(__pyx_t_6); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 239, __pyx_L1_error) - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_2, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - #endif - } else { - if (__pyx_t_16 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_16); __Pyx_INCREF(__pyx_t_6); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 239, __pyx_L1_error) - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_2, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - #endif - } - } else { - __pyx_t_6 = __pyx_t_17(__pyx_t_2); - if (unlikely(!__pyx_t_6)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 239, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_6); - } - if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { - PyObject* sequence = __pyx_t_6; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 3)) { - if (size > 3) __Pyx_RaiseTooManyValuesError(3); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 239, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_11 = PyTuple_GET_ITEM(sequence, 2); - } else { - __pyx_t_3 = PyList_GET_ITEM(sequence, 0); - __pyx_t_5 = PyList_GET_ITEM(sequence, 1); - __pyx_t_11 = PyList_GET_ITEM(sequence, 2); - } - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(__pyx_t_11); - #else - __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_11 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - #endif - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_18 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_7 = Py_TYPE(__pyx_t_18)->tp_iternext; - index = 0; __pyx_t_3 = __pyx_t_7(__pyx_t_18); if (unlikely(!__pyx_t_3)) goto __pyx_L23_unpacking_failed; - __Pyx_GOTREF(__pyx_t_3); - index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_18); if (unlikely(!__pyx_t_5)) goto __pyx_L23_unpacking_failed; - __Pyx_GOTREF(__pyx_t_5); - index = 2; __pyx_t_11 = __pyx_t_7(__pyx_t_18); if (unlikely(!__pyx_t_11)) goto __pyx_L23_unpacking_failed; - __Pyx_GOTREF(__pyx_t_11); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_18), 3) < 0) __PYX_ERR(0, 239, __pyx_L1_error) - __pyx_t_7 = NULL; - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - goto __pyx_L24_unpacking_done; - __pyx_L23_unpacking_failed:; - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - __pyx_t_7 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 239, __pyx_L1_error) - __pyx_L24_unpacking_done:; - } - __Pyx_XDECREF_SET(__pyx_v_a_idx, __pyx_t_3); - __pyx_t_3 = 0; - __Pyx_XDECREF_SET(__pyx_v_o_idx, __pyx_t_5); - __pyx_t_5 = 0; - __Pyx_XDECREF_SET(__pyx_v_polarity, __pyx_t_11); - __pyx_t_11 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":241 - * for a_idx, o_idx, polarity in sentiment.sentiment[tup_idx]: - * user_item_aspect[(u_idx, i_idx, a_idx)] = ( - * user_item_aspect.get((u_idx, i_idx, a_idx), 0) # <<<<<<<<<<<<<< - * + polarity - * ) +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; + __pyx_r = __pyx_pf___pyx_array___reduce_cython__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" */ - __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 241, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_v_u_idx); - __Pyx_GIVEREF(__pyx_v_u_idx); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_u_idx); - __Pyx_INCREF(__pyx_v_i_idx); - __Pyx_GIVEREF(__pyx_v_i_idx); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_i_idx); - __Pyx_INCREF(__pyx_v_a_idx); - __Pyx_GIVEREF(__pyx_v_a_idx); - PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_a_idx); - __pyx_t_11 = __Pyx_PyDict_GetItemDefault(__pyx_v_user_item_aspect, __pyx_t_6, __pyx_int_0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 241, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0); + __PYX_ERR(1, 2, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":242 - * user_item_aspect[(u_idx, i_idx, a_idx)] = ( - * user_item_aspect.get((u_idx, i_idx, a_idx), 0) - * + polarity # <<<<<<<<<<<<<< - * ) - * if ( + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): */ - __pyx_t_6 = PyNumber_Add(__pyx_t_11, __pyx_v_polarity); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 242, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":240 - * ] = rating_matrix[u_idx, i_idx] - * for a_idx, o_idx, polarity in sentiment.sentiment[tup_idx]: - * user_item_aspect[(u_idx, i_idx, a_idx)] = ( # <<<<<<<<<<<<<< - * user_item_aspect.get((u_idx, i_idx, a_idx), 0) - * + polarity + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.array.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" */ - __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_v_u_idx); - __Pyx_GIVEREF(__pyx_v_u_idx); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_u_idx); - __Pyx_INCREF(__pyx_v_i_idx); - __Pyx_GIVEREF(__pyx_v_i_idx); - PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_i_idx); - __Pyx_INCREF(__pyx_v_a_idx); - __Pyx_GIVEREF(__pyx_v_a_idx); - PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_v_a_idx); - if (unlikely(PyDict_SetItem(__pyx_v_user_item_aspect, __pyx_t_11, __pyx_t_6) < 0)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":245 - * ) - * if ( - * polarity > 0 # <<<<<<<<<<<<<< - * ): # only include opinion with positive sentiment polarity - * user_aspect_opinion[(u_idx, a_idx, o_idx)] = ( +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + PyObject* values[1] = {0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf___pyx_array_2__setstate_cython__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<< */ - __pyx_t_6 = PyObject_RichCompare(__pyx_v_polarity, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 245, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 245, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0); + __PYX_ERR(1, 4, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":244 - * + polarity - * ) - * if ( # <<<<<<<<<<<<<< - * polarity > 0 - * ): # only include opinion with positive sentiment polarity + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" */ - if (__pyx_t_4) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":249 - * user_aspect_opinion[(u_idx, a_idx, o_idx)] = ( - * user_aspect_opinion.get( - * (u_idx, a_idx, o_idx), 0 # <<<<<<<<<<<<<< - * ) - * + 1 + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":248 + * + * @cname("__pyx_array_allocate_buffer") + * cdef int _allocate_buffer(array self) except -1: # <<<<<<<<<<<<<< + * + * */ - __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 249, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_v_u_idx); - __Pyx_GIVEREF(__pyx_v_u_idx); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_u_idx); - __Pyx_INCREF(__pyx_v_a_idx); - __Pyx_GIVEREF(__pyx_v_a_idx); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_a_idx); - __Pyx_INCREF(__pyx_v_o_idx); - __Pyx_GIVEREF(__pyx_v_o_idx); - PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_o_idx); - /* "cornac/models/comparer/recom_comparer_sub.pyx":248 - * ): # only include opinion with positive sentiment polarity - * user_aspect_opinion[(u_idx, a_idx, o_idx)] = ( - * user_aspect_opinion.get( # <<<<<<<<<<<<<< - * (u_idx, a_idx, o_idx), 0 - * ) +static int __pyx_array_allocate_buffer(struct __pyx_array_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_i; + PyObject **__pyx_v_p; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_allocate_buffer", 0); + + /* "View.MemoryView":254 + * cdef PyObject **p + * + * self.free_data = True # <<<<<<<<<<<<<< + * self.data = malloc(self.len) + * if not self.data: */ - __pyx_t_11 = __Pyx_PyDict_GetItemDefault(__pyx_v_user_aspect_opinion, __pyx_t_6, __pyx_int_0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 248, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_self->free_data = 1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":251 - * (u_idx, a_idx, o_idx), 0 - * ) - * + 1 # <<<<<<<<<<<<<< - * ) - * item_aspect_opinion[(i_idx, a_idx, o_idx)] = ( + /* "View.MemoryView":255 + * + * self.free_data = True + * self.data = malloc(self.len) # <<<<<<<<<<<<<< + * if not self.data: + * raise MemoryError, "unable to allocate array data." */ - __pyx_t_6 = __Pyx_PyInt_AddObjC(__pyx_t_11, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 251, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_v_self->data = ((char *)malloc(__pyx_v_self->len)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":247 - * polarity > 0 - * ): # only include opinion with positive sentiment polarity - * user_aspect_opinion[(u_idx, a_idx, o_idx)] = ( # <<<<<<<<<<<<<< - * user_aspect_opinion.get( - * (u_idx, a_idx, o_idx), 0 + /* "View.MemoryView":256 + * self.free_data = True + * self.data = malloc(self.len) + * if not self.data: # <<<<<<<<<<<<<< + * raise MemoryError, "unable to allocate array data." + * */ - __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_v_u_idx); - __Pyx_GIVEREF(__pyx_v_u_idx); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_u_idx); - __Pyx_INCREF(__pyx_v_a_idx); - __Pyx_GIVEREF(__pyx_v_a_idx); - PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_a_idx); - __Pyx_INCREF(__pyx_v_o_idx); - __Pyx_GIVEREF(__pyx_v_o_idx); - PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_v_o_idx); - if (unlikely(PyDict_SetItem(__pyx_v_user_aspect_opinion, __pyx_t_11, __pyx_t_6) < 0)) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_1 = (!(__pyx_v_self->data != 0)); + if (unlikely(__pyx_t_1)) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":255 - * item_aspect_opinion[(i_idx, a_idx, o_idx)] = ( - * item_aspect_opinion.get( - * (i_idx, a_idx, o_idx), 0 # <<<<<<<<<<<<<< - * ) - * + 1 + /* "View.MemoryView":257 + * self.data = malloc(self.len) + * if not self.data: + * raise MemoryError, "unable to allocate array data." # <<<<<<<<<<<<<< + * + * if self.dtype_is_object: */ - __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_v_i_idx); - __Pyx_GIVEREF(__pyx_v_i_idx); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_i_idx); - __Pyx_INCREF(__pyx_v_a_idx); - __Pyx_GIVEREF(__pyx_v_a_idx); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_a_idx); - __Pyx_INCREF(__pyx_v_o_idx); - __Pyx_GIVEREF(__pyx_v_o_idx); - PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_o_idx); + __Pyx_Raise(__pyx_builtin_MemoryError, __pyx_kp_s_unable_to_allocate_array_data, 0, 0); + __PYX_ERR(1, 257, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":254 - * ) - * item_aspect_opinion[(i_idx, a_idx, o_idx)] = ( - * item_aspect_opinion.get( # <<<<<<<<<<<<<< - * (i_idx, a_idx, o_idx), 0 - * ) + /* "View.MemoryView":256 + * self.free_data = True + * self.data = malloc(self.len) + * if not self.data: # <<<<<<<<<<<<<< + * raise MemoryError, "unable to allocate array data." + * */ - __pyx_t_11 = __Pyx_PyDict_GetItemDefault(__pyx_v_item_aspect_opinion, __pyx_t_6, __pyx_int_0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":257 - * (i_idx, a_idx, o_idx), 0 - * ) - * + 1 # <<<<<<<<<<<<<< - * ) + /* "View.MemoryView":259 + * raise MemoryError, "unable to allocate array data." * + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * p = self.data + * for i in range(self.len // self.itemsize): */ - __pyx_t_6 = __Pyx_PyInt_AddObjC(__pyx_t_11, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (__pyx_v_self->dtype_is_object) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":253 - * + 1 - * ) - * item_aspect_opinion[(i_idx, a_idx, o_idx)] = ( # <<<<<<<<<<<<<< - * item_aspect_opinion.get( - * (i_idx, a_idx, o_idx), 0 + /* "View.MemoryView":260 + * + * if self.dtype_is_object: + * p = self.data # <<<<<<<<<<<<<< + * for i in range(self.len // self.itemsize): + * p[i] = Py_None */ - __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_v_i_idx); - __Pyx_GIVEREF(__pyx_v_i_idx); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_i_idx); - __Pyx_INCREF(__pyx_v_a_idx); - __Pyx_GIVEREF(__pyx_v_a_idx); - PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_a_idx); - __Pyx_INCREF(__pyx_v_o_idx); - __Pyx_GIVEREF(__pyx_v_o_idx); - PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_v_o_idx); - if (unlikely(PyDict_SetItem(__pyx_v_item_aspect_opinion, __pyx_t_11, __pyx_t_6) < 0)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_p = ((PyObject **)__pyx_v_self->data); - /* "cornac/models/comparer/recom_comparer_sub.pyx":244 - * + polarity - * ) - * if ( # <<<<<<<<<<<<<< - * polarity > 0 - * ): # only include opinion with positive sentiment polarity + /* "View.MemoryView":261 + * if self.dtype_is_object: + * p = self.data + * for i in range(self.len // self.itemsize): # <<<<<<<<<<<<<< + * p[i] = Py_None + * Py_INCREF(Py_None) */ - } + if (unlikely(__pyx_v_self->itemsize == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(1, 261, __pyx_L1_error) + } + else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_self->itemsize == (Py_ssize_t)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_self->len))) { + PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); + __PYX_ERR(1, 261, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_div_Py_ssize_t(__pyx_v_self->len, __pyx_v_self->itemsize); + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":239 - * (u_idx, i_idx, sentiment.num_aspects) - * ] = rating_matrix[u_idx, i_idx] - * for a_idx, o_idx, polarity in sentiment.sentiment[tup_idx]: # <<<<<<<<<<<<<< - * user_item_aspect[(u_idx, i_idx, a_idx)] = ( - * user_item_aspect.get((u_idx, i_idx, a_idx), 0) + /* "View.MemoryView":262 + * p = self.data + * for i in range(self.len // self.itemsize): + * p[i] = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * return 0 */ - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + (__pyx_v_p[__pyx_v_i]) = Py_None; + + /* "View.MemoryView":263 + * for i in range(self.len // self.itemsize): + * p[i] = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * return 0 + * + */ + Py_INCREF(Py_None); } - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":232 - * user_aspect_opinion = {} - * item_aspect_opinion = {} - * for u_idx, sentiment_tup_ids_by_item in tqdm(sentiment.user_sentiment.items(), disable=not self.verbose, desc='Count aspects'): # <<<<<<<<<<<<<< - * if self.train_set.is_unk_user(u_idx): - * continue + /* "View.MemoryView":259 + * raise MemoryError, "unable to allocate array data." + * + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * p = self.data + * for i in range(self.len // self.itemsize): */ - __pyx_L14_continue:; } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":260 - * ) + /* "View.MemoryView":264 + * p[i] = Py_None + * Py_INCREF(Py_None) + * return 0 # <<<<<<<<<<<<<< + * * - * for key in tqdm(user_item_aspect.keys(), disable=not self.verbose, desc='Compute X'): # <<<<<<<<<<<<<< - * if key[2] != sentiment.num_aspects: - * user_item_aspect[key] = self._compute_quality_score( */ - __pyx_t_1 = __Pyx_PyDict_Keys(__pyx_v_user_item_aspect); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyBool_FromLong((!__pyx_t_4)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_disable, __pyx_t_2) < 0) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_desc, __pyx_kp_u_Compute_X) < 0) __PYX_ERR(0, 260, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_tqdm, __pyx_t_10, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0; - __pyx_t_9 = NULL; - } else { - __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 260, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (likely(!__pyx_t_9)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 260, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } else { - if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 260, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } - } else { - __pyx_t_2 = __pyx_t_9(__pyx_t_1); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 260, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2); - __pyx_t_2 = 0; + __pyx_r = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":261 + /* "View.MemoryView":248 + * + * @cname("__pyx_array_allocate_buffer") + * cdef int _allocate_buffer(array self) except -1: # <<<<<<<<<<<<<< + * * - * for key in tqdm(user_item_aspect.keys(), disable=not self.verbose, desc='Compute X'): - * if key[2] != sentiment.num_aspects: # <<<<<<<<<<<<<< - * user_item_aspect[key] = self._compute_quality_score( - * user_item_aspect[key] */ - __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_key, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_6 = PyObject_RichCompare(__pyx_t_2, __pyx_t_10, Py_NE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (__pyx_t_4) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":262 - * for key in tqdm(user_item_aspect.keys(), disable=not self.verbose, desc='Compute X'): - * if key[2] != sentiment.num_aspects: - * user_item_aspect[key] = self._compute_quality_score( # <<<<<<<<<<<<<< - * user_item_aspect[key] - * ) + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView._allocate_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":268 + * + * @cname("__pyx_array_new") + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, char *c_mode, char *buf): # <<<<<<<<<<<<<< + * cdef array result + * cdef str mode = "fortran" if c_mode[0] == b'f' else "c" # this often comes from a constant C string. */ - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_compute_quality_score); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 262, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - /* "cornac/models/comparer/recom_comparer_sub.pyx":263 - * if key[2] != sentiment.num_aspects: - * user_item_aspect[key] = self._compute_quality_score( - * user_item_aspect[key] # <<<<<<<<<<<<<< - * ) +static struct __pyx_array_obj *__pyx_array_new(PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, char *__pyx_v_format, char *__pyx_v_c_mode, char *__pyx_v_buf) { + struct __pyx_array_obj *__pyx_v_result = 0; + PyObject *__pyx_v_mode = 0; + struct __pyx_array_obj *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("array_cwrapper", 0); + + /* "View.MemoryView":270 + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, char *c_mode, char *buf): + * cdef array result + * cdef str mode = "fortran" if c_mode[0] == b'f' else "c" # this often comes from a constant C string. # <<<<<<<<<<<<<< * + * if buf is NULL: */ - __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_user_item_aspect, __pyx_v_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 263, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) { - __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10); - if (likely(__pyx_t_11)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); - __Pyx_INCREF(__pyx_t_11); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_10, function); - } - } - __pyx_t_6 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_11, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_2); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 262, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (((__pyx_v_c_mode[0]) == 'f')) { + __Pyx_INCREF(__pyx_n_s_fortran); + __pyx_t_1 = __pyx_n_s_fortran; + } else { + __Pyx_INCREF(__pyx_n_s_c); + __pyx_t_1 = __pyx_n_s_c; + } + __pyx_v_mode = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":262 - * for key in tqdm(user_item_aspect.keys(), disable=not self.verbose, desc='Compute X'): - * if key[2] != sentiment.num_aspects: - * user_item_aspect[key] = self._compute_quality_score( # <<<<<<<<<<<<<< - * user_item_aspect[key] - * ) + /* "View.MemoryView":272 + * cdef str mode = "fortran" if c_mode[0] == b'f' else "c" # this often comes from a constant C string. + * + * if buf is NULL: # <<<<<<<<<<<<<< + * result = array.__new__(array, shape, itemsize, format, mode) + * else: */ - if (unlikely(PyDict_SetItem(__pyx_v_user_item_aspect, __pyx_v_key, __pyx_t_6) < 0)) __PYX_ERR(0, 262, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_2 = (__pyx_v_buf == NULL); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":261 + /* "View.MemoryView":273 * - * for key in tqdm(user_item_aspect.keys(), disable=not self.verbose, desc='Compute X'): - * if key[2] != sentiment.num_aspects: # <<<<<<<<<<<<<< - * user_item_aspect[key] = self._compute_quality_score( - * user_item_aspect[key] + * if buf is NULL: + * result = array.__new__(array, shape, itemsize, format, mode) # <<<<<<<<<<<<<< + * else: + * result = array.__new__(array, shape, itemsize, format, mode, allocate_buffer=False) */ - } + __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_v_shape); + __Pyx_GIVEREF(__pyx_v_shape); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_shape); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); + __Pyx_INCREF(__pyx_v_mode); + __Pyx_GIVEREF(__pyx_v_mode); + PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_mode); + __pyx_t_1 = 0; + __pyx_t_3 = 0; + __pyx_t_3 = ((PyObject *)__pyx_tp_new_array(((PyTypeObject *)__pyx_array_type), __pyx_t_4, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 273, __pyx_L1_error) + __Pyx_GOTREF((PyObject *)__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_3); + __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":260 - * ) + /* "View.MemoryView":272 + * cdef str mode = "fortran" if c_mode[0] == b'f' else "c" # this often comes from a constant C string. * - * for key in tqdm(user_item_aspect.keys(), disable=not self.verbose, desc='Compute X'): # <<<<<<<<<<<<<< - * if key[2] != sentiment.num_aspects: - * user_item_aspect[key] = self._compute_quality_score( + * if buf is NULL: # <<<<<<<<<<<<<< + * result = array.__new__(array, shape, itemsize, format, mode) + * else: */ + goto __pyx_L3; } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":266 - * ) + /* "View.MemoryView":275 + * result = array.__new__(array, shape, itemsize, format, mode) + * else: + * result = array.__new__(array, shape, itemsize, format, mode, allocate_buffer=False) # <<<<<<<<<<<<<< + * result.data = buf * - * for key in tqdm(user_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YU'): # <<<<<<<<<<<<<< - * user_aspect_opinion[key] = self._compute_attention_score( - * user_aspect_opinion[key] */ - __pyx_t_1 = __Pyx_PyDict_Keys(__pyx_v_user_aspect_opinion); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyBool_FromLong((!__pyx_t_4)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_disable, __pyx_t_10) < 0) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_desc, __pyx_kp_u_Compute_YU) < 0) __PYX_ERR(0, 266, __pyx_L1_error) - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_v_tqdm, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_t_10)) || PyTuple_CheckExact(__pyx_t_10)) { - __pyx_t_1 = __pyx_t_10; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0; - __pyx_t_9 = NULL; - } else { - __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 266, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - for (;;) { - if (likely(!__pyx_t_9)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_10 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 266, __pyx_L1_error) - #else - __pyx_t_10 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - #endif - } else { - if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 266, __pyx_L1_error) - #else - __pyx_t_10 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - #endif - } - } else { - __pyx_t_10 = __pyx_t_9(__pyx_t_1); - if (unlikely(!__pyx_t_10)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 266, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_10); - } - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_10); - __pyx_t_10 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":267 - * - * for key in tqdm(user_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YU'): - * user_aspect_opinion[key] = self._compute_attention_score( # <<<<<<<<<<<<<< - * user_aspect_opinion[key] - * ) - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_compute_attention_score); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":268 - * for key in tqdm(user_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YU'): - * user_aspect_opinion[key] = self._compute_attention_score( - * user_aspect_opinion[key] # <<<<<<<<<<<<<< - * ) - * - */ - __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_user_aspect_opinion, __pyx_v_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 268, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_11)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_11); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_10 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_11, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_2); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":267 - * - * for key in tqdm(user_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YU'): - * user_aspect_opinion[key] = self._compute_attention_score( # <<<<<<<<<<<<<< - * user_aspect_opinion[key] - * ) - */ - if (unlikely(PyDict_SetItem(__pyx_v_user_aspect_opinion, __pyx_v_key, __pyx_t_10) < 0)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":266 - * ) - * - * for key in tqdm(user_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YU'): # <<<<<<<<<<<<<< - * user_aspect_opinion[key] = self._compute_attention_score( - * user_aspect_opinion[key] - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":271 - * ) - * - * for key in tqdm(item_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YI'): # <<<<<<<<<<<<<< - * item_aspect_opinion[key] = self._compute_attention_score( - * item_aspect_opinion[key] - */ - __pyx_t_1 = __Pyx_PyDict_Keys(__pyx_v_item_aspect_opinion); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyBool_FromLong((!__pyx_t_4)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_disable, __pyx_t_6) < 0) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_desc, __pyx_kp_u_Compute_YI) < 0) __PYX_ERR(0, 271, __pyx_L1_error) - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_tqdm, __pyx_t_10, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) { - __pyx_t_1 = __pyx_t_6; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0; - __pyx_t_9 = NULL; - } else { - __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 271, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - for (;;) { - if (likely(!__pyx_t_9)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_6); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 271, __pyx_L1_error) - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - #endif - } else { - if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_6); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 271, __pyx_L1_error) - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - #endif - } - } else { - __pyx_t_6 = __pyx_t_9(__pyx_t_1); - if (unlikely(!__pyx_t_6)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 271, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_6); - } - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_6); - __pyx_t_6 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":272 - * - * for key in tqdm(item_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YI'): - * item_aspect_opinion[key] = self._compute_attention_score( # <<<<<<<<<<<<<< - * item_aspect_opinion[key] - * ) - */ - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_compute_attention_score); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 272, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":273 - * for key in tqdm(item_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YI'): - * item_aspect_opinion[key] = self._compute_attention_score( - * item_aspect_opinion[key] # <<<<<<<<<<<<<< - * ) - * Y = self._build_item_quality_matrix(data_set, sentiment) - */ - __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_item_aspect_opinion, __pyx_v_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) { - __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10); - if (likely(__pyx_t_11)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); - __Pyx_INCREF(__pyx_t_11); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_10, function); - } - } - __pyx_t_6 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_11, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_2); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 272, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":272 - * - * for key in tqdm(item_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YI'): - * item_aspect_opinion[key] = self._compute_attention_score( # <<<<<<<<<<<<<< - * item_aspect_opinion[key] - * ) - */ - if (unlikely(PyDict_SetItem(__pyx_v_item_aspect_opinion, __pyx_v_key, __pyx_t_6) < 0)) __PYX_ERR(0, 272, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":271 - * ) - * - * for key in tqdm(item_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YI'): # <<<<<<<<<<<<<< - * item_aspect_opinion[key] = self._compute_attention_score( - * item_aspect_opinion[key] - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":275 - * item_aspect_opinion[key] - * ) - * Y = self._build_item_quality_matrix(data_set, sentiment) # <<<<<<<<<<<<<< - * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = self._build_chrono_purchased_pairs(data_set, user_item_aspect, Y) - * - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_build_item_quality_matrix); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 275, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_10 = NULL; - __pyx_t_13 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_10)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_10); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - __pyx_t_13 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_v_data_set, __pyx_v_sentiment}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 275, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_v_data_set, __pyx_v_sentiment}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 275, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - { - __pyx_t_2 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 275, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (__pyx_t_10) { - __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_10); __pyx_t_10 = NULL; - } - __Pyx_INCREF(__pyx_v_data_set); - __Pyx_GIVEREF(__pyx_v_data_set); - PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_13, __pyx_v_data_set); - __Pyx_INCREF(__pyx_v_sentiment); - __Pyx_GIVEREF(__pyx_v_sentiment); - PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_13, __pyx_v_sentiment); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 275, __pyx_L1_error) + /*else*/ { + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 275, __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_v_Y = __pyx_t_1; - __pyx_t_1 = 0; + __Pyx_INCREF(__pyx_v_shape); + __Pyx_GIVEREF(__pyx_v_shape); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_shape); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4); + __Pyx_INCREF(__pyx_v_mode); + __Pyx_GIVEREF(__pyx_v_mode); + PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_mode); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(1, 275, __pyx_L1_error) + __pyx_t_3 = ((PyObject *)__pyx_tp_new_array(((PyTypeObject *)__pyx_array_type), __pyx_t_1, __pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 275, __pyx_L1_error) + __Pyx_GOTREF((PyObject *)__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_3); + __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":276 - * ) - * Y = self._build_item_quality_matrix(data_set, sentiment) - * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = self._build_chrono_purchased_pairs(data_set, user_item_aspect, Y) # <<<<<<<<<<<<<< + /* "View.MemoryView":276 + * else: + * result = array.__new__(array, shape, itemsize, format, mode, allocate_buffer=False) + * result.data = buf # <<<<<<<<<<<<<< * - * if self.verbose: + * return result */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_build_chrono_purchased_pairs); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = NULL; - __pyx_t_13 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - __pyx_t_13 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_data_set, __pyx_v_user_item_aspect, __pyx_v_Y}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_data_set, __pyx_v_user_item_aspect, __pyx_v_Y}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - { - __pyx_t_10 = PyTuple_New(3+__pyx_t_13); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - if (__pyx_t_2) { - __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_2); __pyx_t_2 = NULL; - } - __Pyx_INCREF(__pyx_v_data_set); - __Pyx_GIVEREF(__pyx_v_data_set); - PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_13, __pyx_v_data_set); - __Pyx_INCREF(__pyx_v_user_item_aspect); - __Pyx_GIVEREF(__pyx_v_user_item_aspect); - PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_13, __pyx_v_user_item_aspect); - __Pyx_INCREF(__pyx_v_Y); - __Pyx_GIVEREF(__pyx_v_Y); - PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_13, __pyx_v_Y); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { - PyObject* sequence = __pyx_t_1; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 5)) { - if (size > 5) __Pyx_RaiseTooManyValuesError(5); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 276, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); - __pyx_t_11 = PyTuple_GET_ITEM(sequence, 3); - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 4); - } else { - __pyx_t_6 = PyList_GET_ITEM(sequence, 0); - __pyx_t_10 = PyList_GET_ITEM(sequence, 1); - __pyx_t_2 = PyList_GET_ITEM(sequence, 2); - __pyx_t_11 = PyList_GET_ITEM(sequence, 3); - __pyx_t_5 = PyList_GET_ITEM(sequence, 4); - } - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_10); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_11); - __Pyx_INCREF(__pyx_t_5); - #else - { - Py_ssize_t i; - PyObject** temps[5] = {&__pyx_t_6,&__pyx_t_10,&__pyx_t_2,&__pyx_t_11,&__pyx_t_5}; - for (i=0; i < 5; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(item); - *(temps[i]) = item; - } - } - #endif - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } else { - Py_ssize_t index = -1; - PyObject** temps[5] = {&__pyx_t_6,&__pyx_t_10,&__pyx_t_2,&__pyx_t_11,&__pyx_t_5}; - __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; - for (index=0; index < 5; index++) { - PyObject* item = __pyx_t_7(__pyx_t_3); if (unlikely(!item)) goto __pyx_L33_unpacking_failed; - __Pyx_GOTREF(item); - *(temps[index]) = item; - } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_3), 5) < 0) __PYX_ERR(0, 276, __pyx_L1_error) - __pyx_t_7 = NULL; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L34_unpacking_done; - __pyx_L33_unpacking_failed:; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_7 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 276, __pyx_L1_error) - __pyx_L34_unpacking_done:; + __pyx_v_result->data = __pyx_v_buf; } - __pyx_v_user_indices = __pyx_t_6; - __pyx_t_6 = 0; - __pyx_v_earlier_indices = __pyx_t_10; - __pyx_t_10 = 0; - __pyx_v_later_indices = __pyx_t_2; - __pyx_t_2 = 0; - __pyx_v_aspect_indices = __pyx_t_11; - __pyx_t_11 = 0; - __pyx_v_pair_freq = __pyx_t_5; - __pyx_t_5 = 0; + __pyx_L3:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":278 - * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = self._build_chrono_purchased_pairs(data_set, user_item_aspect, Y) + /* "View.MemoryView":278 + * result.data = buf * - * if self.verbose: # <<<<<<<<<<<<<< - * total_time = time.time() - start_time - * print("Building data completed in %d s" % total_time) - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_4) { - - /* "cornac/models/comparer/recom_comparer_sub.pyx":279 + * return result # <<<<<<<<<<<<<< * - * if self.verbose: - * total_time = time.time() - start_time # <<<<<<<<<<<<<< - * print("Building data completed in %d s" % total_time) - * return ( - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_time, __pyx_n_s_time); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 279, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && likely(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); - } - } - __pyx_t_1 = (__pyx_t_11) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_11) : __Pyx_PyObject_CallNoArg(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 279, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyNumber_Subtract(__pyx_t_1, __pyx_v_start_time); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 279, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_total_time = __pyx_t_5; - __pyx_t_5 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":280 - * if self.verbose: - * total_time = time.time() - start_time - * print("Building data completed in %d s" % total_time) # <<<<<<<<<<<<<< - * return ( - * rating_matrix, - */ - __pyx_t_5 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_Building_data_completed_in_d_s, __pyx_v_total_time); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 280, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 280, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":278 - * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = self._build_chrono_purchased_pairs(data_set, user_item_aspect, Y) * - * if self.verbose: # <<<<<<<<<<<<<< - * total_time = time.time() - start_time - * print("Building data completed in %d s" % total_time) - */ - } - - /* "cornac/models/comparer/recom_comparer_sub.pyx":281 - * total_time = time.time() - start_time - * print("Building data completed in %d s" % total_time) - * return ( # <<<<<<<<<<<<<< - * rating_matrix, - * rating_dict, - */ - __Pyx_XDECREF(__pyx_r); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":282 - * print("Building data completed in %d s" % total_time) - * return ( - * rating_matrix, # <<<<<<<<<<<<<< - * rating_dict, - * user_item_aspect, */ - __pyx_t_1 = PyTuple_New(10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 282, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_rating_matrix); - __Pyx_GIVEREF(__pyx_v_rating_matrix); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_rating_matrix); - __Pyx_INCREF(((PyObject *)__pyx_v_rating_dict)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_rating_dict)); - PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_rating_dict)); - __Pyx_INCREF(__pyx_v_user_item_aspect); - __Pyx_GIVEREF(__pyx_v_user_item_aspect); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_user_item_aspect); - __Pyx_INCREF(__pyx_v_user_aspect_opinion); - __Pyx_GIVEREF(__pyx_v_user_aspect_opinion); - PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_user_aspect_opinion); - __Pyx_INCREF(__pyx_v_item_aspect_opinion); - __Pyx_GIVEREF(__pyx_v_item_aspect_opinion); - PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_v_item_aspect_opinion); - __Pyx_INCREF(__pyx_v_user_indices); - __Pyx_GIVEREF(__pyx_v_user_indices); - PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_v_user_indices); - __Pyx_INCREF(__pyx_v_earlier_indices); - __Pyx_GIVEREF(__pyx_v_earlier_indices); - PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_v_earlier_indices); - __Pyx_INCREF(__pyx_v_later_indices); - __Pyx_GIVEREF(__pyx_v_later_indices); - PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_v_later_indices); - __Pyx_INCREF(__pyx_v_aspect_indices); - __Pyx_GIVEREF(__pyx_v_aspect_indices); - PyTuple_SET_ITEM(__pyx_t_1, 8, __pyx_v_aspect_indices); - __Pyx_INCREF(__pyx_v_pair_freq); - __Pyx_GIVEREF(__pyx_v_pair_freq); - PyTuple_SET_ITEM(__pyx_t_1, 9, __pyx_v_pair_freq); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; + __Pyx_XDECREF((PyObject *)__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_result); + __pyx_r = __pyx_v_result; goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":213 - * return Y + /* "View.MemoryView":268 * - * def _build_data(self, data_set): # <<<<<<<<<<<<<< - * import time - * from tqdm import tqdm + * @cname("__pyx_array_new") + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, char *c_mode, char *buf): # <<<<<<<<<<<<<< + * cdef array result + * cdef str mode = "fortran" if c_mode[0] == b'f' else "c" # this often comes from a constant C string. */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_18); - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._build_data", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.array_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_time); - __Pyx_XDECREF(__pyx_v_tqdm); - __Pyx_XDECREF(__pyx_v_start_time); - __Pyx_XDECREF(__pyx_v_sentiment); - __Pyx_XDECREF(__pyx_v_u_indices); - __Pyx_XDECREF(__pyx_v_i_indices); - __Pyx_XDECREF(__pyx_v_r_values); - __Pyx_XDECREF(__pyx_v_keys); - __Pyx_XDECREF((PyObject *)__pyx_v_rating_dict); - __Pyx_XDECREF(__pyx_v_rating_matrix); - __Pyx_XDECREF(__pyx_v_user_item_aspect); - __Pyx_XDECREF(__pyx_v_user_aspect_opinion); - __Pyx_XDECREF(__pyx_v_item_aspect_opinion); - __Pyx_XDECREF(__pyx_v_u_idx); - __Pyx_XDECREF(__pyx_v_sentiment_tup_ids_by_item); - __Pyx_XDECREF(__pyx_v_i_idx); - __Pyx_XDECREF(__pyx_v_tup_idx); - __Pyx_XDECREF(__pyx_v_a_idx); - __Pyx_XDECREF(__pyx_v_o_idx); - __Pyx_XDECREF(__pyx_v_polarity); - __Pyx_XDECREF(__pyx_v_key); - __Pyx_XDECREF(__pyx_v_Y); - __Pyx_XDECREF(__pyx_v_user_indices); - __Pyx_XDECREF(__pyx_v_earlier_indices); - __Pyx_XDECREF(__pyx_v_later_indices); - __Pyx_XDECREF(__pyx_v_aspect_indices); - __Pyx_XDECREF(__pyx_v_pair_freq); - __Pyx_XDECREF(__pyx_v_total_time); - __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_u); - __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_i); - __Pyx_XGIVEREF(__pyx_r); + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XDECREF(__pyx_v_mode); + __Pyx_XGIVEREF((PyObject *)__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "cornac/models/comparer/recom_comparer_sub.pyx":290 - * ) - * - * def _build_chrono_purchased_pairs(self, data_set, user_item_aspect, Y): # <<<<<<<<<<<<<< - * start_time = time() - * from tqdm import tqdm +/* "View.MemoryView":304 + * cdef class Enum(object): + * cdef object name + * def __init__(self, name): # <<<<<<<<<<<<<< + * self.name = name + * def __repr__(self): */ /* Python wrapper */ -static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_7_build_chrono_purchased_pairs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_7_build_chrono_purchased_pairs = {"_build_chrono_purchased_pairs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_7_build_chrono_purchased_pairs, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_7_build_chrono_purchased_pairs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_data_set = 0; - PyObject *__pyx_v_user_item_aspect = 0; - PyObject *__pyx_v_Y = 0; +static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_name = 0; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - PyObject *__pyx_r = 0; + int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_build_chrono_purchased_pairs (wrapper)", 0); + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_data_set,&__pyx_n_s_user_item_aspect,&__pyx_n_s_Y,0}; - PyObject* values[4] = {0,0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0}; + PyObject* values[1] = {0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_name)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 304, __pyx_L3_error) else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_data_set)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_build_chrono_purchased_pairs", 1, 4, 4, 1); __PYX_ERR(0, 290, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_user_item_aspect)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_build_chrono_purchased_pairs", 1, 4, 4, 2); __PYX_ERR(0, 290, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_build_chrono_purchased_pairs", 1, 4, 4, 3); __PYX_ERR(0, 290, __pyx_L3_error) - } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_build_chrono_purchased_pairs") < 0)) __PYX_ERR(0, 290, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(1, 304, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { + } else if (unlikely(__pyx_nargs != 1)) { 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[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); } - __pyx_v_self = values[0]; - __pyx_v_data_set = values[1]; - __pyx_v_user_item_aspect = values[2]; - __pyx_v_Y = values[3]; + __pyx_v_name = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_build_chrono_purchased_pairs", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 290, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 304, __pyx_L3_error) __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._build_chrono_purchased_pairs", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("View.MemoryView.Enum.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); - return NULL; + return -1; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_6_build_chrono_purchased_pairs(__pyx_self, __pyx_v_self, __pyx_v_data_set, __pyx_v_user_item_aspect, __pyx_v_Y); + __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v_name); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_6_build_chrono_purchased_pairs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_data_set, PyObject *__pyx_v_user_item_aspect, PyObject *__pyx_v_Y) { - PyObject *__pyx_v_start_time = NULL; - PyObject *__pyx_v_tqdm = NULL; - PyObject *__pyx_v_chrono_purchased_pairs = NULL; - PyObject *__pyx_v_user_idx = NULL; - PyObject *__pyx_v_item_ids = NULL; - CYTHON_UNUSED PyObject *__pyx_v__ = NULL; - PyObject *__pyx_v_window = NULL; - PyObject *__pyx_v_sub_item_ids = NULL; - PyObject *__pyx_v_earlier_item_idx = NULL; - PyObject *__pyx_v_later_item_idx = NULL; - PyObject *__pyx_v_pair_counts = NULL; - PyObject *__pyx_v_common_aspect_counts = NULL; - PyObject *__pyx_v_counted_pairs = NULL; - PyObject *__pyx_v_not_dominated_pairs = NULL; - PyObject *__pyx_v_count = NULL; - PyObject *__pyx_v_k = NULL; - PyObject *__pyx_v_user_indices = NULL; - PyObject *__pyx_v_earlier_indices = NULL; - PyObject *__pyx_v_later_indices = NULL; - PyObject *__pyx_v_aspect_indices = NULL; - PyObject *__pyx_v_pair_freq = NULL; - PyObject *__pyx_v_aspect_idx = NULL; - PyObject *__pyx_8genexpr2__pyx_v_i = NULL; +static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__", 0); + + /* "View.MemoryView":305 + * cdef object name + * def __init__(self, name): + * self.name = name # <<<<<<<<<<<<<< + * def __repr__(self): + * return self.name + */ + __Pyx_INCREF(__pyx_v_name); + __Pyx_GIVEREF(__pyx_v_name); + __Pyx_GOTREF(__pyx_v_self->name); + __Pyx_DECREF(__pyx_v_self->name); + __pyx_v_self->name = __pyx_v_name; + + /* "View.MemoryView":304 + * cdef class Enum(object): + * cdef object name + * def __init__(self, name): # <<<<<<<<<<<<<< + * self.name = name + * def __repr__(self): + */ + + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":306 + * def __init__(self, name): + * self.name = name + * def __repr__(self): # <<<<<<<<<<<<<< + * return self.name + * + */ + +/* Python wrapper */ +static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "View.MemoryView":307 + * self.name = name + * def __repr__(self): + * return self.name # <<<<<<<<<<<<<< + * + * cdef generic = Enum("") + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->name); + __pyx_r = __pyx_v_self->name; + goto __pyx_L0; + + /* "View.MemoryView":306 + * def __init__(self, name): + * self.name = name + * def __repr__(self): # <<<<<<<<<<<<<< + * return self.name + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; + __pyx_r = __pyx_pf___pyx_MemviewEnum___reduce_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v__dict = 0; + int __pyx_v_use_setstate; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; + int __pyx_t_2; PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *(*__pyx_t_9)(PyObject *); - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - Py_ssize_t __pyx_t_12; - int __pyx_t_13; - PyObject *(*__pyx_t_14)(PyObject *); - int __pyx_t_15; - Py_ssize_t __pyx_t_16; - PyObject *__pyx_t_17 = NULL; - int __pyx_t_18; - int __pyx_t_19; - PyObject *__pyx_t_20 = NULL; - Py_UCS4 __pyx_t_21; + PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_build_chrono_purchased_pairs", 0); + __Pyx_RefNannySetupContext("__reduce_cython__", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":291 - * - * def _build_chrono_purchased_pairs(self, data_set, user_item_aspect, Y): - * start_time = time() # <<<<<<<<<<<<<< - * from tqdm import tqdm - * chrono_purchased_pairs = Counter() + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.name,) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 291, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 291, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_start_time = __pyx_t_1; + __Pyx_INCREF(__pyx_v_self->name); + __Pyx_GIVEREF(__pyx_v_self->name); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name); + __pyx_v_state = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":292 - * def _build_chrono_purchased_pairs(self, data_set, user_item_aspect, Y): - * start_time = time() - * from tqdm import tqdm # <<<<<<<<<<<<<< - * chrono_purchased_pairs = Counter() - * for user_idx, (item_ids, *_) in tqdm(data_set.chrono_user_data.items(), disable=not self.verbose, desc='Get purchased pairs'): + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 292, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_tqdm); - __Pyx_GIVEREF(__pyx_n_s_tqdm); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_tqdm); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_tqdm, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 292, __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_tqdm); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 292, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_tqdm = __pyx_t_1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v__dict = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":293 - * start_time = time() - * from tqdm import tqdm - * chrono_purchased_pairs = Counter() # <<<<<<<<<<<<<< - * for user_idx, (item_ids, *_) in tqdm(data_set.chrono_user_data.items(), disable=not self.verbose, desc='Get purchased pairs'): - * if len(item_ids) >= self.min_user_freq: + /* "(tree fragment)":7 + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Counter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 293, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 293, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_chrono_purchased_pairs = __pyx_t_2; - __pyx_t_2 = 0; + __pyx_t_2 = (__pyx_v__dict != Py_None); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":294 - * from tqdm import tqdm - * chrono_purchased_pairs = Counter() - * for user_idx, (item_ids, *_) in tqdm(data_set.chrono_user_data.items(), disable=not self.verbose, desc='Get purchased pairs'): # <<<<<<<<<<<<<< - * if len(item_ids) >= self.min_user_freq: - * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_data_set, __pyx_n_s_chrono_user_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 294, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 294, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 294, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 294, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 294, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyBool_FromLong((!__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_disable, __pyx_t_1) < 0) __PYX_ERR(0, 294, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_desc, __pyx_kp_u_Get_purchased_pairs) < 0) __PYX_ERR(0, 294, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_tqdm, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (likely(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, 294, __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, 294, __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_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __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, 294, __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, 294, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - #endif - } else { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 294, __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, 294, __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(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 294, __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; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 294, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_3 = PyList_GET_ITEM(sequence, 0); - __pyx_t_7 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_7); - #else - __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 294, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 294, __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, 294, __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_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, 294, __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, 294, __pyx_L1_error) - __pyx_L6_unpacking_done:; - } - __Pyx_XDECREF_SET(__pyx_v_user_idx, __pyx_t_3); + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); + __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0; - { - Py_ssize_t index = -1; - PyObject** temps[2] = {&__pyx_t_8}; - __pyx_t_10 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 294, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_9 = Py_TYPE(__pyx_t_10)->tp_iternext; - for (index=0; index < 1; index++) { - PyObject* item = __pyx_t_9(__pyx_t_10); if (unlikely(!item)) goto __pyx_L7_unpacking_failed; - __Pyx_GOTREF(item); - *(temps[index]) = item; - } - goto __pyx_L8_unpacking_done; - __pyx_L7_unpacking_failed:; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_9 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 294, __pyx_L1_error) - __pyx_L8_unpacking_done:; - } - __pyx_t_11 = PySequence_List(__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 294, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF_SET(__pyx_v_item_ids, __pyx_t_8); - __pyx_t_8 = 0; - __Pyx_XDECREF_SET(__pyx_v__, ((PyObject*)__pyx_t_11)); - __pyx_t_11 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":295 - * chrono_purchased_pairs = Counter() - * for user_idx, (item_ids, *_) in tqdm(data_set.chrono_user_data.items(), disable=not self.verbose, desc='Get purchased pairs'): - * if len(item_ids) >= self.min_user_freq: # <<<<<<<<<<<<<< - * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) - * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self.name is not None */ - __pyx_t_12 = PyObject_Length(__pyx_v_item_ids); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 295, __pyx_L1_error) - __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 295, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_min_user_freq); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 295, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_7, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 295, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 295, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_4) { + __pyx_v_use_setstate = 1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":296 - * for user_idx, (item_ids, *_) in tqdm(data_set.chrono_user_data.items(), disable=not self.verbose, desc='Get purchased pairs'): - * if len(item_ids) >= self.min_user_freq: - * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) # <<<<<<<<<<<<<< - * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: - * for earlier_item_idx, later_item_idx in combinations(sub_item_ids, 2): + /* "(tree fragment)":7 + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_enum_window); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 296, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = (__pyx_t_7 == Py_None); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if ((__pyx_t_4 != 0)) { - __pyx_t_12 = PyObject_Length(__pyx_v_item_ids); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 296, __pyx_L1_error) - __pyx_t_7 = PyInt_FromSsize_t(__pyx_t_12); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 296, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_3 = __pyx_t_7; - __pyx_t_7 = 0; - } else { - __pyx_t_12 = PyObject_Length(__pyx_v_item_ids); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 296, __pyx_L1_error) - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_enum_window); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 296, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_11 = PyInt_FromSsize_t(__pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 296, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_8 = PyObject_RichCompare(__pyx_t_11, __pyx_t_7, Py_LT); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 296, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 296, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_13) { - __pyx_t_8 = PyInt_FromSsize_t(__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 296, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __pyx_t_8; - __pyx_t_8 = 0; - } else { - __Pyx_INCREF(__pyx_t_7); - __pyx_t_1 = __pyx_t_7; - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_INCREF(__pyx_t_1); - __pyx_t_3 = __pyx_t_1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __Pyx_XDECREF_SET(__pyx_v_window, __pyx_t_3); - __pyx_t_3 = 0; + goto __pyx_L3; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":297 - * if len(item_ids) >= self.min_user_freq: - * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) - * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: # <<<<<<<<<<<<<< - * for earlier_item_idx, later_item_idx in combinations(sub_item_ids, 2): - * if self.train_set.is_unk_item(earlier_item_idx) or self.train_set.is_unk_item(later_item_idx): + /* "(tree fragment)":11 + * use_setstate = True + * else: + * use_setstate = self.name is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, None), state */ - { /* enter inner scope */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 297, __pyx_L14_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_12 = PyObject_Length(__pyx_v_item_ids); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 297, __pyx_L14_error) - __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 297, __pyx_L14_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = PyNumber_Subtract(__pyx_t_1, __pyx_v_window); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 297, __pyx_L14_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_7, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 297, __pyx_L14_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 297, __pyx_L14_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) { - __pyx_t_1 = __pyx_t_7; __Pyx_INCREF(__pyx_t_1); __pyx_t_12 = 0; - __pyx_t_14 = NULL; - } else { - __pyx_t_12 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 297, __pyx_L14_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_14 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 297, __pyx_L14_error) - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - for (;;) { - if (likely(!__pyx_t_14)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_7 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_12); __Pyx_INCREF(__pyx_t_7); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 297, __pyx_L14_error) - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 297, __pyx_L14_error) - __Pyx_GOTREF(__pyx_t_7); - #endif - } else { - if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_12); __Pyx_INCREF(__pyx_t_7); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 297, __pyx_L14_error) - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 297, __pyx_L14_error) - __Pyx_GOTREF(__pyx_t_7); - #endif - } - } else { - __pyx_t_7 = __pyx_t_14(__pyx_t_1); - if (unlikely(!__pyx_t_7)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 297, __pyx_L14_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_7); - } - __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v_i, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = PyNumber_Add(__pyx_8genexpr2__pyx_v_i, __pyx_v_window); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 297, __pyx_L14_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetSlice(__pyx_v_item_ids, 0, 0, &__pyx_8genexpr2__pyx_v_i, &__pyx_t_7, NULL, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 297, __pyx_L14_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 297, __pyx_L14_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_i); __pyx_8genexpr2__pyx_v_i = 0; - goto __pyx_L17_exit_scope; - __pyx_L14_error:; - __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_i); __pyx_8genexpr2__pyx_v_i = 0; - goto __pyx_L1_error; - __pyx_L17_exit_scope:; - } /* exit inner scope */ - __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - for (;;) { - if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_12); __Pyx_INCREF(__pyx_t_3); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 297, __pyx_L1_error) - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 297, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - __Pyx_XDECREF_SET(__pyx_v_sub_item_ids, __pyx_t_3); - __pyx_t_3 = 0; + /*else*/ { + __pyx_t_2 = (__pyx_v_self->name != Py_None); + __pyx_v_use_setstate = __pyx_t_2; + } + __pyx_L3:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":298 - * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) - * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: - * for earlier_item_idx, later_item_idx in combinations(sub_item_ids, 2): # <<<<<<<<<<<<<< - * if self.train_set.is_unk_item(earlier_item_idx) or self.train_set.is_unk_item(later_item_idx): - * continue + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, None), state + * else: */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_combinations); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 298, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = NULL; - __pyx_t_15 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - __pyx_t_15 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_sub_item_ids, __pyx_int_2}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_3); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_sub_item_ids, __pyx_int_2}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_3); - } else - #endif - { - __pyx_t_11 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 298, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_7); __pyx_t_7 = NULL; - } - __Pyx_INCREF(__pyx_v_sub_item_ids); - __Pyx_GIVEREF(__pyx_v_sub_item_ids); - PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_15, __pyx_v_sub_item_ids); - __Pyx_INCREF(__pyx_int_2); - __Pyx_GIVEREF(__pyx_int_2); - PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_15, __pyx_int_2); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { - __pyx_t_8 = __pyx_t_3; __Pyx_INCREF(__pyx_t_8); __pyx_t_16 = 0; - __pyx_t_14 = NULL; - } else { - __pyx_t_16 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 298, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_14 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 298, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - for (;;) { - if (likely(!__pyx_t_14)) { - if (likely(PyList_CheckExact(__pyx_t_8))) { - if (__pyx_t_16 >= PyList_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_16); __Pyx_INCREF(__pyx_t_3); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 298, __pyx_L1_error) - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_8, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - } else { - if (__pyx_t_16 >= PyTuple_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_16); __Pyx_INCREF(__pyx_t_3); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 298, __pyx_L1_error) - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_8, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - } - } else { - __pyx_t_3 = __pyx_t_14(__pyx_t_8); - if (unlikely(!__pyx_t_3)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 298, __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; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 298, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_11 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_11 = PyList_GET_ITEM(sequence, 0); - __pyx_t_7 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_11); - __Pyx_INCREF(__pyx_t_7); - #else - __pyx_t_11 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 298, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 298, __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_10 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 298, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_9 = Py_TYPE(__pyx_t_10)->tp_iternext; - index = 0; __pyx_t_11 = __pyx_t_9(__pyx_t_10); if (unlikely(!__pyx_t_11)) goto __pyx_L20_unpacking_failed; - __Pyx_GOTREF(__pyx_t_11); - index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_10); if (unlikely(!__pyx_t_7)) goto __pyx_L20_unpacking_failed; - __Pyx_GOTREF(__pyx_t_7); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_10), 2) < 0) __PYX_ERR(0, 298, __pyx_L1_error) - __pyx_t_9 = NULL; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L21_unpacking_done; - __pyx_L20_unpacking_failed:; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_9 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 298, __pyx_L1_error) - __pyx_L21_unpacking_done:; - } - __Pyx_XDECREF_SET(__pyx_v_earlier_item_idx, __pyx_t_11); - __pyx_t_11 = 0; - __Pyx_XDECREF_SET(__pyx_v_later_item_idx, __pyx_t_7); - __pyx_t_7 = 0; + if (__pyx_v_use_setstate) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":299 - * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: - * for earlier_item_idx, later_item_idx in combinations(sub_item_ids, 2): - * if self.train_set.is_unk_item(earlier_item_idx) or self.train_set.is_unk_item(later_item_idx): # <<<<<<<<<<<<<< - * continue - * chrono_purchased_pairs[(user_idx, earlier_item_idx, later_item_idx)] += 1 + /* "(tree fragment)":13 + * use_setstate = self.name is not None + * if use_setstate: + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, state) */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 299, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_is_unk_item); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 299, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_7, __pyx_v_earlier_item_idx) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_earlier_item_idx); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 299, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 299, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!__pyx_t_13) { - } else { - __pyx_t_4 = __pyx_t_13; - goto __pyx_L23_bool_binop_done; - } - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 299, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_is_unk_item); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 299, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_11)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_11); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_3 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_11, __pyx_v_later_item_idx) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_later_item_idx); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 299, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 299, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_4 = __pyx_t_13; - __pyx_L23_bool_binop_done:; - if (__pyx_t_4) { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_136983863); + __Pyx_GIVEREF(__pyx_int_136983863); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_136983863); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_state); + __pyx_t_3 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":300 - * for earlier_item_idx, later_item_idx in combinations(sub_item_ids, 2): - * if self.train_set.is_unk_item(earlier_item_idx) or self.train_set.is_unk_item(later_item_idx): - * continue # <<<<<<<<<<<<<< - * chrono_purchased_pairs[(user_idx, earlier_item_idx, later_item_idx)] += 1 - * + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, None), state + * else: */ - goto __pyx_L18_continue; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":299 - * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: - * for earlier_item_idx, later_item_idx in combinations(sub_item_ids, 2): - * if self.train_set.is_unk_item(earlier_item_idx) or self.train_set.is_unk_item(later_item_idx): # <<<<<<<<<<<<<< - * continue - * chrono_purchased_pairs[(user_idx, earlier_item_idx, later_item_idx)] += 1 + /* "(tree fragment)":15 + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, None), state + * else: + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_Enum__set_state(self, __pyx_state) */ - } + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_136983863); + __Pyx_GIVEREF(__pyx_int_136983863); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_136983863); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":301 - * if self.train_set.is_unk_item(earlier_item_idx) or self.train_set.is_unk_item(later_item_idx): - * continue - * chrono_purchased_pairs[(user_idx, earlier_item_idx, later_item_idx)] += 1 # <<<<<<<<<<<<<< - * - * pair_counts = Counter() + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict */ - __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 301, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_user_idx); - __Pyx_GIVEREF(__pyx_v_user_idx); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_user_idx); - __Pyx_INCREF(__pyx_v_earlier_item_idx); - __Pyx_GIVEREF(__pyx_v_earlier_item_idx); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_earlier_item_idx); - __Pyx_INCREF(__pyx_v_later_item_idx); - __Pyx_GIVEREF(__pyx_v_later_item_idx); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_later_item_idx); - __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_chrono_purchased_pairs, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 301, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_11 = __Pyx_PyInt_AddObjC(__pyx_t_7, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 301, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(PyObject_SetItem(__pyx_v_chrono_purchased_pairs, __pyx_t_3, __pyx_t_11) < 0)) __PYX_ERR(0, 301, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":298 - * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) - * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: - * for earlier_item_idx, later_item_idx in combinations(sub_item_ids, 2): # <<<<<<<<<<<<<< - * if self.train_set.is_unk_item(earlier_item_idx) or self.train_set.is_unk_item(later_item_idx): - * continue - */ - __pyx_L18_continue:; - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.Enum.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_state); + __Pyx_XDECREF(__pyx_v__dict); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":297 - * if len(item_ids) >= self.min_user_freq: - * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) - * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: # <<<<<<<<<<<<<< - * for earlier_item_idx, later_item_idx in combinations(sub_item_ids, 2): - * if self.train_set.is_unk_item(earlier_item_idx) or self.train_set.is_unk_item(later_item_idx): +/* "(tree fragment)":16 + * else: + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state(self, __pyx_state) */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + PyObject* values[1] = {0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 16, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 16, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf___pyx_MemviewEnum_2__setstate_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v___pyx_state); - /* "cornac/models/comparer/recom_comparer_sub.pyx":295 - * chrono_purchased_pairs = Counter() - * for user_idx, (item_ids, *_) in tqdm(data_set.chrono_user_data.items(), disable=not self.verbose, desc='Get purchased pairs'): - * if len(item_ids) >= self.min_user_freq: # <<<<<<<<<<<<<< - * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) - * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_Enum__set_state(self, __pyx_state) # <<<<<<<<<<<<<< */ - } + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_unpickle_Enum__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":294 - * from tqdm import tqdm - * chrono_purchased_pairs = Counter() - * for user_idx, (item_ids, *_) in tqdm(data_set.chrono_user_data.items(), disable=not self.verbose, desc='Get purchased pairs'): # <<<<<<<<<<<<<< - * if len(item_ids) >= self.min_user_freq: - * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state(self, __pyx_state) */ - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":303 - * chrono_purchased_pairs[(user_idx, earlier_item_idx, later_item_idx)] += 1 + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":349 + * cdef __Pyx_TypeInfo *typeinfo * - * pair_counts = Counter() # <<<<<<<<<<<<<< - * common_aspect_counts = Counter() - * counted_pairs = set() + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< + * self.obj = obj + * self.flags = flags */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Counter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 303, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + +/* Python wrapper */ +static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_obj = 0; + int __pyx_v_flags; + int __pyx_v_dtype_is_object; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_flags,&__pyx_n_s_dtype_is_object,0}; + PyObject* values[3] = {0,0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 349, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_flags)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 349, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(1, 349, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_dtype_is_object); + if (value) { values[2] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 349, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__cinit__") < 0)) __PYX_ERR(1, 349, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj = values[0]; + __pyx_v_flags = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_flags == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 349, __pyx_L3_error) + if (values[2]) { + __pyx_v_dtype_is_object = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_dtype_is_object == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 349, __pyx_L3_error) + } else { + __pyx_v_dtype_is_object = ((int)0); } } - __pyx_t_2 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 303, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_pair_counts = __pyx_t_2; - __pyx_t_2 = 0; + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, __pyx_nargs); __PYX_ERR(1, 349, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_obj, __pyx_v_flags, __pyx_v_dtype_is_object); - /* "cornac/models/comparer/recom_comparer_sub.pyx":304 + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + Py_intptr_t __pyx_t_4; + size_t __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__cinit__", 0); + + /* "View.MemoryView":350 * - * pair_counts = Counter() - * common_aspect_counts = Counter() # <<<<<<<<<<<<<< - * counted_pairs = set() - * not_dominated_pairs = set() + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): + * self.obj = obj # <<<<<<<<<<<<<< + * self.flags = flags + * if type(self) is memoryview or obj is not None: */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Counter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 304, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } + __Pyx_INCREF(__pyx_v_obj); + __Pyx_GIVEREF(__pyx_v_obj); + __Pyx_GOTREF(__pyx_v_self->obj); + __Pyx_DECREF(__pyx_v_self->obj); + __pyx_v_self->obj = __pyx_v_obj; + + /* "View.MemoryView":351 + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): + * self.obj = obj + * self.flags = flags # <<<<<<<<<<<<<< + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + */ + __pyx_v_self->flags = __pyx_v_flags; + + /* "View.MemoryView":352 + * self.obj = obj + * self.flags = flags + * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))) == ((PyObject *)__pyx_memoryview_type)); + if (!__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; } - __pyx_t_2 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 304, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_common_aspect_counts = __pyx_t_2; - __pyx_t_2 = 0; + __pyx_t_2 = (__pyx_v_obj != Py_None); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":305 - * pair_counts = Counter() - * common_aspect_counts = Counter() - * counted_pairs = set() # <<<<<<<<<<<<<< - * not_dominated_pairs = set() - * for (user_idx, earlier_item_idx, later_item_idx), count in tqdm(chrono_purchased_pairs.most_common(), disable=not self.verbose, desc='Get skyline aspects'): + /* "View.MemoryView":353 + * self.flags = flags + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) # <<<<<<<<<<<<<< + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None */ - __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 305, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_counted_pairs = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_GetBuffer(__pyx_v_obj, (&__pyx_v_self->view), __pyx_v_flags); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 353, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":306 - * common_aspect_counts = Counter() - * counted_pairs = set() - * not_dominated_pairs = set() # <<<<<<<<<<<<<< - * for (user_idx, earlier_item_idx, later_item_idx), count in tqdm(chrono_purchased_pairs.most_common(), disable=not self.verbose, desc='Get skyline aspects'): - * for k in range(self.train_set.sentiment.num_aspects - 1): # ignore rating at the last index + /* "View.MemoryView":354 + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) */ - __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 306, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_not_dominated_pairs = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_1 = (((PyObject *)__pyx_v_self->view.obj) == NULL); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":307 - * counted_pairs = set() - * not_dominated_pairs = set() - * for (user_idx, earlier_item_idx, later_item_idx), count in tqdm(chrono_purchased_pairs.most_common(), disable=not self.verbose, desc='Get skyline aspects'): # <<<<<<<<<<<<<< - * for k in range(self.train_set.sentiment.num_aspects - 1): # ignore rating at the last index - * if user_item_aspect.get((user_idx, later_item_idx, k), 0) > user_item_aspect.get((user_idx, earlier_item_idx, k), 0): + /* "View.MemoryView":355 + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_self->view))->obj = Py_None; + + /* "View.MemoryView":356 + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * if not __PYX_CYTHON_ATOMICS_ENABLED(): + */ + Py_INCREF(Py_None); + + /* "View.MemoryView":354 + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_chrono_purchased_pairs, __pyx_n_s_most_common); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); } + + /* "View.MemoryView":352 + * self.obj = obj + * self.flags = flags + * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + */ } - __pyx_t_2 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 307, __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_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyBool_FromLong((!__pyx_t_4)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_disable, __pyx_t_8) < 0) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_desc, __pyx_kp_u_Get_skyline_aspects) < 0) __PYX_ERR(0, 307, __pyx_L1_error) - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_tqdm, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (likely(PyList_CheckExact(__pyx_t_8)) || PyTuple_CheckExact(__pyx_t_8)) { - __pyx_t_2 = __pyx_t_8; __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_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 307, __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, 307, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 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_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_8 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_8); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 307, __pyx_L1_error) - #else - __pyx_t_8 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - #endif - } else { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_8); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 307, __pyx_L1_error) - #else - __pyx_t_8 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - #endif - } - } else { - __pyx_t_8 = __pyx_t_6(__pyx_t_2); - if (unlikely(!__pyx_t_8)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 307, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_8); - } - if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { - PyObject* sequence = __pyx_t_8; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 307, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_1 = PyList_GET_ITEM(sequence, 0); - __pyx_t_3 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - #else - __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_9 = Py_TYPE(__pyx_t_11)->tp_iternext; - index = 0; __pyx_t_1 = __pyx_t_9(__pyx_t_11); if (unlikely(!__pyx_t_1)) goto __pyx_L27_unpacking_failed; - __Pyx_GOTREF(__pyx_t_1); - index = 1; __pyx_t_3 = __pyx_t_9(__pyx_t_11); if (unlikely(!__pyx_t_3)) goto __pyx_L27_unpacking_failed; - __Pyx_GOTREF(__pyx_t_3); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_11), 2) < 0) __PYX_ERR(0, 307, __pyx_L1_error) - __pyx_t_9 = NULL; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L28_unpacking_done; - __pyx_L27_unpacking_failed:; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_9 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 307, __pyx_L1_error) - __pyx_L28_unpacking_done:; - } - if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { - PyObject* sequence = __pyx_t_1; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 3)) { - if (size > 3) __Pyx_RaiseTooManyValuesError(3); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 307, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_11 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_10 = PyTuple_GET_ITEM(sequence, 2); - } else { - __pyx_t_11 = PyList_GET_ITEM(sequence, 0); - __pyx_t_7 = PyList_GET_ITEM(sequence, 1); - __pyx_t_10 = PyList_GET_ITEM(sequence, 2); - } - __Pyx_INCREF(__pyx_t_11); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_10); - #else - __pyx_t_11 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_10 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - #endif - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_17 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_9 = Py_TYPE(__pyx_t_17)->tp_iternext; - index = 0; __pyx_t_11 = __pyx_t_9(__pyx_t_17); if (unlikely(!__pyx_t_11)) goto __pyx_L29_unpacking_failed; - __Pyx_GOTREF(__pyx_t_11); - index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_17); if (unlikely(!__pyx_t_7)) goto __pyx_L29_unpacking_failed; - __Pyx_GOTREF(__pyx_t_7); - index = 2; __pyx_t_10 = __pyx_t_9(__pyx_t_17); if (unlikely(!__pyx_t_10)) goto __pyx_L29_unpacking_failed; - __Pyx_GOTREF(__pyx_t_10); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_17), 3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) - __pyx_t_9 = NULL; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - goto __pyx_L30_unpacking_done; - __pyx_L29_unpacking_failed:; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __pyx_t_9 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 307, __pyx_L1_error) - __pyx_L30_unpacking_done:; - } - __Pyx_XDECREF_SET(__pyx_v_user_idx, __pyx_t_11); - __pyx_t_11 = 0; - __Pyx_XDECREF_SET(__pyx_v_earlier_item_idx, __pyx_t_7); - __pyx_t_7 = 0; - __Pyx_XDECREF_SET(__pyx_v_later_item_idx, __pyx_t_10); - __pyx_t_10 = 0; - __Pyx_XDECREF_SET(__pyx_v_count, __pyx_t_3); - __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":308 - * not_dominated_pairs = set() - * for (user_idx, earlier_item_idx, later_item_idx), count in tqdm(chrono_purchased_pairs.most_common(), disable=not self.verbose, desc='Get skyline aspects'): - * for k in range(self.train_set.sentiment.num_aspects - 1): # ignore rating at the last index # <<<<<<<<<<<<<< - * if user_item_aspect.get((user_idx, later_item_idx, k), 0) > user_item_aspect.get((user_idx, earlier_item_idx, k), 0): - * pair_counts[(user_idx, earlier_item_idx, later_item_idx, k)] += count + /* "View.MemoryView":358 + * Py_INCREF(Py_None) + * + * if not __PYX_CYTHON_ATOMICS_ENABLED(): # <<<<<<<<<<<<<< + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < 8: */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 308, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 308, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 308, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyInt_SubtractObjC(__pyx_t_8, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 308, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 308, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (likely(PyList_CheckExact(__pyx_t_8)) || PyTuple_CheckExact(__pyx_t_8)) { - __pyx_t_3 = __pyx_t_8; __Pyx_INCREF(__pyx_t_3); __pyx_t_12 = 0; - __pyx_t_14 = NULL; - } else { - __pyx_t_12 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 308, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_14 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 308, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - for (;;) { - if (likely(!__pyx_t_14)) { - if (likely(PyList_CheckExact(__pyx_t_3))) { - if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_8 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_12); __Pyx_INCREF(__pyx_t_8); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 308, __pyx_L1_error) - #else - __pyx_t_8 = PySequence_ITEM(__pyx_t_3, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 308, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - #endif - } else { - if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_12); __Pyx_INCREF(__pyx_t_8); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 308, __pyx_L1_error) - #else - __pyx_t_8 = PySequence_ITEM(__pyx_t_3, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 308, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - #endif - } - } else { - __pyx_t_8 = __pyx_t_14(__pyx_t_3); - if (unlikely(!__pyx_t_8)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 308, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_8); - } - __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_8); - __pyx_t_8 = 0; + __pyx_t_1 = (!__PYX_CYTHON_ATOMICS_ENABLED()); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":309 - * for (user_idx, earlier_item_idx, later_item_idx), count in tqdm(chrono_purchased_pairs.most_common(), disable=not self.verbose, desc='Get skyline aspects'): - * for k in range(self.train_set.sentiment.num_aspects - 1): # ignore rating at the last index - * if user_item_aspect.get((user_idx, later_item_idx, k), 0) > user_item_aspect.get((user_idx, earlier_item_idx, k), 0): # <<<<<<<<<<<<<< - * pair_counts[(user_idx, earlier_item_idx, later_item_idx, k)] += count - * not_dominated_pairs.add((user_idx, earlier_item_idx, later_item_idx)) + /* "View.MemoryView":360 + * if not __PYX_CYTHON_ATOMICS_ENABLED(): + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < 8: # <<<<<<<<<<<<<< + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_user_item_aspect, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_INCREF(__pyx_v_user_idx); - __Pyx_GIVEREF(__pyx_v_user_idx); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_user_idx); - __Pyx_INCREF(__pyx_v_later_item_idx); - __Pyx_GIVEREF(__pyx_v_later_item_idx); - PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_later_item_idx); - __Pyx_INCREF(__pyx_v_k); - __Pyx_GIVEREF(__pyx_v_k); - PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_v_k); - __pyx_t_7 = NULL; - __pyx_t_15 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_15 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_10, __pyx_int_0}; - __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_10, __pyx_int_0}; - __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - } else - #endif - { - __pyx_t_11 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_7); __pyx_t_7 = NULL; - } - __Pyx_GIVEREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_15, __pyx_t_10); - __Pyx_INCREF(__pyx_int_0); - __Pyx_GIVEREF(__pyx_int_0); - PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_15, __pyx_int_0); - __pyx_t_10 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_user_item_aspect, __pyx_n_s_get); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_INCREF(__pyx_v_user_idx); - __Pyx_GIVEREF(__pyx_v_user_idx); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_user_idx); - __Pyx_INCREF(__pyx_v_earlier_item_idx); - __Pyx_GIVEREF(__pyx_v_earlier_item_idx); - PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_earlier_item_idx); - __Pyx_INCREF(__pyx_v_k); - __Pyx_GIVEREF(__pyx_v_k); - PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_v_k); - __pyx_t_7 = NULL; - __pyx_t_15 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - __pyx_t_15 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_11)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_10, __pyx_int_0}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_10, __pyx_int_0}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - } else - #endif - { - __pyx_t_17 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_7); __pyx_t_7 = NULL; - } - __Pyx_GIVEREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_17, 0+__pyx_t_15, __pyx_t_10); - __Pyx_INCREF(__pyx_int_0); - __Pyx_GIVEREF(__pyx_int_0); - PyTuple_SET_ITEM(__pyx_t_17, 1+__pyx_t_15, __pyx_int_0); - __pyx_t_10 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_17, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - } - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = PyObject_RichCompare(__pyx_t_8, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (__pyx_t_4) { + __pyx_t_1 = (__pyx_memoryview_thread_locks_used < 8); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":310 - * for k in range(self.train_set.sentiment.num_aspects - 1): # ignore rating at the last index - * if user_item_aspect.get((user_idx, later_item_idx, k), 0) > user_item_aspect.get((user_idx, earlier_item_idx, k), 0): - * pair_counts[(user_idx, earlier_item_idx, later_item_idx, k)] += count # <<<<<<<<<<<<<< - * not_dominated_pairs.add((user_idx, earlier_item_idx, later_item_idx)) - * if Y[earlier_item_idx, k] > 0 and Y[later_item_idx, k] > 0 and (earlier_item_idx, later_item_idx) not in counted_pairs: + /* "View.MemoryView":361 + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < 8: + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: */ - __pyx_t_11 = PyTuple_New(4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 310, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_v_user_idx); - __Pyx_GIVEREF(__pyx_v_user_idx); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_user_idx); - __Pyx_INCREF(__pyx_v_earlier_item_idx); - __Pyx_GIVEREF(__pyx_v_earlier_item_idx); - PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_earlier_item_idx); - __Pyx_INCREF(__pyx_v_later_item_idx); - __Pyx_GIVEREF(__pyx_v_later_item_idx); - PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_v_later_item_idx); - __Pyx_INCREF(__pyx_v_k); - __Pyx_GIVEREF(__pyx_v_k); - PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_v_k); - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_pair_counts, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 310, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_t_1, __pyx_v_count); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 310, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(PyObject_SetItem(__pyx_v_pair_counts, __pyx_t_11, __pyx_t_8) < 0)) __PYX_ERR(0, 310, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_v_self->lock = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":311 - * if user_item_aspect.get((user_idx, later_item_idx, k), 0) > user_item_aspect.get((user_idx, earlier_item_idx, k), 0): - * pair_counts[(user_idx, earlier_item_idx, later_item_idx, k)] += count - * not_dominated_pairs.add((user_idx, earlier_item_idx, later_item_idx)) # <<<<<<<<<<<<<< - * if Y[earlier_item_idx, k] > 0 and Y[later_item_idx, k] > 0 and (earlier_item_idx, later_item_idx) not in counted_pairs: - * common_aspect_counts[(earlier_item_idx, later_item_idx)] += 1 + /* "View.MemoryView":362 + * if __pyx_memoryview_thread_locks_used < 8: + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 # <<<<<<<<<<<<<< + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() */ - __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 311, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_v_user_idx); - __Pyx_GIVEREF(__pyx_v_user_idx); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_user_idx); - __Pyx_INCREF(__pyx_v_earlier_item_idx); - __Pyx_GIVEREF(__pyx_v_earlier_item_idx); - PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_earlier_item_idx); - __Pyx_INCREF(__pyx_v_later_item_idx); - __Pyx_GIVEREF(__pyx_v_later_item_idx); - PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_v_later_item_idx); - __pyx_t_18 = PySet_Add(__pyx_v_not_dominated_pairs, __pyx_t_11); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 311, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used + 1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":309 - * for (user_idx, earlier_item_idx, later_item_idx), count in tqdm(chrono_purchased_pairs.most_common(), disable=not self.verbose, desc='Get skyline aspects'): - * for k in range(self.train_set.sentiment.num_aspects - 1): # ignore rating at the last index - * if user_item_aspect.get((user_idx, later_item_idx, k), 0) > user_item_aspect.get((user_idx, earlier_item_idx, k), 0): # <<<<<<<<<<<<<< - * pair_counts[(user_idx, earlier_item_idx, later_item_idx, k)] += count - * not_dominated_pairs.add((user_idx, earlier_item_idx, later_item_idx)) + /* "View.MemoryView":360 + * if not __PYX_CYTHON_ATOMICS_ENABLED(): + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < 8: # <<<<<<<<<<<<<< + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 */ - } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":312 - * pair_counts[(user_idx, earlier_item_idx, later_item_idx, k)] += count - * not_dominated_pairs.add((user_idx, earlier_item_idx, later_item_idx)) - * if Y[earlier_item_idx, k] > 0 and Y[later_item_idx, k] > 0 and (earlier_item_idx, later_item_idx) not in counted_pairs: # <<<<<<<<<<<<<< - * common_aspect_counts[(earlier_item_idx, later_item_idx)] += 1 - * if (earlier_item_idx, later_item_idx) not in counted_pairs: + /* "View.MemoryView":363 + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: # <<<<<<<<<<<<<< + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: */ - __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_v_earlier_item_idx); - __Pyx_GIVEREF(__pyx_v_earlier_item_idx); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_earlier_item_idx); - __Pyx_INCREF(__pyx_v_k); - __Pyx_GIVEREF(__pyx_v_k); - PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_k); - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_Y, __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = PyObject_RichCompare(__pyx_t_8, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (__pyx_t_13) { - } else { - __pyx_t_4 = __pyx_t_13; - goto __pyx_L35_bool_binop_done; - } - __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_v_later_item_idx); - __Pyx_GIVEREF(__pyx_v_later_item_idx); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_later_item_idx); - __Pyx_INCREF(__pyx_v_k); - __Pyx_GIVEREF(__pyx_v_k); - PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_k); - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_Y, __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = PyObject_RichCompare(__pyx_t_8, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (__pyx_t_13) { - } else { - __pyx_t_4 = __pyx_t_13; - goto __pyx_L35_bool_binop_done; - } - __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_v_earlier_item_idx); - __Pyx_GIVEREF(__pyx_v_earlier_item_idx); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_earlier_item_idx); - __Pyx_INCREF(__pyx_v_later_item_idx); - __Pyx_GIVEREF(__pyx_v_later_item_idx); - PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_later_item_idx); - __pyx_t_13 = (__Pyx_PySet_ContainsTF(__pyx_t_11, __pyx_v_counted_pairs, Py_NE)); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_19 = (__pyx_t_13 != 0); - __pyx_t_4 = __pyx_t_19; - __pyx_L35_bool_binop_done:; - if (__pyx_t_4) { + __pyx_t_1 = (__pyx_v_self->lock == NULL); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":313 - * not_dominated_pairs.add((user_idx, earlier_item_idx, later_item_idx)) - * if Y[earlier_item_idx, k] > 0 and Y[later_item_idx, k] > 0 and (earlier_item_idx, later_item_idx) not in counted_pairs: - * common_aspect_counts[(earlier_item_idx, later_item_idx)] += 1 # <<<<<<<<<<<<<< - * if (earlier_item_idx, later_item_idx) not in counted_pairs: - * counted_pairs.add((earlier_item_idx, later_item_idx)) + /* "View.MemoryView":364 + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() # <<<<<<<<<<<<<< + * if self.lock is NULL: + * raise MemoryError */ - __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 313, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_v_earlier_item_idx); - __Pyx_GIVEREF(__pyx_v_earlier_item_idx); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_earlier_item_idx); - __Pyx_INCREF(__pyx_v_later_item_idx); - __Pyx_GIVEREF(__pyx_v_later_item_idx); - PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_later_item_idx); - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_common_aspect_counts, __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 313, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_8, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 313, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(PyObject_SetItem(__pyx_v_common_aspect_counts, __pyx_t_11, __pyx_t_1) < 0)) __PYX_ERR(0, 313, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_v_self->lock = PyThread_allocate_lock(); - /* "cornac/models/comparer/recom_comparer_sub.pyx":312 - * pair_counts[(user_idx, earlier_item_idx, later_item_idx, k)] += count - * not_dominated_pairs.add((user_idx, earlier_item_idx, later_item_idx)) - * if Y[earlier_item_idx, k] > 0 and Y[later_item_idx, k] > 0 and (earlier_item_idx, later_item_idx) not in counted_pairs: # <<<<<<<<<<<<<< - * common_aspect_counts[(earlier_item_idx, later_item_idx)] += 1 - * if (earlier_item_idx, later_item_idx) not in counted_pairs: + /* "View.MemoryView":365 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * + */ + __pyx_t_1 = (__pyx_v_self->lock == NULL); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":366 + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + * raise MemoryError # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + PyErr_NoMemory(); __PYX_ERR(1, 366, __pyx_L1_error) + + /* "View.MemoryView":365 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * */ } - /* "cornac/models/comparer/recom_comparer_sub.pyx":308 - * not_dominated_pairs = set() - * for (user_idx, earlier_item_idx, later_item_idx), count in tqdm(chrono_purchased_pairs.most_common(), disable=not self.verbose, desc='Get skyline aspects'): - * for k in range(self.train_set.sentiment.num_aspects - 1): # ignore rating at the last index # <<<<<<<<<<<<<< - * if user_item_aspect.get((user_idx, later_item_idx, k), 0) > user_item_aspect.get((user_idx, earlier_item_idx, k), 0): - * pair_counts[(user_idx, earlier_item_idx, later_item_idx, k)] += count + /* "View.MemoryView":363 + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: # <<<<<<<<<<<<<< + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: */ } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":314 - * if Y[earlier_item_idx, k] > 0 and Y[later_item_idx, k] > 0 and (earlier_item_idx, later_item_idx) not in counted_pairs: - * common_aspect_counts[(earlier_item_idx, later_item_idx)] += 1 - * if (earlier_item_idx, later_item_idx) not in counted_pairs: # <<<<<<<<<<<<<< - * counted_pairs.add((earlier_item_idx, later_item_idx)) + /* "View.MemoryView":358 + * Py_INCREF(Py_None) * + * if not __PYX_CYTHON_ATOMICS_ENABLED(): # <<<<<<<<<<<<<< + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < 8: */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 314, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_earlier_item_idx); - __Pyx_GIVEREF(__pyx_v_earlier_item_idx); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_earlier_item_idx); - __Pyx_INCREF(__pyx_v_later_item_idx); - __Pyx_GIVEREF(__pyx_v_later_item_idx); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_later_item_idx); - __pyx_t_4 = (__Pyx_PySet_ContainsTF(__pyx_t_3, __pyx_v_counted_pairs, Py_NE)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 314, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_19 = (__pyx_t_4 != 0); - if (__pyx_t_19) { + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":315 - * common_aspect_counts[(earlier_item_idx, later_item_idx)] += 1 - * if (earlier_item_idx, later_item_idx) not in counted_pairs: - * counted_pairs.add((earlier_item_idx, later_item_idx)) # <<<<<<<<<<<<<< + /* "View.MemoryView":368 + * raise MemoryError * - * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = [], [], [], [], [] + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 315, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_earlier_item_idx); - __Pyx_GIVEREF(__pyx_v_earlier_item_idx); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_earlier_item_idx); - __Pyx_INCREF(__pyx_v_later_item_idx); - __Pyx_GIVEREF(__pyx_v_later_item_idx); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_later_item_idx); - __pyx_t_18 = PySet_Add(__pyx_v_counted_pairs, __pyx_t_3); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 315, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":314 - * if Y[earlier_item_idx, k] > 0 and Y[later_item_idx, k] > 0 and (earlier_item_idx, later_item_idx) not in counted_pairs: - * common_aspect_counts[(earlier_item_idx, later_item_idx)] += 1 - * if (earlier_item_idx, later_item_idx) not in counted_pairs: # <<<<<<<<<<<<<< - * counted_pairs.add((earlier_item_idx, later_item_idx)) + /* "View.MemoryView":369 * + * if flags & PyBUF_FORMAT: + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') # <<<<<<<<<<<<<< + * else: + * self.dtype_is_object = dtype_is_object */ + __pyx_t_2 = ((__pyx_v_self->view.format[0]) == 'O'); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L12_bool_binop_done; } + __pyx_t_2 = ((__pyx_v_self->view.format[1]) == '\x00'); + __pyx_t_1 = __pyx_t_2; + __pyx_L12_bool_binop_done:; + __pyx_v_self->dtype_is_object = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":307 - * counted_pairs = set() - * not_dominated_pairs = set() - * for (user_idx, earlier_item_idx, later_item_idx), count in tqdm(chrono_purchased_pairs.most_common(), disable=not self.verbose, desc='Get skyline aspects'): # <<<<<<<<<<<<<< - * for k in range(self.train_set.sentiment.num_aspects - 1): # ignore rating at the last index - * if user_item_aspect.get((user_idx, later_item_idx, k), 0) > user_item_aspect.get((user_idx, earlier_item_idx, k), 0): + /* "View.MemoryView":368 + * raise MemoryError + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: */ + goto __pyx_L11; } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":317 - * counted_pairs.add((earlier_item_idx, later_item_idx)) + /* "View.MemoryView":371 + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + * self.dtype_is_object = dtype_is_object # <<<<<<<<<<<<<< * - * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = [], [], [], [], [] # <<<<<<<<<<<<<< - * for (user_idx, earlier_item_idx, later_item_idx, aspect_idx), count in tqdm(pair_counts.most_common(), disable=not self.verbose, desc='Enumerate index'): - * if common_aspect_counts[(earlier_item_idx, later_item_idx)] < self.min_common_freq: + * assert (&self.acquisition_count) % sizeof(__pyx_atomic_int_type) == 0 */ - __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 317, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 317, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_11 = PyList_New(0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 317, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 317, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 317, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_v_user_indices = __pyx_t_2; - __pyx_t_2 = 0; - __pyx_v_earlier_indices = __pyx_t_3; - __pyx_t_3 = 0; - __pyx_v_later_indices = __pyx_t_11; - __pyx_t_11 = 0; - __pyx_v_aspect_indices = __pyx_t_1; - __pyx_t_1 = 0; - __pyx_v_pair_freq = __pyx_t_8; - __pyx_t_8 = 0; + /*else*/ { + __pyx_v_self->dtype_is_object = __pyx_v_dtype_is_object; + } + __pyx_L11:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":318 + /* "View.MemoryView":373 + * self.dtype_is_object = dtype_is_object + * + * assert (&self.acquisition_count) % sizeof(__pyx_atomic_int_type) == 0 # <<<<<<<<<<<<<< + * self.typeinfo = NULL * - * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = [], [], [], [], [] - * for (user_idx, earlier_item_idx, later_item_idx, aspect_idx), count in tqdm(pair_counts.most_common(), disable=not self.verbose, desc='Enumerate index'): # <<<<<<<<<<<<<< - * if common_aspect_counts[(earlier_item_idx, later_item_idx)] < self.min_common_freq: - * continue */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_pair_counts, __pyx_n_s_most_common); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_11)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_11); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_8 = (__pyx_t_11) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_11) : __Pyx_PyObject_CallNoArg(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8); - __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyBool_FromLong((!__pyx_t_19)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_disable, __pyx_t_11) < 0) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_desc, __pyx_kp_u_Enumerate_index) < 0) __PYX_ERR(0, 318, __pyx_L1_error) - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_v_tqdm, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (likely(PyList_CheckExact(__pyx_t_11)) || PyTuple_CheckExact(__pyx_t_11)) { - __pyx_t_8 = __pyx_t_11; __Pyx_INCREF(__pyx_t_8); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 318, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - for (;;) { - if (likely(!__pyx_t_6)) { - if (likely(PyList_CheckExact(__pyx_t_8))) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_11 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_5); __Pyx_INCREF(__pyx_t_11); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 318, __pyx_L1_error) - #else - __pyx_t_11 = PySequence_ITEM(__pyx_t_8, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - #endif - } else { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_5); __Pyx_INCREF(__pyx_t_11); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 318, __pyx_L1_error) - #else - __pyx_t_11 = PySequence_ITEM(__pyx_t_8, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - #endif - } - } else { - __pyx_t_11 = __pyx_t_6(__pyx_t_8); - if (unlikely(!__pyx_t_11)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 318, __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; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 318, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_1 = PyList_GET_ITEM(sequence, 0); - __pyx_t_3 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - #else - __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_2 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext; - index = 0; __pyx_t_1 = __pyx_t_9(__pyx_t_2); if (unlikely(!__pyx_t_1)) goto __pyx_L41_unpacking_failed; - __Pyx_GOTREF(__pyx_t_1); - index = 1; __pyx_t_3 = __pyx_t_9(__pyx_t_2); if (unlikely(!__pyx_t_3)) goto __pyx_L41_unpacking_failed; - __Pyx_GOTREF(__pyx_t_3); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_2), 2) < 0) __PYX_ERR(0, 318, __pyx_L1_error) - __pyx_t_9 = NULL; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L42_unpacking_done; - __pyx_L41_unpacking_failed:; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_9 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 318, __pyx_L1_error) - __pyx_L42_unpacking_done:; + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(__pyx_assertions_enabled())) { + __pyx_t_4 = ((Py_intptr_t)((void *)(&__pyx_v_self->acquisition_count))); + __pyx_t_5 = (sizeof(__pyx_atomic_int_type)); + if (unlikely(__pyx_t_5 == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(1, 373, __pyx_L1_error) } - if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { - PyObject* sequence = __pyx_t_1; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 4)) { - if (size > 4) __Pyx_RaiseTooManyValuesError(4); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 318, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_17 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_10 = PyTuple_GET_ITEM(sequence, 2); - __pyx_t_7 = PyTuple_GET_ITEM(sequence, 3); - } else { - __pyx_t_2 = PyList_GET_ITEM(sequence, 0); - __pyx_t_17 = PyList_GET_ITEM(sequence, 1); - __pyx_t_10 = PyList_GET_ITEM(sequence, 2); - __pyx_t_7 = PyList_GET_ITEM(sequence, 3); - } - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_17); - __Pyx_INCREF(__pyx_t_10); - __Pyx_INCREF(__pyx_t_7); - #else - { - Py_ssize_t i; - PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_17,&__pyx_t_10,&__pyx_t_7}; - for (i=0; i < 4; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_GOTREF(item); - *(temps[i]) = item; - } - } - #endif - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } else { - Py_ssize_t index = -1; - PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_17,&__pyx_t_10,&__pyx_t_7}; - __pyx_t_20 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 318, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_20); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_9 = Py_TYPE(__pyx_t_20)->tp_iternext; - for (index=0; index < 4; index++) { - PyObject* item = __pyx_t_9(__pyx_t_20); if (unlikely(!item)) goto __pyx_L43_unpacking_failed; - __Pyx_GOTREF(item); - *(temps[index]) = item; - } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_20), 4) < 0) __PYX_ERR(0, 318, __pyx_L1_error) - __pyx_t_9 = NULL; - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - goto __pyx_L44_unpacking_done; - __pyx_L43_unpacking_failed:; - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __pyx_t_9 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 318, __pyx_L1_error) - __pyx_L44_unpacking_done:; + __pyx_t_1 = ((__pyx_t_4 % __pyx_t_5) == 0); + if (unlikely(!__pyx_t_1)) { + __Pyx_Raise(__pyx_builtin_AssertionError, 0, 0, 0); + __PYX_ERR(1, 373, __pyx_L1_error) } - __Pyx_XDECREF_SET(__pyx_v_user_idx, __pyx_t_2); - __pyx_t_2 = 0; - __Pyx_XDECREF_SET(__pyx_v_earlier_item_idx, __pyx_t_17); - __pyx_t_17 = 0; - __Pyx_XDECREF_SET(__pyx_v_later_item_idx, __pyx_t_10); - __pyx_t_10 = 0; - __Pyx_XDECREF_SET(__pyx_v_aspect_idx, __pyx_t_7); - __pyx_t_7 = 0; - __Pyx_XDECREF_SET(__pyx_v_count, __pyx_t_3); - __pyx_t_3 = 0; + } + #else + if ((1)); else __PYX_ERR(1, 373, __pyx_L1_error) + #endif - /* "cornac/models/comparer/recom_comparer_sub.pyx":319 - * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = [], [], [], [], [] - * for (user_idx, earlier_item_idx, later_item_idx, aspect_idx), count in tqdm(pair_counts.most_common(), disable=not self.verbose, desc='Enumerate index'): - * if common_aspect_counts[(earlier_item_idx, later_item_idx)] < self.min_common_freq: # <<<<<<<<<<<<<< - * continue - * user_indices.append(user_idx) + /* "View.MemoryView":374 + * + * assert (&self.acquisition_count) % sizeof(__pyx_atomic_int_type) == 0 + * self.typeinfo = NULL # <<<<<<<<<<<<<< + * + * def __dealloc__(memoryview self): */ - __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 319, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_v_earlier_item_idx); - __Pyx_GIVEREF(__pyx_v_earlier_item_idx); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_earlier_item_idx); - __Pyx_INCREF(__pyx_v_later_item_idx); - __Pyx_GIVEREF(__pyx_v_later_item_idx); - PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_later_item_idx); - __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_common_aspect_counts, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 319, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_min_common_freq); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 319, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_11, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 319, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 319, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_19) { + __pyx_v_self->typeinfo = NULL; - /* "cornac/models/comparer/recom_comparer_sub.pyx":320 - * for (user_idx, earlier_item_idx, later_item_idx, aspect_idx), count in tqdm(pair_counts.most_common(), disable=not self.verbose, desc='Enumerate index'): - * if common_aspect_counts[(earlier_item_idx, later_item_idx)] < self.min_common_freq: - * continue # <<<<<<<<<<<<<< - * user_indices.append(user_idx) - * earlier_indices.append(earlier_item_idx) + /* "View.MemoryView":349 + * cdef __Pyx_TypeInfo *typeinfo + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< + * self.obj = obj + * self.flags = flags */ - goto __pyx_L39_continue; - /* "cornac/models/comparer/recom_comparer_sub.pyx":319 - * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = [], [], [], [], [] - * for (user_idx, earlier_item_idx, later_item_idx, aspect_idx), count in tqdm(pair_counts.most_common(), disable=not self.verbose, desc='Enumerate index'): - * if common_aspect_counts[(earlier_item_idx, later_item_idx)] < self.min_common_freq: # <<<<<<<<<<<<<< - * continue - * user_indices.append(user_idx) - */ - } + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":321 - * if common_aspect_counts[(earlier_item_idx, later_item_idx)] < self.min_common_freq: - * continue - * user_indices.append(user_idx) # <<<<<<<<<<<<<< - * earlier_indices.append(earlier_item_idx) - * later_indices.append(later_item_idx) +/* "View.MemoryView":376 + * self.typeinfo = NULL + * + * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) */ - __pyx_t_18 = __Pyx_PyObject_Append(__pyx_v_user_indices, __pyx_v_user_idx); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 321, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":322 - * continue - * user_indices.append(user_idx) - * earlier_indices.append(earlier_item_idx) # <<<<<<<<<<<<<< - * later_indices.append(later_item_idx) - * aspect_indices.append(aspect_idx) - */ - __pyx_t_18 = __Pyx_PyObject_Append(__pyx_v_earlier_indices, __pyx_v_earlier_item_idx); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 322, __pyx_L1_error) +/* Python wrapper */ +static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":323 - * user_indices.append(user_idx) - * earlier_indices.append(earlier_item_idx) - * later_indices.append(later_item_idx) # <<<<<<<<<<<<<< - * aspect_indices.append(aspect_idx) - * pair_freq.append(count) - */ - __pyx_t_18 = __Pyx_PyObject_Append(__pyx_v_later_indices, __pyx_v_later_item_idx); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 323, __pyx_L1_error) + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":324 - * earlier_indices.append(earlier_item_idx) - * later_indices.append(later_item_idx) - * aspect_indices.append(aspect_idx) # <<<<<<<<<<<<<< - * pair_freq.append(count) +static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self) { + int __pyx_v_i; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + PyThread_type_lock __pyx_t_5; + PyThread_type_lock __pyx_t_6; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":377 * + * def __dealloc__(memoryview self): + * if self.obj is not None: # <<<<<<<<<<<<<< + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: */ - __pyx_t_18 = __Pyx_PyObject_Append(__pyx_v_aspect_indices, __pyx_v_aspect_idx); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 324, __pyx_L1_error) + __pyx_t_1 = (__pyx_v_self->obj != Py_None); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":325 - * later_indices.append(later_item_idx) - * aspect_indices.append(aspect_idx) - * pair_freq.append(count) # <<<<<<<<<<<<<< + /* "View.MemoryView":378 + * def __dealloc__(memoryview self): + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) # <<<<<<<<<<<<<< + * elif (<__pyx_buffer *> &self.view).obj == Py_None: * - * user_indices = np.asarray(user_indices, dtype=np.int32).flatten() */ - __pyx_t_18 = __Pyx_PyObject_Append(__pyx_v_pair_freq, __pyx_v_count); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 325, __pyx_L1_error) + __Pyx_ReleaseBuffer((&__pyx_v_self->view)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":318 + /* "View.MemoryView":377 * - * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = [], [], [], [], [] - * for (user_idx, earlier_item_idx, later_item_idx, aspect_idx), count in tqdm(pair_counts.most_common(), disable=not self.verbose, desc='Enumerate index'): # <<<<<<<<<<<<<< - * if common_aspect_counts[(earlier_item_idx, later_item_idx)] < self.min_common_freq: - * continue + * def __dealloc__(memoryview self): + * if self.obj is not None: # <<<<<<<<<<<<<< + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: */ - __pyx_L39_continue:; + goto __pyx_L3; } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":327 - * pair_freq.append(count) + /* "View.MemoryView":379 + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< * - * user_indices = np.asarray(user_indices, dtype=np.int32).flatten() # <<<<<<<<<<<<<< - * earlier_indices = np.asarray(earlier_indices, dtype=np.int32).flatten() - * later_indices = np.asarray(later_indices, dtype=np.int32).flatten() + * (<__pyx_buffer *> &self.view).obj = NULL */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 327, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 327, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 327, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_user_indices); - __Pyx_GIVEREF(__pyx_v_user_indices); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_user_indices); - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 327, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 327, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_int32); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 327, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_10) < 0) __PYX_ERR(0, 327, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 327, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_flatten); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 327, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_10)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_10); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 327, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF_SET(__pyx_v_user_indices, __pyx_t_8); - __pyx_t_8 = 0; + __pyx_t_1 = (((Py_buffer *)(&__pyx_v_self->view))->obj == Py_None); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":328 + /* "View.MemoryView":381 + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + * + * (<__pyx_buffer *> &self.view).obj = NULL # <<<<<<<<<<<<<< + * Py_DECREF(Py_None) * - * user_indices = np.asarray(user_indices, dtype=np.int32).flatten() - * earlier_indices = np.asarray(earlier_indices, dtype=np.int32).flatten() # <<<<<<<<<<<<<< - * later_indices = np.asarray(later_indices, dtype=np.int32).flatten() - * aspect_indices = np.asarray(aspect_indices, dtype=np.int32).flatten() */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 328, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 328, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 328, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_earlier_indices); - __Pyx_GIVEREF(__pyx_v_earlier_indices); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_earlier_indices); - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 328, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 328, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_int32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 328, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 328, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 328, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_flatten); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 328, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_8 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 328, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF_SET(__pyx_v_earlier_indices, __pyx_t_8); - __pyx_t_8 = 0; + ((Py_buffer *)(&__pyx_v_self->view))->obj = NULL; - /* "cornac/models/comparer/recom_comparer_sub.pyx":329 - * user_indices = np.asarray(user_indices, dtype=np.int32).flatten() - * earlier_indices = np.asarray(earlier_indices, dtype=np.int32).flatten() - * later_indices = np.asarray(later_indices, dtype=np.int32).flatten() # <<<<<<<<<<<<<< - * aspect_indices = np.asarray(aspect_indices, dtype=np.int32).flatten() - * pair_freq = np.asarray(pair_freq, dtype=np.int32).flatten() + /* "View.MemoryView":382 + * + * (<__pyx_buffer *> &self.view).obj = NULL + * Py_DECREF(Py_None) # <<<<<<<<<<<<<< + * + * cdef int i */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 329, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 329, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 329, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_later_indices); - __Pyx_GIVEREF(__pyx_v_later_indices); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_later_indices); - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 329, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 329, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_int32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 329, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_11) < 0) __PYX_ERR(0, 329, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 329, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_flatten); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 329, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_11)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_11); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_8 = (__pyx_t_11) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_11) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 329, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF_SET(__pyx_v_later_indices, __pyx_t_8); - __pyx_t_8 = 0; + Py_DECREF(Py_None); - /* "cornac/models/comparer/recom_comparer_sub.pyx":330 - * earlier_indices = np.asarray(earlier_indices, dtype=np.int32).flatten() - * later_indices = np.asarray(later_indices, dtype=np.int32).flatten() - * aspect_indices = np.asarray(aspect_indices, dtype=np.int32).flatten() # <<<<<<<<<<<<<< - * pair_freq = np.asarray(pair_freq, dtype=np.int32).flatten() + /* "View.MemoryView":379 + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< * + * (<__pyx_buffer *> &self.view).obj = NULL */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 330, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 330, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 330, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_aspect_indices); - __Pyx_GIVEREF(__pyx_v_aspect_indices); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_aspect_indices); - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 330, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 330, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_int32); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 330, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_10) < 0) __PYX_ERR(0, 330, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 330, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_flatten); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 330, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_10)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_10); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } } - __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 330, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF_SET(__pyx_v_aspect_indices, __pyx_t_8); - __pyx_t_8 = 0; + __pyx_L3:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":331 - * later_indices = np.asarray(later_indices, dtype=np.int32).flatten() - * aspect_indices = np.asarray(aspect_indices, dtype=np.int32).flatten() - * pair_freq = np.asarray(pair_freq, dtype=np.int32).flatten() # <<<<<<<<<<<<<< - * - * if self.verbose: + /* "View.MemoryView":386 + * cdef int i + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: # <<<<<<<<<<<<<< + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 331, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 331, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 331, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_pair_freq); - __Pyx_GIVEREF(__pyx_v_pair_freq); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_pair_freq); - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 331, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 331, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_int32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 331, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 331, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 331, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_flatten); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 331, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_8 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 331, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF_SET(__pyx_v_pair_freq, __pyx_t_8); - __pyx_t_8 = 0; + __pyx_t_1 = (__pyx_v_self->lock != NULL); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":333 - * pair_freq = np.asarray(pair_freq, dtype=np.int32).flatten() - * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Building chrono purchared items pairs completed in %d s' % (time() - start_time)) - * print('Statistics: # aspect pairs >= %d = %d, min(%.2f), max(%.2f), avg(%.2f)' % ( + /* "View.MemoryView":387 + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): # <<<<<<<<<<<<<< + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 333, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 333, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_19) { + __pyx_t_2 = __pyx_memoryview_thread_locks_used; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":334 - * - * if self.verbose: - * print('Building chrono purchared items pairs completed in %d s' % (time() - start_time)) # <<<<<<<<<<<<<< - * print('Statistics: # aspect pairs >= %d = %d, min(%.2f), max(%.2f), avg(%.2f)' % ( - * self.min_pair_freq, + /* "View.MemoryView":388 + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 334, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_8 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 334, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Subtract(__pyx_t_8, __pyx_v_start_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 334, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_Building_chrono_purchared_items, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 334, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 334, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = ((__pyx_memoryview_thread_locks[__pyx_v_i]) == __pyx_v_self->lock); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":335 - * if self.verbose: - * print('Building chrono purchared items pairs completed in %d s' % (time() - start_time)) - * print('Statistics: # aspect pairs >= %d = %d, min(%.2f), max(%.2f), avg(%.2f)' % ( # <<<<<<<<<<<<<< - * self.min_pair_freq, - * pair_freq[pair_freq>=self.min_pair_freq].shape[0], + /* "View.MemoryView":389 + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 # <<<<<<<<<<<<<< + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( */ - __pyx_t_3 = PyTuple_New(11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 335, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = 0; - __pyx_t_21 = 127; - __Pyx_INCREF(__pyx_kp_u_Statistics_aspect_pairs); - __pyx_t_5 += 30; - __Pyx_GIVEREF(__pyx_kp_u_Statistics_aspect_pairs); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Statistics_aspect_pairs); + __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used - 1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":336 - * print('Building chrono purchared items pairs completed in %d s' % (time() - start_time)) - * print('Statistics: # aspect pairs >= %d = %d, min(%.2f), max(%.2f), avg(%.2f)' % ( - * self.min_pair_freq, # <<<<<<<<<<<<<< - * pair_freq[pair_freq>=self.min_pair_freq].shape[0], - * pair_freq.min(), + /* "View.MemoryView":390 + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_min_pair_freq); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 336, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_t_8), __pyx_n_u_d); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 336, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_21 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_21) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_21; - __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7); - __pyx_t_7 = 0; - __Pyx_INCREF(__pyx_kp_u__2); - __pyx_t_5 += 3; - __Pyx_GIVEREF(__pyx_kp_u__2); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__2); + __pyx_t_1 = (__pyx_v_i != __pyx_memoryview_thread_locks_used); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":337 - * print('Statistics: # aspect pairs >= %d = %d, min(%.2f), max(%.2f), avg(%.2f)' % ( - * self.min_pair_freq, - * pair_freq[pair_freq>=self.min_pair_freq].shape[0], # <<<<<<<<<<<<<< - * pair_freq.min(), - * pair_freq.max(), + /* "View.MemoryView":392 + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) # <<<<<<<<<<<<<< + * break + * else: */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_min_pair_freq); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 337, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyObject_RichCompare(__pyx_v_pair_freq, __pyx_t_7, Py_GE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 337, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pair_freq, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 337, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_shape); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 337, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_8, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 337, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_t_7), __pyx_n_u_d); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 337, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_21 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_21) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_21; - __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_8); - __pyx_t_8 = 0; - __Pyx_INCREF(__pyx_kp_u_min); - __pyx_t_5 += 6; - __Pyx_GIVEREF(__pyx_kp_u_min); - PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_u_min); + __pyx_t_5 = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); + __pyx_t_6 = (__pyx_memoryview_thread_locks[__pyx_v_i]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":338 - * self.min_pair_freq, - * pair_freq[pair_freq>=self.min_pair_freq].shape[0], - * pair_freq.min(), # <<<<<<<<<<<<<< - * pair_freq.max(), - * pair_freq.mean())) + /* "View.MemoryView":391 + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + * break */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_pair_freq, __pyx_n_s_min_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 338, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_8 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 338, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Format(__pyx_t_8, __pyx_kp_u_2f); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 338, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_21 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_21) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_21; - __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_3, 5, __pyx_t_7); - __pyx_t_7 = 0; - __Pyx_INCREF(__pyx_kp_u_max); - __pyx_t_5 += 7; - __Pyx_GIVEREF(__pyx_kp_u_max); - PyTuple_SET_ITEM(__pyx_t_3, 6, __pyx_kp_u_max); + (__pyx_memoryview_thread_locks[__pyx_v_i]) = __pyx_t_5; + (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]) = __pyx_t_6; - /* "cornac/models/comparer/recom_comparer_sub.pyx":339 - * pair_freq[pair_freq>=self.min_pair_freq].shape[0], - * pair_freq.min(), - * pair_freq.max(), # <<<<<<<<<<<<<< - * pair_freq.mean())) - * print('# earlier-later pairs: %d, # unique earlier-later pairs: %d, not dominated pairs %d, # comparable pairs %d' % ( + /* "View.MemoryView":390 + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_pair_freq, __pyx_n_s_max_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 339, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } - } - __pyx_t_7 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 339, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Format(__pyx_t_7, __pyx_kp_u_2f); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 339, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_21 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_21) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_21; - __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_3, 7, __pyx_t_8); - __pyx_t_8 = 0; - __Pyx_INCREF(__pyx_kp_u_avg); - __pyx_t_5 += 7; - __Pyx_GIVEREF(__pyx_kp_u_avg); - PyTuple_SET_ITEM(__pyx_t_3, 8, __pyx_kp_u_avg); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":340 - * pair_freq.min(), - * pair_freq.max(), - * pair_freq.mean())) # <<<<<<<<<<<<<< - * print('# earlier-later pairs: %d, # unique earlier-later pairs: %d, not dominated pairs %d, # comparable pairs %d' % ( - * sum(chrono_purchased_pairs.values()), + /* "View.MemoryView":393 + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + * break # <<<<<<<<<<<<<< + * else: + * PyThread_free_lock(self.lock) + */ + goto __pyx_L6_break; + + /* "View.MemoryView":388 + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_pair_freq, __pyx_n_s_mean); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 340, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); } } - __pyx_t_8 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 340, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Format(__pyx_t_8, __pyx_kp_u_2f); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 340, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_21 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_21) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_21; - __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_3, 9, __pyx_t_7); - __pyx_t_7 = 0; - __Pyx_INCREF(__pyx_kp_u__3); - __pyx_t_5 += 1; - __Pyx_GIVEREF(__pyx_kp_u__3); - PyTuple_SET_ITEM(__pyx_t_3, 10, __pyx_kp_u__3); + /*else*/ { - /* "cornac/models/comparer/recom_comparer_sub.pyx":335 - * if self.verbose: - * print('Building chrono purchared items pairs completed in %d s' % (time() - start_time)) - * print('Statistics: # aspect pairs >= %d = %d, min(%.2f), max(%.2f), avg(%.2f)' % ( # <<<<<<<<<<<<<< - * self.min_pair_freq, - * pair_freq[pair_freq>=self.min_pair_freq].shape[0], + /* "View.MemoryView":395 + * break + * else: + * PyThread_free_lock(self.lock) # <<<<<<<<<<<<<< + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: */ - __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_3, 11, __pyx_t_5, __pyx_t_21); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 335, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 335, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyThread_free_lock(__pyx_v_self->lock); + } + __pyx_L6_break:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":341 - * pair_freq.max(), - * pair_freq.mean())) - * print('# earlier-later pairs: %d, # unique earlier-later pairs: %d, not dominated pairs %d, # comparable pairs %d' % ( # <<<<<<<<<<<<<< - * sum(chrono_purchased_pairs.values()), - * len(chrono_purchased_pairs), + /* "View.MemoryView":386 + * cdef int i + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: # <<<<<<<<<<<<<< + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: */ - __pyx_t_3 = PyTuple_New(8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 341, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = 0; - __pyx_t_21 = 127; - __Pyx_INCREF(__pyx_kp_u_earlier_later_pairs); - __pyx_t_5 += 23; - __Pyx_GIVEREF(__pyx_kp_u_earlier_later_pairs); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_earlier_later_pairs); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":342 - * pair_freq.mean())) - * print('# earlier-later pairs: %d, # unique earlier-later pairs: %d, not dominated pairs %d, # comparable pairs %d' % ( - * sum(chrono_purchased_pairs.values()), # <<<<<<<<<<<<<< - * len(chrono_purchased_pairs), - * len(not_dominated_pairs), + /* "View.MemoryView":376 + * self.typeinfo = NULL + * + * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_chrono_purchased_pairs, __pyx_n_s_values); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 342, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } - } - __pyx_t_7 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 342, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 342, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_t_8), __pyx_n_u_d); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 342, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_21 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_21) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_21; - __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7); - __pyx_t_7 = 0; - __Pyx_INCREF(__pyx_kp_u_unique_earlier_later_pairs); - __pyx_t_5 += 32; - __Pyx_GIVEREF(__pyx_kp_u_unique_earlier_later_pairs); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_unique_earlier_later_pairs); - /* "cornac/models/comparer/recom_comparer_sub.pyx":343 - * print('# earlier-later pairs: %d, # unique earlier-later pairs: %d, not dominated pairs %d, # comparable pairs %d' % ( - * sum(chrono_purchased_pairs.values()), - * len(chrono_purchased_pairs), # <<<<<<<<<<<<<< - * len(not_dominated_pairs), - * len(pair_freq) + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":397 + * PyThread_free_lock(self.lock) + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf */ - __pyx_t_12 = PyObject_Length(__pyx_v_chrono_purchased_pairs); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 343, __pyx_L1_error) - __pyx_t_7 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_12, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 343, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_7); - __pyx_t_7 = 0; - __Pyx_INCREF(__pyx_kp_u_not_dominated_pairs); - __pyx_t_5 += 22; - __Pyx_GIVEREF(__pyx_kp_u_not_dominated_pairs); - PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_u_not_dominated_pairs); - /* "cornac/models/comparer/recom_comparer_sub.pyx":344 - * sum(chrono_purchased_pairs.values()), - * len(chrono_purchased_pairs), - * len(not_dominated_pairs), # <<<<<<<<<<<<<< - * len(pair_freq) - * )) +static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { + Py_ssize_t __pyx_v_dim; + char *__pyx_v_itemp; + PyObject *__pyx_v_idx = NULL; + char *__pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + PyObject *(*__pyx_t_4)(PyObject *); + PyObject *__pyx_t_5 = NULL; + Py_ssize_t __pyx_t_6; + char *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_item_pointer", 0); + + /* "View.MemoryView":399 + * cdef char *get_item_pointer(memoryview self, object index) except NULL: + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf # <<<<<<<<<<<<<< + * + * for dim, idx in enumerate(index): */ - __pyx_t_12 = PySet_GET_SIZE(__pyx_v_not_dominated_pairs); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 344, __pyx_L1_error) - __pyx_t_7 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_12, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 344, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_3, 5, __pyx_t_7); - __pyx_t_7 = 0; - __Pyx_INCREF(__pyx_kp_u_comparable_pairs); - __pyx_t_5 += 21; - __Pyx_GIVEREF(__pyx_kp_u_comparable_pairs); - PyTuple_SET_ITEM(__pyx_t_3, 6, __pyx_kp_u_comparable_pairs); + __pyx_v_itemp = ((char *)__pyx_v_self->view.buf); - /* "cornac/models/comparer/recom_comparer_sub.pyx":345 - * len(chrono_purchased_pairs), - * len(not_dominated_pairs), - * len(pair_freq) # <<<<<<<<<<<<<< - * )) + /* "View.MemoryView":401 + * cdef char *itemp = self.view.buf + * + * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< + * itemp = pybuffer_index(&self.view, itemp, idx, dim) * */ - __pyx_t_12 = PyObject_Length(__pyx_v_pair_freq); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 345, __pyx_L1_error) - __pyx_t_7 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_12, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 345, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_3, 7, __pyx_t_7); - __pyx_t_7 = 0; + __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_v_index)) || PyTuple_CheckExact(__pyx_v_index)) { + __pyx_t_2 = __pyx_v_index; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; + __pyx_t_4 = NULL; + } else { + __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 401, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 401, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_4)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(1, 401, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 401, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } else { + if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(1, 401, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 401, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } + } else { + __pyx_t_5 = __pyx_t_4(__pyx_t_2); + if (unlikely(!__pyx_t_5)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(1, 401, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_5); + } + __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_v_dim = __pyx_t_1; + __pyx_t_1 = (__pyx_t_1 + 1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":341 - * pair_freq.max(), - * pair_freq.mean())) - * print('# earlier-later pairs: %d, # unique earlier-later pairs: %d, not dominated pairs %d, # comparable pairs %d' % ( # <<<<<<<<<<<<<< - * sum(chrono_purchased_pairs.values()), - * len(chrono_purchased_pairs), + /* "View.MemoryView":402 + * + * for dim, idx in enumerate(index): + * itemp = pybuffer_index(&self.view, itemp, idx, dim) # <<<<<<<<<<<<<< + * + * return itemp */ - __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_3, 8, __pyx_t_5, __pyx_t_21); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 341, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 341, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 402, __pyx_L1_error) + __pyx_t_7 = __pyx_pybuffer_index((&__pyx_v_self->view), __pyx_v_itemp, __pyx_t_6, __pyx_v_dim); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(1, 402, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_7; - /* "cornac/models/comparer/recom_comparer_sub.pyx":333 - * pair_freq = np.asarray(pair_freq, dtype=np.int32).flatten() + /* "View.MemoryView":401 + * cdef char *itemp = self.view.buf + * + * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< + * itemp = pybuffer_index(&self.view, itemp, idx, dim) * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Building chrono purchared items pairs completed in %d s' % (time() - start_time)) - * print('Statistics: # aspect pairs >= %d = %d, min(%.2f), max(%.2f), avg(%.2f)' % ( */ } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":348 - * )) + /* "View.MemoryView":404 + * itemp = pybuffer_index(&self.view, itemp, idx, dim) * - * return user_indices, earlier_indices, later_indices, aspect_indices, pair_freq # <<<<<<<<<<<<<< + * return itemp # <<<<<<<<<<<<<< * * */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 348, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_user_indices); - __Pyx_GIVEREF(__pyx_v_user_indices); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_user_indices); - __Pyx_INCREF(__pyx_v_earlier_indices); - __Pyx_GIVEREF(__pyx_v_earlier_indices); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_earlier_indices); - __Pyx_INCREF(__pyx_v_later_indices); - __Pyx_GIVEREF(__pyx_v_later_indices); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_later_indices); - __Pyx_INCREF(__pyx_v_aspect_indices); - __Pyx_GIVEREF(__pyx_v_aspect_indices); - PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_aspect_indices); - __Pyx_INCREF(__pyx_v_pair_freq); - __Pyx_GIVEREF(__pyx_v_pair_freq); - PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_v_pair_freq); - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_r = __pyx_v_itemp; goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":290 - * ) + /* "View.MemoryView":397 + * PyThread_free_lock(self.lock) * - * def _build_chrono_purchased_pairs(self, data_set, user_item_aspect, Y): # <<<<<<<<<<<<<< - * start_time = time() - * from tqdm import tqdm + * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf */ /* 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_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_17); - __Pyx_XDECREF(__pyx_t_20); - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._build_chrono_purchased_pairs", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.get_item_pointer", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_start_time); - __Pyx_XDECREF(__pyx_v_tqdm); - __Pyx_XDECREF(__pyx_v_chrono_purchased_pairs); - __Pyx_XDECREF(__pyx_v_user_idx); - __Pyx_XDECREF(__pyx_v_item_ids); - __Pyx_XDECREF(__pyx_v__); - __Pyx_XDECREF(__pyx_v_window); - __Pyx_XDECREF(__pyx_v_sub_item_ids); - __Pyx_XDECREF(__pyx_v_earlier_item_idx); - __Pyx_XDECREF(__pyx_v_later_item_idx); - __Pyx_XDECREF(__pyx_v_pair_counts); - __Pyx_XDECREF(__pyx_v_common_aspect_counts); - __Pyx_XDECREF(__pyx_v_counted_pairs); - __Pyx_XDECREF(__pyx_v_not_dominated_pairs); - __Pyx_XDECREF(__pyx_v_count); - __Pyx_XDECREF(__pyx_v_k); - __Pyx_XDECREF(__pyx_v_user_indices); - __Pyx_XDECREF(__pyx_v_earlier_indices); - __Pyx_XDECREF(__pyx_v_later_indices); - __Pyx_XDECREF(__pyx_v_aspect_indices); - __Pyx_XDECREF(__pyx_v_pair_freq); - __Pyx_XDECREF(__pyx_v_aspect_idx); - __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_i); - __Pyx_XGIVEREF(__pyx_r); + __Pyx_XDECREF(__pyx_v_idx); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "cornac/models/comparer/recom_comparer_sub.pyx":352 +/* "View.MemoryView":407 * * - * def fit(self, train_set, val_set=None): # <<<<<<<<<<<<<< - * """Fit the model to observations. - * + * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< + * if index is Ellipsis: + * return self */ /* Python wrapper */ -static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_9fit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_8fit[] = "Fit the model to observations.\n\n Parameters\n ----------\n train_set: :obj:`cornac.data.Dataset`, required\n User-Item preference data as well as additional modalities.\n\n val_set: :obj:`cornac.data.Dataset`, optional, default: None\n User-Item preference data for model selection purposes (e.g., early stopping).\n\n Returns\n -------\n self : object\n "; -static PyMethodDef __pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_9fit = {"fit", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_9fit, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_8fit}; -static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_9fit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_train_set = 0; - PyObject *__pyx_v_val_set = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; +static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/ +static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("fit (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_train_set,&__pyx_n_s_val_set,0}; - PyObject* values[3] = {0,0,0}; - values[2] = ((PyObject *)((PyObject *)Py_None)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_train_set)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("fit", 0, 2, 3, 1); __PYX_ERR(0, 352, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_val_set); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fit") < 0)) __PYX_ERR(0, 352, __pyx_L3_error) - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_train_set = values[1]; - __pyx_v_val_set = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("fit", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 352, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_8fit(__pyx_self, __pyx_v_self, __pyx_v_train_set, __pyx_v_val_set); + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_8fit(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_train_set, PyObject *__pyx_v_val_set) { - PyObject *__pyx_v_rating_matrix = NULL; - PyObject *__pyx_v_rating_dict = NULL; - PyObject *__pyx_v_user_item_aspect = NULL; - PyObject *__pyx_v_user_aspect_opinion = NULL; - PyObject *__pyx_v_item_aspect_opinion = NULL; - PyObject *__pyx_v_p_user_indices = NULL; - PyObject *__pyx_v_earlier_indices = NULL; - PyObject *__pyx_v_later_indices = NULL; - PyObject *__pyx_v_aspect_indices = NULL; - PyObject *__pyx_v_pair_freq = NULL; - PyObject *__pyx_v_X = NULL; - PyObject *__pyx_v_X_uids = NULL; - PyObject *__pyx_v_X_iids = NULL; - PyObject *__pyx_v_X_aids = NULL; - PyObject *__pyx_v_YU = NULL; - PyObject *__pyx_v_YU_uids = NULL; - PyObject *__pyx_v_YU_aids = NULL; - PyObject *__pyx_v_YU_oids = NULL; - PyObject *__pyx_v_YI = NULL; - PyObject *__pyx_v_YI_iids = NULL; - PyObject *__pyx_v_YI_aids = NULL; - PyObject *__pyx_v_YI_oids = NULL; - PyObject *__pyx_v_uid = NULL; - PyObject *__pyx_v_iid = NULL; - PyObject *__pyx_v_aid = NULL; - PyObject *__pyx_v_score = NULL; - PyObject *__pyx_v_oid = NULL; - PyObject *__pyx_v_user_counts = NULL; - PyObject *__pyx_v_user_ids = NULL; - PyObject *__pyx_v_neg_item_ids = NULL; - int __pyx_v_n_threads; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg = 0; - PyObject *__pyx_v_sgrad_G1 = NULL; - PyObject *__pyx_v_sgrad_G2 = NULL; - PyObject *__pyx_v_sgrad_G3 = NULL; - PyObject *__pyx_v_sgrad_U = NULL; - PyObject *__pyx_v_sgrad_I = NULL; - PyObject *__pyx_v_sgrad_A = NULL; - PyObject *__pyx_v_sgrad_O = NULL; - PyObject *__pyx_v_del_g1 = NULL; - PyObject *__pyx_v_del_g2 = NULL; - PyObject *__pyx_v_del_g3 = NULL; - PyObject *__pyx_v_del_u = NULL; - PyObject *__pyx_v_del_i = NULL; - PyObject *__pyx_v_del_a = NULL; - PyObject *__pyx_v_del_o = NULL; - PyObject *__pyx_v_del_g1_reg = NULL; - PyObject *__pyx_v_del_g2_reg = NULL; - PyObject *__pyx_v_del_g3_reg = NULL; - PyObject *__pyx_v_del_u_reg = NULL; - PyObject *__pyx_v_del_i_reg = NULL; - PyObject *__pyx_v_del_a_reg = NULL; - PyObject *__pyx_v_del_o_reg = NULL; - PyObject *__pyx_v_progress = NULL; - CYTHON_UNUSED PyObject *__pyx_v_epoch = NULL; - PyObject *__pyx_v_correct = NULL; - PyObject *__pyx_v_skipped = NULL; - PyObject *__pyx_v_loss = NULL; - PyObject *__pyx_v_bpr_loss = NULL; +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_v_have_slices = NULL; + PyObject *__pyx_v_indices = NULL; + char *__pyx_v_itemp; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; + int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - PyObject *(*__pyx_t_16)(PyObject *); - Py_ssize_t __pyx_t_17; - Py_ssize_t __pyx_t_18; - int __pyx_t_19; - int __pyx_t_20; - PyObject *__pyx_t_21 = NULL; - PyObject *__pyx_t_22 = NULL; - PyObject *__pyx_t_23 = NULL; - PyObject *__pyx_t_24 = NULL; - PyObject *(*__pyx_t_25)(PyObject *); - PyObject *__pyx_t_26 = NULL; - PyObject *__pyx_t_27 = NULL; - PyObject *__pyx_t_28 = NULL; - PyObject *__pyx_t_29 = NULL; + PyObject *__pyx_t_4 = NULL; + char *__pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("fit", 0); + __Pyx_RefNannySetupContext("__getitem__", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":367 - * self : object - * """ - * Recommender.fit(self, train_set, val_set) # <<<<<<<<<<<<<< + /* "View.MemoryView":408 + * + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: # <<<<<<<<<<<<<< + * return self + * + */ + __pyx_t_1 = (__pyx_v_index == __pyx_builtin_Ellipsis); + if (__pyx_t_1) { + + /* "View.MemoryView":409 + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: + * return self # <<<<<<<<<<<<<< + * + * have_slices, indices = _unellipsify(index, self.view.ndim) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_self); + __pyx_r = ((PyObject *)__pyx_v_self); + goto __pyx_L0; + + /* "View.MemoryView":408 + * + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: # <<<<<<<<<<<<<< + * return self * - * self._init() */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Recommender); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_fit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - __pyx_t_4 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_4 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_self, __pyx_v_train_set, __pyx_v_val_set}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_self, __pyx_v_train_set, __pyx_v_val_set}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - { - __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (__pyx_t_2) { - __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL; - } - __Pyx_INCREF(__pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_self); - __Pyx_INCREF(__pyx_v_train_set); - __Pyx_GIVEREF(__pyx_v_train_set); - PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_train_set); - __Pyx_INCREF(__pyx_v_val_set); - __Pyx_GIVEREF(__pyx_v_val_set); - PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_val_set); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":369 - * Recommender.fit(self, train_set, val_set) + /* "View.MemoryView":411 + * return self * - * self._init() # <<<<<<<<<<<<<< + * have_slices, indices = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< * - * if not self.trainable: + * cdef char *itemp */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_init_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 369, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_2 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (likely(__pyx_t_2 != Py_None)) { + PyObject* sequence = __pyx_t_2; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(1, 411, __pyx_L1_error) } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 411, __pyx_L1_error) } - __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 369, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_have_slices = __pyx_t_3; + __pyx_t_3 = 0; + __pyx_v_indices = __pyx_t_4; + __pyx_t_4 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":371 - * self._init() + /* "View.MemoryView":414 * - * if not self.trainable: # <<<<<<<<<<<<<< - * return self + * cdef char *itemp + * if have_slices: # <<<<<<<<<<<<<< + * return memview_slice(self, indices) + * else: + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 414, __pyx_L1_error) + if (__pyx_t_1) { + + /* "View.MemoryView":415 + * cdef char *itemp + * if have_slices: + * return memview_slice(self, indices) # <<<<<<<<<<<<<< + * else: + * itemp = self.get_item_pointer(indices) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = ((PyObject *)__pyx_memview_slice(__pyx_v_self, __pyx_v_indices)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":414 * + * cdef char *itemp + * if have_slices: # <<<<<<<<<<<<<< + * return memview_slice(self, indices) + * else: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_trainable); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 371, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 371, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_7 = ((!__pyx_t_6) != 0); - if (__pyx_t_7) { + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":372 + /* "View.MemoryView":417 + * return memview_slice(self, indices) + * else: + * itemp = self.get_item_pointer(indices) # <<<<<<<<<<<<<< + * return self.convert_item_to_object(itemp) * - * if not self.trainable: - * return self # <<<<<<<<<<<<<< + */ + /*else*/ { + __pyx_t_5 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_indices); if (unlikely(__pyx_t_5 == ((char *)NULL))) __PYX_ERR(1, 417, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_5; + + /* "View.MemoryView":418 + * else: + * itemp = self.get_item_pointer(indices) + * return self.convert_item_to_object(itemp) # <<<<<<<<<<<<<< * - * ( + * def __setitem__(memoryview self, object index, object value): */ __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self); - __pyx_r = __pyx_v_self; + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->convert_item_to_object(__pyx_v_self, __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; goto __pyx_L0; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":371 - * self._init() + /* "View.MemoryView":407 * - * if not self.trainable: # <<<<<<<<<<<<<< + * + * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< + * if index is Ellipsis: * return self + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.memoryview.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_have_slices); + __Pyx_XDECREF(__pyx_v_indices); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":420 + * return self.convert_item_to_object(itemp) * + * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< + * if self.view.readonly: + * raise TypeError, "Cannot assign to read-only memoryview" */ - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":381 - * item_aspect_opinion, - * p_user_indices, earlier_indices, later_indices, aspect_indices, pair_freq - * ) = self._build_data(train_set) # <<<<<<<<<<<<<< +/* Python wrapper */ +static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + PyObject *__pyx_v_have_slices = NULL; + PyObject *__pyx_v_obj = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setitem__", 0); + __Pyx_INCREF(__pyx_v_index); + + /* "View.MemoryView":421 + * + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: # <<<<<<<<<<<<<< + * raise TypeError, "Cannot assign to read-only memoryview" + * + */ + if (unlikely(__pyx_v_self->view.readonly)) { + + /* "View.MemoryView":422 + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: + * raise TypeError, "Cannot assign to read-only memoryview" # <<<<<<<<<<<<<< + * + * have_slices, index = _unellipsify(index, self.view.ndim) + */ + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_Cannot_assign_to_read_only_memor, 0, 0); + __PYX_ERR(1, 422, __pyx_L1_error) + + /* "View.MemoryView":421 + * + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: # <<<<<<<<<<<<<< + * raise TypeError, "Cannot assign to read-only memoryview" * - * X, X_uids, X_iids, X_aids = [], [], [], [] */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_build_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 381, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } } - __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_v_train_set) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_train_set); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 381, __pyx_L1_error) + + /* "View.MemoryView":424 + * raise TypeError, "Cannot assign to read-only memoryview" + * + * have_slices, index = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + * + * if have_slices: + */ + __pyx_t_1 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 424, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { + if (likely(__pyx_t_1 != Py_None)) { PyObject* sequence = __pyx_t_1; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 10)) { - if (size > 10) __Pyx_RaiseTooManyValuesError(10); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 375, __pyx_L1_error) + __PYX_ERR(1, 424, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); - __pyx_t_8 = PyTuple_GET_ITEM(sequence, 3); - __pyx_t_9 = PyTuple_GET_ITEM(sequence, 4); - __pyx_t_10 = PyTuple_GET_ITEM(sequence, 5); - __pyx_t_11 = PyTuple_GET_ITEM(sequence, 6); - __pyx_t_12 = PyTuple_GET_ITEM(sequence, 7); - __pyx_t_13 = PyTuple_GET_ITEM(sequence, 8); - __pyx_t_14 = PyTuple_GET_ITEM(sequence, 9); - } else { - __pyx_t_3 = PyList_GET_ITEM(sequence, 0); - __pyx_t_5 = PyList_GET_ITEM(sequence, 1); - __pyx_t_2 = PyList_GET_ITEM(sequence, 2); - __pyx_t_8 = PyList_GET_ITEM(sequence, 3); - __pyx_t_9 = PyList_GET_ITEM(sequence, 4); - __pyx_t_10 = PyList_GET_ITEM(sequence, 5); - __pyx_t_11 = PyList_GET_ITEM(sequence, 6); - __pyx_t_12 = PyList_GET_ITEM(sequence, 7); - __pyx_t_13 = PyList_GET_ITEM(sequence, 8); - __pyx_t_14 = PyList_GET_ITEM(sequence, 9); - } - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_5); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(__pyx_t_10); - __Pyx_INCREF(__pyx_t_11); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(__pyx_t_3); #else - { - Py_ssize_t i; - PyObject** temps[10] = {&__pyx_t_3,&__pyx_t_5,&__pyx_t_2,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13,&__pyx_t_14}; - for (i=0; i < 10; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 375, __pyx_L1_error) - __Pyx_GOTREF(item); - *(temps[i]) = item; - } - } + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { - Py_ssize_t index = -1; - PyObject** temps[10] = {&__pyx_t_3,&__pyx_t_5,&__pyx_t_2,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13,&__pyx_t_14}; - __pyx_t_15 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 375, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_16 = Py_TYPE(__pyx_t_15)->tp_iternext; - for (index=0; index < 10; index++) { - PyObject* item = __pyx_t_16(__pyx_t_15); if (unlikely(!item)) goto __pyx_L4_unpacking_failed; - __Pyx_GOTREF(item); - *(temps[index]) = item; - } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_15), 10) < 0) __PYX_ERR(0, 375, __pyx_L1_error) - __pyx_t_16 = NULL; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - goto __pyx_L5_unpacking_done; - __pyx_L4_unpacking_failed:; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __pyx_t_16 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 375, __pyx_L1_error) - __pyx_L5_unpacking_done:; + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 424, __pyx_L1_error) } + __pyx_v_have_slices = __pyx_t_2; + __pyx_t_2 = 0; + __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_3); + __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":375 + /* "View.MemoryView":426 + * have_slices, index = _unellipsify(index, self.view.ndim) * - * ( - * rating_matrix, # <<<<<<<<<<<<<< - * rating_dict, - * user_item_aspect, + * if have_slices: # <<<<<<<<<<<<<< + * obj = self.is_slice(value) + * if obj: */ - __pyx_v_rating_matrix = __pyx_t_3; - __pyx_t_3 = 0; - __pyx_v_rating_dict = __pyx_t_5; - __pyx_t_5 = 0; - __pyx_v_user_item_aspect = __pyx_t_2; - __pyx_t_2 = 0; - __pyx_v_user_aspect_opinion = __pyx_t_8; - __pyx_t_8 = 0; - __pyx_v_item_aspect_opinion = __pyx_t_9; - __pyx_t_9 = 0; - __pyx_v_p_user_indices = __pyx_t_10; - __pyx_t_10 = 0; - __pyx_v_earlier_indices = __pyx_t_11; - __pyx_t_11 = 0; - __pyx_v_later_indices = __pyx_t_12; - __pyx_t_12 = 0; - __pyx_v_aspect_indices = __pyx_t_13; - __pyx_t_13 = 0; - __pyx_v_pair_freq = __pyx_t_14; - __pyx_t_14 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(1, 426, __pyx_L1_error) + if (__pyx_t_4) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":383 - * ) = self._build_data(train_set) + /* "View.MemoryView":427 * - * X, X_uids, X_iids, X_aids = [], [], [], [] # <<<<<<<<<<<<<< - * YU, YU_uids, YU_aids, YU_oids = [], [], [], [] - * YI, YI_iids, YI_aids, YI_oids = [], [], [], [] + * if have_slices: + * obj = self.is_slice(value) # <<<<<<<<<<<<<< + * if obj: + * self.setitem_slice_assignment(self[index], obj) */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 383, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_14 = PyList_New(0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 383, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 383, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_12 = PyList_New(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 383, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __pyx_v_X = __pyx_t_1; - __pyx_t_1 = 0; - __pyx_v_X_uids = __pyx_t_14; - __pyx_t_14 = 0; - __pyx_v_X_iids = __pyx_t_13; - __pyx_t_13 = 0; - __pyx_v_X_aids = __pyx_t_12; - __pyx_t_12 = 0; + __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_obj = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":384 - * - * X, X_uids, X_iids, X_aids = [], [], [], [] - * YU, YU_uids, YU_aids, YU_oids = [], [], [], [] # <<<<<<<<<<<<<< - * YI, YI_iids, YI_aids, YI_oids = [], [], [], [] - * + /* "View.MemoryView":428 + * if have_slices: + * obj = self.is_slice(value) + * if obj: # <<<<<<<<<<<<<< + * self.setitem_slice_assignment(self[index], obj) + * else: */ - __pyx_t_12 = PyList_New(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 384, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 384, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_14 = PyList_New(0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 384, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 384, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_YU = __pyx_t_12; - __pyx_t_12 = 0; - __pyx_v_YU_uids = __pyx_t_13; - __pyx_t_13 = 0; - __pyx_v_YU_aids = __pyx_t_14; - __pyx_t_14 = 0; - __pyx_v_YU_oids = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(1, 428, __pyx_L1_error) + if (__pyx_t_4) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":385 - * X, X_uids, X_iids, X_aids = [], [], [], [] - * YU, YU_uids, YU_aids, YU_oids = [], [], [], [] - * YI, YI_iids, YI_aids, YI_oids = [], [], [], [] # <<<<<<<<<<<<<< - * - * for (uid, iid, aid), score in user_item_aspect.items(): + /* "View.MemoryView":429 + * obj = self.is_slice(value) + * if obj: + * self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<< + * else: + * self.setitem_slice_assign_scalar(self[index], value) */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_14 = PyList_New(0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 385, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 385, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_12 = PyList_New(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 385, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __pyx_v_YI = __pyx_t_1; - __pyx_t_1 = 0; - __pyx_v_YI_iids = __pyx_t_14; - __pyx_t_14 = 0; - __pyx_v_YI_aids = __pyx_t_13; - __pyx_t_13 = 0; - __pyx_v_YI_oids = __pyx_t_12; - __pyx_t_12 = 0; + __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assignment(__pyx_v_self, __pyx_t_1, __pyx_v_obj); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":387 - * YI, YI_iids, YI_aids, YI_oids = [], [], [], [] - * - * for (uid, iid, aid), score in user_item_aspect.items(): # <<<<<<<<<<<<<< - * X.append(score) - * X_uids.append(uid) + /* "View.MemoryView":428 + * if have_slices: + * obj = self.is_slice(value) + * if obj: # <<<<<<<<<<<<<< + * self.setitem_slice_assignment(self[index], obj) + * else: */ - __pyx_t_17 = 0; - if (unlikely(__pyx_v_user_item_aspect == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); - __PYX_ERR(0, 387, __pyx_L1_error) - } - __pyx_t_13 = __Pyx_dict_iterator(__pyx_v_user_item_aspect, 0, __pyx_n_s_items, (&__pyx_t_18), (&__pyx_t_4)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 387, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_XDECREF(__pyx_t_12); - __pyx_t_12 = __pyx_t_13; - __pyx_t_13 = 0; - while (1) { - __pyx_t_19 = __Pyx_dict_iter_next(__pyx_t_12, __pyx_t_18, &__pyx_t_17, &__pyx_t_13, &__pyx_t_14, NULL, __pyx_t_4); - if (unlikely(__pyx_t_19 == 0)) break; - if (unlikely(__pyx_t_19 == -1)) __PYX_ERR(0, 387, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_GOTREF(__pyx_t_14); - if ((likely(PyTuple_CheckExact(__pyx_t_13))) || (PyList_CheckExact(__pyx_t_13))) { - PyObject* sequence = __pyx_t_13; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 3)) { - if (size > 3) __Pyx_RaiseTooManyValuesError(3); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 387, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_10 = PyTuple_GET_ITEM(sequence, 2); - } else { - __pyx_t_1 = PyList_GET_ITEM(sequence, 0); - __pyx_t_11 = PyList_GET_ITEM(sequence, 1); - __pyx_t_10 = PyList_GET_ITEM(sequence, 2); - } - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_11); - __Pyx_INCREF(__pyx_t_10); - #else - __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 387, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 387, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_10 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 387, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - #endif - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_9 = PyObject_GetIter(__pyx_t_13); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 387, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_16 = Py_TYPE(__pyx_t_9)->tp_iternext; - index = 0; __pyx_t_1 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed; + goto __pyx_L5; + } + + /* "View.MemoryView":431 + * self.setitem_slice_assignment(self[index], obj) + * else: + * self.setitem_slice_assign_scalar(self[index], value) # <<<<<<<<<<<<<< + * else: + * self.setitem_indexed(index, value) + */ + /*else*/ { + __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 431, __pyx_L1_error) + __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assign_scalar(__pyx_v_self, ((struct __pyx_memoryview_obj *)__pyx_t_3), __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 431, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - index = 1; __pyx_t_11 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_11)) goto __pyx_L8_unpacking_failed; - __Pyx_GOTREF(__pyx_t_11); - index = 2; __pyx_t_10 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_10)) goto __pyx_L8_unpacking_failed; - __Pyx_GOTREF(__pyx_t_10); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_9), 3) < 0) __PYX_ERR(0, 387, __pyx_L1_error) - __pyx_t_16 = NULL; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L9_unpacking_done; - __pyx_L8_unpacking_failed:; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_16 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 387, __pyx_L1_error) - __pyx_L9_unpacking_done:; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - __Pyx_XDECREF_SET(__pyx_v_uid, __pyx_t_1); - __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_iid, __pyx_t_11); - __pyx_t_11 = 0; - __Pyx_XDECREF_SET(__pyx_v_aid, __pyx_t_10); - __pyx_t_10 = 0; - __Pyx_XDECREF_SET(__pyx_v_score, __pyx_t_14); - __pyx_t_14 = 0; + __pyx_L5:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":388 + /* "View.MemoryView":426 + * have_slices, index = _unellipsify(index, self.view.ndim) * - * for (uid, iid, aid), score in user_item_aspect.items(): - * X.append(score) # <<<<<<<<<<<<<< - * X_uids.append(uid) - * X_iids.append(iid) + * if have_slices: # <<<<<<<<<<<<<< + * obj = self.is_slice(value) + * if obj: */ - __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_X, __pyx_v_score); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 388, __pyx_L1_error) + goto __pyx_L4; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":389 - * for (uid, iid, aid), score in user_item_aspect.items(): - * X.append(score) - * X_uids.append(uid) # <<<<<<<<<<<<<< - * X_iids.append(iid) - * X_aids.append(aid) + /* "View.MemoryView":433 + * self.setitem_slice_assign_scalar(self[index], value) + * else: + * self.setitem_indexed(index, value) # <<<<<<<<<<<<<< + * + * cdef is_slice(self, obj): */ - __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_X_uids, __pyx_v_uid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 389, __pyx_L1_error) + /*else*/ { + __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_indexed(__pyx_v_self, __pyx_v_index, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_L4:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":390 - * X.append(score) - * X_uids.append(uid) - * X_iids.append(iid) # <<<<<<<<<<<<<< - * X_aids.append(aid) + /* "View.MemoryView":420 + * return self.convert_item_to_object(itemp) * + * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< + * if self.view.readonly: + * raise TypeError, "Cannot assign to read-only memoryview" */ - __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_X_iids, __pyx_v_iid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 390, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":391 - * X_uids.append(uid) - * X_iids.append(iid) - * X_aids.append(aid) # <<<<<<<<<<<<<< + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_have_slices); + __Pyx_XDECREF(__pyx_v_obj); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":435 + * self.setitem_indexed(index, value) * - * for (uid, aid, oid), score in user_aspect_opinion.items(): + * cdef is_slice(self, obj): # <<<<<<<<<<<<<< + * if not isinstance(obj, memoryview): + * try: */ - __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_X_aids, __pyx_v_aid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 391, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":393 - * X_aids.append(aid) +static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_slice", 0); + __Pyx_INCREF(__pyx_v_obj); + + /* "View.MemoryView":436 * - * for (uid, aid, oid), score in user_aspect_opinion.items(): # <<<<<<<<<<<<<< - * YU.append(score) - * YU_uids.append(uid) + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + */ + __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_memoryview_type); + __pyx_t_2 = (!__pyx_t_1); + if (__pyx_t_2) { + + /* "View.MemoryView":437 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); + /*try:*/ { + + /* "View.MemoryView":438 + * if not isinstance(obj, memoryview): + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< + * self.dtype_is_object) + * except TypeError: + */ + __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_self->flags & (~PyBUF_WRITABLE)) | PyBUF_ANY_CONTIGUOUS)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 438, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "View.MemoryView":439 + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) # <<<<<<<<<<<<<< + * except TypeError: + * return None + */ + __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 439, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "View.MemoryView":438 + * if not isinstance(obj, memoryview): + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< + * self.dtype_is_object) + * except TypeError: + */ + __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 438, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_obj); + __Pyx_GIVEREF(__pyx_v_obj); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_obj); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 438, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":437 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) */ - __pyx_t_18 = 0; - if (unlikely(__pyx_v_user_aspect_opinion == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); - __PYX_ERR(0, 393, __pyx_L1_error) - } - __pyx_t_14 = __Pyx_dict_iterator(__pyx_v_user_aspect_opinion, 0, __pyx_n_s_items, (&__pyx_t_17), (&__pyx_t_4)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_12); - __pyx_t_12 = __pyx_t_14; - __pyx_t_14 = 0; - while (1) { - __pyx_t_19 = __Pyx_dict_iter_next(__pyx_t_12, __pyx_t_17, &__pyx_t_18, &__pyx_t_14, &__pyx_t_13, NULL, __pyx_t_4); - if (unlikely(__pyx_t_19 == 0)) break; - if (unlikely(__pyx_t_19 == -1)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_GOTREF(__pyx_t_13); - if ((likely(PyTuple_CheckExact(__pyx_t_14))) || (PyList_CheckExact(__pyx_t_14))) { - PyObject* sequence = __pyx_t_14; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 3)) { - if (size > 3) __Pyx_RaiseTooManyValuesError(3); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 393, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); - } else { - __pyx_t_10 = PyList_GET_ITEM(sequence, 0); - __pyx_t_11 = PyList_GET_ITEM(sequence, 1); - __pyx_t_1 = PyList_GET_ITEM(sequence, 2); } - __Pyx_INCREF(__pyx_t_10); - __Pyx_INCREF(__pyx_t_11); - __Pyx_INCREF(__pyx_t_1); - #else - __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_1 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - #endif - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_9 = PyObject_GetIter(__pyx_t_14); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_16 = Py_TYPE(__pyx_t_9)->tp_iternext; - index = 0; __pyx_t_10 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_10)) goto __pyx_L12_unpacking_failed; - __Pyx_GOTREF(__pyx_t_10); - index = 1; __pyx_t_11 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_11)) goto __pyx_L12_unpacking_failed; - __Pyx_GOTREF(__pyx_t_11); - index = 2; __pyx_t_1 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_1)) goto __pyx_L12_unpacking_failed; - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_9), 3) < 0) __PYX_ERR(0, 393, __pyx_L1_error) - __pyx_t_16 = NULL; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L13_unpacking_done; - __pyx_L12_unpacking_failed:; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_16 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 393, __pyx_L1_error) - __pyx_L13_unpacking_done:; - } - __Pyx_XDECREF_SET(__pyx_v_uid, __pyx_t_10); - __pyx_t_10 = 0; - __Pyx_XDECREF_SET(__pyx_v_aid, __pyx_t_11); - __pyx_t_11 = 0; - __Pyx_XDECREF_SET(__pyx_v_oid, __pyx_t_1); - __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_score, __pyx_t_13); - __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L9_try_end; + __pyx_L4_error:; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":394 + /* "View.MemoryView":440 + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + * except TypeError: # <<<<<<<<<<<<<< + * return None * - * for (uid, aid, oid), score in user_aspect_opinion.items(): - * YU.append(score) # <<<<<<<<<<<<<< - * YU_uids.append(uid) - * YU_aids.append(aid) */ - __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_YU, __pyx_v_score); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 394, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError); + if (__pyx_t_9) { + __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(1, 440, __pyx_L6_except_error) + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_6); - /* "cornac/models/comparer/recom_comparer_sub.pyx":395 - * for (uid, aid, oid), score in user_aspect_opinion.items(): - * YU.append(score) - * YU_uids.append(uid) # <<<<<<<<<<<<<< - * YU_aids.append(aid) - * YU_oids.append(oid) + /* "View.MemoryView":441 + * self.dtype_is_object) + * except TypeError: + * return None # <<<<<<<<<<<<<< + * + * return obj */ - __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_YU_uids, __pyx_v_uid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 395, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_except_return; + } + goto __pyx_L6_except_error; - /* "cornac/models/comparer/recom_comparer_sub.pyx":396 - * YU.append(score) - * YU_uids.append(uid) - * YU_aids.append(aid) # <<<<<<<<<<<<<< - * YU_oids.append(oid) - * + /* "View.MemoryView":437 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) */ - __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_YU_aids, __pyx_v_aid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 396, __pyx_L1_error) + __pyx_L6_except_error:; + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L1_error; + __pyx_L7_except_return:; + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L0; + __pyx_L9_try_end:; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":397 - * YU_uids.append(uid) - * YU_aids.append(aid) - * YU_oids.append(oid) # <<<<<<<<<<<<<< + /* "View.MemoryView":436 * - * for (iid, aid, oid), score in item_aspect_opinion.items(): + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, */ - __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_YU_oids, __pyx_v_oid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 397, __pyx_L1_error) } - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":399 - * YU_oids.append(oid) + /* "View.MemoryView":443 + * return None * - * for (iid, aid, oid), score in item_aspect_opinion.items(): # <<<<<<<<<<<<<< - * YI.append(score) - * YI_iids.append(iid) + * return obj # <<<<<<<<<<<<<< + * + * cdef setitem_slice_assignment(self, dst, src): */ - __pyx_t_17 = 0; - if (unlikely(__pyx_v_item_aspect_opinion == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); - __PYX_ERR(0, 399, __pyx_L1_error) - } - __pyx_t_13 = __Pyx_dict_iterator(__pyx_v_item_aspect_opinion, 0, __pyx_n_s_items, (&__pyx_t_18), (&__pyx_t_4)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 399, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_XDECREF(__pyx_t_12); - __pyx_t_12 = __pyx_t_13; - __pyx_t_13 = 0; - while (1) { - __pyx_t_19 = __Pyx_dict_iter_next(__pyx_t_12, __pyx_t_18, &__pyx_t_17, &__pyx_t_13, &__pyx_t_14, NULL, __pyx_t_4); - if (unlikely(__pyx_t_19 == 0)) break; - if (unlikely(__pyx_t_19 == -1)) __PYX_ERR(0, 399, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_GOTREF(__pyx_t_14); - if ((likely(PyTuple_CheckExact(__pyx_t_13))) || (PyList_CheckExact(__pyx_t_13))) { - PyObject* sequence = __pyx_t_13; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 3)) { - if (size > 3) __Pyx_RaiseTooManyValuesError(3); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 399, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_10 = PyTuple_GET_ITEM(sequence, 2); - } else { - __pyx_t_1 = PyList_GET_ITEM(sequence, 0); - __pyx_t_11 = PyList_GET_ITEM(sequence, 1); - __pyx_t_10 = PyList_GET_ITEM(sequence, 2); - } - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_11); - __Pyx_INCREF(__pyx_t_10); - #else - __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 399, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 399, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_10 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 399, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - #endif - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_9 = PyObject_GetIter(__pyx_t_13); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 399, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_16 = Py_TYPE(__pyx_t_9)->tp_iternext; - index = 0; __pyx_t_1 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_1)) goto __pyx_L16_unpacking_failed; - __Pyx_GOTREF(__pyx_t_1); - index = 1; __pyx_t_11 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_11)) goto __pyx_L16_unpacking_failed; - __Pyx_GOTREF(__pyx_t_11); - index = 2; __pyx_t_10 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_10)) goto __pyx_L16_unpacking_failed; - __Pyx_GOTREF(__pyx_t_10); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_9), 3) < 0) __PYX_ERR(0, 399, __pyx_L1_error) - __pyx_t_16 = NULL; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L17_unpacking_done; - __pyx_L16_unpacking_failed:; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_16 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 399, __pyx_L1_error) - __pyx_L17_unpacking_done:; - } - __Pyx_XDECREF_SET(__pyx_v_iid, __pyx_t_1); - __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_aid, __pyx_t_11); - __pyx_t_11 = 0; - __Pyx_XDECREF_SET(__pyx_v_oid, __pyx_t_10); - __pyx_t_10 = 0; - __Pyx_XDECREF_SET(__pyx_v_score, __pyx_t_14); - __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_obj); + __pyx_r = __pyx_v_obj; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":400 + /* "View.MemoryView":435 + * self.setitem_indexed(index, value) * - * for (iid, aid, oid), score in item_aspect_opinion.items(): - * YI.append(score) # <<<<<<<<<<<<<< - * YI_iids.append(iid) - * YI_aids.append(aid) + * cdef is_slice(self, obj): # <<<<<<<<<<<<<< + * if not isinstance(obj, memoryview): + * try: */ - __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_YI, __pyx_v_score); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 400, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":401 - * for (iid, aid, oid), score in item_aspect_opinion.items(): - * YI.append(score) - * YI_iids.append(iid) # <<<<<<<<<<<<<< - * YI_aids.append(aid) - * YI_oids.append(oid) - */ - __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_YI_iids, __pyx_v_iid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 401, __pyx_L1_error) + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_obj); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":402 - * YI.append(score) - * YI_iids.append(iid) - * YI_aids.append(aid) # <<<<<<<<<<<<<< - * YI_oids.append(oid) +/* "View.MemoryView":445 + * return obj * + * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice */ - __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_YI_aids, __pyx_v_aid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 402, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":403 - * YI_iids.append(iid) - * YI_aids.append(aid) - * YI_oids.append(oid) # <<<<<<<<<<<<<< +static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src) { + __Pyx_memviewslice __pyx_v_dst_slice; + __Pyx_memviewslice __pyx_v_src_slice; + __Pyx_memviewslice __pyx_v_msrc; + __Pyx_memviewslice __pyx_v_mdst; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_slice_assignment", 0); + + /* "View.MemoryView":448 + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice + * cdef __Pyx_memviewslice msrc = get_slice_from_memview(src, &src_slice)[0] # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mdst = get_slice_from_memview(dst, &dst_slice)[0] * - * X = np.array(X, dtype=np.float32) */ - __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_YI_oids, __pyx_v_oid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 403, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(1, 448, __pyx_L1_error) + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 448, __pyx_L1_error) + __pyx_v_msrc = (__pyx_t_1[0]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":405 - * YI_oids.append(oid) + /* "View.MemoryView":449 + * cdef __Pyx_memviewslice src_slice + * cdef __Pyx_memviewslice msrc = get_slice_from_memview(src, &src_slice)[0] + * cdef __Pyx_memviewslice mdst = get_slice_from_memview(dst, &dst_slice)[0] # <<<<<<<<<<<<<< * - * X = np.array(X, dtype=np.float32) # <<<<<<<<<<<<<< - * X_uids = np.array(X_uids, dtype=np.int32) - * X_iids = np.array(X_iids, dtype=np.int32) + * memoryview_copy_contents(msrc, mdst, src.ndim, dst.ndim, self.dtype_is_object) */ - __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 405, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_array); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 405, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 405, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_INCREF(__pyx_v_X); - __Pyx_GIVEREF(__pyx_v_X); - PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_X); - __pyx_t_13 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 405, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 405, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 405, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_dtype, __pyx_t_11) < 0) __PYX_ERR(0, 405, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 405, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF_SET(__pyx_v_X, __pyx_t_11); - __pyx_t_11 = 0; + if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(1, 449, __pyx_L1_error) + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 449, __pyx_L1_error) + __pyx_v_mdst = (__pyx_t_1[0]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":406 + /* "View.MemoryView":451 + * cdef __Pyx_memviewslice mdst = get_slice_from_memview(dst, &dst_slice)[0] * - * X = np.array(X, dtype=np.float32) - * X_uids = np.array(X_uids, dtype=np.int32) # <<<<<<<<<<<<<< - * X_iids = np.array(X_iids, dtype=np.int32) - * X_aids = np.array(X_aids, dtype=np.int32) + * memoryview_copy_contents(msrc, mdst, src.ndim, dst.ndim, self.dtype_is_object) # <<<<<<<<<<<<<< + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): */ - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 406, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_array); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 406, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 406, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_v_X_uids); - __Pyx_GIVEREF(__pyx_v_X_uids); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_X_uids); - __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 406, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 406, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_int32); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 406, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_dtype, __pyx_t_10) < 0) __PYX_ERR(0, 406, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 406, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF_SET(__pyx_v_X_uids, __pyx_t_10); - __pyx_t_10 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 451, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 451, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 451, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 451, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_5 = __pyx_memoryview_copy_contents(__pyx_v_msrc, __pyx_v_mdst, __pyx_t_3, __pyx_t_4, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 451, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":407 - * X = np.array(X, dtype=np.float32) - * X_uids = np.array(X_uids, dtype=np.int32) - * X_iids = np.array(X_iids, dtype=np.int32) # <<<<<<<<<<<<<< - * X_aids = np.array(X_aids, dtype=np.int32) - * YU = np.array(YU, dtype=np.float32) + /* "View.MemoryView":445 + * return obj + * + * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice */ - __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 407, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_array); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 407, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 407, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_INCREF(__pyx_v_X_iids); - __Pyx_GIVEREF(__pyx_v_X_iids); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_X_iids); - __pyx_t_11 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 407, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 407, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_int32); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 407, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_dtype, __pyx_t_14) < 0) __PYX_ERR(0, 407, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 407, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF_SET(__pyx_v_X_iids, __pyx_t_14); - __pyx_t_14 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":408 - * X_uids = np.array(X_uids, dtype=np.int32) - * X_iids = np.array(X_iids, dtype=np.int32) - * X_aids = np.array(X_aids, dtype=np.int32) # <<<<<<<<<<<<<< - * YU = np.array(YU, dtype=np.float32) - * YU_uids = np.array(YU_uids, dtype=np.int32) + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":453 + * memoryview_copy_contents(msrc, mdst, src.ndim, dst.ndim, self.dtype_is_object) + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< + * cdef int array[128] + * cdef void *tmp = NULL */ - __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_array); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_INCREF(__pyx_v_X_aids); - __Pyx_GIVEREF(__pyx_v_X_aids); - PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_v_X_aids); - __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_int32); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_dtype, __pyx_t_13) < 0) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_14, __pyx_t_10); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF_SET(__pyx_v_X_aids, __pyx_t_13); - __pyx_t_13 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":409 - * X_iids = np.array(X_iids, dtype=np.int32) - * X_aids = np.array(X_aids, dtype=np.int32) - * YU = np.array(YU, dtype=np.float32) # <<<<<<<<<<<<<< - * YU_uids = np.array(YU_uids, dtype=np.int32) - * YU_aids = np.array(YU_aids, dtype=np.int32) +static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value) { + int __pyx_v_array[0x80]; + void *__pyx_v_tmp; + void *__pyx_v_item; + __Pyx_memviewslice *__pyx_v_dst_slice; + __Pyx_memviewslice __pyx_v_tmp_slice; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + char const *__pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0); + + /* "View.MemoryView":455 + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): + * cdef int array[128] + * cdef void *tmp = NULL # <<<<<<<<<<<<<< + * cdef void *item + * */ - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_array); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_INCREF(__pyx_v_YU); - __Pyx_GIVEREF(__pyx_v_YU); - PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_YU); - __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_float32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_12) < 0) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF_SET(__pyx_v_YU, __pyx_t_12); - __pyx_t_12 = 0; + __pyx_v_tmp = NULL; - /* "cornac/models/comparer/recom_comparer_sub.pyx":410 - * X_aids = np.array(X_aids, dtype=np.int32) - * YU = np.array(YU, dtype=np.float32) - * YU_uids = np.array(YU_uids, dtype=np.int32) # <<<<<<<<<<<<<< - * YU_aids = np.array(YU_aids, dtype=np.int32) - * YU_oids = np.array(YU_oids, dtype=np.int32) + /* "View.MemoryView":460 + * cdef __Pyx_memviewslice *dst_slice + * cdef __Pyx_memviewslice tmp_slice + * dst_slice = get_slice_from_memview(dst, &tmp_slice) # <<<<<<<<<<<<<< + * + * if self.view.itemsize > sizeof(array): */ - __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 410, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_array); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 410, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 410, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_INCREF(__pyx_v_YU_uids); - __Pyx_GIVEREF(__pyx_v_YU_uids); - PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_YU_uids); - __pyx_t_13 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 410, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 410, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_int32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 410, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_dtype, __pyx_t_11) < 0) __PYX_ERR(0, 410, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 410, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF_SET(__pyx_v_YU_uids, __pyx_t_11); - __pyx_t_11 = 0; + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 460, __pyx_L1_error) + __pyx_v_dst_slice = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":411 - * YU = np.array(YU, dtype=np.float32) - * YU_uids = np.array(YU_uids, dtype=np.int32) - * YU_aids = np.array(YU_aids, dtype=np.int32) # <<<<<<<<<<<<<< - * YU_oids = np.array(YU_oids, dtype=np.int32) - * YI = np.array(YI, dtype=np.float32) + /* "View.MemoryView":462 + * dst_slice = get_slice_from_memview(dst, &tmp_slice) + * + * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: */ - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_array); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_v_YU_aids); - __Pyx_GIVEREF(__pyx_v_YU_aids); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_YU_aids); - __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_int32); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_dtype, __pyx_t_10) < 0) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF_SET(__pyx_v_YU_aids, __pyx_t_10); - __pyx_t_10 = 0; + __pyx_t_2 = (((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":412 - * YU_uids = np.array(YU_uids, dtype=np.int32) - * YU_aids = np.array(YU_aids, dtype=np.int32) - * YU_oids = np.array(YU_oids, dtype=np.int32) # <<<<<<<<<<<<<< - * YI = np.array(YI, dtype=np.float32) - * YI_iids = np.array(YI_iids, dtype=np.int32) + /* "View.MemoryView":463 + * + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) # <<<<<<<<<<<<<< + * if tmp == NULL: + * raise MemoryError */ - __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 412, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_array); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 412, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 412, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_INCREF(__pyx_v_YU_oids); - __Pyx_GIVEREF(__pyx_v_YU_oids); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_YU_oids); - __pyx_t_11 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 412, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 412, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_int32); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 412, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_dtype, __pyx_t_14) < 0) __PYX_ERR(0, 412, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 412, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF_SET(__pyx_v_YU_oids, __pyx_t_14); - __pyx_t_14 = 0; + __pyx_v_tmp = PyMem_Malloc(__pyx_v_self->view.itemsize); - /* "cornac/models/comparer/recom_comparer_sub.pyx":413 - * YU_aids = np.array(YU_aids, dtype=np.int32) - * YU_oids = np.array(YU_oids, dtype=np.int32) - * YI = np.array(YI, dtype=np.float32) # <<<<<<<<<<<<<< - * YI_iids = np.array(YI_iids, dtype=np.int32) - * YI_aids = np.array(YI_aids, dtype=np.int32) + /* "View.MemoryView":464 + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * item = tmp */ - __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_array); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_INCREF(__pyx_v_YI); - __Pyx_GIVEREF(__pyx_v_YI); - PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_v_YI); - __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_float32); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_dtype, __pyx_t_13) < 0) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_14, __pyx_t_10); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF_SET(__pyx_v_YI, __pyx_t_13); - __pyx_t_13 = 0; + __pyx_t_2 = (__pyx_v_tmp == NULL); + if (unlikely(__pyx_t_2)) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":414 - * YU_oids = np.array(YU_oids, dtype=np.int32) - * YI = np.array(YI, dtype=np.float32) - * YI_iids = np.array(YI_iids, dtype=np.int32) # <<<<<<<<<<<<<< - * YI_aids = np.array(YI_aids, dtype=np.int32) - * YI_oids = np.array(YI_oids, dtype=np.int32) + /* "View.MemoryView":465 + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + * raise MemoryError # <<<<<<<<<<<<<< + * item = tmp + * else: */ - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 414, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_array); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 414, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 414, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_INCREF(__pyx_v_YI_iids); - __Pyx_GIVEREF(__pyx_v_YI_iids); - PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_YI_iids); - __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 414, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 414, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_int32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 414, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_12) < 0) __PYX_ERR(0, 414, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 414, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF_SET(__pyx_v_YI_iids, __pyx_t_12); - __pyx_t_12 = 0; + PyErr_NoMemory(); __PYX_ERR(1, 465, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":415 - * YI = np.array(YI, dtype=np.float32) - * YI_iids = np.array(YI_iids, dtype=np.int32) - * YI_aids = np.array(YI_aids, dtype=np.int32) # <<<<<<<<<<<<<< - * YI_oids = np.array(YI_oids, dtype=np.int32) - * + /* "View.MemoryView":464 + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * item = tmp */ - __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_array); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_INCREF(__pyx_v_YI_aids); - __Pyx_GIVEREF(__pyx_v_YI_aids); - PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_YI_aids); - __pyx_t_13 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_int32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_dtype, __pyx_t_11) < 0) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF_SET(__pyx_v_YI_aids, __pyx_t_11); - __pyx_t_11 = 0; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":416 - * YI_iids = np.array(YI_iids, dtype=np.int32) - * YI_aids = np.array(YI_aids, dtype=np.int32) - * YI_oids = np.array(YI_oids, dtype=np.int32) # <<<<<<<<<<<<<< - * - * user_counts = np.ediff1d(rating_matrix.indptr).astype(np.int32) + /* "View.MemoryView":466 + * if tmp == NULL: + * raise MemoryError + * item = tmp # <<<<<<<<<<<<<< + * else: + * item = array */ - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_array); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_v_YI_oids); - __Pyx_GIVEREF(__pyx_v_YI_oids); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_YI_oids); - __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_int32); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_dtype, __pyx_t_10) < 0) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF_SET(__pyx_v_YI_oids, __pyx_t_10); - __pyx_t_10 = 0; + __pyx_v_item = __pyx_v_tmp; - /* "cornac/models/comparer/recom_comparer_sub.pyx":418 - * YI_oids = np.array(YI_oids, dtype=np.int32) + /* "View.MemoryView":462 + * dst_slice = get_slice_from_memview(dst, &tmp_slice) * - * user_counts = np.ediff1d(rating_matrix.indptr).astype(np.int32) # <<<<<<<<<<<<<< - * user_ids = np.repeat(np.arange(self.train_set.num_users), user_counts).astype(np.int32) - * neg_item_ids = np.arange(train_set.num_items, dtype=np.int32) + * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: */ - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 418, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_ediff1d); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 418, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_rating_matrix, __pyx_n_s_indptr); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 418, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_14 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_14)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_14); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_11); - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 418, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 418, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 418, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_int32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 418, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } + goto __pyx_L3; } - __pyx_t_10 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_11); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 418, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_v_user_counts = __pyx_t_10; - __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":419 - * - * user_counts = np.ediff1d(rating_matrix.indptr).astype(np.int32) - * user_ids = np.repeat(np.arange(self.train_set.num_users), user_counts).astype(np.int32) # <<<<<<<<<<<<<< - * neg_item_ids = np.arange(train_set.num_items, dtype=np.int32) + /* "View.MemoryView":468 + * item = tmp + * else: + * item = array # <<<<<<<<<<<<<< * + * try: */ - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_repeat); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_arange); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_num_users); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_14)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_14); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_11 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_14, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - __pyx_t_4 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_12); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_12, function); - __pyx_t_4 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_12)) { - PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_11, __pyx_v_user_counts}; - __pyx_t_13 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) { - PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_11, __pyx_v_user_counts}; - __pyx_t_13 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - } else - #endif - { - __pyx_t_9 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - if (__pyx_t_1) { - __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1); __pyx_t_1 = NULL; - } - __Pyx_GIVEREF(__pyx_t_11); - PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_4, __pyx_t_11); - __Pyx_INCREF(__pyx_v_user_counts); - __Pyx_GIVEREF(__pyx_v_user_counts); - PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_4, __pyx_v_user_counts); - __pyx_t_11 = 0; - __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_9, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_int32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_12, function); - } + /*else*/ { + __pyx_v_item = ((void *)__pyx_v_array); } - __pyx_t_10 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_v_user_ids = __pyx_t_10; - __pyx_t_10 = 0; + __pyx_L3:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":420 - * user_counts = np.ediff1d(rating_matrix.indptr).astype(np.int32) - * user_ids = np.repeat(np.arange(self.train_set.num_users), user_counts).astype(np.int32) - * neg_item_ids = np.arange(train_set.num_items, dtype=np.int32) # <<<<<<<<<<<<<< + /* "View.MemoryView":470 + * item = array * - * cdef: + * try: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * ( item)[0] = value */ - __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_arange); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_train_set, __pyx_n_s_num_items); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GIVEREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_10); - __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_int32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_dtype, __pyx_t_11) < 0) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_v_neg_item_ids = __pyx_t_11; - __pyx_t_11 = 0; + /*try:*/ { - /* "cornac/models/comparer/recom_comparer_sub.pyx":423 + /* "View.MemoryView":471 * - * cdef: - * int n_threads = self.n_threads # <<<<<<<<<<<<<< - * RNGVector rng_pos_uia = RNGVector(n_threads, len(user_item_aspect) - 1, self.rng.randint(2 ** 31)) - * RNGVector rng_pos_uao = RNGVector(n_threads, len(user_aspect_opinion) - 1, self.rng.randint(2 ** 31)) + * try: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * ( item)[0] = value + * else: */ - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_threads); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_11); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_v_n_threads = __pyx_t_4; + if (__pyx_v_self->dtype_is_object) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":424 - * cdef: - * int n_threads = self.n_threads - * RNGVector rng_pos_uia = RNGVector(n_threads, len(user_item_aspect) - 1, self.rng.randint(2 ** 31)) # <<<<<<<<<<<<<< - * RNGVector rng_pos_uao = RNGVector(n_threads, len(user_aspect_opinion) - 1, self.rng.randint(2 ** 31)) - * RNGVector rng_pos_iao = RNGVector(n_threads, len(item_aspect_opinion) - 1, self.rng.randint(2 ** 31)) + /* "View.MemoryView":472 + * try: + * if self.dtype_is_object: + * ( item)[0] = value # <<<<<<<<<<<<<< + * else: + * self.assign_item_from_object( item, value) */ - __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_n_threads); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_18 = PyObject_Length(__pyx_v_user_item_aspect); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(0, 424, __pyx_L1_error) - __pyx_t_10 = PyInt_FromSsize_t((__pyx_t_18 - 1)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rng); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_randint); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_9 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_int_2147483648) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_int_2147483648); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_GIVEREF(__pyx_t_11); - PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_11); - __Pyx_GIVEREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_10); - __Pyx_GIVEREF(__pyx_t_9); - PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_t_9); - __pyx_t_11 = 0; - __pyx_t_10 = 0; - __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector), __pyx_t_13, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_v_rng_pos_uia = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_t_9); - __pyx_t_9 = 0; + (((PyObject **)__pyx_v_item)[0]) = ((PyObject *)__pyx_v_value); - /* "cornac/models/comparer/recom_comparer_sub.pyx":425 - * int n_threads = self.n_threads - * RNGVector rng_pos_uia = RNGVector(n_threads, len(user_item_aspect) - 1, self.rng.randint(2 ** 31)) - * RNGVector rng_pos_uao = RNGVector(n_threads, len(user_aspect_opinion) - 1, self.rng.randint(2 ** 31)) # <<<<<<<<<<<<<< - * RNGVector rng_pos_iao = RNGVector(n_threads, len(item_aspect_opinion) - 1, self.rng.randint(2 ** 31)) - * RNGVector rng_pos_pair = RNGVector(n_threads, len(p_user_indices) - 1, self.rng.randint(2 ** 31)) + /* "View.MemoryView":471 + * + * try: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * ( item)[0] = value + * else: */ - __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_n_threads); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_18 = PyObject_Length(__pyx_v_user_aspect_opinion); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(0, 425, __pyx_L1_error) - __pyx_t_13 = PyInt_FromSsize_t((__pyx_t_18 - 1)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rng); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_randint); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) { - __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12); - if (likely(__pyx_t_11)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); - __Pyx_INCREF(__pyx_t_11); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_12, function); + goto __pyx_L8; } - } - __pyx_t_10 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_11, __pyx_int_2147483648) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_int_2147483648); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_GIVEREF(__pyx_t_9); - PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_9); - __Pyx_GIVEREF(__pyx_t_13); - PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_13); - __Pyx_GIVEREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_10); - __pyx_t_9 = 0; - __pyx_t_13 = 0; - __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector), __pyx_t_12, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_v_rng_pos_uao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_t_10); - __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":426 - * RNGVector rng_pos_uia = RNGVector(n_threads, len(user_item_aspect) - 1, self.rng.randint(2 ** 31)) - * RNGVector rng_pos_uao = RNGVector(n_threads, len(user_aspect_opinion) - 1, self.rng.randint(2 ** 31)) - * RNGVector rng_pos_iao = RNGVector(n_threads, len(item_aspect_opinion) - 1, self.rng.randint(2 ** 31)) # <<<<<<<<<<<<<< - * RNGVector rng_pos_pair = RNGVector(n_threads, len(p_user_indices) - 1, self.rng.randint(2 ** 31)) - * RNGVector rng_pos = RNGVector(n_threads, len(user_ids) - 1, self.rng.randint(2 ** 31)) + /* "View.MemoryView":474 + * ( item)[0] = value + * else: + * self.assign_item_from_object( item, value) # <<<<<<<<<<<<<< + * + * */ - __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_n_threads); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 426, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_18 = PyObject_Length(__pyx_v_item_aspect_opinion); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(0, 426, __pyx_L1_error) - __pyx_t_12 = PyInt_FromSsize_t((__pyx_t_18 - 1)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 426, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rng); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 426, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_randint); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 426, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); + /*else*/ { + __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 474, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - } - __pyx_t_13 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_9, __pyx_int_2147483648) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_int_2147483648); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 426, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 426, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GIVEREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); - __Pyx_GIVEREF(__pyx_t_12); - PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_12); - __Pyx_GIVEREF(__pyx_t_13); - PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_13); - __pyx_t_10 = 0; - __pyx_t_12 = 0; - __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector), __pyx_t_11, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 426, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_v_rng_pos_iao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_t_13); - __pyx_t_13 = 0; + __pyx_L8:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":427 - * RNGVector rng_pos_uao = RNGVector(n_threads, len(user_aspect_opinion) - 1, self.rng.randint(2 ** 31)) - * RNGVector rng_pos_iao = RNGVector(n_threads, len(item_aspect_opinion) - 1, self.rng.randint(2 ** 31)) - * RNGVector rng_pos_pair = RNGVector(n_threads, len(p_user_indices) - 1, self.rng.randint(2 ** 31)) # <<<<<<<<<<<<<< - * RNGVector rng_pos = RNGVector(n_threads, len(user_ids) - 1, self.rng.randint(2 ** 31)) - * RNGVector rng_neg = RNGVector(n_threads, train_set.num_items - 1, self.rng.randint(2 ** 31)) + /* "View.MemoryView":478 + * + * + * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, */ - __pyx_t_13 = __Pyx_PyInt_From_int(__pyx_v_n_threads); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_18 = PyObject_Length(__pyx_v_p_user_indices); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(0, 427, __pyx_L1_error) - __pyx_t_11 = PyInt_FromSsize_t((__pyx_t_18 - 1)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rng); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_randint); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_10)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_10); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); - } - } - __pyx_t_12 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_10, __pyx_int_2147483648) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_int_2147483648); - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GIVEREF(__pyx_t_13); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_13); - __Pyx_GIVEREF(__pyx_t_11); - PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_11); - __Pyx_GIVEREF(__pyx_t_12); - PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_12); - __pyx_t_13 = 0; - __pyx_t_11 = 0; - __pyx_t_12 = 0; - __pyx_t_12 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector), __pyx_t_9, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_v_rng_pos_pair = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_t_12); - __pyx_t_12 = 0; + __pyx_t_2 = (__pyx_v_self->view.suboffsets != NULL); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":428 - * RNGVector rng_pos_iao = RNGVector(n_threads, len(item_aspect_opinion) - 1, self.rng.randint(2 ** 31)) - * RNGVector rng_pos_pair = RNGVector(n_threads, len(p_user_indices) - 1, self.rng.randint(2 ** 31)) - * RNGVector rng_pos = RNGVector(n_threads, len(user_ids) - 1, self.rng.randint(2 ** 31)) # <<<<<<<<<<<<<< - * RNGVector rng_neg = RNGVector(n_threads, train_set.num_items - 1, self.rng.randint(2 ** 31)) + /* "View.MemoryView":479 * + * if self.view.suboffsets != NULL: + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) # <<<<<<<<<<<<<< + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + * item, self.dtype_is_object) */ - __pyx_t_12 = __Pyx_PyInt_From_int(__pyx_v_n_threads); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_18 = PyObject_Length(__pyx_v_user_ids); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(0, 428, __pyx_L1_error) - __pyx_t_9 = PyInt_FromSsize_t((__pyx_t_18 - 1)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rng); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_randint); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_10); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_10, function); - } - } - __pyx_t_11 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_13, __pyx_int_2147483648) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_int_2147483648); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GIVEREF(__pyx_t_12); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_12); - __Pyx_GIVEREF(__pyx_t_9); - PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_9); - __Pyx_GIVEREF(__pyx_t_11); - PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_t_11); - __pyx_t_12 = 0; - __pyx_t_9 = 0; - __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector), __pyx_t_10, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_v_rng_pos = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_t_11); - __pyx_t_11 = 0; + __pyx_t_4 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 479, __pyx_L6_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":429 - * RNGVector rng_pos_pair = RNGVector(n_threads, len(p_user_indices) - 1, self.rng.randint(2 ** 31)) - * RNGVector rng_pos = RNGVector(n_threads, len(user_ids) - 1, self.rng.randint(2 ** 31)) - * RNGVector rng_neg = RNGVector(n_threads, train_set.num_items - 1, self.rng.randint(2 ** 31)) # <<<<<<<<<<<<<< + /* "View.MemoryView":478 * - * sgrad_G1 = np.zeros_like(self.G1).astype(np.float32) - */ - __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_n_threads); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_train_set, __pyx_n_s_num_items); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_9 = __Pyx_PyInt_SubtractObjC(__pyx_t_10, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rng); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_randint); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_10 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_int_2147483648) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_int_2147483648); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_GIVEREF(__pyx_t_11); - PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_11); - __Pyx_GIVEREF(__pyx_t_9); - PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_9); - __Pyx_GIVEREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_t_10); - __pyx_t_11 = 0; - __pyx_t_9 = 0; - __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector), __pyx_t_13, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_v_rng_neg = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_t_10); - __pyx_t_10 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":431 - * RNGVector rng_neg = RNGVector(n_threads, train_set.num_items - 1, self.rng.randint(2 ** 31)) * - * sgrad_G1 = np.zeros_like(self.G1).astype(np.float32) # <<<<<<<<<<<<<< - * sgrad_G2 = np.zeros_like(self.G2).astype(np.float32) - * sgrad_G3 = np.zeros_like(self.G3).astype(np.float32) + * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 431, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 431, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 431, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_13 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 431, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 431, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 431, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 431, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); } - } - __pyx_t_10 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 431, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_v_sgrad_G1 = __pyx_t_10; - __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":432 - * - * sgrad_G1 = np.zeros_like(self.G1).astype(np.float32) - * sgrad_G2 = np.zeros_like(self.G2).astype(np.float32) # <<<<<<<<<<<<<< - * sgrad_G3 = np.zeros_like(self.G3).astype(np.float32) - * sgrad_U = np.zeros_like(self.U).astype(np.float32) + /* "View.MemoryView":480 + * if self.view.suboffsets != NULL: + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, # <<<<<<<<<<<<<< + * item, self.dtype_is_object) + * finally: */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 432, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 432, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 432, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_11 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 432, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 432, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 432, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 432, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && 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_memoryview_slice_assign_scalar(__pyx_v_dst_slice, __pyx_v_dst->view.ndim, __pyx_v_self->view.itemsize, __pyx_v_item, __pyx_v_self->dtype_is_object); } - __pyx_t_10 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_11, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 432, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_v_sgrad_G2 = __pyx_t_10; - __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":433 - * sgrad_G1 = np.zeros_like(self.G1).astype(np.float32) - * sgrad_G2 = np.zeros_like(self.G2).astype(np.float32) - * sgrad_G3 = np.zeros_like(self.G3).astype(np.float32) # <<<<<<<<<<<<<< - * sgrad_U = np.zeros_like(self.U).astype(np.float32) - * sgrad_I = np.zeros_like(self.I).astype(np.float32) + /* "View.MemoryView":483 + * item, self.dtype_is_object) + * finally: + * PyMem_Free(tmp) # <<<<<<<<<<<<<< + * + * cdef setitem_indexed(self, index, value): */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 433, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 433, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 433, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); + /*finally:*/ { + /*normal exit:*/{ + PyMem_Free(__pyx_v_tmp); + goto __pyx_L7; } - } - __pyx_t_13 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 433, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 433, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 433, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 433, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_L6_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename; + { + PyMem_Free(__pyx_v_tmp); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + } + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9); + __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; + __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6; + goto __pyx_L1_error; } + __pyx_L7:; } - __pyx_t_10 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 433, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_v_sgrad_G3 = __pyx_t_10; - __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":434 - * sgrad_G2 = np.zeros_like(self.G2).astype(np.float32) - * sgrad_G3 = np.zeros_like(self.G3).astype(np.float32) - * sgrad_U = np.zeros_like(self.U).astype(np.float32) # <<<<<<<<<<<<<< - * sgrad_I = np.zeros_like(self.I).astype(np.float32) - * sgrad_A = np.zeros_like(self.A).astype(np.float32) + /* "View.MemoryView":453 + * memoryview_copy_contents(msrc, mdst, src.ndim, dst.ndim, self.dtype_is_object) + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< + * cdef int array[128] + * cdef void *tmp = NULL */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_11 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && 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_10 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_11, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_v_sgrad_U = __pyx_t_10; - __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":435 - * sgrad_G3 = np.zeros_like(self.G3).astype(np.float32) - * sgrad_U = np.zeros_like(self.U).astype(np.float32) - * sgrad_I = np.zeros_like(self.I).astype(np.float32) # <<<<<<<<<<<<<< - * sgrad_A = np.zeros_like(self.A).astype(np.float32) - * sgrad_O = np.zeros_like(self.O).astype(np.float32) + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":485 + * PyMem_Free(tmp) + * + * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 435, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 435, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_I); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 435, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_13 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 435, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 435, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 435, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 435, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_10 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 435, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_v_sgrad_I = __pyx_t_10; - __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":436 - * sgrad_U = np.zeros_like(self.U).astype(np.float32) - * sgrad_I = np.zeros_like(self.I).astype(np.float32) - * sgrad_A = np.zeros_like(self.A).astype(np.float32) # <<<<<<<<<<<<<< - * sgrad_O = np.zeros_like(self.O).astype(np.float32) - * del_g1 = np.zeros_like(self.G1).astype(np.float32) +static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + char *__pyx_v_itemp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_indexed", 0); + + /* "View.MemoryView":486 + * + * cdef setitem_indexed(self, index, value): + * cdef char *itemp = self.get_item_pointer(index) # <<<<<<<<<<<<<< + * self.assign_item_from_object(itemp, value) + * */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 436, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 436, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_A); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 436, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_11 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 436, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 436, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 436, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 436, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && 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_10 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_11, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 436, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_v_sgrad_A = __pyx_t_10; - __pyx_t_10 = 0; + __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_index); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(1, 486, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":437 - * sgrad_I = np.zeros_like(self.I).astype(np.float32) - * sgrad_A = np.zeros_like(self.A).astype(np.float32) - * sgrad_O = np.zeros_like(self.O).astype(np.float32) # <<<<<<<<<<<<<< - * del_g1 = np.zeros_like(self.G1).astype(np.float32) - * del_g2 = np.zeros_like(self.G2).astype(np.float32) + /* "View.MemoryView":487 + * cdef setitem_indexed(self, index, value): + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) # <<<<<<<<<<<<<< + * + * cdef convert_item_to_object(self, char *itemp): */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_O); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_13 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_10 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_v_sgrad_O = __pyx_t_10; - __pyx_t_10 = 0; + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 487, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":438 - * sgrad_A = np.zeros_like(self.A).astype(np.float32) - * sgrad_O = np.zeros_like(self.O).astype(np.float32) - * del_g1 = np.zeros_like(self.G1).astype(np.float32) # <<<<<<<<<<<<<< - * del_g2 = np.zeros_like(self.G2).astype(np.float32) - * del_g3 = np.zeros_like(self.G3).astype(np.float32) + /* "View.MemoryView":485 + * PyMem_Free(tmp) + * + * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 438, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 438, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 438, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_11 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 438, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 438, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 438, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 438, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && 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_10 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_11, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 438, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_v_del_g1 = __pyx_t_10; - __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":439 - * sgrad_O = np.zeros_like(self.O).astype(np.float32) - * del_g1 = np.zeros_like(self.G1).astype(np.float32) - * del_g2 = np.zeros_like(self.G2).astype(np.float32) # <<<<<<<<<<<<<< - * del_g3 = np.zeros_like(self.G3).astype(np.float32) - * del_u = np.zeros_like(self.U).astype(np.float32) + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":489 + * self.assign_item_from_object(itemp, value) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 439, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 439, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 439, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_13 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 439, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 439, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 439, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 439, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_10 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 439, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_v_del_g2 = __pyx_t_10; - __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":440 - * del_g1 = np.zeros_like(self.G1).astype(np.float32) - * del_g2 = np.zeros_like(self.G2).astype(np.float32) - * del_g3 = np.zeros_like(self.G3).astype(np.float32) # <<<<<<<<<<<<<< - * del_u = np.zeros_like(self.U).astype(np.float32) - * del_i = np.zeros_like(self.I).astype(np.float32) +static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp) { + PyObject *__pyx_v_struct = NULL; + PyObject *__pyx_v_bytesitem = 0; + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + Py_ssize_t __pyx_t_9; + int __pyx_t_10; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("convert_item_to_object", 0); + + /* "View.MemoryView":492 + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + * import struct # <<<<<<<<<<<<<< + * cdef bytes bytesitem + * */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 440, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 440, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 440, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_11 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 440, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 440, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 440, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 440, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && 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_10 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_11, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 440, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_v_del_g3 = __pyx_t_10; - __pyx_t_10 = 0; + __pyx_t_1 = __Pyx_ImportDottedModule(__pyx_n_s_struct, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 492, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_struct = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":441 - * del_g2 = np.zeros_like(self.G2).astype(np.float32) - * del_g3 = np.zeros_like(self.G3).astype(np.float32) - * del_u = np.zeros_like(self.U).astype(np.float32) # <<<<<<<<<<<<<< - * del_i = np.zeros_like(self.I).astype(np.float32) - * del_a = np.zeros_like(self.A).astype(np.float32) + /* "View.MemoryView":495 + * cdef bytes bytesitem + * + * bytesitem = itemp[:self.view.itemsize] # <<<<<<<<<<<<<< + * try: + * result = struct.unpack(self.view.format, bytesitem) */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 441, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 441, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 441, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_13 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 441, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 441, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 441, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 441, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_10 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 441, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_v_del_u = __pyx_t_10; - __pyx_t_10 = 0; + __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_itemp + 0, __pyx_v_self->view.itemsize - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_bytesitem = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":442 - * del_g3 = np.zeros_like(self.G3).astype(np.float32) - * del_u = np.zeros_like(self.U).astype(np.float32) - * del_i = np.zeros_like(self.I).astype(np.float32) # <<<<<<<<<<<<<< - * del_a = np.zeros_like(self.A).astype(np.float32) - * del_o = np.zeros_like(self.O).astype(np.float32) + /* "View.MemoryView":496 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 442, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 442, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_I); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 442, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_11 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 442, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 442, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 442, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 442, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && 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_10 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_11, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 442, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_v_del_i = __pyx_t_10; - __pyx_t_10 = 0; + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { - /* "cornac/models/comparer/recom_comparer_sub.pyx":443 - * del_u = np.zeros_like(self.U).astype(np.float32) - * del_i = np.zeros_like(self.I).astype(np.float32) - * del_a = np.zeros_like(self.A).astype(np.float32) # <<<<<<<<<<<<<< - * del_o = np.zeros_like(self.O).astype(np.float32) - * del_g1_reg = np.zeros_like(self.G1).astype(np.float32) + /* "View.MemoryView":497 + * bytesitem = itemp[:self.view.itemsize] + * try: + * result = struct.unpack(self.view.format, bytesitem) # <<<<<<<<<<<<<< + * except struct.error: + * raise ValueError, "Unable to convert item to object" */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 443, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 443, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_A); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 443, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_13 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 443, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 443, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 443, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 443, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_10 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 443, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_v_del_a = __pyx_t_10; - __pyx_t_10 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_unpack); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 497, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 497, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + { + PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 497, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_v_result = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":444 - * del_i = np.zeros_like(self.I).astype(np.float32) - * del_a = np.zeros_like(self.A).astype(np.float32) - * del_o = np.zeros_like(self.O).astype(np.float32) # <<<<<<<<<<<<<< - * del_g1_reg = np.zeros_like(self.G1).astype(np.float32) - * del_g2_reg = np.zeros_like(self.G2).astype(np.float32) + /* "View.MemoryView":496 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 444, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 444, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_O); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 444, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_11 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 444, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 444, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 444, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 444, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && 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_10 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_11, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 444, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_v_del_o = __pyx_t_10; - __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":445 - * del_a = np.zeros_like(self.A).astype(np.float32) - * del_o = np.zeros_like(self.O).astype(np.float32) - * del_g1_reg = np.zeros_like(self.G1).astype(np.float32) # <<<<<<<<<<<<<< - * del_g2_reg = np.zeros_like(self.G2).astype(np.float32) - * del_g3_reg = np.zeros_like(self.G3).astype(np.float32) + /* "View.MemoryView":501 + * raise ValueError, "Unable to convert item to object" + * else: + * if len(self.view.format) == 1: # <<<<<<<<<<<<<< + * return result[0] + * return result */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 445, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 445, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 445, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_13 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 445, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 445, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 445, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 445, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_10 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 445, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_v_del_g1_reg = __pyx_t_10; - __pyx_t_10 = 0; + /*else:*/ { + __pyx_t_9 = __Pyx_ssize_strlen(__pyx_v_self->view.format); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(1, 501, __pyx_L5_except_error) + __pyx_t_10 = (__pyx_t_9 == 1); + if (__pyx_t_10) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":446 - * del_o = np.zeros_like(self.O).astype(np.float32) - * del_g1_reg = np.zeros_like(self.G1).astype(np.float32) - * del_g2_reg = np.zeros_like(self.G2).astype(np.float32) # <<<<<<<<<<<<<< - * del_g3_reg = np.zeros_like(self.G3).astype(np.float32) - * del_u_reg = np.zeros_like(self.U).astype(np.float32) + /* "View.MemoryView":502 + * else: + * if len(self.view.format) == 1: + * return result[0] # <<<<<<<<<<<<<< + * return result + * */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 446, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 446, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 446, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_11 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 446, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 446, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 446, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 446, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && 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_10 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_11, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 446, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_v_del_g2_reg = __pyx_t_10; - __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_result, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 502, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L6_except_return; - /* "cornac/models/comparer/recom_comparer_sub.pyx":447 - * del_g1_reg = np.zeros_like(self.G1).astype(np.float32) - * del_g2_reg = np.zeros_like(self.G2).astype(np.float32) - * del_g3_reg = np.zeros_like(self.G3).astype(np.float32) # <<<<<<<<<<<<<< - * del_u_reg = np.zeros_like(self.U).astype(np.float32) - * del_i_reg = np.zeros_like(self.I).astype(np.float32) + /* "View.MemoryView":501 + * raise ValueError, "Unable to convert item to object" + * else: + * if len(self.view.format) == 1: # <<<<<<<<<<<<<< + * return result[0] + * return result */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 447, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 447, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 447, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_13 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 447, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 447, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 447, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 447, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_10 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 447, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_v_del_g3_reg = __pyx_t_10; - __pyx_t_10 = 0; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":448 - * del_g2_reg = np.zeros_like(self.G2).astype(np.float32) - * del_g3_reg = np.zeros_like(self.G3).astype(np.float32) - * del_u_reg = np.zeros_like(self.U).astype(np.float32) # <<<<<<<<<<<<<< - * del_i_reg = np.zeros_like(self.I).astype(np.float32) - * del_a_reg = np.zeros_like(self.A).astype(np.float32) + /* "View.MemoryView":503 + * if len(self.view.format) == 1: + * return result[0] + * return result # <<<<<<<<<<<<<< + * + * cdef assign_item_from_object(self, char *itemp, object value): */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 448, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 448, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 448, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_11 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 448, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 448, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 448, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 448, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && 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_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L6_except_return; } - } - __pyx_t_10 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_11, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 448, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_v_del_u_reg = __pyx_t_10; - __pyx_t_10 = 0; + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":449 - * del_g3_reg = np.zeros_like(self.G3).astype(np.float32) - * del_u_reg = np.zeros_like(self.U).astype(np.float32) - * del_i_reg = np.zeros_like(self.I).astype(np.float32) # <<<<<<<<<<<<<< - * del_a_reg = np.zeros_like(self.A).astype(np.float32) - * del_o_reg = np.zeros_like(self.O).astype(np.float32) + /* "View.MemoryView":498 + * try: + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: # <<<<<<<<<<<<<< + * raise ValueError, "Unable to convert item to object" + * else: */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 449, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 449, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_I); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 449, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_13 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 449, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 449, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 449, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 449, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_10 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 449, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_v_del_i_reg = __pyx_t_10; - __pyx_t_10 = 0; + __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 498, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_7); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_6); + __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0; + if (__pyx_t_8) { + __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(1, 498, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":450 - * del_u_reg = np.zeros_like(self.U).astype(np.float32) - * del_i_reg = np.zeros_like(self.I).astype(np.float32) - * del_a_reg = np.zeros_like(self.A).astype(np.float32) # <<<<<<<<<<<<<< - * del_o_reg = np.zeros_like(self.O).astype(np.float32) - * + /* "View.MemoryView":499 + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + * raise ValueError, "Unable to convert item to object" # <<<<<<<<<<<<<< + * else: + * if len(self.view.format) == 1: */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 450, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 450, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_A); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 450, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_11 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 450, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 450, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 450, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 450, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && 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_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Unable_to_convert_item_to_object, 0, 0); + __PYX_ERR(1, 499, __pyx_L5_except_error) } - } - __pyx_t_10 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_11, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 450, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_v_del_a_reg = __pyx_t_10; - __pyx_t_10 = 0; + goto __pyx_L5_except_error; - /* "cornac/models/comparer/recom_comparer_sub.pyx":451 - * del_i_reg = np.zeros_like(self.I).astype(np.float32) - * del_a_reg = np.zeros_like(self.A).astype(np.float32) - * del_o_reg = np.zeros_like(self.O).astype(np.float32) # <<<<<<<<<<<<<< + /* "View.MemoryView":496 * - * with trange(self.max_iter, disable=not self.verbose) as progress: + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 451, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 451, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_O); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 451, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_13 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 451, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 451, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 451, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 451, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; } - __pyx_t_10 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 451, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_v_del_o_reg = __pyx_t_10; - __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":453 - * del_o_reg = np.zeros_like(self.O).astype(np.float32) + /* "View.MemoryView":489 + * self.assign_item_from_object(itemp, value) * - * with trange(self.max_iter, disable=not self.verbose) as progress: # <<<<<<<<<<<<<< - * for epoch in progress: - * correct, skipped, loss, bpr_loss = self._fit_mter( + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" */ - /*with:*/ { - __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_trange); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 453, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_max_iter); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 453, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 453, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GIVEREF(__pyx_t_11); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_11); - __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 453, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 453, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 453, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyBool_FromLong((!__pyx_t_7)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 453, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_disable, __pyx_t_13) < 0) __PYX_ERR(0, 453, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_9, __pyx_t_11); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 453, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_21 = __Pyx_PyObject_LookupSpecial(__pyx_t_13, __pyx_n_s_exit); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 453, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_21); - __pyx_t_9 = __Pyx_PyObject_LookupSpecial(__pyx_t_13, __pyx_n_s_enter); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 453, __pyx_L18_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_10)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_10); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); - } - } - __pyx_t_11 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 453, __pyx_L18_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __pyx_t_11; - __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - /*try:*/ { - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); - __Pyx_XGOTREF(__pyx_t_22); - __Pyx_XGOTREF(__pyx_t_23); - __Pyx_XGOTREF(__pyx_t_24); - /*try:*/ { - __pyx_v_progress = __pyx_t_9; - __pyx_t_9 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":454 + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_struct); + __Pyx_XDECREF(__pyx_v_bytesitem); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":505 + * return result * - * with trange(self.max_iter, disable=not self.verbose) as progress: - * for epoch in progress: # <<<<<<<<<<<<<< - * correct, skipped, loss, bpr_loss = self._fit_mter( - * rng_pos_uia, rng_pos_uao, rng_pos_iao, rng_pos_pair, rng_pos, rng_neg, + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" */ - if (likely(PyList_CheckExact(__pyx_v_progress)) || PyTuple_CheckExact(__pyx_v_progress)) { - __pyx_t_9 = __pyx_v_progress; __Pyx_INCREF(__pyx_t_9); __pyx_t_18 = 0; - __pyx_t_25 = NULL; - } else { - __pyx_t_18 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_v_progress); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 454, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_25 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 454, __pyx_L22_error) - } - for (;;) { - if (likely(!__pyx_t_25)) { - if (likely(PyList_CheckExact(__pyx_t_9))) { - if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_9)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_13 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_18); __Pyx_INCREF(__pyx_t_13); __pyx_t_18++; if (unlikely(0 < 0)) __PYX_ERR(0, 454, __pyx_L22_error) - #else - __pyx_t_13 = PySequence_ITEM(__pyx_t_9, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 454, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_13); - #endif - } else { - if (__pyx_t_18 >= PyTuple_GET_SIZE(__pyx_t_9)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_13 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_18); __Pyx_INCREF(__pyx_t_13); __pyx_t_18++; if (unlikely(0 < 0)) __PYX_ERR(0, 454, __pyx_L22_error) - #else - __pyx_t_13 = PySequence_ITEM(__pyx_t_9, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 454, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_13); - #endif - } - } else { - __pyx_t_13 = __pyx_t_25(__pyx_t_9); - if (unlikely(!__pyx_t_13)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 454, __pyx_L22_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_13); - } - __Pyx_XDECREF_SET(__pyx_v_epoch, __pyx_t_13); - __pyx_t_13 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":455 - * with trange(self.max_iter, disable=not self.verbose) as progress: - * for epoch in progress: - * correct, skipped, loss, bpr_loss = self._fit_mter( # <<<<<<<<<<<<<< - * rng_pos_uia, rng_pos_uao, rng_pos_iao, rng_pos_pair, rng_pos, rng_neg, - * n_threads, +static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { + PyObject *__pyx_v_struct = NULL; + char __pyx_v_c; + PyObject *__pyx_v_bytesvalue = 0; + Py_ssize_t __pyx_v_i; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + Py_ssize_t __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + char *__pyx_t_9; + char *__pyx_t_10; + char *__pyx_t_11; + char *__pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assign_item_from_object", 0); + + /* "View.MemoryView":508 + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + * import struct # <<<<<<<<<<<<<< + * cdef char c + * cdef bytes bytesvalue */ - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_fit_mter); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 455, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_ImportDottedModule(__pyx_n_s_struct, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 508, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_struct = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":457 - * correct, skipped, loss, bpr_loss = self._fit_mter( - * rng_pos_uia, rng_pos_uao, rng_pos_iao, rng_pos_pair, rng_pos, rng_neg, - * n_threads, # <<<<<<<<<<<<<< - * X, X_uids, X_iids, X_aids, - * YU, YU_uids, YU_aids, YU_oids, + /* "View.MemoryView":513 + * cdef Py_ssize_t i + * + * if isinstance(value, tuple): # <<<<<<<<<<<<<< + * bytesvalue = struct.pack(self.view.format, *value) + * else: */ - __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_n_threads); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 457, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_10); + __pyx_t_2 = PyTuple_Check(__pyx_v_value); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":462 - * YI, YI_iids, YI_aids, YI_oids, - * rating_dict, - * user_ids, rating_matrix.indices, neg_item_ids, rating_matrix.indptr, # <<<<<<<<<<<<<< - * p_user_indices, earlier_indices, later_indices, aspect_indices, pair_freq, - * self.G1, self.G2, self.G3, self.U, self.I, self.A, self.O, + /* "View.MemoryView":514 + * + * if isinstance(value, tuple): + * bytesvalue = struct.pack(self.view.format, *value) # <<<<<<<<<<<<<< + * else: + * bytesvalue = struct.pack(self.view.format, value) */ - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_rating_matrix, __pyx_n_s_indices); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 462, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_rating_matrix, __pyx_n_s_indptr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 462, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 514, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 514, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 514, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 514, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyNumber_Add(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 514, __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_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 514, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (!(likely(PyBytes_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_3))) __PYX_ERR(1, 514, __pyx_L1_error) + __pyx_v_bytesvalue = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":464 - * user_ids, rating_matrix.indices, neg_item_ids, rating_matrix.indptr, - * p_user_indices, earlier_indices, later_indices, aspect_indices, pair_freq, - * self.G1, self.G2, self.G3, self.U, self.I, self.A, self.O, # <<<<<<<<<<<<<< - * sgrad_G1, sgrad_G2, sgrad_G3, sgrad_U, sgrad_I, sgrad_A, sgrad_O, - * del_g1, del_g2, del_g3, del_u, del_i, del_a, del_o, + /* "View.MemoryView":513 + * cdef Py_ssize_t i + * + * if isinstance(value, tuple): # <<<<<<<<<<<<<< + * bytesvalue = struct.pack(self.view.format, *value) + * else: */ - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 464, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 464, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 464, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 464, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_I); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 464, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_A); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 464, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_15); - __pyx_t_26 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_O); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 464, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_26); + goto __pyx_L3; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":467 - * sgrad_G1, sgrad_G2, sgrad_G3, sgrad_U, sgrad_I, sgrad_A, sgrad_O, - * del_g1, del_g2, del_g3, del_u, del_i, del_a, del_o, - * del_g1_reg, del_g2_reg, del_g3_reg, del_u_reg, del_i_reg, del_a_reg, del_o_reg # <<<<<<<<<<<<<< - * ) + /* "View.MemoryView":516 + * bytesvalue = struct.pack(self.view.format, *value) + * else: + * bytesvalue = struct.pack(self.view.format, value) # <<<<<<<<<<<<<< * + * for i, c in enumerate(bytesvalue): */ - __pyx_t_27 = NULL; - __pyx_t_4 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_27 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_27)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_27); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - __pyx_t_4 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_11)) { - PyObject *__pyx_temp[58] = {__pyx_t_27, ((PyObject *)__pyx_v_rng_pos_uia), ((PyObject *)__pyx_v_rng_pos_uao), ((PyObject *)__pyx_v_rng_pos_iao), ((PyObject *)__pyx_v_rng_pos_pair), ((PyObject *)__pyx_v_rng_pos), ((PyObject *)__pyx_v_rng_neg), __pyx_t_10, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_iids, __pyx_v_X_aids, __pyx_v_YU, __pyx_v_YU_uids, __pyx_v_YU_aids, __pyx_v_YU_oids, __pyx_v_YI, __pyx_v_YI_iids, __pyx_v_YI_aids, __pyx_v_YI_oids, __pyx_v_rating_dict, __pyx_v_user_ids, __pyx_t_12, __pyx_v_neg_item_ids, __pyx_t_1, __pyx_v_p_user_indices, __pyx_v_earlier_indices, __pyx_v_later_indices, __pyx_v_aspect_indices, __pyx_v_pair_freq, __pyx_t_14, __pyx_t_8, __pyx_t_2, __pyx_t_5, __pyx_t_3, __pyx_t_15, __pyx_t_26, __pyx_v_sgrad_G1, __pyx_v_sgrad_G2, __pyx_v_sgrad_G3, __pyx_v_sgrad_U, __pyx_v_sgrad_I, __pyx_v_sgrad_A, __pyx_v_sgrad_O, __pyx_v_del_g1, __pyx_v_del_g2, __pyx_v_del_g3, __pyx_v_del_u, __pyx_v_del_i, __pyx_v_del_a, __pyx_v_del_o, __pyx_v_del_g1_reg, __pyx_v_del_g2_reg, __pyx_v_del_g3_reg, __pyx_v_del_u_reg, __pyx_v_del_i_reg, __pyx_v_del_a_reg, __pyx_v_del_o_reg}; - __pyx_t_13 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_4, 57+__pyx_t_4); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 455, __pyx_L22_error) - __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0; - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) { - PyObject *__pyx_temp[58] = {__pyx_t_27, ((PyObject *)__pyx_v_rng_pos_uia), ((PyObject *)__pyx_v_rng_pos_uao), ((PyObject *)__pyx_v_rng_pos_iao), ((PyObject *)__pyx_v_rng_pos_pair), ((PyObject *)__pyx_v_rng_pos), ((PyObject *)__pyx_v_rng_neg), __pyx_t_10, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_iids, __pyx_v_X_aids, __pyx_v_YU, __pyx_v_YU_uids, __pyx_v_YU_aids, __pyx_v_YU_oids, __pyx_v_YI, __pyx_v_YI_iids, __pyx_v_YI_aids, __pyx_v_YI_oids, __pyx_v_rating_dict, __pyx_v_user_ids, __pyx_t_12, __pyx_v_neg_item_ids, __pyx_t_1, __pyx_v_p_user_indices, __pyx_v_earlier_indices, __pyx_v_later_indices, __pyx_v_aspect_indices, __pyx_v_pair_freq, __pyx_t_14, __pyx_t_8, __pyx_t_2, __pyx_t_5, __pyx_t_3, __pyx_t_15, __pyx_t_26, __pyx_v_sgrad_G1, __pyx_v_sgrad_G2, __pyx_v_sgrad_G3, __pyx_v_sgrad_U, __pyx_v_sgrad_I, __pyx_v_sgrad_A, __pyx_v_sgrad_O, __pyx_v_del_g1, __pyx_v_del_g2, __pyx_v_del_g3, __pyx_v_del_u, __pyx_v_del_i, __pyx_v_del_a, __pyx_v_del_o, __pyx_v_del_g1_reg, __pyx_v_del_g2_reg, __pyx_v_del_g3_reg, __pyx_v_del_u_reg, __pyx_v_del_i_reg, __pyx_v_del_a_reg, __pyx_v_del_o_reg}; - __pyx_t_13 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_4, 57+__pyx_t_4); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 455, __pyx_L22_error) - __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0; - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0; - } else - #endif - { - __pyx_t_28 = PyTuple_New(57+__pyx_t_4); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 455, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_28); - if (__pyx_t_27) { - __Pyx_GIVEREF(__pyx_t_27); PyTuple_SET_ITEM(__pyx_t_28, 0, __pyx_t_27); __pyx_t_27 = NULL; - } - __Pyx_INCREF(((PyObject *)__pyx_v_rng_pos_uia)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_rng_pos_uia)); - PyTuple_SET_ITEM(__pyx_t_28, 0+__pyx_t_4, ((PyObject *)__pyx_v_rng_pos_uia)); - __Pyx_INCREF(((PyObject *)__pyx_v_rng_pos_uao)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_rng_pos_uao)); - PyTuple_SET_ITEM(__pyx_t_28, 1+__pyx_t_4, ((PyObject *)__pyx_v_rng_pos_uao)); - __Pyx_INCREF(((PyObject *)__pyx_v_rng_pos_iao)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_rng_pos_iao)); - PyTuple_SET_ITEM(__pyx_t_28, 2+__pyx_t_4, ((PyObject *)__pyx_v_rng_pos_iao)); - __Pyx_INCREF(((PyObject *)__pyx_v_rng_pos_pair)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_rng_pos_pair)); - PyTuple_SET_ITEM(__pyx_t_28, 3+__pyx_t_4, ((PyObject *)__pyx_v_rng_pos_pair)); - __Pyx_INCREF(((PyObject *)__pyx_v_rng_pos)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_rng_pos)); - PyTuple_SET_ITEM(__pyx_t_28, 4+__pyx_t_4, ((PyObject *)__pyx_v_rng_pos)); - __Pyx_INCREF(((PyObject *)__pyx_v_rng_neg)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_rng_neg)); - PyTuple_SET_ITEM(__pyx_t_28, 5+__pyx_t_4, ((PyObject *)__pyx_v_rng_neg)); - __Pyx_GIVEREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_28, 6+__pyx_t_4, __pyx_t_10); - __Pyx_INCREF(__pyx_v_X); - __Pyx_GIVEREF(__pyx_v_X); - PyTuple_SET_ITEM(__pyx_t_28, 7+__pyx_t_4, __pyx_v_X); - __Pyx_INCREF(__pyx_v_X_uids); - __Pyx_GIVEREF(__pyx_v_X_uids); - PyTuple_SET_ITEM(__pyx_t_28, 8+__pyx_t_4, __pyx_v_X_uids); - __Pyx_INCREF(__pyx_v_X_iids); - __Pyx_GIVEREF(__pyx_v_X_iids); - PyTuple_SET_ITEM(__pyx_t_28, 9+__pyx_t_4, __pyx_v_X_iids); - __Pyx_INCREF(__pyx_v_X_aids); - __Pyx_GIVEREF(__pyx_v_X_aids); - PyTuple_SET_ITEM(__pyx_t_28, 10+__pyx_t_4, __pyx_v_X_aids); - __Pyx_INCREF(__pyx_v_YU); - __Pyx_GIVEREF(__pyx_v_YU); - PyTuple_SET_ITEM(__pyx_t_28, 11+__pyx_t_4, __pyx_v_YU); - __Pyx_INCREF(__pyx_v_YU_uids); - __Pyx_GIVEREF(__pyx_v_YU_uids); - PyTuple_SET_ITEM(__pyx_t_28, 12+__pyx_t_4, __pyx_v_YU_uids); - __Pyx_INCREF(__pyx_v_YU_aids); - __Pyx_GIVEREF(__pyx_v_YU_aids); - PyTuple_SET_ITEM(__pyx_t_28, 13+__pyx_t_4, __pyx_v_YU_aids); - __Pyx_INCREF(__pyx_v_YU_oids); - __Pyx_GIVEREF(__pyx_v_YU_oids); - PyTuple_SET_ITEM(__pyx_t_28, 14+__pyx_t_4, __pyx_v_YU_oids); - __Pyx_INCREF(__pyx_v_YI); - __Pyx_GIVEREF(__pyx_v_YI); - PyTuple_SET_ITEM(__pyx_t_28, 15+__pyx_t_4, __pyx_v_YI); - __Pyx_INCREF(__pyx_v_YI_iids); - __Pyx_GIVEREF(__pyx_v_YI_iids); - PyTuple_SET_ITEM(__pyx_t_28, 16+__pyx_t_4, __pyx_v_YI_iids); - __Pyx_INCREF(__pyx_v_YI_aids); - __Pyx_GIVEREF(__pyx_v_YI_aids); - PyTuple_SET_ITEM(__pyx_t_28, 17+__pyx_t_4, __pyx_v_YI_aids); - __Pyx_INCREF(__pyx_v_YI_oids); - __Pyx_GIVEREF(__pyx_v_YI_oids); - PyTuple_SET_ITEM(__pyx_t_28, 18+__pyx_t_4, __pyx_v_YI_oids); - __Pyx_INCREF(__pyx_v_rating_dict); - __Pyx_GIVEREF(__pyx_v_rating_dict); - PyTuple_SET_ITEM(__pyx_t_28, 19+__pyx_t_4, __pyx_v_rating_dict); - __Pyx_INCREF(__pyx_v_user_ids); - __Pyx_GIVEREF(__pyx_v_user_ids); - PyTuple_SET_ITEM(__pyx_t_28, 20+__pyx_t_4, __pyx_v_user_ids); - __Pyx_GIVEREF(__pyx_t_12); - PyTuple_SET_ITEM(__pyx_t_28, 21+__pyx_t_4, __pyx_t_12); - __Pyx_INCREF(__pyx_v_neg_item_ids); - __Pyx_GIVEREF(__pyx_v_neg_item_ids); - PyTuple_SET_ITEM(__pyx_t_28, 22+__pyx_t_4, __pyx_v_neg_item_ids); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_28, 23+__pyx_t_4, __pyx_t_1); - __Pyx_INCREF(__pyx_v_p_user_indices); - __Pyx_GIVEREF(__pyx_v_p_user_indices); - PyTuple_SET_ITEM(__pyx_t_28, 24+__pyx_t_4, __pyx_v_p_user_indices); - __Pyx_INCREF(__pyx_v_earlier_indices); - __Pyx_GIVEREF(__pyx_v_earlier_indices); - PyTuple_SET_ITEM(__pyx_t_28, 25+__pyx_t_4, __pyx_v_earlier_indices); - __Pyx_INCREF(__pyx_v_later_indices); - __Pyx_GIVEREF(__pyx_v_later_indices); - PyTuple_SET_ITEM(__pyx_t_28, 26+__pyx_t_4, __pyx_v_later_indices); - __Pyx_INCREF(__pyx_v_aspect_indices); - __Pyx_GIVEREF(__pyx_v_aspect_indices); - PyTuple_SET_ITEM(__pyx_t_28, 27+__pyx_t_4, __pyx_v_aspect_indices); - __Pyx_INCREF(__pyx_v_pair_freq); - __Pyx_GIVEREF(__pyx_v_pair_freq); - PyTuple_SET_ITEM(__pyx_t_28, 28+__pyx_t_4, __pyx_v_pair_freq); - __Pyx_GIVEREF(__pyx_t_14); - PyTuple_SET_ITEM(__pyx_t_28, 29+__pyx_t_4, __pyx_t_14); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_28, 30+__pyx_t_4, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_28, 31+__pyx_t_4, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_28, 32+__pyx_t_4, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_28, 33+__pyx_t_4, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_15); - PyTuple_SET_ITEM(__pyx_t_28, 34+__pyx_t_4, __pyx_t_15); - __Pyx_GIVEREF(__pyx_t_26); - PyTuple_SET_ITEM(__pyx_t_28, 35+__pyx_t_4, __pyx_t_26); - __Pyx_INCREF(__pyx_v_sgrad_G1); - __Pyx_GIVEREF(__pyx_v_sgrad_G1); - PyTuple_SET_ITEM(__pyx_t_28, 36+__pyx_t_4, __pyx_v_sgrad_G1); - __Pyx_INCREF(__pyx_v_sgrad_G2); - __Pyx_GIVEREF(__pyx_v_sgrad_G2); - PyTuple_SET_ITEM(__pyx_t_28, 37+__pyx_t_4, __pyx_v_sgrad_G2); - __Pyx_INCREF(__pyx_v_sgrad_G3); - __Pyx_GIVEREF(__pyx_v_sgrad_G3); - PyTuple_SET_ITEM(__pyx_t_28, 38+__pyx_t_4, __pyx_v_sgrad_G3); - __Pyx_INCREF(__pyx_v_sgrad_U); - __Pyx_GIVEREF(__pyx_v_sgrad_U); - PyTuple_SET_ITEM(__pyx_t_28, 39+__pyx_t_4, __pyx_v_sgrad_U); - __Pyx_INCREF(__pyx_v_sgrad_I); - __Pyx_GIVEREF(__pyx_v_sgrad_I); - PyTuple_SET_ITEM(__pyx_t_28, 40+__pyx_t_4, __pyx_v_sgrad_I); - __Pyx_INCREF(__pyx_v_sgrad_A); - __Pyx_GIVEREF(__pyx_v_sgrad_A); - PyTuple_SET_ITEM(__pyx_t_28, 41+__pyx_t_4, __pyx_v_sgrad_A); - __Pyx_INCREF(__pyx_v_sgrad_O); - __Pyx_GIVEREF(__pyx_v_sgrad_O); - PyTuple_SET_ITEM(__pyx_t_28, 42+__pyx_t_4, __pyx_v_sgrad_O); - __Pyx_INCREF(__pyx_v_del_g1); - __Pyx_GIVEREF(__pyx_v_del_g1); - PyTuple_SET_ITEM(__pyx_t_28, 43+__pyx_t_4, __pyx_v_del_g1); - __Pyx_INCREF(__pyx_v_del_g2); - __Pyx_GIVEREF(__pyx_v_del_g2); - PyTuple_SET_ITEM(__pyx_t_28, 44+__pyx_t_4, __pyx_v_del_g2); - __Pyx_INCREF(__pyx_v_del_g3); - __Pyx_GIVEREF(__pyx_v_del_g3); - PyTuple_SET_ITEM(__pyx_t_28, 45+__pyx_t_4, __pyx_v_del_g3); - __Pyx_INCREF(__pyx_v_del_u); - __Pyx_GIVEREF(__pyx_v_del_u); - PyTuple_SET_ITEM(__pyx_t_28, 46+__pyx_t_4, __pyx_v_del_u); - __Pyx_INCREF(__pyx_v_del_i); - __Pyx_GIVEREF(__pyx_v_del_i); - PyTuple_SET_ITEM(__pyx_t_28, 47+__pyx_t_4, __pyx_v_del_i); - __Pyx_INCREF(__pyx_v_del_a); - __Pyx_GIVEREF(__pyx_v_del_a); - PyTuple_SET_ITEM(__pyx_t_28, 48+__pyx_t_4, __pyx_v_del_a); - __Pyx_INCREF(__pyx_v_del_o); - __Pyx_GIVEREF(__pyx_v_del_o); - PyTuple_SET_ITEM(__pyx_t_28, 49+__pyx_t_4, __pyx_v_del_o); - __Pyx_INCREF(__pyx_v_del_g1_reg); - __Pyx_GIVEREF(__pyx_v_del_g1_reg); - PyTuple_SET_ITEM(__pyx_t_28, 50+__pyx_t_4, __pyx_v_del_g1_reg); - __Pyx_INCREF(__pyx_v_del_g2_reg); - __Pyx_GIVEREF(__pyx_v_del_g2_reg); - PyTuple_SET_ITEM(__pyx_t_28, 51+__pyx_t_4, __pyx_v_del_g2_reg); - __Pyx_INCREF(__pyx_v_del_g3_reg); - __Pyx_GIVEREF(__pyx_v_del_g3_reg); - PyTuple_SET_ITEM(__pyx_t_28, 52+__pyx_t_4, __pyx_v_del_g3_reg); - __Pyx_INCREF(__pyx_v_del_u_reg); - __Pyx_GIVEREF(__pyx_v_del_u_reg); - PyTuple_SET_ITEM(__pyx_t_28, 53+__pyx_t_4, __pyx_v_del_u_reg); - __Pyx_INCREF(__pyx_v_del_i_reg); - __Pyx_GIVEREF(__pyx_v_del_i_reg); - PyTuple_SET_ITEM(__pyx_t_28, 54+__pyx_t_4, __pyx_v_del_i_reg); - __Pyx_INCREF(__pyx_v_del_a_reg); - __Pyx_GIVEREF(__pyx_v_del_a_reg); - PyTuple_SET_ITEM(__pyx_t_28, 55+__pyx_t_4, __pyx_v_del_a_reg); - __Pyx_INCREF(__pyx_v_del_o_reg); - __Pyx_GIVEREF(__pyx_v_del_o_reg); - PyTuple_SET_ITEM(__pyx_t_28, 56+__pyx_t_4, __pyx_v_del_o_reg); - __pyx_t_10 = 0; - __pyx_t_12 = 0; - __pyx_t_1 = 0; - __pyx_t_14 = 0; - __pyx_t_8 = 0; - __pyx_t_2 = 0; - __pyx_t_5 = 0; - __pyx_t_3 = 0; - __pyx_t_15 = 0; - __pyx_t_26 = 0; - __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_28, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 455, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0; - } - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if ((likely(PyTuple_CheckExact(__pyx_t_13))) || (PyList_CheckExact(__pyx_t_13))) { - PyObject* sequence = __pyx_t_13; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 4)) { - if (size > 4) __Pyx_RaiseTooManyValuesError(4); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 455, __pyx_L22_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_11 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_28 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_26 = PyTuple_GET_ITEM(sequence, 2); - __pyx_t_15 = PyTuple_GET_ITEM(sequence, 3); - } else { - __pyx_t_11 = PyList_GET_ITEM(sequence, 0); - __pyx_t_28 = PyList_GET_ITEM(sequence, 1); - __pyx_t_26 = PyList_GET_ITEM(sequence, 2); - __pyx_t_15 = PyList_GET_ITEM(sequence, 3); - } - __Pyx_INCREF(__pyx_t_11); - __Pyx_INCREF(__pyx_t_28); - __Pyx_INCREF(__pyx_t_26); - __Pyx_INCREF(__pyx_t_15); - #else - { - Py_ssize_t i; - PyObject** temps[4] = {&__pyx_t_11,&__pyx_t_28,&__pyx_t_26,&__pyx_t_15}; - for (i=0; i < 4; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 455, __pyx_L22_error) - __Pyx_GOTREF(item); - *(temps[i]) = item; - } - } - #endif - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - } else { - Py_ssize_t index = -1; - PyObject** temps[4] = {&__pyx_t_11,&__pyx_t_28,&__pyx_t_26,&__pyx_t_15}; - __pyx_t_3 = PyObject_GetIter(__pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 455, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_16 = Py_TYPE(__pyx_t_3)->tp_iternext; - for (index=0; index < 4; index++) { - PyObject* item = __pyx_t_16(__pyx_t_3); if (unlikely(!item)) goto __pyx_L30_unpacking_failed; - __Pyx_GOTREF(item); - *(temps[index]) = item; - } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_3), 4) < 0) __PYX_ERR(0, 455, __pyx_L22_error) - __pyx_t_16 = NULL; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L31_unpacking_done; - __pyx_L30_unpacking_failed:; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_16 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 455, __pyx_L22_error) - __pyx_L31_unpacking_done:; - } + /*else*/ { + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_6 = 1; + } + } + { + PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_1, __pyx_v_value}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (!(likely(PyBytes_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_3))) __PYX_ERR(1, 516, __pyx_L1_error) + __pyx_v_bytesvalue = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + } + __pyx_L3:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":455 - * with trange(self.max_iter, disable=not self.verbose) as progress: - * for epoch in progress: - * correct, skipped, loss, bpr_loss = self._fit_mter( # <<<<<<<<<<<<<< - * rng_pos_uia, rng_pos_uao, rng_pos_iao, rng_pos_pair, rng_pos, rng_neg, - * n_threads, + /* "View.MemoryView":518 + * bytesvalue = struct.pack(self.view.format, value) + * + * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< + * itemp[i] = c + * */ - __Pyx_XDECREF_SET(__pyx_v_correct, __pyx_t_11); - __pyx_t_11 = 0; - __Pyx_XDECREF_SET(__pyx_v_skipped, __pyx_t_28); - __pyx_t_28 = 0; - __Pyx_XDECREF_SET(__pyx_v_loss, __pyx_t_26); - __pyx_t_26 = 0; - __Pyx_XDECREF_SET(__pyx_v_bpr_loss, __pyx_t_15); - __pyx_t_15 = 0; + __pyx_t_7 = 0; + if (unlikely(__pyx_v_bytesvalue == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable"); + __PYX_ERR(1, 518, __pyx_L1_error) + } + __Pyx_INCREF(__pyx_v_bytesvalue); + __pyx_t_8 = __pyx_v_bytesvalue; + __pyx_t_10 = PyBytes_AS_STRING(__pyx_t_8); + __pyx_t_11 = (__pyx_t_10 + PyBytes_GET_SIZE(__pyx_t_8)); + for (__pyx_t_12 = __pyx_t_10; __pyx_t_12 < __pyx_t_11; __pyx_t_12++) { + __pyx_t_9 = __pyx_t_12; + __pyx_v_c = (__pyx_t_9[0]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":470 - * ) + /* "View.MemoryView":519 * - * progress.set_postfix({ # <<<<<<<<<<<<<< - * "loss": "%.2f" % (loss / 3 / self.n_element_samples), - * "bpr_loss": "%.2f" % (bpr_loss / self.n_bpr_samples), + * for i, c in enumerate(bytesvalue): + * itemp[i] = c # <<<<<<<<<<<<<< + * + * @cname('getbuffer') */ - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_progress, __pyx_n_s_set_postfix); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 470, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_15); + __pyx_v_i = __pyx_t_7; - /* "cornac/models/comparer/recom_comparer_sub.pyx":471 + /* "View.MemoryView":518 + * bytesvalue = struct.pack(self.view.format, value) + * + * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< + * itemp[i] = c * - * progress.set_postfix({ - * "loss": "%.2f" % (loss / 3 / self.n_element_samples), # <<<<<<<<<<<<<< - * "bpr_loss": "%.2f" % (bpr_loss / self.n_bpr_samples), - * "correct": "%.2f%%" % (100.0 * correct / (self.n_bpr_samples - skipped)), */ - __pyx_t_26 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 471, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_26); - __pyx_t_28 = __Pyx_PyInt_TrueDivideObjC(__pyx_v_loss, __pyx_int_3, 3, 0, 0); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 471, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_28); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_element_samples); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 471, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_28, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 471, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_2f_2, __pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 471, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyDict_SetItem(__pyx_t_26, __pyx_n_u_loss, __pyx_t_11) < 0) __PYX_ERR(0, 471, __pyx_L22_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":472 - * progress.set_postfix({ - * "loss": "%.2f" % (loss / 3 / self.n_element_samples), - * "bpr_loss": "%.2f" % (bpr_loss / self.n_bpr_samples), # <<<<<<<<<<<<<< - * "correct": "%.2f%%" % (100.0 * correct / (self.n_bpr_samples - skipped)), - * "skipped": "%.2f%%" % (100.0 * skipped / self.n_bpr_samples) - */ - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 472, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_v_bpr_loss, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 472, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_2f_2, __pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 472, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyDict_SetItem(__pyx_t_26, __pyx_n_u_bpr_loss, __pyx_t_11) < 0) __PYX_ERR(0, 471, __pyx_L22_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":473 - * "loss": "%.2f" % (loss / 3 / self.n_element_samples), - * "bpr_loss": "%.2f" % (bpr_loss / self.n_bpr_samples), - * "correct": "%.2f%%" % (100.0 * correct / (self.n_bpr_samples - skipped)), # <<<<<<<<<<<<<< - * "skipped": "%.2f%%" % (100.0 * skipped / self.n_bpr_samples) - * }) - */ - __pyx_t_11 = PyNumber_Multiply(__pyx_float_100_0, __pyx_v_correct); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 473, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 473, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_28 = PyNumber_Subtract(__pyx_t_3, __pyx_v_skipped); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 473, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_28); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_11, __pyx_t_28); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 473, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0; - __pyx_t_28 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_2f_3, __pyx_t_3); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 473, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_28); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyDict_SetItem(__pyx_t_26, __pyx_n_u_correct, __pyx_t_28) < 0) __PYX_ERR(0, 471, __pyx_L22_error) - __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":474 - * "bpr_loss": "%.2f" % (bpr_loss / self.n_bpr_samples), - * "correct": "%.2f%%" % (100.0 * correct / (self.n_bpr_samples - skipped)), - * "skipped": "%.2f%%" % (100.0 * skipped / self.n_bpr_samples) # <<<<<<<<<<<<<< - * }) - * - */ - __pyx_t_28 = PyNumber_Multiply(__pyx_float_100_0, __pyx_v_skipped); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 474, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_28); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 474, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_11 = __Pyx_PyNumber_Divide(__pyx_t_28, __pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 474, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_2f_3, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 474, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (PyDict_SetItem(__pyx_t_26, __pyx_n_u_skipped, __pyx_t_3) < 0) __PYX_ERR(0, 471, __pyx_L22_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_15); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_15, function); - } - } - __pyx_t_13 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_15, __pyx_t_3, __pyx_t_26) : __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_t_26); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0; - if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 470, __pyx_L22_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":454 - * - * with trange(self.max_iter, disable=not self.verbose) as progress: - * for epoch in progress: # <<<<<<<<<<<<<< - * correct, skipped, loss, bpr_loss = self._fit_mter( - * rng_pos_uia, rng_pos_uao, rng_pos_iao, rng_pos_pair, rng_pos, rng_neg, - */ - } - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":453 - * del_o_reg = np.zeros_like(self.O).astype(np.float32) - * - * with trange(self.max_iter, disable=not self.verbose) as progress: # <<<<<<<<<<<<<< - * for epoch in progress: - * correct, skipped, loss, bpr_loss = self._fit_mter( - */ - } - __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; - __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0; - __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0; - goto __pyx_L27_try_end; - __pyx_L22_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0; - __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0; - __Pyx_XDECREF(__pyx_t_28); __pyx_t_28 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - /*except:*/ { - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_13, &__pyx_t_15) < 0) __PYX_ERR(0, 453, __pyx_L24_except_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_13); - __Pyx_GOTREF(__pyx_t_15); - __pyx_t_26 = PyTuple_Pack(3, __pyx_t_9, __pyx_t_13, __pyx_t_15); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 453, __pyx_L24_except_error) - __Pyx_GOTREF(__pyx_t_26); - __pyx_t_29 = __Pyx_PyObject_Call(__pyx_t_21, __pyx_t_26, NULL); - __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; - __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0; - if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 453, __pyx_L24_except_error) - __Pyx_GOTREF(__pyx_t_29); - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_29); - __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0; - if (__pyx_t_7 < 0) __PYX_ERR(0, 453, __pyx_L24_except_error) - __pyx_t_6 = ((!(__pyx_t_7 != 0)) != 0); - if (__pyx_t_6) { - __Pyx_GIVEREF(__pyx_t_9); - __Pyx_GIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_ErrRestoreWithState(__pyx_t_9, __pyx_t_13, __pyx_t_15); - __pyx_t_9 = 0; __pyx_t_13 = 0; __pyx_t_15 = 0; - __PYX_ERR(0, 453, __pyx_L24_except_error) - } - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - goto __pyx_L23_exception_handled; - } - __pyx_L24_except_error:; - __Pyx_XGIVEREF(__pyx_t_22); - __Pyx_XGIVEREF(__pyx_t_23); - __Pyx_XGIVEREF(__pyx_t_24); - __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24); - goto __pyx_L1_error; - __pyx_L23_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_22); - __Pyx_XGIVEREF(__pyx_t_23); - __Pyx_XGIVEREF(__pyx_t_24); - __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24); - __pyx_L27_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_21) { - __pyx_t_24 = __Pyx_PyObject_Call(__pyx_t_21, __pyx_tuple__4, NULL); - __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; - if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 453, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_24); - __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0; - } - goto __pyx_L21; - } - __pyx_L21:; - } - goto __pyx_L35; - __pyx_L18_error:; - __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; - goto __pyx_L1_error; - __pyx_L35:; - } - - /* "cornac/models/comparer/recom_comparer_sub.pyx":477 - * }) - * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Optimization finished!') - * - */ - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 477, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 477, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - if (__pyx_t_6) { + __pyx_t_7 = (__pyx_t_7 + 1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":478 - * - * if self.verbose: - * print('Optimization finished!') # <<<<<<<<<<<<<< - * - * return self - */ - __pyx_t_15 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 478, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":477 - * }) + /* "View.MemoryView":519 * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Optimization finished!') + * for i, c in enumerate(bytesvalue): + * itemp[i] = c # <<<<<<<<<<<<<< * + * @cname('getbuffer') */ + (__pyx_v_itemp[__pyx_v_i]) = __pyx_v_c; } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":480 - * print('Optimization finished!') - * - * return self # <<<<<<<<<<<<<< - * - * @cython.cdivision(True) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self); - __pyx_r = __pyx_v_self; - goto __pyx_L0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":352 - * - * - * def fit(self, train_set, val_set=None): # <<<<<<<<<<<<<< - * """Fit the model to observations. + /* "View.MemoryView":505 + * return result * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" */ /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_XDECREF(__pyx_t_13); - __Pyx_XDECREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_15); - __Pyx_XDECREF(__pyx_t_26); - __Pyx_XDECREF(__pyx_t_27); - __Pyx_XDECREF(__pyx_t_28); - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; + __Pyx_AddTraceback("View.MemoryView.memoryview.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_rating_matrix); - __Pyx_XDECREF(__pyx_v_rating_dict); - __Pyx_XDECREF(__pyx_v_user_item_aspect); - __Pyx_XDECREF(__pyx_v_user_aspect_opinion); - __Pyx_XDECREF(__pyx_v_item_aspect_opinion); - __Pyx_XDECREF(__pyx_v_p_user_indices); - __Pyx_XDECREF(__pyx_v_earlier_indices); - __Pyx_XDECREF(__pyx_v_later_indices); - __Pyx_XDECREF(__pyx_v_aspect_indices); - __Pyx_XDECREF(__pyx_v_pair_freq); - __Pyx_XDECREF(__pyx_v_X); - __Pyx_XDECREF(__pyx_v_X_uids); - __Pyx_XDECREF(__pyx_v_X_iids); - __Pyx_XDECREF(__pyx_v_X_aids); - __Pyx_XDECREF(__pyx_v_YU); - __Pyx_XDECREF(__pyx_v_YU_uids); - __Pyx_XDECREF(__pyx_v_YU_aids); - __Pyx_XDECREF(__pyx_v_YU_oids); - __Pyx_XDECREF(__pyx_v_YI); - __Pyx_XDECREF(__pyx_v_YI_iids); - __Pyx_XDECREF(__pyx_v_YI_aids); - __Pyx_XDECREF(__pyx_v_YI_oids); - __Pyx_XDECREF(__pyx_v_uid); - __Pyx_XDECREF(__pyx_v_iid); - __Pyx_XDECREF(__pyx_v_aid); - __Pyx_XDECREF(__pyx_v_score); - __Pyx_XDECREF(__pyx_v_oid); - __Pyx_XDECREF(__pyx_v_user_counts); - __Pyx_XDECREF(__pyx_v_user_ids); - __Pyx_XDECREF(__pyx_v_neg_item_ids); - __Pyx_XDECREF((PyObject *)__pyx_v_rng_pos_uia); - __Pyx_XDECREF((PyObject *)__pyx_v_rng_pos_uao); - __Pyx_XDECREF((PyObject *)__pyx_v_rng_pos_iao); - __Pyx_XDECREF((PyObject *)__pyx_v_rng_pos_pair); - __Pyx_XDECREF((PyObject *)__pyx_v_rng_pos); - __Pyx_XDECREF((PyObject *)__pyx_v_rng_neg); - __Pyx_XDECREF(__pyx_v_sgrad_G1); - __Pyx_XDECREF(__pyx_v_sgrad_G2); - __Pyx_XDECREF(__pyx_v_sgrad_G3); - __Pyx_XDECREF(__pyx_v_sgrad_U); - __Pyx_XDECREF(__pyx_v_sgrad_I); - __Pyx_XDECREF(__pyx_v_sgrad_A); - __Pyx_XDECREF(__pyx_v_sgrad_O); - __Pyx_XDECREF(__pyx_v_del_g1); - __Pyx_XDECREF(__pyx_v_del_g2); - __Pyx_XDECREF(__pyx_v_del_g3); - __Pyx_XDECREF(__pyx_v_del_u); - __Pyx_XDECREF(__pyx_v_del_i); - __Pyx_XDECREF(__pyx_v_del_a); - __Pyx_XDECREF(__pyx_v_del_o); - __Pyx_XDECREF(__pyx_v_del_g1_reg); - __Pyx_XDECREF(__pyx_v_del_g2_reg); - __Pyx_XDECREF(__pyx_v_del_g3_reg); - __Pyx_XDECREF(__pyx_v_del_u_reg); - __Pyx_XDECREF(__pyx_v_del_i_reg); - __Pyx_XDECREF(__pyx_v_del_a_reg); - __Pyx_XDECREF(__pyx_v_del_o_reg); - __Pyx_XDECREF(__pyx_v_progress); - __Pyx_XDECREF(__pyx_v_epoch); - __Pyx_XDECREF(__pyx_v_correct); - __Pyx_XDECREF(__pyx_v_skipped); - __Pyx_XDECREF(__pyx_v_loss); - __Pyx_XDECREF(__pyx_v_bpr_loss); + __Pyx_XDECREF(__pyx_v_struct); + __Pyx_XDECREF(__pyx_v_bytesvalue); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "cornac/models/comparer/recom_comparer_sub.pyx":485 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def _fit_mter( # <<<<<<<<<<<<<< - * self, - * RNGVector rng_pos_uia, +/* "View.MemoryView":521 + * itemp[i] = c + * + * @cname('getbuffer') # <<<<<<<<<<<<<< + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: */ /* Python wrapper */ -static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_11_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter[] = "Fit the model parameters (G1, G2, G3, U, I, A, O)\n "; -static PyMethodDef __pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_11_fit_mter = {"_fit_mter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_11_fit_mter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter}; -static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_11_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_signatures = 0; - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; - CYTHON_UNUSED PyObject *__pyx_v_defaults = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; +CYTHON_UNUSED static int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +CYTHON_UNUSED static int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0}; - PyObject* values[4] = {0,0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signatures)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 1); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 2); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 3); __PYX_ERR(0, 485, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 485, __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_signatures = values[0]; - __pyx_v_args = values[1]; - __pyx_v_kwargs = values[2]; - __pyx_v_defaults = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 485, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults); + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) { - PyObject *__pyx_v_dest_sig = NULL; - Py_ssize_t __pyx_v_i; - PyTypeObject *__pyx_v_ndarray = 0; - __Pyx_memviewslice __pyx_v_memslice; - Py_ssize_t __pyx_v_itemsize; - int __pyx_v_dtype_signed; - char __pyx_v_kind; - int __pyx_v_short_is_signed; - int __pyx_v_int_is_signed; - int __pyx_v_long_is_signed; - PyObject *__pyx_v_arg = NULL; - PyObject *__pyx_v_dtype = NULL; - PyObject *__pyx_v_arg_base = NULL; - PyObject *__pyx_v_candidates = NULL; - PyObject *__pyx_v_sig = NULL; - int __pyx_v_match_found; - PyObject *__pyx_v_src_sig = NULL; - PyObject *__pyx_v_dst_type = NULL; - PyObject *__pyx_r = NULL; +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; + int __pyx_t_1; int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - Py_ssize_t __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - long __pyx_t_7; - __Pyx_memviewslice __pyx_t_8; - Py_ssize_t __pyx_t_9; - int __pyx_t_10; - int __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - Py_ssize_t __pyx_t_15; - Py_ssize_t __pyx_t_16; - Py_ssize_t __pyx_t_17; - int __pyx_t_18; + Py_ssize_t *__pyx_t_3; + char *__pyx_t_4; + void *__pyx_t_5; + int __pyx_t_6; + Py_ssize_t __pyx_t_7; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_fit_mter", 0); - __Pyx_INCREF(__pyx_v_kwargs); - __pyx_t_1 = PyList_New(1 * 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - { Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < 2; __pyx_temp++) { - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyList_SET_ITEM(__pyx_t_1, __pyx_temp, Py_None); - } + if (unlikely(__pyx_v_info == NULL)) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; } - __pyx_v_dest_sig = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_v_kwargs != Py_None); - __pyx_t_4 = (__pyx_t_3 != 0); - if (__pyx_t_4) { + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + + /* "View.MemoryView":523 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< + * raise ValueError, "Cannot create writable memory view from read-only memoryview" + * + */ + __pyx_t_2 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0); + if (__pyx_t_2) { } else { - __pyx_t_2 = __pyx_t_4; + __pyx_t_1 = __pyx_t_2; goto __pyx_L4_bool_binop_done; } - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 485, __pyx_L1_error) - __pyx_t_3 = ((!__pyx_t_4) != 0); - __pyx_t_2 = __pyx_t_3; + __pyx_t_1 = __pyx_v_self->view.readonly; __pyx_L4_bool_binop_done:; - if (__pyx_t_2) { - __Pyx_INCREF(Py_None); - __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None); - } - __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1); - __pyx_t_1 = 0; - __pyx_v_itemsize = -1L; - __pyx_v_short_is_signed = (!((((short)-1L) > 0) != 0)); - __pyx_v_int_is_signed = (!((((int)-1L) > 0) != 0)); - __pyx_v_long_is_signed = (!((((long)-1L) > 0) != 0)); - if (unlikely(__pyx_v_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 485, __pyx_L1_error) - __pyx_t_2 = ((8 < __pyx_t_5) != 0); - if (__pyx_t_2) { - if (unlikely(__pyx_v_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 8); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_arg = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L6; - } - __pyx_t_3 = (__pyx_v_kwargs != Py_None); - __pyx_t_4 = (__pyx_t_3 != 0); - if (__pyx_t_4) { - } else { - __pyx_t_2 = __pyx_t_4; - goto __pyx_L7_bool_binop_done; - } - if (unlikely(__pyx_v_kwargs == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 485, __pyx_L1_error) + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":524 + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError, "Cannot create writable memory view from read-only memoryview" # <<<<<<<<<<<<<< + * + * if flags & PyBUF_ND: + */ + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Cannot_create_writable_memory_vi, 0, 0); + __PYX_ERR(1, 524, __pyx_L1_error) + + /* "View.MemoryView":523 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< + * raise ValueError, "Cannot create writable memory view from read-only memoryview" + * + */ } - __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_X, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 485, __pyx_L1_error) - __pyx_t_3 = (__pyx_t_4 != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L7_bool_binop_done:; - if (__pyx_t_2) { - if (unlikely(__pyx_v_kwargs == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_X); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_arg = __pyx_t_1; - __pyx_t_1 = 0; + + /* "View.MemoryView":526 + * raise ValueError, "Cannot create writable memory view from read-only memoryview" + * + * if flags & PyBUF_ND: # <<<<<<<<<<<<<< + * info.shape = self.view.shape + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_ND) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":527 + * + * if flags & PyBUF_ND: + * info.shape = self.view.shape # <<<<<<<<<<<<<< + * else: + * info.shape = NULL + */ + __pyx_t_3 = __pyx_v_self->view.shape; + __pyx_v_info->shape = __pyx_t_3; + + /* "View.MemoryView":526 + * raise ValueError, "Cannot create writable memory view from read-only memoryview" + * + * if flags & PyBUF_ND: # <<<<<<<<<<<<<< + * info.shape = self.view.shape + * else: + */ goto __pyx_L6; } + + /* "View.MemoryView":529 + * info.shape = self.view.shape + * else: + * info.shape = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_STRIDES: + */ /*else*/ { - if (unlikely(__pyx_v_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 485, __pyx_L1_error) - __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_int_58); - __Pyx_GIVEREF(__pyx_int_58); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_58); - __Pyx_INCREF(__pyx_n_s_s); - __Pyx_GIVEREF(__pyx_n_s_s); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_Raise(__pyx_t_6, 0, 0, 0); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __PYX_ERR(0, 485, __pyx_L1_error) + __pyx_v_info->shape = NULL; } __pyx_L6:; - while (1) { - __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None)); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); - __pyx_t_2 = (__pyx_t_3 != 0); - if (__pyx_t_2) { - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_dtype = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L12; - } - __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_arg_base = __pyx_t_6; - __pyx_t_6 = 0; - __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); - __pyx_t_2 = (__pyx_t_3 != 0); - if (__pyx_t_2) { - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_dtype = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L13; - } - /*else*/ { - __Pyx_INCREF(Py_None); - __pyx_v_dtype = Py_None; - } - __pyx_L13:; - goto __pyx_L12; - } - /*else*/ { - __Pyx_INCREF(Py_None); - __pyx_v_dtype = Py_None; - } - __pyx_L12:; - __pyx_v_itemsize = -1L; - __pyx_t_2 = (__pyx_v_dtype != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_itemsize = __pyx_t_5; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_kind = __pyx_t_7; - __pyx_v_dtype_signed = (__pyx_v_kind == 'i'); - switch (__pyx_v_kind) { - case 'i': - case 'u': - break; - case 'f': - __pyx_t_2 = (((sizeof(float)) == __pyx_v_itemsize) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L16_bool_binop_done; - } - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 1) != 0); - __pyx_t_3 = __pyx_t_2; - __pyx_L16_bool_binop_done:; - if (__pyx_t_3) { - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 485, __pyx_L1_error) - goto __pyx_L10_break; - } - __pyx_t_2 = (((sizeof(double)) == __pyx_v_itemsize) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L19_bool_binop_done; - } - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 1) != 0); - __pyx_t_3 = __pyx_t_2; - __pyx_L19_bool_binop_done:; - if (__pyx_t_3) { - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 485, __pyx_L1_error) - goto __pyx_L10_break; - } - break; - case 'c': - break; - case 'O': - break; - default: break; - } - } - } - __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0); - if (!__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L22_bool_binop_done; - } - __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(float))) != 0); - __pyx_t_3 = __pyx_t_2; - __pyx_L22_bool_binop_done:; - if (__pyx_t_3) { - __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_v_arg, 0); - __pyx_v_memslice = __pyx_t_8; - __pyx_t_3 = (__pyx_v_memslice.memview != 0); - if (__pyx_t_3) { - __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 485, __pyx_L1_error) - goto __pyx_L10_break; - } - /*else*/ { - PyErr_Clear(); - } - } - __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0); - if (!__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L26_bool_binop_done; - } - __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(double))) != 0); - __pyx_t_3 = __pyx_t_2; - __pyx_L26_bool_binop_done:; - if (__pyx_t_3) { - __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_arg, 0); - __pyx_v_memslice = __pyx_t_8; - __pyx_t_3 = (__pyx_v_memslice.memview != 0); - if (__pyx_t_3) { - __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 485, __pyx_L1_error) - goto __pyx_L10_break; - } - /*else*/ { - PyErr_Clear(); - } - } - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 485, __pyx_L1_error) - goto __pyx_L10_break; - } - __pyx_L10_break:; - if (unlikely(__pyx_v_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 485, __pyx_L1_error) - __pyx_t_3 = ((9 < __pyx_t_5) != 0); - if (__pyx_t_3) { - if (unlikely(__pyx_v_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_t_6 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 9); - __Pyx_INCREF(__pyx_t_6); - __Pyx_DECREF_SET(__pyx_v_arg, __pyx_t_6); - __pyx_t_6 = 0; - goto __pyx_L29; - } - __pyx_t_2 = (__pyx_v_kwargs != Py_None); - __pyx_t_4 = (__pyx_t_2 != 0); - if (__pyx_t_4) { - } else { - __pyx_t_3 = __pyx_t_4; - goto __pyx_L30_bool_binop_done; - } - if (unlikely(__pyx_v_kwargs == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_X_uids, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 485, __pyx_L1_error) - __pyx_t_2 = (__pyx_t_4 != 0); - __pyx_t_3 = __pyx_t_2; - __pyx_L30_bool_binop_done:; - if (__pyx_t_3) { - if (unlikely(__pyx_v_kwargs == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_X_uids); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF_SET(__pyx_v_arg, __pyx_t_6); - __pyx_t_6 = 0; - goto __pyx_L29; + + /* "View.MemoryView":531 + * info.shape = NULL + * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.strides = self.view.strides + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":532 + * + * if flags & PyBUF_STRIDES: + * info.strides = self.view.strides # <<<<<<<<<<<<<< + * else: + * info.strides = NULL + */ + __pyx_t_3 = __pyx_v_self->view.strides; + __pyx_v_info->strides = __pyx_t_3; + + /* "View.MemoryView":531 + * info.shape = NULL + * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.strides = self.view.strides + * else: + */ + goto __pyx_L7; } + + /* "View.MemoryView":534 + * info.strides = self.view.strides + * else: + * info.strides = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_INDIRECT: + */ /*else*/ { - if (unlikely(__pyx_v_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 485, __pyx_L1_error) - __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_int_58); - __Pyx_GIVEREF(__pyx_int_58); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_58); - __Pyx_INCREF(__pyx_n_s_s); - __Pyx_GIVEREF(__pyx_n_s_s); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_s); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_6); - __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_L29:; - while (1) { - __pyx_t_3 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None)); - __pyx_t_2 = (__pyx_t_3 != 0); - if (__pyx_t_2) { - __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_1); - __pyx_t_1 = 0; - goto __pyx_L35; - } - __pyx_t_3 = __pyx_memoryview_check(__pyx_v_arg); - __pyx_t_2 = (__pyx_t_3 != 0); - if (__pyx_t_2) { - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XDECREF_SET(__pyx_v_arg_base, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_1); - __pyx_t_1 = 0; - goto __pyx_L36; - } - /*else*/ { - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_dtype, Py_None); - } - __pyx_L36:; - goto __pyx_L35; - } - /*else*/ { - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_dtype, Py_None); - } - __pyx_L35:; - __pyx_v_itemsize = -1L; - __pyx_t_3 = (__pyx_v_dtype != Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); - if (__pyx_t_2) { - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_itemsize = __pyx_t_5; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_1); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_kind = __pyx_t_7; - __pyx_v_dtype_signed = (__pyx_v_kind == 'i'); - switch (__pyx_v_kind) { - case 'i': - case 'u': - __pyx_t_3 = (((sizeof(short)) == __pyx_v_itemsize) != 0); - if (__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L39_bool_binop_done; - } - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = ((((Py_ssize_t)__pyx_t_5) == 1) != 0); - if (__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L39_bool_binop_done; - } - __pyx_t_3 = ((!((__pyx_v_short_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L39_bool_binop_done:; - if (__pyx_t_2) { - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 485, __pyx_L1_error) - goto __pyx_L33_break; - } - __pyx_t_3 = (((sizeof(int)) == __pyx_v_itemsize) != 0); - if (__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L43_bool_binop_done; - } - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = ((((Py_ssize_t)__pyx_t_5) == 1) != 0); - if (__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L43_bool_binop_done; - } - __pyx_t_3 = ((!((__pyx_v_int_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L43_bool_binop_done:; - if (__pyx_t_2) { - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 485, __pyx_L1_error) - goto __pyx_L33_break; - } - __pyx_t_3 = (((sizeof(long)) == __pyx_v_itemsize) != 0); - if (__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L47_bool_binop_done; - } - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = ((((Py_ssize_t)__pyx_t_5) == 1) != 0); - if (__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L47_bool_binop_done; - } - __pyx_t_3 = ((!((__pyx_v_long_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L47_bool_binop_done:; - if (__pyx_t_2) { - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 485, __pyx_L1_error) - goto __pyx_L33_break; - } - break; - case 'f': - break; - case 'c': - break; - case 'O': - break; - default: break; - } - } - } - __pyx_t_3 = ((__pyx_v_itemsize == -1L) != 0); - if (!__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L51_bool_binop_done; - } - __pyx_t_3 = ((__pyx_v_itemsize == (sizeof(short))) != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L51_bool_binop_done:; - if (__pyx_t_2) { - __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_short(__pyx_v_arg, 0); - __pyx_v_memslice = __pyx_t_8; - __pyx_t_2 = (__pyx_v_memslice.memview != 0); - if (__pyx_t_2) { - __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 485, __pyx_L1_error) - goto __pyx_L33_break; - } - /*else*/ { - PyErr_Clear(); - } - } - __pyx_t_3 = ((__pyx_v_itemsize == -1L) != 0); - if (!__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L55_bool_binop_done; - } - __pyx_t_3 = ((__pyx_v_itemsize == (sizeof(int))) != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L55_bool_binop_done:; - if (__pyx_t_2) { - __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_int(__pyx_v_arg, 0); - __pyx_v_memslice = __pyx_t_8; - __pyx_t_2 = (__pyx_v_memslice.memview != 0); - if (__pyx_t_2) { - __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 485, __pyx_L1_error) - goto __pyx_L33_break; - } - /*else*/ { - PyErr_Clear(); - } - } - __pyx_t_3 = ((__pyx_v_itemsize == -1L) != 0); - if (!__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L59_bool_binop_done; - } - __pyx_t_3 = ((__pyx_v_itemsize == (sizeof(long))) != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L59_bool_binop_done:; - if (__pyx_t_2) { - __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_long(__pyx_v_arg, 0); - __pyx_v_memslice = __pyx_t_8; - __pyx_t_2 = (__pyx_v_memslice.memview != 0); - if (__pyx_t_2) { - __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 485, __pyx_L1_error) - goto __pyx_L33_break; - } - /*else*/ { - PyErr_Clear(); - } - } - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 1, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 485, __pyx_L1_error) - goto __pyx_L33_break; - } - __pyx_L33_break:; - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_candidates = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_5 = 0; - if (unlikely(__pyx_v_signatures == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 485, __pyx_L1_error) + __pyx_v_info->strides = NULL; } - __pyx_t_6 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_1); - __pyx_t_1 = __pyx_t_6; - __pyx_t_6 = 0; - while (1) { - __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_9, &__pyx_t_5, &__pyx_t_6, NULL, NULL, __pyx_t_10); - if (unlikely(__pyx_t_11 == 0)) break; - if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_6); - __pyx_t_6 = 0; - __pyx_v_match_found = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_14 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_14)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_14); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s__6) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__6); - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_6 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__7) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__7); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_6); - __pyx_t_6 = 0; - __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 485, __pyx_L1_error) - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_i = __pyx_t_17; - __pyx_t_6 = PyList_GET_ITEM(__pyx_v_dest_sig, __pyx_v_i); - __Pyx_INCREF(__pyx_t_6); - __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_6); - __pyx_t_6 = 0; - __pyx_t_2 = (__pyx_v_dst_type != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_13 = PyObject_RichCompare(__pyx_t_6, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - if (__pyx_t_3) { - __pyx_v_match_found = 1; - goto __pyx_L67; - } - /*else*/ { - __pyx_v_match_found = 0; - goto __pyx_L65_break; - } - __pyx_L67:; - } - } - __pyx_L65_break:; - __pyx_t_3 = (__pyx_v_match_found != 0); - if (__pyx_t_3) { - __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 485, __pyx_L1_error) - } + __pyx_L7:; + + /* "View.MemoryView":536 + * info.strides = NULL + * + * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< + * info.suboffsets = self.view.suboffsets + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_INDIRECT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":537 + * + * if flags & PyBUF_INDIRECT: + * info.suboffsets = self.view.suboffsets # <<<<<<<<<<<<<< + * else: + * info.suboffsets = NULL + */ + __pyx_t_3 = __pyx_v_self->view.suboffsets; + __pyx_v_info->suboffsets = __pyx_t_3; + + /* "View.MemoryView":536 + * info.strides = NULL + * + * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< + * info.suboffsets = self.view.suboffsets + * else: + */ + goto __pyx_L8; } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (PyList_GET_SIZE(__pyx_v_candidates) != 0); - __pyx_t_2 = ((!__pyx_t_3) != 0); - if (__pyx_t_2) { - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(0, 485, __pyx_L1_error) + + /* "View.MemoryView":539 + * info.suboffsets = self.view.suboffsets + * else: + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + /*else*/ { + __pyx_v_info->suboffsets = NULL; } - __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 485, __pyx_L1_error) - __pyx_t_2 = ((__pyx_t_9 > 1) != 0); - if (__pyx_t_2) { - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(0, 485, __pyx_L1_error) + __pyx_L8:; + + /* "View.MemoryView":541 + * info.suboffsets = NULL + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.view.format + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":542 + * + * if flags & PyBUF_FORMAT: + * info.format = self.view.format # <<<<<<<<<<<<<< + * else: + * info.format = NULL + */ + __pyx_t_4 = __pyx_v_self->view.format; + __pyx_v_info->format = __pyx_t_4; + + /* "View.MemoryView":541 + * info.suboffsets = NULL + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.view.format + * else: + */ + goto __pyx_L9; } + + /* "View.MemoryView":544 + * info.format = self.view.format + * else: + * info.format = NULL # <<<<<<<<<<<<<< + * + * info.buf = self.view.buf + */ /*else*/ { - __Pyx_XDECREF(__pyx_r); - if (unlikely(__pyx_v_signatures == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; + __pyx_v_info->format = NULL; } + __pyx_L9:; + + /* "View.MemoryView":546 + * info.format = NULL + * + * info.buf = self.view.buf # <<<<<<<<<<<<<< + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize + */ + __pyx_t_5 = __pyx_v_self->view.buf; + __pyx_v_info->buf = __pyx_t_5; + + /* "View.MemoryView":547 + * + * info.buf = self.view.buf + * info.ndim = self.view.ndim # <<<<<<<<<<<<<< + * info.itemsize = self.view.itemsize + * info.len = self.view.len + */ + __pyx_t_6 = __pyx_v_self->view.ndim; + __pyx_v_info->ndim = __pyx_t_6; + + /* "View.MemoryView":548 + * info.buf = self.view.buf + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize # <<<<<<<<<<<<<< + * info.len = self.view.len + * info.readonly = self.view.readonly + */ + __pyx_t_7 = __pyx_v_self->view.itemsize; + __pyx_v_info->itemsize = __pyx_t_7; + + /* "View.MemoryView":549 + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize + * info.len = self.view.len # <<<<<<<<<<<<<< + * info.readonly = self.view.readonly + * info.obj = self + */ + __pyx_t_7 = __pyx_v_self->view.len; + __pyx_v_info->len = __pyx_t_7; + + /* "View.MemoryView":550 + * info.itemsize = self.view.itemsize + * info.len = self.view.len + * info.readonly = self.view.readonly # <<<<<<<<<<<<<< + * info.obj = self + * + */ + __pyx_t_1 = __pyx_v_self->view.readonly; + __pyx_v_info->readonly = __pyx_t_1; + + /* "View.MemoryView":551 + * info.len = self.view.len + * info.readonly = self.view.readonly + * info.obj = self # <<<<<<<<<<<<<< + * + * + */ + __Pyx_INCREF((PyObject *)__pyx_v_self); + __Pyx_GIVEREF((PyObject *)__pyx_v_self); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + + /* "View.MemoryView":521 + * itemp[i] = c + * + * @cname('getbuffer') # <<<<<<<<<<<<<< + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: + */ /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_XDECREF(__pyx_t_13); - __Pyx_XDECREF(__pyx_t_14); - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; + __Pyx_AddTraceback("View.MemoryView.memoryview.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_dest_sig); - __Pyx_XDECREF(__pyx_v_ndarray); - __Pyx_XDECREF(__pyx_v_arg); - __Pyx_XDECREF(__pyx_v_dtype); - __Pyx_XDECREF(__pyx_v_arg_base); - __Pyx_XDECREF(__pyx_v_candidates); - __Pyx_XDECREF(__pyx_v_sig); - __Pyx_XDECREF(__pyx_v_src_sig); - __Pyx_XDECREF(__pyx_v_dst_type); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_XGIVEREF(__pyx_r); + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; __Pyx_RefNannyFinishContext(); return __pyx_r; } +/* "View.MemoryView":554 + * + * + * @property # <<<<<<<<<<<<<< + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) + */ + /* Python wrapper */ -static PyObject *__pyx_fuse_0_0__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_15_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_fuse_0_0__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_15_fit_mter = {"__pyx_fuse_0_0_fit_mter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0_0__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_15_fit_mter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter}; -static PyObject *__pyx_fuse_0_0__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_15_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg = 0; - int __pyx_v_n_threads; - __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; - struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict = 0; - __Pyx_memviewslice __pyx_v_user_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_neg_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_indptr = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_p_user_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_earlier_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_later_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_aspect_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_O = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_U = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_I = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_O = { 0, 0, { 0 }, { 0 }, { 0 } }; - PyArrayObject *__pyx_v_del_g1 = 0; - PyArrayObject *__pyx_v_del_g2 = 0; - PyArrayObject *__pyx_v_del_g3 = 0; - PyArrayObject *__pyx_v_del_u = 0; - PyArrayObject *__pyx_v_del_i = 0; - PyArrayObject *__pyx_v_del_a = 0; - PyArrayObject *__pyx_v_del_o = 0; - PyArrayObject *__pyx_v_del_g1_reg = 0; - PyArrayObject *__pyx_v_del_g2_reg = 0; - PyArrayObject *__pyx_v_del_g3_reg = 0; - PyArrayObject *__pyx_v_del_u_reg = 0; - PyArrayObject *__pyx_v_del_i_reg = 0; - PyArrayObject *__pyx_v_del_a_reg = 0; - PyArrayObject *__pyx_v_del_o_reg = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_fit_mter (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_rng_pos_uia,&__pyx_n_s_rng_pos_uao,&__pyx_n_s_rng_pos_iao,&__pyx_n_s_rng_pos_pair,&__pyx_n_s_rng_pos,&__pyx_n_s_rng_neg,&__pyx_n_s_n_threads,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_iids,&__pyx_n_s_X_aids,&__pyx_n_s_YU,&__pyx_n_s_YU_uids,&__pyx_n_s_YU_aids,&__pyx_n_s_YU_oids,&__pyx_n_s_YI,&__pyx_n_s_YI_iids,&__pyx_n_s_YI_aids,&__pyx_n_s_YI_oids,&__pyx_n_s_rating_dict,&__pyx_n_s_user_ids,&__pyx_n_s_item_ids,&__pyx_n_s_neg_item_ids,&__pyx_n_s_indptr,&__pyx_n_s_p_user_indices,&__pyx_n_s_earlier_indices,&__pyx_n_s_later_indices,&__pyx_n_s_aspect_indices,&__pyx_n_s_pair_counts,&__pyx_n_s_G1,&__pyx_n_s_G2,&__pyx_n_s_G3,&__pyx_n_s_U,&__pyx_n_s_I,&__pyx_n_s_A,&__pyx_n_s_O,&__pyx_n_s_sgrad_G1,&__pyx_n_s_sgrad_G2,&__pyx_n_s_sgrad_G3,&__pyx_n_s_sgrad_U,&__pyx_n_s_sgrad_I,&__pyx_n_s_sgrad_A,&__pyx_n_s_sgrad_O,&__pyx_n_s_del_g1,&__pyx_n_s_del_g2,&__pyx_n_s_del_g3,&__pyx_n_s_del_u,&__pyx_n_s_del_i,&__pyx_n_s_del_a,&__pyx_n_s_del_o,&__pyx_n_s_del_g1_reg,&__pyx_n_s_del_g2_reg,&__pyx_n_s_del_g3_reg,&__pyx_n_s_del_u_reg,&__pyx_n_s_del_i_reg,&__pyx_n_s_del_a_reg,&__pyx_n_s_del_o_reg,0}; - PyObject* values[58] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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 58: values[57] = PyTuple_GET_ITEM(__pyx_args, 57); - CYTHON_FALLTHROUGH; - case 57: values[56] = PyTuple_GET_ITEM(__pyx_args, 56); - CYTHON_FALLTHROUGH; - case 56: values[55] = PyTuple_GET_ITEM(__pyx_args, 55); - CYTHON_FALLTHROUGH; - case 55: values[54] = PyTuple_GET_ITEM(__pyx_args, 54); - CYTHON_FALLTHROUGH; - case 54: values[53] = PyTuple_GET_ITEM(__pyx_args, 53); - CYTHON_FALLTHROUGH; - case 53: values[52] = PyTuple_GET_ITEM(__pyx_args, 52); - CYTHON_FALLTHROUGH; - case 52: values[51] = PyTuple_GET_ITEM(__pyx_args, 51); - CYTHON_FALLTHROUGH; - case 51: values[50] = PyTuple_GET_ITEM(__pyx_args, 50); - CYTHON_FALLTHROUGH; - case 50: values[49] = PyTuple_GET_ITEM(__pyx_args, 49); - CYTHON_FALLTHROUGH; - case 49: values[48] = PyTuple_GET_ITEM(__pyx_args, 48); - CYTHON_FALLTHROUGH; - case 48: values[47] = PyTuple_GET_ITEM(__pyx_args, 47); - CYTHON_FALLTHROUGH; - case 47: values[46] = PyTuple_GET_ITEM(__pyx_args, 46); - CYTHON_FALLTHROUGH; - case 46: values[45] = PyTuple_GET_ITEM(__pyx_args, 45); - CYTHON_FALLTHROUGH; - case 45: values[44] = PyTuple_GET_ITEM(__pyx_args, 44); - CYTHON_FALLTHROUGH; - case 44: values[43] = PyTuple_GET_ITEM(__pyx_args, 43); - CYTHON_FALLTHROUGH; - case 43: values[42] = PyTuple_GET_ITEM(__pyx_args, 42); - CYTHON_FALLTHROUGH; - case 42: values[41] = PyTuple_GET_ITEM(__pyx_args, 41); - CYTHON_FALLTHROUGH; - case 41: values[40] = PyTuple_GET_ITEM(__pyx_args, 40); - CYTHON_FALLTHROUGH; - case 40: values[39] = PyTuple_GET_ITEM(__pyx_args, 39); - CYTHON_FALLTHROUGH; - case 39: values[38] = PyTuple_GET_ITEM(__pyx_args, 38); - CYTHON_FALLTHROUGH; - case 38: values[37] = PyTuple_GET_ITEM(__pyx_args, 37); - CYTHON_FALLTHROUGH; - case 37: values[36] = PyTuple_GET_ITEM(__pyx_args, 36); - CYTHON_FALLTHROUGH; - case 36: values[35] = PyTuple_GET_ITEM(__pyx_args, 35); - CYTHON_FALLTHROUGH; - case 35: values[34] = PyTuple_GET_ITEM(__pyx_args, 34); - CYTHON_FALLTHROUGH; - case 34: values[33] = PyTuple_GET_ITEM(__pyx_args, 33); - CYTHON_FALLTHROUGH; - case 33: values[32] = PyTuple_GET_ITEM(__pyx_args, 32); - CYTHON_FALLTHROUGH; - case 32: values[31] = PyTuple_GET_ITEM(__pyx_args, 31); - CYTHON_FALLTHROUGH; - case 31: values[30] = PyTuple_GET_ITEM(__pyx_args, 30); - CYTHON_FALLTHROUGH; - case 30: values[29] = PyTuple_GET_ITEM(__pyx_args, 29); - CYTHON_FALLTHROUGH; - case 29: values[28] = PyTuple_GET_ITEM(__pyx_args, 28); - CYTHON_FALLTHROUGH; - case 28: values[27] = PyTuple_GET_ITEM(__pyx_args, 27); - CYTHON_FALLTHROUGH; - case 27: values[26] = PyTuple_GET_ITEM(__pyx_args, 26); - CYTHON_FALLTHROUGH; - case 26: values[25] = PyTuple_GET_ITEM(__pyx_args, 25); - CYTHON_FALLTHROUGH; - case 25: values[24] = PyTuple_GET_ITEM(__pyx_args, 24); - CYTHON_FALLTHROUGH; - case 24: values[23] = PyTuple_GET_ITEM(__pyx_args, 23); - CYTHON_FALLTHROUGH; - case 23: values[22] = PyTuple_GET_ITEM(__pyx_args, 22); - CYTHON_FALLTHROUGH; - case 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - CYTHON_FALLTHROUGH; - case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - CYTHON_FALLTHROUGH; - case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - CYTHON_FALLTHROUGH; - case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - CYTHON_FALLTHROUGH; - case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - CYTHON_FALLTHROUGH; - case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - CYTHON_FALLTHROUGH; - case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - CYTHON_FALLTHROUGH; - case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - CYTHON_FALLTHROUGH; - case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - CYTHON_FALLTHROUGH; - case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - CYTHON_FALLTHROUGH; - case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - CYTHON_FALLTHROUGH; - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_uia)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 1); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_uao)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 2); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_iao)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 3); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_pair)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 4); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 5); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_neg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 6); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_threads)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 7); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 8); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 9: - if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 9); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 10: - if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 10); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 11: - if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 11); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 12: - if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 12); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 13: - if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 13); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 14: - if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 14); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 15: - if (likely((values[15] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_oids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 15); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 16: - if (likely((values[16] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 16); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 17: - if (likely((values[17] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 17); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 18: - if (likely((values[18] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 18); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 19: - if (likely((values[19] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_oids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 19); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 20: - if (likely((values[20] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rating_dict)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 20); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 21: - if (likely((values[21] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_user_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 21); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 22: - if (likely((values[22] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 22); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 23: - if (likely((values[23] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_neg_item_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 23); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 24: - if (likely((values[24] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_indptr)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 24); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 25: - if (likely((values[25] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_p_user_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 25); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 26: - if (likely((values[26] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_earlier_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 26); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 27: - if (likely((values[27] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_later_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 27); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 28: - if (likely((values[28] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_aspect_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 28); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 29: - if (likely((values[29] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pair_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 29); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 30: - if (likely((values[30] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 30); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 31: - if (likely((values[31] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 31); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 32: - if (likely((values[32] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 32); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 33: - if (likely((values[33] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 33); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 34: - if (likely((values[34] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 34); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 35: - if (likely((values[35] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 35); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 36: - if (likely((values[36] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_O)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 36); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 37: - if (likely((values[37] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 37); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 38: - if (likely((values[38] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 38); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 39: - if (likely((values[39] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 39); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 40: - if (likely((values[40] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_U)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 40); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 41: - if (likely((values[41] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_I)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 41); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 42: - if (likely((values[42] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 42); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 43: - if (likely((values[43] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_O)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 43); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 44: - if (likely((values[44] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 44); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 45: - if (likely((values[45] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 45); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 46: - if (likely((values[46] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 46); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 47: - if (likely((values[47] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_u)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 47); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 48: - if (likely((values[48] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_i)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 48); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 49: - if (likely((values[49] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_a)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 49); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 50: - if (likely((values[50] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_o)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 50); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 51: - if (likely((values[51] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g1_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 51); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 52: - if (likely((values[52] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g2_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 52); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 53: - if (likely((values[53] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g3_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 53); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 54: - if (likely((values[54] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_u_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 54); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 55: - if (likely((values[55] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_i_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 55); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 56: - if (likely((values[56] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_a_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 56); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 57: - if (likely((values[57] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_o_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 57); __PYX_ERR(0, 485, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_fit_mter") < 0)) __PYX_ERR(0, 485, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 58) { - 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); - values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - values[22] = PyTuple_GET_ITEM(__pyx_args, 22); - values[23] = PyTuple_GET_ITEM(__pyx_args, 23); - values[24] = PyTuple_GET_ITEM(__pyx_args, 24); - values[25] = PyTuple_GET_ITEM(__pyx_args, 25); - values[26] = PyTuple_GET_ITEM(__pyx_args, 26); - values[27] = PyTuple_GET_ITEM(__pyx_args, 27); - values[28] = PyTuple_GET_ITEM(__pyx_args, 28); - values[29] = PyTuple_GET_ITEM(__pyx_args, 29); - values[30] = PyTuple_GET_ITEM(__pyx_args, 30); - values[31] = PyTuple_GET_ITEM(__pyx_args, 31); - values[32] = PyTuple_GET_ITEM(__pyx_args, 32); - values[33] = PyTuple_GET_ITEM(__pyx_args, 33); - values[34] = PyTuple_GET_ITEM(__pyx_args, 34); - values[35] = PyTuple_GET_ITEM(__pyx_args, 35); - values[36] = PyTuple_GET_ITEM(__pyx_args, 36); - values[37] = PyTuple_GET_ITEM(__pyx_args, 37); - values[38] = PyTuple_GET_ITEM(__pyx_args, 38); - values[39] = PyTuple_GET_ITEM(__pyx_args, 39); - values[40] = PyTuple_GET_ITEM(__pyx_args, 40); - values[41] = PyTuple_GET_ITEM(__pyx_args, 41); - values[42] = PyTuple_GET_ITEM(__pyx_args, 42); - values[43] = PyTuple_GET_ITEM(__pyx_args, 43); - values[44] = PyTuple_GET_ITEM(__pyx_args, 44); - values[45] = PyTuple_GET_ITEM(__pyx_args, 45); - values[46] = PyTuple_GET_ITEM(__pyx_args, 46); - values[47] = PyTuple_GET_ITEM(__pyx_args, 47); - values[48] = PyTuple_GET_ITEM(__pyx_args, 48); - values[49] = PyTuple_GET_ITEM(__pyx_args, 49); - values[50] = PyTuple_GET_ITEM(__pyx_args, 50); - values[51] = PyTuple_GET_ITEM(__pyx_args, 51); - values[52] = PyTuple_GET_ITEM(__pyx_args, 52); - values[53] = PyTuple_GET_ITEM(__pyx_args, 53); - values[54] = PyTuple_GET_ITEM(__pyx_args, 54); - values[55] = PyTuple_GET_ITEM(__pyx_args, 55); - values[56] = PyTuple_GET_ITEM(__pyx_args, 56); - values[57] = PyTuple_GET_ITEM(__pyx_args, 57); - } - __pyx_v_self = values[0]; - __pyx_v_rng_pos_uia = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[1]); - __pyx_v_rng_pos_uao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[2]); - __pyx_v_rng_pos_iao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[3]); - __pyx_v_rng_pos_pair = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[4]); - __pyx_v_rng_pos = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[5]); - __pyx_v_rng_neg = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[6]); - __pyx_v_n_threads = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_n_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 493, __pyx_L3_error) - __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_iids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_YU = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_uids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_aids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_oids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YI = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_iids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_aids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_oids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_rating_dict = ((struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *)values[20]); - __pyx_v_user_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_user_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[22], PyBUF_WRITABLE); if (unlikely(!__pyx_v_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_neg_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[23], PyBUF_WRITABLE); if (unlikely(!__pyx_v_neg_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_indptr = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[24], PyBUF_WRITABLE); if (unlikely(!__pyx_v_indptr.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_p_user_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[25], PyBUF_WRITABLE); if (unlikely(!__pyx_v_p_user_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_earlier_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[26], PyBUF_WRITABLE); if (unlikely(!__pyx_v_earlier_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_later_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[27], PyBUF_WRITABLE); if (unlikely(!__pyx_v_later_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_aspect_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[28], PyBUF_WRITABLE); if (unlikely(!__pyx_v_aspect_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_pair_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[29], PyBUF_WRITABLE); if (unlikely(!__pyx_v_pair_counts.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[30], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G1.memview)) __PYX_ERR(0, 500, __pyx_L3_error) - __pyx_v_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[31], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G2.memview)) __PYX_ERR(0, 501, __pyx_L3_error) - __pyx_v_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[32], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G3.memview)) __PYX_ERR(0, 502, __pyx_L3_error) - __pyx_v_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[33], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U.memview)) __PYX_ERR(0, 503, __pyx_L3_error) - __pyx_v_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[34], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I.memview)) __PYX_ERR(0, 504, __pyx_L3_error) - __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[35], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 505, __pyx_L3_error) - __pyx_v_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[36], PyBUF_WRITABLE); if (unlikely(!__pyx_v_O.memview)) __PYX_ERR(0, 506, __pyx_L3_error) - __pyx_v_sgrad_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[37], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G1.memview)) __PYX_ERR(0, 507, __pyx_L3_error) - __pyx_v_sgrad_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[38], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G2.memview)) __PYX_ERR(0, 508, __pyx_L3_error) - __pyx_v_sgrad_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[39], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G3.memview)) __PYX_ERR(0, 509, __pyx_L3_error) - __pyx_v_sgrad_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[40], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_U.memview)) __PYX_ERR(0, 510, __pyx_L3_error) - __pyx_v_sgrad_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[41], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_I.memview)) __PYX_ERR(0, 511, __pyx_L3_error) - __pyx_v_sgrad_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[42], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_A.memview)) __PYX_ERR(0, 512, __pyx_L3_error) - __pyx_v_sgrad_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[43], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_O.memview)) __PYX_ERR(0, 513, __pyx_L3_error) - __pyx_v_del_g1 = ((PyArrayObject *)values[44]); - __pyx_v_del_g2 = ((PyArrayObject *)values[45]); - __pyx_v_del_g3 = ((PyArrayObject *)values[46]); - __pyx_v_del_u = ((PyArrayObject *)values[47]); - __pyx_v_del_i = ((PyArrayObject *)values[48]); - __pyx_v_del_a = ((PyArrayObject *)values[49]); - __pyx_v_del_o = ((PyArrayObject *)values[50]); - __pyx_v_del_g1_reg = ((PyArrayObject *)values[51]); - __pyx_v_del_g2_reg = ((PyArrayObject *)values[52]); - __pyx_v_del_g3_reg = ((PyArrayObject *)values[53]); - __pyx_v_del_u_reg = ((PyArrayObject *)values[54]); - __pyx_v_del_i_reg = ((PyArrayObject *)values[55]); - __pyx_v_del_a_reg = ((PyArrayObject *)values[56]); - __pyx_v_del_o_reg = ((PyArrayObject *)values[57]); - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 485, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uia), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uia", 0))) __PYX_ERR(0, 487, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uao", 0))) __PYX_ERR(0, 488, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_iao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_iao", 0))) __PYX_ERR(0, 489, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_pair), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_pair", 0))) __PYX_ERR(0, 490, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos", 0))) __PYX_ERR(0, 491, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_neg), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_neg", 0))) __PYX_ERR(0, 492, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rating_dict), __pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict, 1, "rating_dict", 0))) __PYX_ERR(0, 497, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1), __pyx_ptype_5numpy_ndarray, 1, "del_g1", 0))) __PYX_ERR(0, 514, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2), __pyx_ptype_5numpy_ndarray, 1, "del_g2", 0))) __PYX_ERR(0, 515, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3), __pyx_ptype_5numpy_ndarray, 1, "del_g3", 0))) __PYX_ERR(0, 516, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u), __pyx_ptype_5numpy_ndarray, 1, "del_u", 0))) __PYX_ERR(0, 517, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i), __pyx_ptype_5numpy_ndarray, 1, "del_i", 0))) __PYX_ERR(0, 518, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a), __pyx_ptype_5numpy_ndarray, 1, "del_a", 0))) __PYX_ERR(0, 519, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o), __pyx_ptype_5numpy_ndarray, 1, "del_o", 0))) __PYX_ERR(0, 520, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g1_reg", 0))) __PYX_ERR(0, 521, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g2_reg", 0))) __PYX_ERR(0, 522, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g3_reg", 0))) __PYX_ERR(0, 523, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u_reg), __pyx_ptype_5numpy_ndarray, 1, "del_u_reg", 0))) __PYX_ERR(0, 524, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i_reg), __pyx_ptype_5numpy_ndarray, 1, "del_i_reg", 0))) __PYX_ERR(0, 525, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a_reg), __pyx_ptype_5numpy_ndarray, 1, "del_a_reg", 0))) __PYX_ERR(0, 526, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o_reg), __pyx_ptype_5numpy_ndarray, 1, "del_o_reg", 0))) __PYX_ERR(0, 527, __pyx_L1_error) - __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_14_fit_mter(__pyx_self, __pyx_v_self, __pyx_v_rng_pos_uia, __pyx_v_rng_pos_uao, __pyx_v_rng_pos_iao, __pyx_v_rng_pos_pair, __pyx_v_rng_pos, __pyx_v_rng_neg, __pyx_v_n_threads, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_iids, __pyx_v_X_aids, __pyx_v_YU, __pyx_v_YU_uids, __pyx_v_YU_aids, __pyx_v_YU_oids, __pyx_v_YI, __pyx_v_YI_iids, __pyx_v_YI_aids, __pyx_v_YI_oids, __pyx_v_rating_dict, __pyx_v_user_ids, __pyx_v_item_ids, __pyx_v_neg_item_ids, __pyx_v_indptr, __pyx_v_p_user_indices, __pyx_v_earlier_indices, __pyx_v_later_indices, __pyx_v_aspect_indices, __pyx_v_pair_counts, __pyx_v_G1, __pyx_v_G2, __pyx_v_G3, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_sgrad_G1, __pyx_v_sgrad_G2, __pyx_v_sgrad_G3, __pyx_v_sgrad_U, __pyx_v_sgrad_I, __pyx_v_sgrad_A, __pyx_v_sgrad_O, __pyx_v_del_g1, __pyx_v_del_g2, __pyx_v_del_g3, __pyx_v_del_u, __pyx_v_del_i, __pyx_v_del_a, __pyx_v_del_o, __pyx_v_del_g1_reg, __pyx_v_del_g2_reg, __pyx_v_del_g3_reg, __pyx_v_del_u_reg, __pyx_v_del_i_reg, __pyx_v_del_a_reg, __pyx_v_del_o_reg); + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":556 + * @property + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) # <<<<<<<<<<<<<< + * transpose_memslice(&result.from_slice) + * return result + */ + __pyx_t_1 = __pyx_memoryview_copy_object(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_memoryviewslice_type))))) __PYX_ERR(1, 556, __pyx_L1_error) + __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":557 + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_t_2 = __pyx_memslice_transpose((&__pyx_v_result->from_slice)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 557, __pyx_L1_error) + + /* "View.MemoryView":558 + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + * return result # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_result); + __pyx_r = ((PyObject *)__pyx_v_result); goto __pyx_L0; + + /* "View.MemoryView":554 + * + * + * @property # <<<<<<<<<<<<<< + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) + */ + + /* function exit code */ __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.T.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_14_fit_mter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg, int __pyx_v_n_threads, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_iids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_YU, __Pyx_memviewslice __pyx_v_YU_uids, __Pyx_memviewslice __pyx_v_YU_aids, __Pyx_memviewslice __pyx_v_YU_oids, __Pyx_memviewslice __pyx_v_YI, __Pyx_memviewslice __pyx_v_YI_iids, __Pyx_memviewslice __pyx_v_YI_aids, __Pyx_memviewslice __pyx_v_YI_oids, struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict, __Pyx_memviewslice __pyx_v_user_ids, __Pyx_memviewslice __pyx_v_item_ids, __Pyx_memviewslice __pyx_v_neg_item_ids, __Pyx_memviewslice __pyx_v_indptr, __Pyx_memviewslice __pyx_v_p_user_indices, __Pyx_memviewslice __pyx_v_earlier_indices, __Pyx_memviewslice __pyx_v_later_indices, __Pyx_memviewslice __pyx_v_aspect_indices, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts, __Pyx_memviewslice __pyx_v_G1, __Pyx_memviewslice __pyx_v_G2, __Pyx_memviewslice __pyx_v_G3, __Pyx_memviewslice __pyx_v_U, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_O, __Pyx_memviewslice __pyx_v_sgrad_G1, __Pyx_memviewslice __pyx_v_sgrad_G2, __Pyx_memviewslice __pyx_v_sgrad_G3, __Pyx_memviewslice __pyx_v_sgrad_U, __Pyx_memviewslice __pyx_v_sgrad_I, __Pyx_memviewslice __pyx_v_sgrad_A, __Pyx_memviewslice __pyx_v_sgrad_O, PyArrayObject *__pyx_v_del_g1, PyArrayObject *__pyx_v_del_g2, PyArrayObject *__pyx_v_del_g3, PyArrayObject *__pyx_v_del_u, PyArrayObject *__pyx_v_del_i, PyArrayObject *__pyx_v_del_a, PyArrayObject *__pyx_v_del_o, PyArrayObject *__pyx_v_del_g1_reg, PyArrayObject *__pyx_v_del_g2_reg, PyArrayObject *__pyx_v_del_g3_reg, PyArrayObject *__pyx_v_del_u_reg, PyArrayObject *__pyx_v_del_i_reg, PyArrayObject *__pyx_v_del_a_reg, PyArrayObject *__pyx_v_del_o_reg) { - long __pyx_v_s; - long __pyx_v_correct; - long __pyx_v_skipped; - long __pyx_v_aspect_correct; - long __pyx_v_n_users; - long __pyx_v_n_items; - long __pyx_v_n_aspects; - CYTHON_UNUSED long __pyx_v_n_opinions; - long __pyx_v_n_user_factors; - long __pyx_v_n_item_factors; - long __pyx_v_n_aspect_factors; - long __pyx_v_n_opinion_factors; - CYTHON_UNUSED int __pyx_v_num_samples; - CYTHON_UNUSED int __pyx_v_num_bpr_samples; - CYTHON_UNUSED int __pyx_v_num_pair_samples; - CYTHON_UNUSED short __pyx_v__; - short __pyx_v_i; - short __pyx_v_j; - short __pyx_v_k; - short __pyx_v_idx; - short __pyx_v_jdx; - short __pyx_v_u_idx; - short __pyx_v_i_idx; - short __pyx_v_a_idx; - short __pyx_v_o_idx; - short __pyx_v_j_idx; - short __pyx_v_thread_id; - float __pyx_v_z; - float __pyx_v_score; - float __pyx_v_i_score; - float __pyx_v_j_score; - float __pyx_v_pred; - float __pyx_v_i_ij; - float __pyx_v_a_ji; - float __pyx_v_loss; - float __pyx_v_bpr_loss; - float __pyx_v_aspect_bpr_loss; - float __pyx_v_del_sqerror; - float __pyx_v_del_bpr; - float __pyx_v_del_aspect_bpr; - float __pyx_v_eps; - float __pyx_v_lr; - float __pyx_v_ld_reg; - float __pyx_v_ld_bpr; - float __pyx_v_lambda_d; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a; - __Pyx_Buffer __pyx_pybuffer_del_a; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a_reg; - __Pyx_Buffer __pyx_pybuffer_del_a_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1; - __Pyx_Buffer __pyx_pybuffer_del_g1; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1_reg; - __Pyx_Buffer __pyx_pybuffer_del_g1_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2; - __Pyx_Buffer __pyx_pybuffer_del_g2; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2_reg; - __Pyx_Buffer __pyx_pybuffer_del_g2_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3; - __Pyx_Buffer __pyx_pybuffer_del_g3; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3_reg; - __Pyx_Buffer __pyx_pybuffer_del_g3_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i; - __Pyx_Buffer __pyx_pybuffer_del_i; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i_reg; - __Pyx_Buffer __pyx_pybuffer_del_i_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o; - __Pyx_Buffer __pyx_pybuffer_del_o; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o_reg; - __Pyx_Buffer __pyx_pybuffer_del_o_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u; - __Pyx_Buffer __pyx_pybuffer_del_u; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u_reg; - __Pyx_Buffer __pyx_pybuffer_del_u_reg; +/* "View.MemoryView":560 + * return result + * + * @property # <<<<<<<<<<<<<< + * def base(self): + * return self._get_base() + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - long __pyx_t_3; - int __pyx_t_4; - float __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - int __pyx_t_8; - Py_ssize_t __pyx_t_9; - long __pyx_t_10; - short __pyx_t_11; - long __pyx_t_12; - long __pyx_t_13; - short __pyx_t_14; - long __pyx_t_15; - long __pyx_t_16; - short __pyx_t_17; - Py_ssize_t __pyx_t_18; - Py_ssize_t __pyx_t_19; - Py_ssize_t __pyx_t_20; - Py_ssize_t __pyx_t_21; - Py_ssize_t __pyx_t_22; - Py_ssize_t __pyx_t_23; - Py_ssize_t __pyx_t_24; - Py_ssize_t __pyx_t_25; - int __pyx_t_26; - long __pyx_t_27; - PyObject *__pyx_t_28 = NULL; - PyObject *__pyx_t_29 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_fuse_0_0_fit_mter", 0); - __pyx_pybuffer_del_g1.pybuffer.buf = NULL; - __pyx_pybuffer_del_g1.refcount = 0; - __pyx_pybuffernd_del_g1.data = NULL; - __pyx_pybuffernd_del_g1.rcbuffer = &__pyx_pybuffer_del_g1; - __pyx_pybuffer_del_g2.pybuffer.buf = NULL; - __pyx_pybuffer_del_g2.refcount = 0; - __pyx_pybuffernd_del_g2.data = NULL; - __pyx_pybuffernd_del_g2.rcbuffer = &__pyx_pybuffer_del_g2; - __pyx_pybuffer_del_g3.pybuffer.buf = NULL; - __pyx_pybuffer_del_g3.refcount = 0; - __pyx_pybuffernd_del_g3.data = NULL; - __pyx_pybuffernd_del_g3.rcbuffer = &__pyx_pybuffer_del_g3; - __pyx_pybuffer_del_u.pybuffer.buf = NULL; - __pyx_pybuffer_del_u.refcount = 0; - __pyx_pybuffernd_del_u.data = NULL; - __pyx_pybuffernd_del_u.rcbuffer = &__pyx_pybuffer_del_u; - __pyx_pybuffer_del_i.pybuffer.buf = NULL; - __pyx_pybuffer_del_i.refcount = 0; - __pyx_pybuffernd_del_i.data = NULL; - __pyx_pybuffernd_del_i.rcbuffer = &__pyx_pybuffer_del_i; - __pyx_pybuffer_del_a.pybuffer.buf = NULL; - __pyx_pybuffer_del_a.refcount = 0; - __pyx_pybuffernd_del_a.data = NULL; - __pyx_pybuffernd_del_a.rcbuffer = &__pyx_pybuffer_del_a; - __pyx_pybuffer_del_o.pybuffer.buf = NULL; - __pyx_pybuffer_del_o.refcount = 0; - __pyx_pybuffernd_del_o.data = NULL; - __pyx_pybuffernd_del_o.rcbuffer = &__pyx_pybuffer_del_o; - __pyx_pybuffer_del_g1_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g1_reg.refcount = 0; - __pyx_pybuffernd_del_g1_reg.data = NULL; - __pyx_pybuffernd_del_g1_reg.rcbuffer = &__pyx_pybuffer_del_g1_reg; - __pyx_pybuffer_del_g2_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g2_reg.refcount = 0; - __pyx_pybuffernd_del_g2_reg.data = NULL; - __pyx_pybuffernd_del_g2_reg.rcbuffer = &__pyx_pybuffer_del_g2_reg; - __pyx_pybuffer_del_g3_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g3_reg.refcount = 0; - __pyx_pybuffernd_del_g3_reg.data = NULL; - __pyx_pybuffernd_del_g3_reg.rcbuffer = &__pyx_pybuffer_del_g3_reg; - __pyx_pybuffer_del_u_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_u_reg.refcount = 0; - __pyx_pybuffernd_del_u_reg.data = NULL; - __pyx_pybuffernd_del_u_reg.rcbuffer = &__pyx_pybuffer_del_u_reg; - __pyx_pybuffer_del_i_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_i_reg.refcount = 0; - __pyx_pybuffernd_del_i_reg.data = NULL; - __pyx_pybuffernd_del_i_reg.rcbuffer = &__pyx_pybuffer_del_i_reg; - __pyx_pybuffer_del_a_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_a_reg.refcount = 0; - __pyx_pybuffernd_del_a_reg.data = NULL; - __pyx_pybuffernd_del_a_reg.rcbuffer = &__pyx_pybuffer_del_a_reg; - __pyx_pybuffer_del_o_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_o_reg.refcount = 0; - __pyx_pybuffernd_del_o_reg.data = NULL; - __pyx_pybuffernd_del_o_reg.rcbuffer = &__pyx_pybuffer_del_o_reg; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g1.diminfo[0].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1.diminfo[0].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1.diminfo[1].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1.diminfo[1].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1.diminfo[2].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1.diminfo[2].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g2.diminfo[0].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2.diminfo[0].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2.diminfo[1].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2.diminfo[1].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2.diminfo[2].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2.diminfo[2].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g3.diminfo[0].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3.diminfo[0].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3.diminfo[1].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3.diminfo[1].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3.diminfo[2].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3.diminfo[2].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_u.diminfo[0].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u.diminfo[0].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u.diminfo[1].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u.diminfo[1].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_i.diminfo[0].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i.diminfo[0].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i.diminfo[1].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i.diminfo[1].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_a.diminfo[0].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a.diminfo[0].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a.diminfo[1].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a.diminfo[1].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_o.diminfo[0].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o.diminfo[0].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o.diminfo[1].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o.diminfo[1].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g1_reg.diminfo[0].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1_reg.diminfo[0].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1_reg.diminfo[1].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1_reg.diminfo[1].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1_reg.diminfo[2].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1_reg.diminfo[2].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g2_reg.diminfo[0].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2_reg.diminfo[0].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2_reg.diminfo[1].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2_reg.diminfo[1].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2_reg.diminfo[2].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2_reg.diminfo[2].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g3_reg.diminfo[0].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3_reg.diminfo[0].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3_reg.diminfo[1].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3_reg.diminfo[1].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3_reg.diminfo[2].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3_reg.diminfo[2].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_u_reg.diminfo[0].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u_reg.diminfo[0].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u_reg.diminfo[1].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u_reg.diminfo[1].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_i_reg.diminfo[0].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i_reg.diminfo[0].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i_reg.diminfo[1].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i_reg.diminfo[1].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_a_reg.diminfo[0].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a_reg.diminfo[0].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a_reg.diminfo[1].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a_reg.diminfo[1].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_o_reg.diminfo[0].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o_reg.diminfo[0].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o_reg.diminfo[1].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o_reg.diminfo[1].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[1]; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":531 - * """ - * cdef: - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 # <<<<<<<<<<<<<< - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items - */ - __pyx_v_correct = 0; - __pyx_v_skipped = 0; - __pyx_v_aspect_correct = 0; + __Pyx_RefNannySetupContext("__get__", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":532 - * cdef: - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 - * long n_users = self.train_set.num_users # <<<<<<<<<<<<<< - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects + /* "View.MemoryView":562 + * @property + * def base(self): + * return self._get_base() # <<<<<<<<<<<<<< + * + * cdef _get_base(self): */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->_get_base(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 562, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_n_users = __pyx_t_3; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":533 - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items # <<<<<<<<<<<<<< - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions + /* "View.MemoryView":560 + * return result + * + * @property # <<<<<<<<<<<<<< + * def base(self): + * return self._get_base() */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_items = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":534 - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_aspects = __pyx_t_3; + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.base.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":535 - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions # <<<<<<<<<<<<<< - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors +/* "View.MemoryView":564 + * return self._get_base() + * + * cdef _get_base(self): # <<<<<<<<<<<<<< + * return self.obj + * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_opinions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_opinions = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":536 - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors # <<<<<<<<<<<<<< - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_user_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 536, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 536, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_user_factors = __pyx_t_3; +static PyObject *__pyx_memoryview__get_base(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_get_base", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":537 - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors # <<<<<<<<<<<<<< - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors + /* "View.MemoryView":565 + * + * cdef _get_base(self): + * return self.obj # <<<<<<<<<<<<<< + * + * @property */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_item_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 537, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_item_factors = __pyx_t_3; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->obj); + __pyx_r = __pyx_v_self->obj; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":538 - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors # <<<<<<<<<<<<<< - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples + /* "View.MemoryView":564 + * return self._get_base() + * + * cdef _get_base(self): # <<<<<<<<<<<<<< + * return self.obj + * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_aspect_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 538, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_aspect_factors = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":539 - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors # <<<<<<<<<<<<<< - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_opinion_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 539, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_opinion_factors = __pyx_t_3; + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":540 - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples # <<<<<<<<<<<<<< - * int num_bpr_samples = self.n_bpr_samples - * int num_pair_samples = self.n_pair_samples +/* "View.MemoryView":567 + * return self.obj + * + * @property # <<<<<<<<<<<<<< + * def shape(self): + * return tuple([length for length in self.view.shape[:self.view.ndim]]) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_element_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 540, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_samples = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":541 - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples # <<<<<<<<<<<<<< - * int num_pair_samples = self.n_pair_samples +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_7genexpr__pyx_v_length; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":569 + * @property + * def shape(self): + * return tuple([length for length in self.view.shape[:self.view.ndim]]) # <<<<<<<<<<<<<< * + * @property */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 541, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + { /* enter inner scope */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 569, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); + for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_7genexpr__pyx_v_length = (__pyx_t_2[0]); + __pyx_t_5 = PyInt_FromSsize_t(__pyx_7genexpr__pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 569, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(1, 569, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + } /* exit inner scope */ + __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 569, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_bpr_samples = __pyx_t_4; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":542 - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples - * int num_pair_samples = self.n_pair_samples # <<<<<<<<<<<<<< + /* "View.MemoryView":567 + * return self.obj * - * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id + * @property # <<<<<<<<<<<<<< + * def shape(self): + * return tuple([length for length in self.view.shape[:self.view.ndim]]) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_pair_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 542, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_pair_samples = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":546 - * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id - * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji - * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr # <<<<<<<<<<<<<< - * floating eps = 1e-9 + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.shape.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":571 + * return tuple([length for length in self.view.shape[:self.view.ndim]]) * + * @property # <<<<<<<<<<<<<< + * def strides(self): + * if self.view.strides == NULL: */ - __pyx_v_loss = 0.; - __pyx_v_bpr_loss = 0.; - __pyx_v_aspect_bpr_loss = 0.; - /* "cornac/models/comparer/recom_comparer_sub.pyx":547 - * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji - * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr - * floating eps = 1e-9 # <<<<<<<<<<<<<< +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_8genexpr1__pyx_v_stride; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":573 + * @property + * def strides(self): + * if self.view.strides == NULL: # <<<<<<<<<<<<<< * - * floating lr = self.lr + * raise ValueError, "Buffer view does not expose strides" */ - __pyx_v_eps = 1e-9; + __pyx_t_1 = (__pyx_v_self->view.strides == NULL); + if (unlikely(__pyx_t_1)) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":549 - * floating eps = 1e-9 + /* "View.MemoryView":575 + * if self.view.strides == NULL: * - * floating lr = self.lr # <<<<<<<<<<<<<< - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr + * raise ValueError, "Buffer view does not expose strides" # <<<<<<<<<<<<<< + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 549, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 549, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lr = __pyx_t_5; + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Buffer_view_does_not_expose_stri, 0, 0); + __PYX_ERR(1, 575, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":550 - * - * floating lr = self.lr - * floating ld_reg = self.lambda_reg # <<<<<<<<<<<<<< - * floating ld_bpr = self.lambda_bpr - * floating lambda_d = self.lambda_d + /* "View.MemoryView":573 + * @property + * def strides(self): + * if self.view.strides == NULL: # <<<<<<<<<<<<<< + * + * raise ValueError, "Buffer view does not expose strides" */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_reg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 550, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 550, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_ld_reg = __pyx_t_5; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":551 - * floating lr = self.lr - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr # <<<<<<<<<<<<<< - * floating lambda_d = self.lambda_d + /* "View.MemoryView":577 + * raise ValueError, "Buffer view does not expose strides" * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_bpr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 551, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_ld_bpr = __pyx_t_5; + __Pyx_XDECREF(__pyx_r); + { /* enter inner scope */ + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = (__pyx_v_self->view.strides + __pyx_v_self->view.ndim); + for (__pyx_t_5 = __pyx_v_self->view.strides; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { + __pyx_t_3 = __pyx_t_5; + __pyx_8genexpr1__pyx_v_stride = (__pyx_t_3[0]); + __pyx_t_6 = PyInt_FromSsize_t(__pyx_8genexpr1__pyx_v_stride); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + } /* exit inner scope */ + __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":552 - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr - * floating lambda_d = self.lambda_d # <<<<<<<<<<<<<< + /* "View.MemoryView":571 + * return tuple([length for length in self.view.shape[:self.view.ndim]]) * - * del_g1.fill(0) + * @property # <<<<<<<<<<<<<< + * def strides(self): + * if self.view.strides == NULL: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 552, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_d = __pyx_t_5; - /* "cornac/models/comparer/recom_comparer_sub.pyx":554 - * floating lambda_d = self.lambda_d + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.memoryview.strides.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":579 + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) * - * del_g1.fill(0) # <<<<<<<<<<<<<< - * del_g2.fill(0) - * del_g3.fill(0) + * @property # <<<<<<<<<<<<<< + * def suboffsets(self): + * if self.view.suboffsets == NULL: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":555 +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_8genexpr2__pyx_v_suboffset; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":581 + * @property + * def suboffsets(self): + * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< + * return (-1,) * self.view.ndim * - * del_g1.fill(0) - * del_g2.fill(0) # <<<<<<<<<<<<<< - * del_g3.fill(0) - * del_u.fill(0) */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 555, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = (__pyx_v_self->view.suboffsets == NULL); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":556 - * del_g1.fill(0) - * del_g2.fill(0) - * del_g3.fill(0) # <<<<<<<<<<<<<< - * del_u.fill(0) - * del_i.fill(0) + /* "View.MemoryView":582 + * def suboffsets(self): + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PySequence_Multiply(__pyx_tuple__4, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 582, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":557 - * del_g2.fill(0) - * del_g3.fill(0) - * del_u.fill(0) # <<<<<<<<<<<<<< - * del_i.fill(0) - * del_a.fill(0) + /* "View.MemoryView":581 + * @property + * def suboffsets(self): + * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< + * return (-1,) * self.view.ndim + * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 557, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":558 - * del_g3.fill(0) - * del_u.fill(0) - * del_i.fill(0) # <<<<<<<<<<<<<< - * del_a.fill(0) - * del_o.fill(0) + /* "View.MemoryView":584 + * return (-1,) * self.view.ndim + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 558, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __Pyx_XDECREF(__pyx_r); + { /* enter inner scope */ + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 584, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = (__pyx_v_self->view.suboffsets + __pyx_v_self->view.ndim); + for (__pyx_t_5 = __pyx_v_self->view.suboffsets; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { + __pyx_t_3 = __pyx_t_5; + __pyx_8genexpr2__pyx_v_suboffset = (__pyx_t_3[0]); + __pyx_t_6 = PyInt_FromSsize_t(__pyx_8genexpr2__pyx_v_suboffset); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 584, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(1, 584, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 558, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + } /* exit inner scope */ + __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 584, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":559 - * del_u.fill(0) - * del_i.fill(0) - * del_a.fill(0) # <<<<<<<<<<<<<< - * del_o.fill(0) - * del_g1_reg.fill(0) + /* "View.MemoryView":579 + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + * + * @property # <<<<<<<<<<<<<< + * def suboffsets(self): + * if self.view.suboffsets == NULL: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 559, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 559, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":560 - * del_i.fill(0) - * del_a.fill(0) - * del_o.fill(0) # <<<<<<<<<<<<<< - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.memoryview.suboffsets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":561 - * del_a.fill(0) - * del_o.fill(0) - * del_g1_reg.fill(0) # <<<<<<<<<<<<<< - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) +/* "View.MemoryView":586 + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + * + * @property # <<<<<<<<<<<<<< + * def ndim(self): + * return self.view.ndim */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":562 - * del_o.fill(0) - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) # <<<<<<<<<<<<<< - * del_g3_reg.fill(0) - * del_u_reg.fill(0) +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":588 + * @property + * def ndim(self): + * return self.view.ndim # <<<<<<<<<<<<<< + * + * @property */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 562, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 588, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":563 - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) # <<<<<<<<<<<<<< - * del_u_reg.fill(0) - * del_i_reg.fill(0) + /* "View.MemoryView":586 + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + * + * @property # <<<<<<<<<<<<<< + * def ndim(self): + * return self.view.ndim */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 563, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 563, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":564 - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) - * del_u_reg.fill(0) # <<<<<<<<<<<<<< - * del_i_reg.fill(0) - * del_a_reg.fill(0) + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":590 + * return self.view.ndim + * + * @property # <<<<<<<<<<<<<< + * def itemsize(self): + * return self.view.itemsize */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 564, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":565 - * del_g3_reg.fill(0) - * del_u_reg.fill(0) - * del_i_reg.fill(0) # <<<<<<<<<<<<<< - * del_a_reg.fill(0) - * del_o_reg.fill(0) +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":592 + * @property + * def itemsize(self): + * return self.view.itemsize # <<<<<<<<<<<<<< + * + * @property */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 565, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 592, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":566 - * del_u_reg.fill(0) - * del_i_reg.fill(0) - * del_a_reg.fill(0) # <<<<<<<<<<<<<< - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): + /* "View.MemoryView":590 + * return self.view.ndim + * + * @property # <<<<<<<<<<<<<< + * def itemsize(self): + * return self.view.itemsize */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 566, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":567 - * del_i_reg.fill(0) - * del_a_reg.fill(0) - * del_o_reg.fill(0) # <<<<<<<<<<<<<< - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 567, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":568 - * del_a_reg.fill(0) - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): - */ - { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); - #endif - /*try:*/ { - { - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) - #endif - #ifdef _OPENMP - #pragma omp parallel private(__pyx_v_thread_id) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_bpr_loss) reduction(+:__pyx_v_correct) reduction(+:__pyx_v_skipped) reduction(+:__pyx_v_aspect_bpr_loss) reduction(+:__pyx_v_aspect_correct) private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_3, __pyx_t_4, __pyx_t_7, __pyx_t_8, __pyx_t_9) num_threads(__pyx_v_n_threads) - #endif /* _OPENMP */ - { - /* Initialize private variables to invalid values */ - __pyx_v_thread_id = ((short)0xbad0bad0); + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.itemsize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":569 - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() # <<<<<<<<<<<<<< - * for _ in prange(num_samples, schedule='guided'): - * # get user item aspect element +/* "View.MemoryView":594 + * return self.view.itemsize + * + * @property # <<<<<<<<<<<<<< + * def nbytes(self): + * return self.size * self.view.itemsize */ - __pyx_v_thread_id = recom_bpr::get_thread_num(); - /* "cornac/models/comparer/recom_comparer_sub.pyx":570 - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): # <<<<<<<<<<<<<< - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) - */ - __pyx_t_4 = __pyx_v_num_samples; - if ((1 == 0)) abort(); - { - __pyx_t_8 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_8 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_del_sqerror) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_o_idx) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_score) lastprivate(__pyx_v_u_idx) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){ - { - __pyx_v__ = (short)(0 + 1 * __pyx_t_7); - /* Initialize private variables to invalid values */ - __pyx_v_a_idx = ((short)0xbad0bad0); - __pyx_v_del_sqerror = ((float)__PYX_NAN()); - __pyx_v_i = ((short)0xbad0bad0); - __pyx_v_i_idx = ((short)0xbad0bad0); - __pyx_v_idx = ((short)0xbad0bad0); - __pyx_v_j = ((short)0xbad0bad0); - __pyx_v_k = ((short)0xbad0bad0); - __pyx_v_o_idx = ((short)0xbad0bad0); - __pyx_v_pred = ((float)__PYX_NAN()); - __pyx_v_score = ((float)__PYX_NAN()); - __pyx_v_u_idx = ((short)0xbad0bad0); +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":572 - * for _ in prange(num_samples, schedule='guided'): - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] - */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uia->__pyx_vtab)->generate(__pyx_v_rng_pos_uia, __pyx_v_thread_id); + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":573 - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) - * u_idx = X_uids[idx] # <<<<<<<<<<<<<< - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] - */ - __pyx_t_9 = __pyx_v_idx; - __pyx_v_u_idx = (*((short *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_9 * __pyx_v_X_uids.strides[0]) ))); +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":574 - * idx = rng_pos_uia.generate(thread_id) - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] # <<<<<<<<<<<<<< - * a_idx = X_aids[idx] - * score = X[idx] + /* "View.MemoryView":596 + * @property + * def nbytes(self): + * return self.size * self.view.itemsize # <<<<<<<<<<<<<< + * + * @property */ - __pyx_t_9 = __pyx_v_idx; - __pyx_v_i_idx = (*((short *) ( /* dim=0 */ (__pyx_v_X_iids.data + __pyx_t_9 * __pyx_v_X_iids.strides[0]) ))); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 596, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 596, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 596, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":575 - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] # <<<<<<<<<<<<<< - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + /* "View.MemoryView":594 + * return self.view.itemsize + * + * @property # <<<<<<<<<<<<<< + * def nbytes(self): + * return self.size * self.view.itemsize */ - __pyx_t_9 = __pyx_v_idx; - __pyx_v_a_idx = (*((short *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_9 * __pyx_v_X_aids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":576 - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] - * score = X[idx] # <<<<<<<<<<<<<< - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) - * loss += (pred - score) * (pred - score) - */ - __pyx_t_9 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_9 * __pyx_v_X.strides[0]) ))); + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":577 - * a_idx = X_aids[idx] - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) +/* "View.MemoryView":598 + * return self.size * self.view.itemsize * + * @property # <<<<<<<<<<<<<< + * def size(self): + * if self._size is None: */ - __pyx_v_pred = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); - /* "cornac/models/comparer/recom_comparer_sub.pyx":578 - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< - * - * del_sqerror = 2 * (pred - score) - */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":580 - * loss += (pred - score) * (pred - score) + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_v_length = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":600 + * @property + * def size(self): + * if self._size is None: # <<<<<<<<<<<<<< + * result = 1 * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< - * for i in range(n_user_factors): - * for j in range(n_item_factors): */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + __pyx_t_1 = (__pyx_v_self->_size == Py_None); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":581 + /* "View.MemoryView":601 + * def size(self): + * if self._size is None: + * result = 1 # <<<<<<<<<<<<<< * - * del_sqerror = 2 * (pred - score) - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): + * for length in self.view.shape[:self.view.ndim]: */ - __pyx_t_3 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __Pyx_INCREF(__pyx_int_1); + __pyx_v_result = __pyx_int_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":582 - * del_sqerror = 2 * (pred - score) - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + /* "View.MemoryView":603 + * result = 1 + * + * for length in self.view.shape[:self.view.ndim]: # <<<<<<<<<<<<<< + * result *= length + * */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); + for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_t_5 = PyInt_FromSsize_t((__pyx_t_2[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 603, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_5); + __pyx_t_5 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":583 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + /* "View.MemoryView":604 + * + * for length in self.view.shape[:self.view.ndim]: + * result *= length # <<<<<<<<<<<<<< + * + * self._size = result */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __pyx_t_5 = PyNumber_InPlaceMultiply(__pyx_v_result, __pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 604, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_5); + __pyx_t_5 = 0; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":584 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + /* "View.MemoryView":606 + * result *= length + * + * self._size = result # <<<<<<<<<<<<<< + * + * return self._size */ - __pyx_t_9 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_i_idx; - __pyx_t_20 = __pyx_v_j; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_k; - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_20 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); + __Pyx_INCREF(__pyx_v_result); + __Pyx_GIVEREF(__pyx_v_result); + __Pyx_GOTREF(__pyx_v_self->_size); + __Pyx_DECREF(__pyx_v_self->_size); + __pyx_v_self->_size = __pyx_v_result; - /* "cornac/models/comparer/recom_comparer_sub.pyx":585 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] + /* "View.MemoryView":600 + * @property + * def size(self): + * if self._size is None: # <<<<<<<<<<<<<< + * result = 1 + * */ - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_i_idx; - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":586 - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] + /* "View.MemoryView":608 + * self._size = result + * + * return self._size # <<<<<<<<<<<<<< * + * def __len__(self): */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_k; - __pyx_t_23 = __pyx_v_i_idx; - __pyx_t_24 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_25 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_20 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->_size); + __pyx_r = __pyx_v_self->_size; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":587 - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] # <<<<<<<<<<<<<< + /* "View.MemoryView":598 + * return self.size * self.view.itemsize * - * # get user aspect opinion element + * @property # <<<<<<<<<<<<<< + * def size(self): + * if self._size is None: */ - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_j; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))); - } - } - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":590 + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_length); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":610 + * return self._size * - * # get user aspect opinion element - * idx = rng_pos_uao.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] + * def __len__(self): # <<<<<<<<<<<<<< + * if self.view.ndim >= 1: + * return self.view.shape[0] */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uao->__pyx_vtab)->generate(__pyx_v_rng_pos_uao, __pyx_v_thread_id); - /* "cornac/models/comparer/recom_comparer_sub.pyx":591 - * # get user aspect opinion element - * idx = rng_pos_uao.generate(thread_id) - * u_idx = YU_uids[idx] # <<<<<<<<<<<<<< - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] - */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_u_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YU_uids.data + __pyx_t_25 * __pyx_v_YU_uids.strides[0]) ))); +/* Python wrapper */ +static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":592 - * idx = rng_pos_uao.generate(thread_id) - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] # <<<<<<<<<<<<<< - * o_idx = YU_oids[idx] - * score = YU[idx] - */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_a_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YU_aids.data + __pyx_t_25 * __pyx_v_YU_aids.strides[0]) ))); + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":593 - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] # <<<<<<<<<<<<<< - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) - */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_o_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YU_oids.data + __pyx_t_25 * __pyx_v_YU_oids.strides[0]) ))); +static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__len__", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":594 - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] - * score = YU[idx] # <<<<<<<<<<<<<< - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) + /* "View.MemoryView":611 + * + * def __len__(self): + * if self.view.ndim >= 1: # <<<<<<<<<<<<<< + * return self.view.shape[0] + * */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_YU.data + __pyx_t_25 * __pyx_v_YU.strides[0]) ))); + __pyx_t_1 = (__pyx_v_self->view.ndim >= 1); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":595 - * o_idx = YU_oids[idx] - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) + /* "View.MemoryView":612 + * def __len__(self): + * if self.view.ndim >= 1: + * return self.view.shape[0] # <<<<<<<<<<<<<< * + * return 0 */ - __pyx_v_pred = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G2, __pyx_v_n_user_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_U, __pyx_v_A, __pyx_v_O, __pyx_v_u_idx, __pyx_v_a_idx, __pyx_v_o_idx); + __pyx_r = (__pyx_v_self->view.shape[0]); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":596 - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< + /* "View.MemoryView":611 + * + * def __len__(self): + * if self.view.ndim >= 1: # <<<<<<<<<<<<<< + * return self.view.shape[0] * - * del_sqerror = 2 * (pred - score) */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":598 - * loss += (pred - score) * (pred - score) + /* "View.MemoryView":614 + * return self.view.shape[0] * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * return 0 # <<<<<<<<<<<<<< * - * for i in range(n_user_factors): + * def __repr__(self): */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + __pyx_r = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":600 - * del_sqerror = 2 * (pred - score) + /* "View.MemoryView":610 + * return self._size * - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): + * def __len__(self): # <<<<<<<<<<<<<< + * if self.view.ndim >= 1: + * return self.view.shape[0] */ - __pyx_t_3 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; - /* "cornac/models/comparer/recom_comparer_sub.pyx":601 + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":616 + * return 0 * - * for i in range(n_user_factors): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * def __repr__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__, + * id(self)) */ - __pyx_t_12 = __pyx_v_n_aspect_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; - /* "cornac/models/comparer/recom_comparer_sub.pyx":602 - * for i in range(n_user_factors): - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - */ - __pyx_t_15 = __pyx_v_n_opinion_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; +/* Python wrapper */ +static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":603 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] - */ - __pyx_t_25 = __pyx_v_u_idx; - __pyx_t_9 = __pyx_v_i; - __pyx_t_18 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_j; - __pyx_t_20 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":604 - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] - */ - __pyx_t_21 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_18 = __pyx_v_a_idx; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_o_idx; - __pyx_t_24 = __pyx_v_k; - __pyx_t_23 = __pyx_v_u_idx; - __pyx_t_22 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_9 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_25 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )))); +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__repr__", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":605 - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] + /* "View.MemoryView":617 + * + * def __repr__(self): + * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< + * id(self)) * */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_18 = __pyx_v_u_idx; - __pyx_t_19 = __pyx_v_i; - __pyx_t_20 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - __pyx_t_22 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_24 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 617, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 617, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 617, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":606 - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< + /* "View.MemoryView":618 + * def __repr__(self): + * return "" % (self.base.__class__.__name__, + * id(self)) # <<<<<<<<<<<<<< * - * # get item aspect opinion element + * def __str__(self): */ - __pyx_t_21 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_18 = __pyx_v_u_idx; - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_a_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_o_idx; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_24 * __pyx_v_A.strides[1]) )))); - } - } - } + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 618, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); - /* "cornac/models/comparer/recom_comparer_sub.pyx":609 + /* "View.MemoryView":617 + * + * def __repr__(self): + * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< + * id(self)) * - * # get item aspect opinion element - * idx = rng_pos_iao.generate(thread_id) # <<<<<<<<<<<<<< - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_iao->__pyx_vtab)->generate(__pyx_v_rng_pos_iao, __pyx_v_thread_id); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 617, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 617, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":610 - * # get item aspect opinion element - * idx = rng_pos_iao.generate(thread_id) - * i_idx = YI_iids[idx] # <<<<<<<<<<<<<< - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] + /* "View.MemoryView":616 + * return 0 + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__, + * id(self)) */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_i_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YI_iids.data + __pyx_t_24 * __pyx_v_YI_iids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":611 - * idx = rng_pos_iao.generate(thread_id) - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] # <<<<<<<<<<<<<< - * o_idx = YI_oids[idx] - * score = YI[idx] - */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_a_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YI_aids.data + __pyx_t_24 * __pyx_v_YI_aids.strides[0]) ))); + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":612 - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] # <<<<<<<<<<<<<< - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) +/* "View.MemoryView":620 + * id(self)) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__,) + * */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_o_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YI_oids.data + __pyx_t_24 * __pyx_v_YI_oids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":613 - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] - * score = YI[idx] # <<<<<<<<<<<<<< - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) - */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_YI.data + __pyx_t_24 * __pyx_v_YI.strides[0]) ))); +/* Python wrapper */ +static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":614 - * o_idx = YI_oids[idx] - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__str__", 0); + + /* "View.MemoryView":621 + * + * def __str__(self): + * return "" % (self.base.__class__.__name__,) # <<<<<<<<<<<<<< + * * */ - __pyx_v_pred = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G3, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_i_idx, __pyx_v_a_idx, __pyx_v_o_idx); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 621, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 621, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 621, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 621, __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_PyString_Format(__pyx_kp_s_MemoryView_of_r_object, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 621, __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; - /* "cornac/models/comparer/recom_comparer_sub.pyx":615 - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< + /* "View.MemoryView":620 + * id(self)) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__,) * - * del_sqerror = 2 * (pred - score) */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":617 - * loss += (pred - score) * (pred - score) + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":624 * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): + * + * def is_c_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":618 +/* Python wrapper */ +static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_c_contig (wrapper)", 0); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("is_c_contig", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "is_c_contig", 0))) return NULL; + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice *__pyx_v_mslice; + __Pyx_memviewslice __pyx_v_tmp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_c_contig", 0); + + /* "View.MemoryView":627 + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< + * return slice_is_contig(mslice[0], 'C', self.view.ndim) * - * del_sqerror = 2 * (pred - score) - * for i in range(n_item_factors): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): */ - __pyx_t_3 = __pyx_v_n_item_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 627, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":619 - * del_sqerror = 2 * (pred - score) - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + /* "View.MemoryView":628 + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) + * return slice_is_contig(mslice[0], 'C', self.view.ndim) # <<<<<<<<<<<<<< + * + * def is_f_contig(self): */ - __pyx_t_12 = __pyx_v_n_aspect_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 628, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":620 - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + /* "View.MemoryView":624 + * + * + * def is_c_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp */ - __pyx_t_15 = __pyx_v_n_opinion_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; - /* "cornac/models/comparer/recom_comparer_sub.pyx":621 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] - */ - __pyx_t_24 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_o_idx; - __pyx_t_20 = __pyx_v_k; - __pyx_t_21 = __pyx_v_i; - __pyx_t_22 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_24 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":622 - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] +/* "View.MemoryView":630 + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + * def is_f_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_25 = __pyx_v_j; - __pyx_t_24 = __pyx_v_o_idx; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i_idx; - __pyx_t_21 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_23 * __pyx_v_O.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":623 - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] +/* Python wrapper */ +static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_f_contig (wrapper)", 0); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("is_f_contig", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "is_f_contig", 0))) return NULL; + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice *__pyx_v_mslice; + __Pyx_memviewslice __pyx_v_tmp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_f_contig", 0); + + /* "View.MemoryView":633 + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< + * return slice_is_contig(mslice[0], 'F', self.view.ndim) * */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_o_idx; - __pyx_t_20 = __pyx_v_k; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_23 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 633, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":624 - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< + /* "View.MemoryView":634 + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) + * return slice_is_contig(mslice[0], 'F', self.view.ndim) # <<<<<<<<<<<<<< * - * for _ in prange(num_bpr_samples, schedule='guided'): + * def copy(self): */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_j; - __pyx_t_22 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); - } - } - } - } - } - } - } + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 634, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":626 - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + /* "View.MemoryView":630 + * return slice_is_contig(mslice[0], 'C', self.view.ndim) * - * for _ in prange(num_bpr_samples, schedule='guided'): # <<<<<<<<<<<<<< - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] + * def is_f_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp */ - __pyx_t_8 = __pyx_v_num_bpr_samples; - if ((1 == 0)) abort(); - { - __pyx_t_4 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_4 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_del_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_i_ij) lastprivate(__pyx_v_i_score) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_j_score) lastprivate(__pyx_v_jdx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_s) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_4; __pyx_t_7++){ - { - __pyx_v__ = (short)(0 + 1 * __pyx_t_7); - /* Initialize private variables to invalid values */ - __pyx_v_del_bpr = ((float)__PYX_NAN()); - __pyx_v_i = ((short)0xbad0bad0); - __pyx_v_i_idx = ((short)0xbad0bad0); - __pyx_v_i_ij = ((float)__PYX_NAN()); - __pyx_v_i_score = ((float)__PYX_NAN()); - __pyx_v_idx = ((short)0xbad0bad0); - __pyx_v_j = ((short)0xbad0bad0); - __pyx_v_j_idx = ((short)0xbad0bad0); - __pyx_v_j_score = ((float)__PYX_NAN()); - __pyx_v_jdx = ((short)0xbad0bad0); - __pyx_v_k = ((short)0xbad0bad0); - __pyx_v_pred = ((float)__PYX_NAN()); - __pyx_v_s = ((long)0xbad0bad0); - __pyx_v_u_idx = ((short)0xbad0bad0); - __pyx_v_z = ((float)__PYX_NAN()); - /* "cornac/models/comparer/recom_comparer_sub.pyx":627 + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":636 + * return slice_is_contig(mslice[0], 'F', self.view.ndim) * - * for _ in prange(num_bpr_samples, schedule='guided'): - * idx = rng_pos.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] + * def copy(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos->__pyx_vtab)->generate(__pyx_v_rng_pos, __pyx_v_thread_id); - /* "cornac/models/comparer/recom_comparer_sub.pyx":628 - * for _ in prange(num_bpr_samples, schedule='guided'): - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] # <<<<<<<<<<<<<< - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) - */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_u_idx = (*((short *) ( /* dim=0 */ (__pyx_v_user_ids.data + __pyx_t_23 * __pyx_v_user_ids.strides[0]) ))); +/* Python wrapper */ +static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("copy (wrapper)", 0); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("copy", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "copy", 0))) return NULL; + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(((struct __pyx_memoryview_obj *)__pyx_v_self)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":629 - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] # <<<<<<<<<<<<<< - * jdx = rng_neg.generate(thread_id) - * j_idx = neg_item_ids[jdx] - */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_i_idx = (*((short *) ( /* dim=0 */ (__pyx_v_item_ids.data + __pyx_t_23 * __pyx_v_item_ids.strides[0]) ))); + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":630 - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) # <<<<<<<<<<<<<< - * j_idx = neg_item_ids[jdx] +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice __pyx_v_mslice; + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("copy", 0); + + /* "View.MemoryView":638 + * def copy(self): + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS # <<<<<<<<<<<<<< * + * slice_copy(self, &mslice) */ - __pyx_v_jdx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_neg->__pyx_vtab)->generate(__pyx_v_rng_neg, __pyx_v_thread_id); + __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_F_CONTIGUOUS)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":631 - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) - * j_idx = neg_item_ids[jdx] # <<<<<<<<<<<<<< + /* "View.MemoryView":640 + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS * - * s = 1 + * slice_copy(self, &mslice) # <<<<<<<<<<<<<< + * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, + * self.view.itemsize, */ - __pyx_t_23 = __pyx_v_jdx; - __pyx_v_j_idx = (*((short *) ( /* dim=0 */ (__pyx_v_neg_item_ids.data + __pyx_t_23 * __pyx_v_neg_item_ids.strides[0]) ))); + __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_mslice)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":633 - * j_idx = neg_item_ids[jdx] + /* "View.MemoryView":641 * - * s = 1 # <<<<<<<<<<<<<< - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): + * slice_copy(self, &mslice) + * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, # <<<<<<<<<<<<<< + * self.view.itemsize, + * flags|PyBUF_C_CONTIGUOUS, */ - __pyx_v_s = 1; + __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_mslice), ((char *)"c"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_C_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 641, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":635 - * s = 1 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + /* "View.MemoryView":646 + * self.dtype_is_object) + * + * return memoryview_copy_from_slice(self, &mslice) # <<<<<<<<<<<<<< + * + * def copy_fortran(self): */ - __pyx_t_26 = (__pyx_fuse_0__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero(__pyx_v_indptr, __pyx_v_item_ids, __pyx_v_u_idx, __pyx_v_j_idx) != 0); - if (__pyx_t_26) { + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_mslice)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 646, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":636 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] # <<<<<<<<<<<<<< - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: + /* "View.MemoryView":636 + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + * def copy(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS */ - __pyx_v_i_score = (__pyx_v_rating_dict->my_map[__pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_i_idx)]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":637 - * if has_non_zero(indptr, item_ids, u_idx, j_idx): - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] # <<<<<<<<<<<<<< - * if i_score == j_score: - * skipped += 1 - */ - __pyx_v_j_score = (__pyx_v_rating_dict->my_map[__pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_j_idx)]); + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":638 - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: # <<<<<<<<<<<<<< - * skipped += 1 - * continue +/* "View.MemoryView":648 + * return memoryview_copy_from_slice(self, &mslice) + * + * def copy_fortran(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS */ - __pyx_t_26 = ((__pyx_v_i_score == __pyx_v_j_score) != 0); - if (__pyx_t_26) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":639 - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: - * skipped += 1 # <<<<<<<<<<<<<< - * continue - * elif i_score < j_score: - */ - __pyx_v_skipped = (__pyx_v_skipped + 1); +/* Python wrapper */ +static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("copy_fortran (wrapper)", 0); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("copy_fortran", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "copy_fortran", 0))) return NULL; + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(((struct __pyx_memoryview_obj *)__pyx_v_self)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":640 - * if i_score == j_score: - * skipped += 1 - * continue # <<<<<<<<<<<<<< - * elif i_score < j_score: - * s = -1 + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice __pyx_v_src; + __Pyx_memviewslice __pyx_v_dst; + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("copy_fortran", 0); + + /* "View.MemoryView":650 + * def copy_fortran(self): + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS # <<<<<<<<<<<<<< + * + * slice_copy(self, &src) */ - goto __pyx_L34_continue; + __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_C_CONTIGUOUS)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":638 - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: # <<<<<<<<<<<<<< - * skipped += 1 - * continue + /* "View.MemoryView":652 + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + * + * slice_copy(self, &src) # <<<<<<<<<<<<<< + * dst = slice_copy_contig(&src, "fortran", self.view.ndim, + * self.view.itemsize, */ - } + __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_src)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":641 - * skipped += 1 - * continue - * elif i_score < j_score: # <<<<<<<<<<<<<< - * s = -1 + /* "View.MemoryView":653 * + * slice_copy(self, &src) + * dst = slice_copy_contig(&src, "fortran", self.view.ndim, # <<<<<<<<<<<<<< + * self.view.itemsize, + * flags|PyBUF_F_CONTIGUOUS, */ - __pyx_t_26 = ((__pyx_v_i_score < __pyx_v_j_score) != 0); - if (__pyx_t_26) { + __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_src), ((char *)"fortran"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_F_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 653, __pyx_L1_error) + __pyx_v_dst = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":642 - * continue - * elif i_score < j_score: - * s = -1 # <<<<<<<<<<<<<< + /* "View.MemoryView":658 + * self.dtype_is_object) + * + * return memoryview_copy_from_slice(self, &dst) # <<<<<<<<<<<<<< + * * - * pred = ( */ - __pyx_v_s = -1L; + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_dst)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":641 - * skipped += 1 - * continue - * elif i_score < j_score: # <<<<<<<<<<<<<< - * s = -1 + /* "View.MemoryView":648 + * return memoryview_copy_from_slice(self, &mslice) * + * def copy_fortran(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS */ - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":635 - * s = 1 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): */ - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":647 - * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) - * ) * s # <<<<<<<<<<<<<< - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; + __pyx_r = __pyx_pf___pyx_memoryview___reduce_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" */ - __pyx_v_pred = ((__pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_n_aspects) - __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_n_aspects)) * __pyx_v_s); + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0); + __PYX_ERR(1, 2, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":648 - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) - * ) * s - * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< - * if z < .5: - * correct += 1 + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): */ - __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":649 - * ) * s - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * correct += 1 - * del_bpr = ld_bpr * z * s + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" */ - __pyx_t_26 = ((__pyx_v_z < .5) != 0); - if (__pyx_t_26) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":650 - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: - * correct += 1 # <<<<<<<<<<<<<< - * del_bpr = ld_bpr * z * s - * +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + PyObject* values[1] = {0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf___pyx_memoryview_2__setstate_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<< */ - __pyx_v_correct = (__pyx_v_correct + 1); + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0); + __PYX_ERR(1, 4, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":649 - * ) * s - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * correct += 1 - * del_bpr = ld_bpr * z * s + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" */ - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":651 - * if z < .5: - * correct += 1 - * del_bpr = ld_bpr * z * s # <<<<<<<<<<<<<< + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":662 * - * bpr_loss += log(1 / (1 + exp(-pred))) + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo */ - __pyx_v_del_bpr = ((__pyx_v_ld_bpr * __pyx_v_z) * __pyx_v_s); - /* "cornac/models/comparer/recom_comparer_sub.pyx":653 - * del_bpr = ld_bpr * z * s - * - * bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< - * - * for i in range(n_user_factors): +static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_flags, int __pyx_v_dtype_is_object, __Pyx_TypeInfo *__pyx_v_typeinfo) { + struct __pyx_memoryview_obj *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_cwrapper", 0); + + /* "View.MemoryView":663 + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): + * cdef memoryview result = memoryview(o, flags, dtype_is_object) # <<<<<<<<<<<<<< + * result.typeinfo = typeinfo + * return result */ - __pyx_v_bpr_loss = (__pyx_v_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 663, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 663, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 663, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_o); + __Pyx_GIVEREF(__pyx_v_o); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_o); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 663, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_memoryview_obj *)__pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":655 - * bpr_loss += log(1 / (1 + exp(-pred))) + /* "View.MemoryView":664 + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo # <<<<<<<<<<<<<< + * return result * - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] */ - __pyx_t_3 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __pyx_v_result->typeinfo = __pyx_v_typeinfo; - /* "cornac/models/comparer/recom_comparer_sub.pyx":656 + /* "View.MemoryView":665 + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + * return result # <<<<<<<<<<<<<< * - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): + * @cname('__pyx_memoryview_check') */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_result); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":657 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + /* "View.MemoryView":662 + * + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo */ - __pyx_t_23 = __pyx_v_i_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_j_idx; - __pyx_t_9 = __pyx_v_j; - __pyx_v_i_ij = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":658 - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":659 - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] +/* "View.MemoryView":668 + * + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o) noexcept: # <<<<<<<<<<<<<< + * return isinstance(o, memoryview) + * */ - __pyx_t_9 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_n_aspects; - __pyx_t_23 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":660 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_9 = __pyx_v_n_aspects; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_i_ij) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); +static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("memoryview_check", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":661 - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij + /* "View.MemoryView":669 + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o) noexcept: + * return isinstance(o, memoryview) # <<<<<<<<<<<<<< + * + * cdef tuple _unellipsify(object index, int ndim): */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_18 = __pyx_v_n_aspects; - __pyx_t_19 = __pyx_v_k; - __pyx_t_21 = __pyx_v_i_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); + __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_o, __pyx_memoryview_type); + __pyx_r = __pyx_t_1; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":662 - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij + /* "View.MemoryView":668 + * + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o) noexcept: # <<<<<<<<<<<<<< + * return isinstance(o, memoryview) * */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_9 = __pyx_v_n_aspects; - __pyx_t_20 = __pyx_v_k; - __pyx_t_22 = __pyx_v_j_idx; - __pyx_t_21 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_18 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":663 - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij # <<<<<<<<<<<<<< + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":671 + * return isinstance(o, memoryview) * - * for _ in prange(num_pair_samples, schedule='guided'): + * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< + * """ + * Replace all ellipses with full slices and fill incomplete indices with */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_18 = __pyx_v_n_aspects; - __pyx_t_19 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij); - } - } - } - goto __pyx_L48; - __pyx_L34_continue:; - goto __pyx_L48; - __pyx_L48:; - } - } - } - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":665 - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij +static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_idx; + PyObject *__pyx_v_tup = NULL; + PyObject *__pyx_v_result = NULL; + int __pyx_v_have_slices; + int __pyx_v_seen_ellipsis; + PyObject *__pyx_v_item = NULL; + Py_ssize_t __pyx_v_nslices; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_UCS4 __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_unellipsify", 0); + + /* "View.MemoryView":677 + * """ + * cdef Py_ssize_t idx + * tup = index if isinstance(index, tuple) else (index,) # <<<<<<<<<<<<<< * - * for _ in prange(num_pair_samples, schedule='guided'): # <<<<<<<<<<<<<< - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] + * result = [slice(None)] * ndim */ - __pyx_t_4 = __pyx_v_num_pair_samples; - if ((1 == 0)) abort(); - { - __pyx_t_8 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_8 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_a_ji) lastprivate(__pyx_v_del_aspect_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){ - { - __pyx_v__ = (short)(0 + 1 * __pyx_t_7); - /* Initialize private variables to invalid values */ - __pyx_v_a_idx = ((short)0xbad0bad0); - __pyx_v_a_ji = ((float)__PYX_NAN()); - __pyx_v_del_aspect_bpr = ((float)__PYX_NAN()); - __pyx_v_i = ((short)0xbad0bad0); - __pyx_v_i_idx = ((short)0xbad0bad0); - __pyx_v_idx = ((short)0xbad0bad0); - __pyx_v_j = ((short)0xbad0bad0); - __pyx_v_j_idx = ((short)0xbad0bad0); - __pyx_v_k = ((short)0xbad0bad0); - __pyx_v_pred = ((float)__PYX_NAN()); - __pyx_v_u_idx = ((short)0xbad0bad0); - __pyx_v_z = ((float)__PYX_NAN()); + __pyx_t_2 = PyTuple_Check(__pyx_v_index); + if (__pyx_t_2) { + __Pyx_INCREF(((PyObject*)__pyx_v_index)); + __pyx_t_1 = __pyx_v_index; + } else { + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 677, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_index); + __Pyx_GIVEREF(__pyx_v_index); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_index); + __pyx_t_1 = __pyx_t_3; + __pyx_t_3 = 0; + } + __pyx_v_tup = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":666 + /* "View.MemoryView":679 + * tup = index if isinstance(index, tuple) else (index,) * - * for _ in prange(num_pair_samples, schedule='guided'): - * idx = rng_pos_pair.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] + * result = [slice(None)] * ndim # <<<<<<<<<<<<<< + * have_slices = False + * seen_ellipsis = False */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_pair->__pyx_vtab)->generate(__pyx_v_rng_pos_pair, __pyx_v_thread_id); + __pyx_t_1 = PyList_New(1 * ((__pyx_v_ndim<0) ? 0:__pyx_v_ndim)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + { Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < __pyx_v_ndim; __pyx_temp++) { + __Pyx_INCREF(__pyx_slice__5); + __Pyx_GIVEREF(__pyx_slice__5); + PyList_SET_ITEM(__pyx_t_1, __pyx_temp, __pyx_slice__5); + } + } + __pyx_v_result = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":667 - * for _ in prange(num_pair_samples, schedule='guided'): - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] # <<<<<<<<<<<<<< - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] + /* "View.MemoryView":680 + * + * result = [slice(None)] * ndim + * have_slices = False # <<<<<<<<<<<<<< + * seen_ellipsis = False + * idx = 0 */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_u_idx = (*((short *) ( /* dim=0 */ (__pyx_v_p_user_indices.data + __pyx_t_23 * __pyx_v_p_user_indices.strides[0]) ))); + __pyx_v_have_slices = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":668 - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] # <<<<<<<<<<<<<< - * j_idx = later_indices[idx] - * a_idx = aspect_indices[idx] + /* "View.MemoryView":681 + * result = [slice(None)] * ndim + * have_slices = False + * seen_ellipsis = False # <<<<<<<<<<<<<< + * idx = 0 + * for item in tup: */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_i_idx = (*((short *) ( /* dim=0 */ (__pyx_v_earlier_indices.data + __pyx_t_23 * __pyx_v_earlier_indices.strides[0]) ))); + __pyx_v_seen_ellipsis = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":669 - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] # <<<<<<<<<<<<<< - * a_idx = aspect_indices[idx] - * + /* "View.MemoryView":682 + * have_slices = False + * seen_ellipsis = False + * idx = 0 # <<<<<<<<<<<<<< + * for item in tup: + * if item is Ellipsis: */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_j_idx = (*((short *) ( /* dim=0 */ (__pyx_v_later_indices.data + __pyx_t_23 * __pyx_v_later_indices.strides[0]) ))); + __pyx_v_idx = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":670 - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] - * a_idx = aspect_indices[idx] # <<<<<<<<<<<<<< - * - * pred = ( + /* "View.MemoryView":683 + * seen_ellipsis = False + * idx = 0 + * for item in tup: # <<<<<<<<<<<<<< + * if item is Ellipsis: + * if not seen_ellipsis: */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_a_idx = (*((short *) ( /* dim=0 */ (__pyx_v_aspect_indices.data + __pyx_t_23 * __pyx_v_aspect_indices.strides[0]) ))); + if (unlikely(__pyx_v_tup == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(1, 683, __pyx_L1_error) + } + __pyx_t_1 = __pyx_v_tup; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0; + for (;;) { + if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(1, 683, __pyx_L1_error) + #else + __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 683, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_3); + __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":674 - * pred = ( - * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< - * ) - * + /* "View.MemoryView":684 + * idx = 0 + * for item in tup: + * if item is Ellipsis: # <<<<<<<<<<<<<< + * if not seen_ellipsis: + * idx += ndim - len(tup) */ - __pyx_v_pred = (__pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_a_idx) - __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx)); + __pyx_t_2 = (__pyx_v_item == __pyx_builtin_Ellipsis); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":677 - * ) - * - * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< - * if z < .5: - * aspect_correct += 1 + /* "View.MemoryView":685 + * for item in tup: + * if item is Ellipsis: + * if not seen_ellipsis: # <<<<<<<<<<<<<< + * idx += ndim - len(tup) + * seen_ellipsis = True */ - __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); + __pyx_t_2 = (!__pyx_v_seen_ellipsis); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":678 - * - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * aspect_correct += 1 - * + /* "View.MemoryView":686 + * if item is Ellipsis: + * if not seen_ellipsis: + * idx += ndim - len(tup) # <<<<<<<<<<<<<< + * seen_ellipsis = True + * have_slices = True */ - __pyx_t_26 = ((__pyx_v_z < .5) != 0); - if (__pyx_t_26) { + if (unlikely(__pyx_v_tup == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 686, __pyx_L1_error) + } + __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_tup); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 686, __pyx_L1_error) + __pyx_v_idx = (__pyx_v_idx + (__pyx_v_ndim - __pyx_t_5)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":679 - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: - * aspect_correct += 1 # <<<<<<<<<<<<<< - * - * del_aspect_bpr = lambda_d * z + /* "View.MemoryView":687 + * if not seen_ellipsis: + * idx += ndim - len(tup) + * seen_ellipsis = True # <<<<<<<<<<<<<< + * have_slices = True + * else: */ - __pyx_v_aspect_correct = (__pyx_v_aspect_correct + 1); + __pyx_v_seen_ellipsis = 1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":678 - * - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * aspect_correct += 1 - * + /* "View.MemoryView":685 + * for item in tup: + * if item is Ellipsis: + * if not seen_ellipsis: # <<<<<<<<<<<<<< + * idx += ndim - len(tup) + * seen_ellipsis = True */ - } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":681 - * aspect_correct += 1 - * - * del_aspect_bpr = lambda_d * z # <<<<<<<<<<<<<< - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): + /* "View.MemoryView":688 + * idx += ndim - len(tup) + * seen_ellipsis = True + * have_slices = True # <<<<<<<<<<<<<< + * else: + * if isinstance(item, slice): */ - __pyx_v_del_aspect_bpr = (__pyx_v_lambda_d * __pyx_v_z); + __pyx_v_have_slices = 1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":682 - * - * del_aspect_bpr = lambda_d * z - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< - * for i in range(n_user_factors): - * for j in range(n_item_factors): + /* "View.MemoryView":684 + * idx = 0 + * for item in tup: + * if item is Ellipsis: # <<<<<<<<<<<<<< + * if not seen_ellipsis: + * idx += ndim - len(tup) */ - __pyx_v_aspect_bpr_loss = (__pyx_v_aspect_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); + goto __pyx_L5; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":683 - * del_aspect_bpr = lambda_d * z - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] + /* "View.MemoryView":690 + * have_slices = True + * else: + * if isinstance(item, slice): # <<<<<<<<<<<<<< + * have_slices = True + * elif not PyIndex_Check(item): */ - __pyx_t_3 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + /*else*/ { + __pyx_t_2 = PySlice_Check(__pyx_v_item); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":684 - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): + /* "View.MemoryView":691 + * else: + * if isinstance(item, slice): + * have_slices = True # <<<<<<<<<<<<<< + * elif not PyIndex_Check(item): + * raise TypeError, f"Cannot index with type '{type(item)}'" */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __pyx_v_have_slices = 1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":685 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + /* "View.MemoryView":690 + * have_slices = True + * else: + * if isinstance(item, slice): # <<<<<<<<<<<<<< + * have_slices = True + * elif not PyIndex_Check(item): */ - __pyx_t_23 = __pyx_v_j_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i_idx; - __pyx_t_9 = __pyx_v_j; - __pyx_v_a_ji = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); + goto __pyx_L7; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":686 - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + /* "View.MemoryView":692 + * if isinstance(item, slice): + * have_slices = True + * elif not PyIndex_Check(item): # <<<<<<<<<<<<<< + * raise TypeError, f"Cannot index with type '{type(item)}'" + * result[idx] = item */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __pyx_t_2 = (!(PyIndex_Check(__pyx_v_item) != 0)); + if (unlikely(__pyx_t_2)) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":687 - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + /* "View.MemoryView":693 + * have_slices = True + * elif not PyIndex_Check(item): + * raise TypeError, f"Cannot index with type '{type(item)}'" # <<<<<<<<<<<<<< + * result[idx] = item + * idx += 1 */ - __pyx_t_9 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 693, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = 0; + __pyx_t_6 = 127; + __Pyx_INCREF(__pyx_kp_u_Cannot_index_with_type); + __pyx_t_5 += 24; + __Pyx_GIVEREF(__pyx_kp_u_Cannot_index_with_type); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Cannot_index_with_type); + __pyx_t_7 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_v_item)), __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 693, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_6; + __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7); + __pyx_t_7 = 0; + __Pyx_INCREF(__pyx_kp_u__6); + __pyx_t_5 += 1; + __Pyx_GIVEREF(__pyx_kp_u__6); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__6); + __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 693, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_t_7, 0, 0); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __PYX_ERR(1, 693, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":688 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + /* "View.MemoryView":692 + * if isinstance(item, slice): + * have_slices = True + * elif not PyIndex_Check(item): # <<<<<<<<<<<<<< + * raise TypeError, f"Cannot index with type '{type(item)}'" + * result[idx] = item */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_20 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_a_ji) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); + } + __pyx_L7:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":689 - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji + /* "View.MemoryView":694 + * elif not PyIndex_Check(item): + * raise TypeError, f"Cannot index with type '{type(item)}'" + * result[idx] = item # <<<<<<<<<<<<<< + * idx += 1 + * */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_20 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_k; - __pyx_t_21 = __pyx_v_j_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_20 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); + if (unlikely((__Pyx_SetItemInt(__pyx_v_result, __pyx_v_idx, __pyx_v_item, Py_ssize_t, 1, PyInt_FromSsize_t, 1, 1, 1) < 0))) __PYX_ERR(1, 694, __pyx_L1_error) + } + __pyx_L5:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":690 - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji + /* "View.MemoryView":695 + * raise TypeError, f"Cannot index with type '{type(item)}'" + * result[idx] = item + * idx += 1 # <<<<<<<<<<<<<< * + * nslices = ndim - idx */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i_idx; - __pyx_t_21 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_20 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); + __pyx_v_idx = (__pyx_v_idx + 1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":691 - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji # <<<<<<<<<<<<<< + /* "View.MemoryView":683 + * seen_ellipsis = False + * idx = 0 + * for item in tup: # <<<<<<<<<<<<<< + * if item is Ellipsis: + * if not seen_ellipsis: + */ + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "View.MemoryView":697 + * idx += 1 + * + * nslices = ndim - idx # <<<<<<<<<<<<<< + * return have_slices or nslices, tuple(result) * - * # update params with AdaGrad */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_20 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji); - } - } - } - } - } - } - } - } - } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } + __pyx_v_nslices = (__pyx_v_ndim - __pyx_v_idx); - /* "cornac/models/comparer/recom_comparer_sub.pyx":568 - * del_a_reg.fill(0) - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): + /* "View.MemoryView":698 + * + * nslices = ndim - idx + * return have_slices or nslices, tuple(result) # <<<<<<<<<<<<<< + * + * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1: */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L5; - } - __pyx_L5:; - } + __Pyx_XDECREF(__pyx_r); + if (!__pyx_v_have_slices) { + } else { + __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_have_slices); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = __pyx_t_7; + __pyx_t_7 = 0; + goto __pyx_L9_bool_binop_done; } + __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_nslices); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = __pyx_t_7; + __pyx_t_7 = 0; + __pyx_L9_bool_binop_done:; + __pyx_t_7 = PyList_AsTuple(__pyx_v_result); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7); + __pyx_t_1 = 0; + __pyx_t_7 = 0; + __pyx_r = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":694 + /* "View.MemoryView":671 + * return isinstance(o, memoryview) * - * # update params with AdaGrad - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): + * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< + * """ + * Replace all ellipses with full slices and fill incomplete indices with */ - { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); - #endif - /*try:*/ { - { - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) - #endif - #ifdef _OPENMP - #pragma omp parallel private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_3, __pyx_t_9) num_threads(__pyx_v_n_threads) - #endif /* _OPENMP */ - { - /* "cornac/models/comparer/recom_comparer_sub.pyx":695 - * # update params with AdaGrad - * with nogil, parallel(num_threads=n_threads): - * for i in prange(n_user_factors, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_users): - * if del_u[j, i] != 0: - */ - __pyx_t_3 = __pyx_v_n_user_factors; - if ((1 == 0)) abort(); - { - __pyx_t_12 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_12 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_12; __pyx_t_10++){ - { - __pyx_v_i = (short)(0 + 1 * __pyx_t_10); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((short)0xbad0bad0); - __pyx_v_k = ((short)0xbad0bad0); + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("View.MemoryView._unellipsify", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_tup); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_item); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":696 - * with nogil, parallel(num_threads=n_threads): - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): # <<<<<<<<<<<<<< - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] +/* "View.MemoryView":700 + * return have_slices or nslices, tuple(result) + * + * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1: # <<<<<<<<<<<<<< + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: */ - __pyx_t_13 = __pyx_v_n_users; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { - __pyx_v_j = __pyx_t_11; - /* "cornac/models/comparer/recom_comparer_sub.pyx":697 - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): - * if del_u[j, i] != 0: # <<<<<<<<<<<<<< - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - */ - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { +static int assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_suboffset; + int __pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t *__pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assert_direct_dimensions", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":698 - * for j in range(n_users): - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] # <<<<<<<<<<<<<< - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + /* "View.MemoryView":701 + * + * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1: + * for suboffset in suboffsets[:ndim]: # <<<<<<<<<<<<<< + * if suboffset >= 0: + * raise ValueError, "Indirect dimensions not supported" */ - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_u_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) ))))); + __pyx_t_2 = (__pyx_v_suboffsets + __pyx_v_ndim); + for (__pyx_t_3 = __pyx_v_suboffsets; __pyx_t_3 < __pyx_t_2; __pyx_t_3++) { + __pyx_t_1 = __pyx_t_3; + __pyx_v_suboffset = (__pyx_t_1[0]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":697 - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): - * if del_u[j, i] != 0: # <<<<<<<<<<<<<< - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + /* "View.MemoryView":702 + * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1: + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * raise ValueError, "Indirect dimensions not supported" + * return 0 # return type just used as an error flag */ - } + __pyx_t_4 = (__pyx_v_suboffset >= 0); + if (unlikely(__pyx_t_4)) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":699 - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] # <<<<<<<<<<<<<< - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: + /* "View.MemoryView":703 + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + * raise ValueError, "Indirect dimensions not supported" # <<<<<<<<<<<<<< + * return 0 # return type just used as an error flag + * */ - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_19 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_U.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)))); + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Indirect_dimensions_not_supporte, 0, 0); + __PYX_ERR(1, 703, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":700 - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] # <<<<<<<<<<<<<< - * if U[j, i] < 0: - * U[j, i] = 0 + /* "View.MemoryView":702 + * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1: + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * raise ValueError, "Indirect dimensions not supported" + * return 0 # return type just used as an error flag */ - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_24 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_U.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[1].strides))); + } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":701 - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: # <<<<<<<<<<<<<< - * U[j, i] = 0 + /* "View.MemoryView":704 + * if suboffset >= 0: + * raise ValueError, "Indirect dimensions not supported" + * return 0 # return type just used as an error flag # <<<<<<<<<<<<<< + * * */ - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_26 = (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_r = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":702 - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: - * U[j, i] = 0 # <<<<<<<<<<<<<< + /* "View.MemoryView":700 + * return have_slices or nslices, tuple(result) * - * for j in range(n_item_factors): + * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1: # <<<<<<<<<<<<<< + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )) = 0.0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":701 - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: # <<<<<<<<<<<<<< - * U[j, i] = 0 + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.assert_direct_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":711 * + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< + * cdef int new_ndim = 0, suboffset_dim = -1, dim + * cdef bint negative_step */ - } - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":704 - * U[j, i] = 0 - * - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: +static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *__pyx_v_memview, PyObject *__pyx_v_indices) { + int __pyx_v_new_ndim; + int __pyx_v_suboffset_dim; + int __pyx_v_dim; + __Pyx_memviewslice __pyx_v_src; + __Pyx_memviewslice __pyx_v_dst; + __Pyx_memviewslice *__pyx_v_p_src; + struct __pyx_memoryviewslice_obj *__pyx_v_memviewsliceobj = 0; + __Pyx_memviewslice *__pyx_v_p_dst; + int *__pyx_v_p_suboffset_dim; + Py_ssize_t __pyx_v_start; + Py_ssize_t __pyx_v_stop; + Py_ssize_t __pyx_v_step; + Py_ssize_t __pyx_v_cindex; + int __pyx_v_have_start; + int __pyx_v_have_stop; + int __pyx_v_have_step; + PyObject *__pyx_v_index = NULL; + struct __pyx_memoryview_obj *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + struct __pyx_memoryview_obj *__pyx_t_3; + char *__pyx_t_4; + int __pyx_t_5; + Py_ssize_t __pyx_t_6; + PyObject *(*__pyx_t_7)(PyObject *); + PyObject *__pyx_t_8 = NULL; + Py_ssize_t __pyx_t_9; + int __pyx_t_10; + Py_ssize_t __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memview_slice", 0); + + /* "View.MemoryView":712 + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): + * cdef int new_ndim = 0, suboffset_dim = -1, dim # <<<<<<<<<<<<<< + * cdef bint negative_step + * cdef __Pyx_memviewslice src, dst */ - __pyx_t_13 = __pyx_v_n_item_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { - __pyx_v_j = __pyx_t_11; + __pyx_v_new_ndim = 0; + __pyx_v_suboffset_dim = -1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":705 + /* "View.MemoryView":719 * - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * + * memset(&dst, 0, sizeof(dst)) # <<<<<<<<<<<<<< + * + * cdef _memoryviewslice memviewsliceobj */ - __pyx_t_16 = __pyx_v_n_aspect_factors; - __pyx_t_27 = __pyx_t_16; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_27; __pyx_t_14+=1) { - __pyx_v_k = __pyx_t_14; + (void)(memset((&__pyx_v_dst), 0, (sizeof(__pyx_v_dst)))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":706 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + /* "View.MemoryView":723 + * cdef _memoryviewslice memviewsliceobj + * + * assert memview.view.ndim > 0 # <<<<<<<<<<<<<< + * + * if isinstance(memview, _memoryviewslice): */ - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(__pyx_assertions_enabled())) { + __pyx_t_1 = (__pyx_v_memview->view.ndim > 0); + if (unlikely(!__pyx_t_1)) { + __Pyx_Raise(__pyx_builtin_AssertionError, 0, 0, 0); + __PYX_ERR(1, 723, __pyx_L1_error) + } + } + #else + if ((1)); else __PYX_ERR(1, 723, __pyx_L1_error) + #endif - /* "cornac/models/comparer/recom_comparer_sub.pyx":707 - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + /* "View.MemoryView":725 + * assert memview.view.ndim > 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) ))))); + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":706 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + /* "View.MemoryView":726 + * + * if isinstance(memview, _memoryviewslice): + * memviewsliceobj = memview # <<<<<<<<<<<<<< + * p_src = &memviewsliceobj.from_slice + * else: */ - } + if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 726, __pyx_L1_error) + __pyx_t_2 = ((PyObject *)__pyx_v_memview); + __Pyx_INCREF(__pyx_t_2); + __pyx_v_memviewsliceobj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":708 - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: + /* "View.MemoryView":727 + * if isinstance(memview, _memoryviewslice): + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice # <<<<<<<<<<<<<< + * else: + * slice_copy(memview, &src) */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_22 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G1.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)))); + __pyx_v_p_src = (&__pyx_v_memviewsliceobj->from_slice); - /* "cornac/models/comparer/recom_comparer_sub.pyx":709 - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< - * if G1[i, j, k] < 0: - * G1[i, j, k] = 0 + /* "View.MemoryView":725 + * assert memview.view.ndim > 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_22 * __pyx_v_G1.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_23 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_25 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_9 * __pyx_v_sgrad_G1.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides))); + goto __pyx_L3; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":710 - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< - * G1[i, j, k] = 0 + /* "View.MemoryView":729 + * p_src = &memviewsliceobj.from_slice + * else: + * slice_copy(memview, &src) # <<<<<<<<<<<<<< + * p_src = &src * */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_26 = (((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_24 * __pyx_v_G1.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + /*else*/ { + __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_src)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":711 - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: - * G1[i, j, k] = 0 # <<<<<<<<<<<<<< + /* "View.MemoryView":730 + * else: + * slice_copy(memview, &src) + * p_src = &src # <<<<<<<<<<<<<< + * * - * for j in range(n_aspect_factors): */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )) = 0.0; + __pyx_v_p_src = (&__pyx_v_src); + } + __pyx_L3:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":710 - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< - * G1[i, j, k] = 0 + /* "View.MemoryView":736 + * + * + * dst.memview = p_src.memview # <<<<<<<<<<<<<< + * dst.data = p_src.data * */ - } - } - } + __pyx_t_3 = __pyx_v_p_src->memview; + __pyx_v_dst.memview = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":713 - * G1[i, j, k] = 0 + /* "View.MemoryView":737 + * + * dst.memview = p_src.memview + * dst.data = p_src.data # <<<<<<<<<<<<<< + * * - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: */ - __pyx_t_13 = __pyx_v_n_aspect_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { - __pyx_v_j = __pyx_t_11; + __pyx_t_4 = __pyx_v_p_src->data; + __pyx_v_dst.data = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":714 + /* "View.MemoryView":742 * - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * + * cdef __Pyx_memviewslice *p_dst = &dst # <<<<<<<<<<<<<< + * cdef int *p_suboffset_dim = &suboffset_dim + * cdef Py_ssize_t start, stop, step, cindex */ - __pyx_t_16 = __pyx_v_n_opinion_factors; - __pyx_t_27 = __pyx_t_16; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_27; __pyx_t_14+=1) { - __pyx_v_k = __pyx_t_14; + __pyx_v_p_dst = (&__pyx_v_dst); - /* "cornac/models/comparer/recom_comparer_sub.pyx":715 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + /* "View.MemoryView":743 + * + * cdef __Pyx_memviewslice *p_dst = &dst + * cdef int *p_suboffset_dim = &suboffset_dim # <<<<<<<<<<<<<< + * cdef Py_ssize_t start, stop, step, cindex + * cdef bint have_start, have_stop, have_step */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __pyx_v_p_suboffset_dim = (&__pyx_v_suboffset_dim); - /* "cornac/models/comparer/recom_comparer_sub.pyx":716 - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + /* "View.MemoryView":747 + * cdef bint have_start, have_stop, have_step + * + * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< + * if PyIndex_Check(index): + * cindex = index */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) ))))); + __pyx_t_5 = 0; + if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) { + __pyx_t_2 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0; + __pyx_t_7 = NULL; + } else { + __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 747, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 747, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_7)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_8 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(1, 747, __pyx_L1_error) + #else + __pyx_t_8 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 747, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + #endif + } else { + if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(1, 747, __pyx_L1_error) + #else + __pyx_t_8 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 747, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + #endif + } + } else { + __pyx_t_8 = __pyx_t_7(__pyx_t_2); + if (unlikely(!__pyx_t_8)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(1, 747, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_8); + } + __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_8); + __pyx_t_8 = 0; + __pyx_v_dim = __pyx_t_5; + __pyx_t_5 = (__pyx_t_5 + 1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":715 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + /* "View.MemoryView":748 + * + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): # <<<<<<<<<<<<<< + * cindex = index + * slice_memviewslice( */ - } + __pyx_t_1 = (PyIndex_Check(__pyx_v_index) != 0); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":717 - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: + /* "View.MemoryView":749 + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): + * cindex = index # <<<<<<<<<<<<<< + * slice_memviewslice( + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_20 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_22 * __pyx_v_sgrad_G2.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)))); + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 749, __pyx_L1_error) + __pyx_v_cindex = __pyx_t_9; - /* "cornac/models/comparer/recom_comparer_sub.pyx":718 - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< - * if G2[i, j, k] < 0: - * G2[i, j, k] = 0 + /* "View.MemoryView":750 + * if PyIndex_Check(index): + * cindex = index + * slice_memviewslice( # <<<<<<<<<<<<<< + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_22 * __pyx_v_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_G2.strides[1]) ) + __pyx_t_20 * __pyx_v_G2.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_24 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G2.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides))); + __pyx_t_10 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_cindex, 0, 0, 0, 0, 0, 0); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(1, 750, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":719 - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< - * G2[i, j, k] = 0 + /* "View.MemoryView":748 * + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): # <<<<<<<<<<<<<< + * cindex = index + * slice_memviewslice( */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_26 = (((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_23 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + goto __pyx_L6; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":720 - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: - * G2[i, j, k] = 0 # <<<<<<<<<<<<<< - * - * for i in prange(n_item_factors, schedule='guided'): + /* "View.MemoryView":756 + * 0, 0, 0, # have_{start,stop,step} + * False) + * elif index is None: # <<<<<<<<<<<<<< + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 */ - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) )) = 0.0; + __pyx_t_1 = (__pyx_v_index == Py_None); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":719 - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< - * G2[i, j, k] = 0 - * + /* "View.MemoryView":757 + * False) + * elif index is None: + * p_dst.shape[new_ndim] = 1 # <<<<<<<<<<<<<< + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 */ - } - } - } - } - } - } - } + (__pyx_v_p_dst->shape[__pyx_v_new_ndim]) = 1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":722 - * G2[i, j, k] = 0 - * - * for i in prange(n_item_factors, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_items): - * if del_i[j, i] != 0: + /* "View.MemoryView":758 + * elif index is None: + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 # <<<<<<<<<<<<<< + * p_dst.suboffsets[new_ndim] = -1 + * new_ndim += 1 */ - __pyx_t_12 = __pyx_v_n_item_factors; - if ((1 == 0)) abort(); - { - __pyx_t_3 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_3 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_3; __pyx_t_10++){ - { - __pyx_v_i = (short)(0 + 1 * __pyx_t_10); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((short)0xbad0bad0); - __pyx_v_k = ((short)0xbad0bad0); + (__pyx_v_p_dst->strides[__pyx_v_new_ndim]) = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":723 - * - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): # <<<<<<<<<<<<<< - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + /* "View.MemoryView":759 + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 # <<<<<<<<<<<<<< + * new_ndim += 1 + * else: */ - __pyx_t_13 = __pyx_v_n_items; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { - __pyx_v_j = __pyx_t_11; + (__pyx_v_p_dst->suboffsets[__pyx_v_new_ndim]) = -1L; - /* "cornac/models/comparer/recom_comparer_sub.pyx":724 - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): - * if del_i[j, i] != 0: # <<<<<<<<<<<<<< - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + /* "View.MemoryView":760 + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 + * new_ndim += 1 # <<<<<<<<<<<<<< + * else: + * start = index.start or 0 */ - __pyx_t_23 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":725 - * for j in range(n_items): - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] # <<<<<<<<<<<<<< - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + /* "View.MemoryView":756 + * 0, 0, 0, # have_{start,stop,step} + * False) + * elif index is None: # <<<<<<<<<<<<<< + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) ))))); + goto __pyx_L6; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":724 - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): - * if del_i[j, i] != 0: # <<<<<<<<<<<<<< - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + /* "View.MemoryView":762 + * new_ndim += 1 + * else: + * start = index.start or 0 # <<<<<<<<<<<<<< + * stop = index.stop or 0 + * step = index.step or 0 */ - } + /*else*/ { + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 762, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } else { + __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 762, __pyx_L1_error) + __pyx_t_9 = __pyx_t_11; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_9 = 0; + __pyx_L7_bool_binop_done:; + __pyx_v_start = __pyx_t_9; - /* "cornac/models/comparer/recom_comparer_sub.pyx":726 - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] # <<<<<<<<<<<<<< - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: + /* "View.MemoryView":763 + * else: + * start = index.start or 0 + * stop = index.stop or 0 # <<<<<<<<<<<<<< + * step = index.step or 0 + * */ - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_24 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_I.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)))); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 763, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 763, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } else { + __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 763, __pyx_L1_error) + __pyx_t_9 = __pyx_t_11; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_9 = 0; + __pyx_L9_bool_binop_done:; + __pyx_v_stop = __pyx_t_9; - /* "cornac/models/comparer/recom_comparer_sub.pyx":727 - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] # <<<<<<<<<<<<<< - * if I[j, i] < 0: - * I[j, i] = 0 + /* "View.MemoryView":764 + * start = index.start or 0 + * stop = index.stop or 0 + * step = index.step or 0 # <<<<<<<<<<<<<< + * + * have_start = index.start is not None */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_25 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_I.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[1].strides))); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 764, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } else { + __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 764, __pyx_L1_error) + __pyx_t_9 = __pyx_t_11; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_9 = 0; + __pyx_L11_bool_binop_done:; + __pyx_v_step = __pyx_t_9; - /* "cornac/models/comparer/recom_comparer_sub.pyx":728 - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: # <<<<<<<<<<<<<< - * I[j, i] = 0 + /* "View.MemoryView":766 + * step = index.step or 0 * + * have_start = index.start is not None # <<<<<<<<<<<<<< + * have_stop = index.stop is not None + * have_step = index.step is not None */ - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_26 = (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_18 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = (__pyx_t_8 != Py_None); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_have_start = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":729 - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: - * I[j, i] = 0 # <<<<<<<<<<<<<< + /* "View.MemoryView":767 + * + * have_start = index.start is not None + * have_stop = index.stop is not None # <<<<<<<<<<<<<< + * have_step = index.step is not None * - * for j in range(n_aspect_factors): */ - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )) = 0.0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 767, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = (__pyx_t_8 != Py_None); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_have_stop = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":728 - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: # <<<<<<<<<<<<<< - * I[j, i] = 0 + /* "View.MemoryView":768 + * have_start = index.start is not None + * have_stop = index.stop is not None + * have_step = index.step is not None # <<<<<<<<<<<<<< * + * slice_memviewslice( */ - } - } + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 768, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = (__pyx_t_8 != Py_None); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_have_step = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":731 - * I[j, i] = 0 + /* "View.MemoryView":770 + * have_step = index.step is not None * - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: + * slice_memviewslice( # <<<<<<<<<<<<<< + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, */ - __pyx_t_13 = __pyx_v_n_aspect_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { - __pyx_v_j = __pyx_t_11; + __pyx_t_10 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_have_start, __pyx_v_have_stop, __pyx_v_have_step, 1); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(1, 770, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":732 + /* "View.MemoryView":776 + * have_start, have_stop, have_step, + * True) + * new_ndim += 1 # <<<<<<<<<<<<<< * - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * if isinstance(memview, _memoryviewslice): */ - __pyx_t_16 = __pyx_v_n_opinion_factors; - __pyx_t_27 = __pyx_t_16; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_27; __pyx_t_14+=1) { - __pyx_v_k = __pyx_t_14; + __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); + } + __pyx_L6:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":733 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + /* "View.MemoryView":747 + * cdef bint have_start, have_stop, have_step + * + * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< + * if PyIndex_Check(index): + * cindex = index */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":734 - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + /* "View.MemoryView":778 + * new_ndim += 1 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) ))))); + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":733 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + /* "View.MemoryView":779 + * + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, */ - } + __Pyx_XDECREF((PyObject *)__pyx_r); - /* "cornac/models/comparer/recom_comparer_sub.pyx":735 - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: + /* "View.MemoryView":780 + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, # <<<<<<<<<<<<<< + * memviewsliceobj.to_dtype_func, + * memview.dtype_is_object) */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_22 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G3.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)))); + if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 780, __pyx_L1_error) } - /* "cornac/models/comparer/recom_comparer_sub.pyx":736 - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< - * if G3[i, j, k] < 0: - * G3[i, j, k] = 0 + /* "View.MemoryView":781 + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * else: */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_G3.strides[1]) ) + __pyx_t_22 * __pyx_v_G3.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_23 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G3.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides))); + if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 781, __pyx_L1_error) } - /* "cornac/models/comparer/recom_comparer_sub.pyx":737 - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< - * G3[i, j, k] = 0 + /* "View.MemoryView":779 * + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_26 = (((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_19 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, __pyx_v_memviewsliceobj->to_object_func, __pyx_v_memviewsliceobj->to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 779, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_memoryview_type))))) __PYX_ERR(1, 779, __pyx_L1_error) + __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_2); + __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":738 - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: - * G3[i, j, k] = 0 # <<<<<<<<<<<<<< + /* "View.MemoryView":778 + * new_ndim += 1 * - * for i in prange(n_aspects + 1, schedule='guided'): + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) )) = 0.0; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":737 - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< - * G3[i, j, k] = 0 + /* "View.MemoryView":784 + * memview.dtype_is_object) + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< + * memview.dtype_is_object) * */ - } - } - } - } - } - } - } + /*else*/ { + __Pyx_XDECREF((PyObject *)__pyx_r); - /* "cornac/models/comparer/recom_comparer_sub.pyx":740 - * G3[i, j, k] = 0 + /* "View.MemoryView":785 + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, + * memview.dtype_is_object) # <<<<<<<<<<<<<< + * * - * for i in prange(n_aspects + 1, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: */ - __pyx_t_3 = (__pyx_v_n_aspects + 1); - if ((1 == 0)) abort(); - { - __pyx_t_12 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_12 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_12; __pyx_t_10++){ - { - __pyx_v_i = (short)(0 + 1 * __pyx_t_10); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((short)0xbad0bad0); + __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, NULL, NULL, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 784, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); - /* "cornac/models/comparer/recom_comparer_sub.pyx":741 + /* "View.MemoryView":784 + * memview.dtype_is_object) + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< + * memview.dtype_is_object) * - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] */ - __pyx_t_13 = __pyx_v_n_aspect_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { - __pyx_v_j = __pyx_t_11; + if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_memoryview_type))))) __PYX_ERR(1, 784, __pyx_L1_error) + __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_2); + __pyx_t_2 = 0; + goto __pyx_L0; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":742 - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: # <<<<<<<<<<<<<< - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + /* "View.MemoryView":711 + * + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< + * cdef int new_ndim = 0, suboffset_dim = -1, dim + * cdef bint negative_step */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":743 - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] # <<<<<<<<<<<<<< - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.memview_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_memviewsliceobj); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":793 + * + * @cname('__pyx_memoryview_slice_memviewslice') + * cdef int slice_memviewslice( # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) ))))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":742 - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: # <<<<<<<<<<<<<< - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] +static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx_v_dst, Py_ssize_t __pyx_v_shape, Py_ssize_t __pyx_v_stride, Py_ssize_t __pyx_v_suboffset, int __pyx_v_dim, int __pyx_v_new_ndim, int *__pyx_v_suboffset_dim, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_stop, Py_ssize_t __pyx_v_step, int __pyx_v_have_start, int __pyx_v_have_stop, int __pyx_v_have_step, int __pyx_v_is_slice) { + Py_ssize_t __pyx_v_new_shape; + int __pyx_v_negative_step; + int __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save; + #endif + + /* "View.MemoryView":813 + * cdef bint negative_step + * + * if not is_slice: # <<<<<<<<<<<<<< + * + * if start < 0: */ - } + __pyx_t_1 = (!__pyx_v_is_slice); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":744 - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] # <<<<<<<<<<<<<< - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: + /* "View.MemoryView":815 + * if not is_slice: + * + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if not 0 <= start < shape: */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_23 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_A.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)))); + __pyx_t_1 = (__pyx_v_start < 0); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":745 - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] # <<<<<<<<<<<<<< - * if A[i, j] < 0: - * A[i, j] = 0 + /* "View.MemoryView":816 + * + * if start < 0: + * start += shape # <<<<<<<<<<<<<< + * if not 0 <= start < shape: + * _err_dim(PyExc_IndexError, "Index out of bounds (axis %d)", dim) */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_24 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_A.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[1].strides))); + __pyx_v_start = (__pyx_v_start + __pyx_v_shape); - /* "cornac/models/comparer/recom_comparer_sub.pyx":746 - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: # <<<<<<<<<<<<<< - * A[i, j] = 0 + /* "View.MemoryView":815 + * if not is_slice: * + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if not 0 <= start < shape: */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_26 = (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":747 - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: - * A[i, j] = 0 # <<<<<<<<<<<<<< + /* "View.MemoryView":817 + * if start < 0: + * start += shape + * if not 0 <= start < shape: # <<<<<<<<<<<<<< + * _err_dim(PyExc_IndexError, "Index out of bounds (axis %d)", dim) + * else: + */ + __pyx_t_1 = (0 <= __pyx_v_start); + if (__pyx_t_1) { + __pyx_t_1 = (__pyx_v_start < __pyx_v_shape); + } + __pyx_t_2 = (!__pyx_t_1); + if (__pyx_t_2) { + + /* "View.MemoryView":818 + * start += shape + * if not 0 <= start < shape: + * _err_dim(PyExc_IndexError, "Index out of bounds (axis %d)", dim) # <<<<<<<<<<<<<< + * else: * - * for i in prange(n_opinions, schedule='guided'): */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )) = 0.0; + __pyx_t_3 = __pyx_memoryview_err_dim(PyExc_IndexError, __pyx_kp_s_Index_out_of_bounds_axis_d, __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 818, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":746 - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: # <<<<<<<<<<<<<< - * A[i, j] = 0 + /* "View.MemoryView":817 + * if start < 0: + * start += shape + * if not 0 <= start < shape: # <<<<<<<<<<<<<< + * _err_dim(PyExc_IndexError, "Index out of bounds (axis %d)", dim) + * else: + */ + } + + /* "View.MemoryView":813 + * cdef bint negative_step * + * if not is_slice: # <<<<<<<<<<<<<< + * + * if start < 0: */ - } - } - } - } - } - } + goto __pyx_L3; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":749 - * A[i, j] = 0 + /* "View.MemoryView":821 + * else: * - * for i in prange(n_opinions, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: + * if have_step: # <<<<<<<<<<<<<< + * negative_step = step < 0 + * if step == 0: */ - __pyx_t_12 = __pyx_v_n_opinions; - if ((1 == 0)) abort(); - { - __pyx_t_3 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_3 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_3; __pyx_t_10++){ - { - __pyx_v_i = (short)(0 + 1 * __pyx_t_10); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((short)0xbad0bad0); + /*else*/ { + __pyx_t_2 = (__pyx_v_have_step != 0); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":750 + /* "View.MemoryView":822 * - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * if have_step: + * negative_step = step < 0 # <<<<<<<<<<<<<< + * if step == 0: + * _err_dim(PyExc_ValueError, "Step may not be zero (axis %d)", dim) */ - __pyx_t_13 = __pyx_v_n_opinion_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { - __pyx_v_j = __pyx_t_11; + __pyx_v_negative_step = (__pyx_v_step < 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":751 - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: # <<<<<<<<<<<<<< - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + /* "View.MemoryView":823 + * if have_step: + * negative_step = step < 0 + * if step == 0: # <<<<<<<<<<<<<< + * _err_dim(PyExc_ValueError, "Step may not be zero (axis %d)", dim) + * else: */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_2 = (__pyx_v_step == 0); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":752 - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] # <<<<<<<<<<<<<< - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + /* "View.MemoryView":824 + * negative_step = step < 0 + * if step == 0: + * _err_dim(PyExc_ValueError, "Step may not be zero (axis %d)", dim) # <<<<<<<<<<<<<< + * else: + * negative_step = False */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_o_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) ))))); + __pyx_t_3 = __pyx_memoryview_err_dim(PyExc_ValueError, __pyx_kp_s_Step_may_not_be_zero_axis_d, __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 824, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":751 - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: # <<<<<<<<<<<<<< - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + /* "View.MemoryView":823 + * if have_step: + * negative_step = step < 0 + * if step == 0: # <<<<<<<<<<<<<< + * _err_dim(PyExc_ValueError, "Step may not be zero (axis %d)", dim) + * else: */ - } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":753 - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] # <<<<<<<<<<<<<< - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: + /* "View.MemoryView":821 + * else: + * + * if have_step: # <<<<<<<<<<<<<< + * negative_step = step < 0 + * if step == 0: */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_9 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_O.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)))); + goto __pyx_L6; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":754 - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] # <<<<<<<<<<<<<< - * if O[i, j] < 0: - * O[i, j] = 0 + /* "View.MemoryView":826 + * _err_dim(PyExc_ValueError, "Step may not be zero (axis %d)", dim) + * else: + * negative_step = False # <<<<<<<<<<<<<< + * step = 1 + * */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_23 * __pyx_v_O.strides[0]) ) + __pyx_t_9 * __pyx_v_O.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_25 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_O.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[1].strides))); + /*else*/ { + __pyx_v_negative_step = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":755 - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: # <<<<<<<<<<<<<< - * O[i, j] = 0 + /* "View.MemoryView":827 + * else: + * negative_step = False + * step = 1 # <<<<<<<<<<<<<< + * * */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_26 = (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_19 * __pyx_v_O.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_v_step = 1; + } + __pyx_L6:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":756 - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: - * O[i, j] = 0 # <<<<<<<<<<<<<< + /* "View.MemoryView":830 * - * return correct, skipped, loss, bpr_loss + * + * if have_start: # <<<<<<<<<<<<<< + * if start < 0: + * start += shape */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )) = 0.0; + __pyx_t_2 = (__pyx_v_have_start != 0); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":755 - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: # <<<<<<<<<<<<<< - * O[i, j] = 0 + /* "View.MemoryView":831 * + * if have_start: + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if start < 0: + */ + __pyx_t_2 = (__pyx_v_start < 0); + if (__pyx_t_2) { + + /* "View.MemoryView":832 + * if have_start: + * if start < 0: + * start += shape # <<<<<<<<<<<<<< + * if start < 0: + * start = 0 + */ + __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + + /* "View.MemoryView":833 + * if start < 0: + * start += shape + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * elif start >= shape: + */ + __pyx_t_2 = (__pyx_v_start < 0); + if (__pyx_t_2) { + + /* "View.MemoryView":834 + * start += shape + * if start < 0: + * start = 0 # <<<<<<<<<<<<<< + * elif start >= shape: + * if negative_step: + */ + __pyx_v_start = 0; + + /* "View.MemoryView":833 + * if start < 0: + * start += shape + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * elif start >= shape: */ - } - } - } - } - } - } - } } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":694 + /* "View.MemoryView":831 * - * # update params with AdaGrad - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): + * if have_start: + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if start < 0: */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L66; + goto __pyx_L9; + } + + /* "View.MemoryView":835 + * if start < 0: + * start = 0 + * elif start >= shape: # <<<<<<<<<<<<<< + * if negative_step: + * start = shape - 1 + */ + __pyx_t_2 = (__pyx_v_start >= __pyx_v_shape); + if (__pyx_t_2) { + + /* "View.MemoryView":836 + * start = 0 + * elif start >= shape: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + if (__pyx_v_negative_step) { + + /* "View.MemoryView":837 + * elif start >= shape: + * if negative_step: + * start = shape - 1 # <<<<<<<<<<<<<< + * else: + * start = shape + */ + __pyx_v_start = (__pyx_v_shape - 1); + + /* "View.MemoryView":836 + * start = 0 + * elif start >= shape: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + goto __pyx_L11; } - __pyx_L66:; + + /* "View.MemoryView":839 + * start = shape - 1 + * else: + * start = shape # <<<<<<<<<<<<<< + * else: + * if negative_step: + */ + /*else*/ { + __pyx_v_start = __pyx_v_shape; + } + __pyx_L11:; + + /* "View.MemoryView":835 + * if start < 0: + * start = 0 + * elif start >= shape: # <<<<<<<<<<<<<< + * if negative_step: + * start = shape - 1 + */ } - } + __pyx_L9:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":758 - * O[i, j] = 0 + /* "View.MemoryView":830 * - * return correct, skipped, loss, bpr_loss # <<<<<<<<<<<<<< * - * def rank(self, user_id, item_ids=None): + * if have_start: # <<<<<<<<<<<<<< + * if start < 0: + * start += shape */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_correct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v_skipped); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_28 = PyFloat_FromDouble(__pyx_v_bpr_loss); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_28); - __pyx_t_29 = PyTuple_New(4); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_29); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_29, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_29, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_29, 2, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_28); - PyTuple_SET_ITEM(__pyx_t_29, 3, __pyx_t_28); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_6 = 0; - __pyx_t_28 = 0; - __pyx_r = __pyx_t_29; - __pyx_t_29 = 0; - goto __pyx_L0; + goto __pyx_L8; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":485 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def _fit_mter( # <<<<<<<<<<<<<< - * self, - * RNGVector rng_pos_uia, + /* "View.MemoryView":841 + * start = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: */ + /*else*/ { + if (__pyx_v_negative_step) { - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_28); - __Pyx_XDECREF(__pyx_t_29); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - goto __pyx_L2; + /* "View.MemoryView":842 + * else: + * if negative_step: + * start = shape - 1 # <<<<<<<<<<<<<< + * else: + * start = 0 + */ + __pyx_v_start = (__pyx_v_shape - 1); + + /* "View.MemoryView":841 + * start = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + goto __pyx_L12; + } + + /* "View.MemoryView":844 + * start = shape - 1 + * else: + * start = 0 # <<<<<<<<<<<<<< + * + * if have_stop: + */ + /*else*/ { + __pyx_v_start = 0; + } + __pyx_L12:; + } + __pyx_L8:; + + /* "View.MemoryView":846 + * start = 0 + * + * if have_stop: # <<<<<<<<<<<<<< + * if stop < 0: + * stop += shape + */ + __pyx_t_2 = (__pyx_v_have_stop != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":847 + * + * if have_stop: + * if stop < 0: # <<<<<<<<<<<<<< + * stop += shape + * if stop < 0: + */ + __pyx_t_2 = (__pyx_v_stop < 0); + if (__pyx_t_2) { + + /* "View.MemoryView":848 + * if have_stop: + * if stop < 0: + * stop += shape # <<<<<<<<<<<<<< + * if stop < 0: + * stop = 0 + */ + __pyx_v_stop = (__pyx_v_stop + __pyx_v_shape); + + /* "View.MemoryView":849 + * if stop < 0: + * stop += shape + * if stop < 0: # <<<<<<<<<<<<<< + * stop = 0 + * elif stop > shape: + */ + __pyx_t_2 = (__pyx_v_stop < 0); + if (__pyx_t_2) { + + /* "View.MemoryView":850 + * stop += shape + * if stop < 0: + * stop = 0 # <<<<<<<<<<<<<< + * elif stop > shape: + * stop = shape + */ + __pyx_v_stop = 0; + + /* "View.MemoryView":849 + * if stop < 0: + * stop += shape + * if stop < 0: # <<<<<<<<<<<<<< + * stop = 0 + * elif stop > shape: + */ + } + + /* "View.MemoryView":847 + * + * if have_stop: + * if stop < 0: # <<<<<<<<<<<<<< + * stop += shape + * if stop < 0: + */ + goto __pyx_L14; + } + + /* "View.MemoryView":851 + * if stop < 0: + * stop = 0 + * elif stop > shape: # <<<<<<<<<<<<<< + * stop = shape + * else: + */ + __pyx_t_2 = (__pyx_v_stop > __pyx_v_shape); + if (__pyx_t_2) { + + /* "View.MemoryView":852 + * stop = 0 + * elif stop > shape: + * stop = shape # <<<<<<<<<<<<<< + * else: + * if negative_step: + */ + __pyx_v_stop = __pyx_v_shape; + + /* "View.MemoryView":851 + * if stop < 0: + * stop = 0 + * elif stop > shape: # <<<<<<<<<<<<<< + * stop = shape + * else: + */ + } + __pyx_L14:; + + /* "View.MemoryView":846 + * start = 0 + * + * if have_stop: # <<<<<<<<<<<<<< + * if stop < 0: + * stop += shape + */ + goto __pyx_L13; + } + + /* "View.MemoryView":854 + * stop = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * stop = -1 + * else: + */ + /*else*/ { + if (__pyx_v_negative_step) { + + /* "View.MemoryView":855 + * else: + * if negative_step: + * stop = -1 # <<<<<<<<<<<<<< + * else: + * stop = shape + */ + __pyx_v_stop = -1L; + + /* "View.MemoryView":854 + * stop = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * stop = -1 + * else: + */ + goto __pyx_L16; + } + + /* "View.MemoryView":857 + * stop = -1 + * else: + * stop = shape # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __pyx_v_stop = __pyx_v_shape; + } + __pyx_L16:; + } + __pyx_L13:; + + /* "View.MemoryView":861 + * + * with cython.cdivision(True): + * new_shape = (stop - start) // step # <<<<<<<<<<<<<< + * + * if (stop - start) - step * new_shape: + */ + __pyx_v_new_shape = ((__pyx_v_stop - __pyx_v_start) / __pyx_v_step); + + /* "View.MemoryView":863 + * new_shape = (stop - start) // step + * + * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< + * new_shape += 1 + * + */ + __pyx_t_2 = (((__pyx_v_stop - __pyx_v_start) - (__pyx_v_step * __pyx_v_new_shape)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":864 + * + * if (stop - start) - step * new_shape: + * new_shape += 1 # <<<<<<<<<<<<<< + * + * if new_shape < 0: + */ + __pyx_v_new_shape = (__pyx_v_new_shape + 1); + + /* "View.MemoryView":863 + * new_shape = (stop - start) // step + * + * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< + * new_shape += 1 + * + */ + } + + /* "View.MemoryView":866 + * new_shape += 1 + * + * if new_shape < 0: # <<<<<<<<<<<<<< + * new_shape = 0 + * + */ + __pyx_t_2 = (__pyx_v_new_shape < 0); + if (__pyx_t_2) { + + /* "View.MemoryView":867 + * + * if new_shape < 0: + * new_shape = 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_new_shape = 0; + + /* "View.MemoryView":866 + * new_shape += 1 + * + * if new_shape < 0: # <<<<<<<<<<<<<< + * new_shape = 0 + * + */ + } + + /* "View.MemoryView":870 + * + * + * dst.strides[new_ndim] = stride * step # <<<<<<<<<<<<<< + * dst.shape[new_ndim] = new_shape + * dst.suboffsets[new_ndim] = suboffset + */ + (__pyx_v_dst->strides[__pyx_v_new_ndim]) = (__pyx_v_stride * __pyx_v_step); + + /* "View.MemoryView":871 + * + * dst.strides[new_ndim] = stride * step + * dst.shape[new_ndim] = new_shape # <<<<<<<<<<<<<< + * dst.suboffsets[new_ndim] = suboffset + * + */ + (__pyx_v_dst->shape[__pyx_v_new_ndim]) = __pyx_v_new_shape; + + /* "View.MemoryView":872 + * dst.strides[new_ndim] = stride * step + * dst.shape[new_ndim] = new_shape + * dst.suboffsets[new_ndim] = suboffset # <<<<<<<<<<<<<< + * + * + */ + (__pyx_v_dst->suboffsets[__pyx_v_new_ndim]) = __pyx_v_suboffset; + } + __pyx_L3:; + + /* "View.MemoryView":875 + * + * + * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< + * dst.data += start * stride + * else: + */ + __pyx_t_2 = ((__pyx_v_suboffset_dim[0]) < 0); + if (__pyx_t_2) { + + /* "View.MemoryView":876 + * + * if suboffset_dim[0] < 0: + * dst.data += start * stride # <<<<<<<<<<<<<< + * else: + * dst.suboffsets[suboffset_dim[0]] += start * stride + */ + __pyx_v_dst->data = (__pyx_v_dst->data + (__pyx_v_start * __pyx_v_stride)); + + /* "View.MemoryView":875 + * + * + * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< + * dst.data += start * stride + * else: + */ + goto __pyx_L19; + } + + /* "View.MemoryView":878 + * dst.data += start * stride + * else: + * dst.suboffsets[suboffset_dim[0]] += start * stride # <<<<<<<<<<<<<< + * + * if suboffset >= 0: + */ + /*else*/ { + __pyx_t_3 = (__pyx_v_suboffset_dim[0]); + (__pyx_v_dst->suboffsets[__pyx_t_3]) = ((__pyx_v_dst->suboffsets[__pyx_t_3]) + (__pyx_v_start * __pyx_v_stride)); + } + __pyx_L19:; + + /* "View.MemoryView":880 + * dst.suboffsets[suboffset_dim[0]] += start * stride + * + * if suboffset >= 0: # <<<<<<<<<<<<<< + * if not is_slice: + * if new_ndim == 0: + */ + __pyx_t_2 = (__pyx_v_suboffset >= 0); + if (__pyx_t_2) { + + /* "View.MemoryView":881 + * + * if suboffset >= 0: + * if not is_slice: # <<<<<<<<<<<<<< + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset + */ + __pyx_t_2 = (!__pyx_v_is_slice); + if (__pyx_t_2) { + + /* "View.MemoryView":882 + * if suboffset >= 0: + * if not is_slice: + * if new_ndim == 0: # <<<<<<<<<<<<<< + * dst.data = ( dst.data)[0] + suboffset + * else: + */ + __pyx_t_2 = (__pyx_v_new_ndim == 0); + if (__pyx_t_2) { + + /* "View.MemoryView":883 + * if not is_slice: + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset # <<<<<<<<<<<<<< + * else: + * _err_dim(PyExc_IndexError, "All dimensions preceding dimension %d " + */ + __pyx_v_dst->data = ((((char **)__pyx_v_dst->data)[0]) + __pyx_v_suboffset); + + /* "View.MemoryView":882 + * if suboffset >= 0: + * if not is_slice: + * if new_ndim == 0: # <<<<<<<<<<<<<< + * dst.data = ( dst.data)[0] + suboffset + * else: + */ + goto __pyx_L22; + } + + /* "View.MemoryView":885 + * dst.data = ( dst.data)[0] + suboffset + * else: + * _err_dim(PyExc_IndexError, "All dimensions preceding dimension %d " # <<<<<<<<<<<<<< + * "must be indexed and not sliced", dim) + * else: + */ + /*else*/ { + + /* "View.MemoryView":886 + * else: + * _err_dim(PyExc_IndexError, "All dimensions preceding dimension %d " + * "must be indexed and not sliced", dim) # <<<<<<<<<<<<<< + * else: + * suboffset_dim[0] = new_ndim + */ + __pyx_t_3 = __pyx_memoryview_err_dim(PyExc_IndexError, __pyx_kp_s_All_dimensions_preceding_dimensi, __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 885, __pyx_L1_error) + } + __pyx_L22:; + + /* "View.MemoryView":881 + * + * if suboffset >= 0: + * if not is_slice: # <<<<<<<<<<<<<< + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset + */ + goto __pyx_L21; + } + + /* "View.MemoryView":888 + * "must be indexed and not sliced", dim) + * else: + * suboffset_dim[0] = new_ndim # <<<<<<<<<<<<<< + * + * return 0 + */ + /*else*/ { + (__pyx_v_suboffset_dim[0]) = __pyx_v_new_ndim; + } + __pyx_L21:; + + /* "View.MemoryView":880 + * dst.suboffsets[suboffset_dim[0]] += start * stride + * + * if suboffset >= 0: # <<<<<<<<<<<<<< + * if not is_slice: + * if new_ndim == 0: + */ + } + + /* "View.MemoryView":890 + * suboffset_dim[0] = new_ndim + * + * return 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":793 + * + * @cname('__pyx_memoryview_slice_memviewslice') + * cdef int slice_memviewslice( # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, + */ + + /* function exit code */ + __pyx_L1_error:; + #ifdef WITH_THREAD + __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.slice_memviewslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); - __pyx_L2:; - __PYX_XDEC_MEMVIEW(&__pyx_v_X, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_oids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_oids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_user_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_item_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_neg_item_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_indptr, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_p_user_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_earlier_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_later_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_aspect_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_pair_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G3, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_O, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G3, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_U, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_I, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_O, 1); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* Python wrapper */ -static PyObject *__pyx_fuse_0_1__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_17_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_fuse_0_1__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_17_fit_mter = {"__pyx_fuse_0_1_fit_mter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0_1__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_17_fit_mter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter}; -static PyObject *__pyx_fuse_0_1__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_17_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg = 0; - int __pyx_v_n_threads; - __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; - struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict = 0; - __Pyx_memviewslice __pyx_v_user_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_neg_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_indptr = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_p_user_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_earlier_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_later_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_aspect_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_O = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_U = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_I = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_O = { 0, 0, { 0 }, { 0 }, { 0 } }; - PyArrayObject *__pyx_v_del_g1 = 0; - PyArrayObject *__pyx_v_del_g2 = 0; - PyArrayObject *__pyx_v_del_g3 = 0; - PyArrayObject *__pyx_v_del_u = 0; - PyArrayObject *__pyx_v_del_i = 0; - PyArrayObject *__pyx_v_del_a = 0; - PyArrayObject *__pyx_v_del_o = 0; - PyArrayObject *__pyx_v_del_g1_reg = 0; - PyArrayObject *__pyx_v_del_g2_reg = 0; - PyArrayObject *__pyx_v_del_g3_reg = 0; - PyArrayObject *__pyx_v_del_u_reg = 0; - PyArrayObject *__pyx_v_del_i_reg = 0; - PyArrayObject *__pyx_v_del_a_reg = 0; - PyArrayObject *__pyx_v_del_o_reg = 0; +/* "View.MemoryView":896 + * + * @cname('__pyx_pybuffer_index') + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + */ + +static char *__pyx_pybuffer_index(Py_buffer *__pyx_v_view, char *__pyx_v_bufp, Py_ssize_t __pyx_v_index, Py_ssize_t __pyx_v_dim) { + Py_ssize_t __pyx_v_shape; + Py_ssize_t __pyx_v_stride; + Py_ssize_t __pyx_v_suboffset; + Py_ssize_t __pyx_v_itemsize; + char *__pyx_v_resultp; + char *__pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + Py_UCS4 __pyx_t_4; + PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_fit_mter (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_rng_pos_uia,&__pyx_n_s_rng_pos_uao,&__pyx_n_s_rng_pos_iao,&__pyx_n_s_rng_pos_pair,&__pyx_n_s_rng_pos,&__pyx_n_s_rng_neg,&__pyx_n_s_n_threads,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_iids,&__pyx_n_s_X_aids,&__pyx_n_s_YU,&__pyx_n_s_YU_uids,&__pyx_n_s_YU_aids,&__pyx_n_s_YU_oids,&__pyx_n_s_YI,&__pyx_n_s_YI_iids,&__pyx_n_s_YI_aids,&__pyx_n_s_YI_oids,&__pyx_n_s_rating_dict,&__pyx_n_s_user_ids,&__pyx_n_s_item_ids,&__pyx_n_s_neg_item_ids,&__pyx_n_s_indptr,&__pyx_n_s_p_user_indices,&__pyx_n_s_earlier_indices,&__pyx_n_s_later_indices,&__pyx_n_s_aspect_indices,&__pyx_n_s_pair_counts,&__pyx_n_s_G1,&__pyx_n_s_G2,&__pyx_n_s_G3,&__pyx_n_s_U,&__pyx_n_s_I,&__pyx_n_s_A,&__pyx_n_s_O,&__pyx_n_s_sgrad_G1,&__pyx_n_s_sgrad_G2,&__pyx_n_s_sgrad_G3,&__pyx_n_s_sgrad_U,&__pyx_n_s_sgrad_I,&__pyx_n_s_sgrad_A,&__pyx_n_s_sgrad_O,&__pyx_n_s_del_g1,&__pyx_n_s_del_g2,&__pyx_n_s_del_g3,&__pyx_n_s_del_u,&__pyx_n_s_del_i,&__pyx_n_s_del_a,&__pyx_n_s_del_o,&__pyx_n_s_del_g1_reg,&__pyx_n_s_del_g2_reg,&__pyx_n_s_del_g3_reg,&__pyx_n_s_del_u_reg,&__pyx_n_s_del_i_reg,&__pyx_n_s_del_a_reg,&__pyx_n_s_del_o_reg,0}; - PyObject* values[58] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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 58: values[57] = PyTuple_GET_ITEM(__pyx_args, 57); - CYTHON_FALLTHROUGH; - case 57: values[56] = PyTuple_GET_ITEM(__pyx_args, 56); - CYTHON_FALLTHROUGH; - case 56: values[55] = PyTuple_GET_ITEM(__pyx_args, 55); - CYTHON_FALLTHROUGH; - case 55: values[54] = PyTuple_GET_ITEM(__pyx_args, 54); - CYTHON_FALLTHROUGH; - case 54: values[53] = PyTuple_GET_ITEM(__pyx_args, 53); - CYTHON_FALLTHROUGH; - case 53: values[52] = PyTuple_GET_ITEM(__pyx_args, 52); - CYTHON_FALLTHROUGH; - case 52: values[51] = PyTuple_GET_ITEM(__pyx_args, 51); - CYTHON_FALLTHROUGH; - case 51: values[50] = PyTuple_GET_ITEM(__pyx_args, 50); - CYTHON_FALLTHROUGH; - case 50: values[49] = PyTuple_GET_ITEM(__pyx_args, 49); - CYTHON_FALLTHROUGH; - case 49: values[48] = PyTuple_GET_ITEM(__pyx_args, 48); - CYTHON_FALLTHROUGH; - case 48: values[47] = PyTuple_GET_ITEM(__pyx_args, 47); - CYTHON_FALLTHROUGH; - case 47: values[46] = PyTuple_GET_ITEM(__pyx_args, 46); - CYTHON_FALLTHROUGH; - case 46: values[45] = PyTuple_GET_ITEM(__pyx_args, 45); - CYTHON_FALLTHROUGH; - case 45: values[44] = PyTuple_GET_ITEM(__pyx_args, 44); - CYTHON_FALLTHROUGH; - case 44: values[43] = PyTuple_GET_ITEM(__pyx_args, 43); - CYTHON_FALLTHROUGH; - case 43: values[42] = PyTuple_GET_ITEM(__pyx_args, 42); - CYTHON_FALLTHROUGH; - case 42: values[41] = PyTuple_GET_ITEM(__pyx_args, 41); - CYTHON_FALLTHROUGH; - case 41: values[40] = PyTuple_GET_ITEM(__pyx_args, 40); - CYTHON_FALLTHROUGH; - case 40: values[39] = PyTuple_GET_ITEM(__pyx_args, 39); - CYTHON_FALLTHROUGH; - case 39: values[38] = PyTuple_GET_ITEM(__pyx_args, 38); - CYTHON_FALLTHROUGH; - case 38: values[37] = PyTuple_GET_ITEM(__pyx_args, 37); - CYTHON_FALLTHROUGH; - case 37: values[36] = PyTuple_GET_ITEM(__pyx_args, 36); - CYTHON_FALLTHROUGH; - case 36: values[35] = PyTuple_GET_ITEM(__pyx_args, 35); - CYTHON_FALLTHROUGH; - case 35: values[34] = PyTuple_GET_ITEM(__pyx_args, 34); - CYTHON_FALLTHROUGH; - case 34: values[33] = PyTuple_GET_ITEM(__pyx_args, 33); - CYTHON_FALLTHROUGH; - case 33: values[32] = PyTuple_GET_ITEM(__pyx_args, 32); - CYTHON_FALLTHROUGH; - case 32: values[31] = PyTuple_GET_ITEM(__pyx_args, 31); - CYTHON_FALLTHROUGH; - case 31: values[30] = PyTuple_GET_ITEM(__pyx_args, 30); - CYTHON_FALLTHROUGH; - case 30: values[29] = PyTuple_GET_ITEM(__pyx_args, 29); - CYTHON_FALLTHROUGH; - case 29: values[28] = PyTuple_GET_ITEM(__pyx_args, 28); - CYTHON_FALLTHROUGH; - case 28: values[27] = PyTuple_GET_ITEM(__pyx_args, 27); - CYTHON_FALLTHROUGH; - case 27: values[26] = PyTuple_GET_ITEM(__pyx_args, 26); - CYTHON_FALLTHROUGH; - case 26: values[25] = PyTuple_GET_ITEM(__pyx_args, 25); - CYTHON_FALLTHROUGH; - case 25: values[24] = PyTuple_GET_ITEM(__pyx_args, 24); - CYTHON_FALLTHROUGH; - case 24: values[23] = PyTuple_GET_ITEM(__pyx_args, 23); - CYTHON_FALLTHROUGH; - case 23: values[22] = PyTuple_GET_ITEM(__pyx_args, 22); - CYTHON_FALLTHROUGH; - case 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - CYTHON_FALLTHROUGH; - case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - CYTHON_FALLTHROUGH; - case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - CYTHON_FALLTHROUGH; - case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - CYTHON_FALLTHROUGH; - case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - CYTHON_FALLTHROUGH; - case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - CYTHON_FALLTHROUGH; - case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - CYTHON_FALLTHROUGH; - case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - CYTHON_FALLTHROUGH; - case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - CYTHON_FALLTHROUGH; - case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - CYTHON_FALLTHROUGH; - case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - CYTHON_FALLTHROUGH; - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_uia)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 1); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_uao)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 2); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_iao)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 3); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_pair)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 4); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 5); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_neg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 6); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_threads)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 7); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 8); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 9: - if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 9); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 10: - if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 10); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 11: - if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 11); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 12: - if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 12); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 13: - if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 13); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 14: - if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 14); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 15: - if (likely((values[15] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_oids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 15); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 16: - if (likely((values[16] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 16); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 17: - if (likely((values[17] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 17); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 18: - if (likely((values[18] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 18); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 19: - if (likely((values[19] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_oids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 19); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 20: - if (likely((values[20] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rating_dict)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 20); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 21: - if (likely((values[21] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_user_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 21); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 22: - if (likely((values[22] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 22); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 23: - if (likely((values[23] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_neg_item_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 23); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 24: - if (likely((values[24] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_indptr)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 24); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 25: - if (likely((values[25] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_p_user_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 25); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 26: - if (likely((values[26] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_earlier_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 26); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 27: - if (likely((values[27] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_later_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 27); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 28: - if (likely((values[28] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_aspect_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 28); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 29: - if (likely((values[29] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pair_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 29); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 30: - if (likely((values[30] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 30); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 31: - if (likely((values[31] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 31); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 32: - if (likely((values[32] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 32); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 33: - if (likely((values[33] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 33); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 34: - if (likely((values[34] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 34); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 35: - if (likely((values[35] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 35); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 36: - if (likely((values[36] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_O)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 36); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 37: - if (likely((values[37] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 37); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 38: - if (likely((values[38] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 38); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 39: - if (likely((values[39] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 39); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 40: - if (likely((values[40] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_U)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 40); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 41: - if (likely((values[41] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_I)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 41); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 42: - if (likely((values[42] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 42); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 43: - if (likely((values[43] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_O)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 43); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 44: - if (likely((values[44] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 44); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 45: - if (likely((values[45] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 45); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 46: - if (likely((values[46] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 46); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 47: - if (likely((values[47] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_u)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 47); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 48: - if (likely((values[48] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_i)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 48); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 49: - if (likely((values[49] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_a)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 49); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 50: - if (likely((values[50] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_o)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 50); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 51: - if (likely((values[51] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g1_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 51); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 52: - if (likely((values[52] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g2_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 52); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 53: - if (likely((values[53] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g3_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 53); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 54: - if (likely((values[54] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_u_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 54); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 55: - if (likely((values[55] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_i_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 55); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 56: - if (likely((values[56] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_a_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 56); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 57: - if (likely((values[57] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_o_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 57); __PYX_ERR(0, 485, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_fit_mter") < 0)) __PYX_ERR(0, 485, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 58) { - 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); - values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - values[22] = PyTuple_GET_ITEM(__pyx_args, 22); - values[23] = PyTuple_GET_ITEM(__pyx_args, 23); - values[24] = PyTuple_GET_ITEM(__pyx_args, 24); - values[25] = PyTuple_GET_ITEM(__pyx_args, 25); - values[26] = PyTuple_GET_ITEM(__pyx_args, 26); - values[27] = PyTuple_GET_ITEM(__pyx_args, 27); - values[28] = PyTuple_GET_ITEM(__pyx_args, 28); - values[29] = PyTuple_GET_ITEM(__pyx_args, 29); - values[30] = PyTuple_GET_ITEM(__pyx_args, 30); - values[31] = PyTuple_GET_ITEM(__pyx_args, 31); - values[32] = PyTuple_GET_ITEM(__pyx_args, 32); - values[33] = PyTuple_GET_ITEM(__pyx_args, 33); - values[34] = PyTuple_GET_ITEM(__pyx_args, 34); - values[35] = PyTuple_GET_ITEM(__pyx_args, 35); - values[36] = PyTuple_GET_ITEM(__pyx_args, 36); - values[37] = PyTuple_GET_ITEM(__pyx_args, 37); - values[38] = PyTuple_GET_ITEM(__pyx_args, 38); - values[39] = PyTuple_GET_ITEM(__pyx_args, 39); - values[40] = PyTuple_GET_ITEM(__pyx_args, 40); - values[41] = PyTuple_GET_ITEM(__pyx_args, 41); - values[42] = PyTuple_GET_ITEM(__pyx_args, 42); - values[43] = PyTuple_GET_ITEM(__pyx_args, 43); - values[44] = PyTuple_GET_ITEM(__pyx_args, 44); - values[45] = PyTuple_GET_ITEM(__pyx_args, 45); - values[46] = PyTuple_GET_ITEM(__pyx_args, 46); - values[47] = PyTuple_GET_ITEM(__pyx_args, 47); - values[48] = PyTuple_GET_ITEM(__pyx_args, 48); - values[49] = PyTuple_GET_ITEM(__pyx_args, 49); - values[50] = PyTuple_GET_ITEM(__pyx_args, 50); - values[51] = PyTuple_GET_ITEM(__pyx_args, 51); - values[52] = PyTuple_GET_ITEM(__pyx_args, 52); - values[53] = PyTuple_GET_ITEM(__pyx_args, 53); - values[54] = PyTuple_GET_ITEM(__pyx_args, 54); - values[55] = PyTuple_GET_ITEM(__pyx_args, 55); - values[56] = PyTuple_GET_ITEM(__pyx_args, 56); - values[57] = PyTuple_GET_ITEM(__pyx_args, 57); + __Pyx_RefNannySetupContext("pybuffer_index", 0); + + /* "View.MemoryView":898 + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 # <<<<<<<<<<<<<< + * cdef Py_ssize_t itemsize = view.itemsize + * cdef char *resultp + */ + __pyx_v_suboffset = -1L; + + /* "View.MemoryView":899 + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + * cdef Py_ssize_t itemsize = view.itemsize # <<<<<<<<<<<<<< + * cdef char *resultp + * + */ + __pyx_t_1 = __pyx_v_view->itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":902 + * cdef char *resultp + * + * if view.ndim == 0: # <<<<<<<<<<<<<< + * shape = view.len // itemsize + * stride = itemsize + */ + __pyx_t_2 = (__pyx_v_view->ndim == 0); + if (__pyx_t_2) { + + /* "View.MemoryView":903 + * + * if view.ndim == 0: + * shape = view.len // itemsize # <<<<<<<<<<<<<< + * stride = itemsize + * else: + */ + if (unlikely(__pyx_v_itemsize == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(1, 903, __pyx_L1_error) } - __pyx_v_self = values[0]; - __pyx_v_rng_pos_uia = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[1]); - __pyx_v_rng_pos_uao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[2]); - __pyx_v_rng_pos_iao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[3]); - __pyx_v_rng_pos_pair = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[4]); - __pyx_v_rng_pos = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[5]); - __pyx_v_rng_neg = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[6]); - __pyx_v_n_threads = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_n_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 493, __pyx_L3_error) - __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_iids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_YU = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_uids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_aids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_oids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YI = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_iids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_aids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_oids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_rating_dict = ((struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *)values[20]); - __pyx_v_user_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_user_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[22], PyBUF_WRITABLE); if (unlikely(!__pyx_v_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_neg_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[23], PyBUF_WRITABLE); if (unlikely(!__pyx_v_neg_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_indptr = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[24], PyBUF_WRITABLE); if (unlikely(!__pyx_v_indptr.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_p_user_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[25], PyBUF_WRITABLE); if (unlikely(!__pyx_v_p_user_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_earlier_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[26], PyBUF_WRITABLE); if (unlikely(!__pyx_v_earlier_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_later_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[27], PyBUF_WRITABLE); if (unlikely(!__pyx_v_later_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_aspect_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[28], PyBUF_WRITABLE); if (unlikely(!__pyx_v_aspect_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_pair_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[29], PyBUF_WRITABLE); if (unlikely(!__pyx_v_pair_counts.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[30], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G1.memview)) __PYX_ERR(0, 500, __pyx_L3_error) - __pyx_v_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[31], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G2.memview)) __PYX_ERR(0, 501, __pyx_L3_error) - __pyx_v_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[32], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G3.memview)) __PYX_ERR(0, 502, __pyx_L3_error) - __pyx_v_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[33], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U.memview)) __PYX_ERR(0, 503, __pyx_L3_error) - __pyx_v_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[34], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I.memview)) __PYX_ERR(0, 504, __pyx_L3_error) - __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[35], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 505, __pyx_L3_error) - __pyx_v_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[36], PyBUF_WRITABLE); if (unlikely(!__pyx_v_O.memview)) __PYX_ERR(0, 506, __pyx_L3_error) - __pyx_v_sgrad_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[37], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G1.memview)) __PYX_ERR(0, 507, __pyx_L3_error) - __pyx_v_sgrad_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[38], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G2.memview)) __PYX_ERR(0, 508, __pyx_L3_error) - __pyx_v_sgrad_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[39], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G3.memview)) __PYX_ERR(0, 509, __pyx_L3_error) - __pyx_v_sgrad_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[40], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_U.memview)) __PYX_ERR(0, 510, __pyx_L3_error) - __pyx_v_sgrad_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[41], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_I.memview)) __PYX_ERR(0, 511, __pyx_L3_error) - __pyx_v_sgrad_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[42], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_A.memview)) __PYX_ERR(0, 512, __pyx_L3_error) - __pyx_v_sgrad_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[43], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_O.memview)) __PYX_ERR(0, 513, __pyx_L3_error) - __pyx_v_del_g1 = ((PyArrayObject *)values[44]); - __pyx_v_del_g2 = ((PyArrayObject *)values[45]); - __pyx_v_del_g3 = ((PyArrayObject *)values[46]); - __pyx_v_del_u = ((PyArrayObject *)values[47]); - __pyx_v_del_i = ((PyArrayObject *)values[48]); - __pyx_v_del_a = ((PyArrayObject *)values[49]); - __pyx_v_del_o = ((PyArrayObject *)values[50]); - __pyx_v_del_g1_reg = ((PyArrayObject *)values[51]); - __pyx_v_del_g2_reg = ((PyArrayObject *)values[52]); - __pyx_v_del_g3_reg = ((PyArrayObject *)values[53]); - __pyx_v_del_u_reg = ((PyArrayObject *)values[54]); - __pyx_v_del_i_reg = ((PyArrayObject *)values[55]); - __pyx_v_del_a_reg = ((PyArrayObject *)values[56]); - __pyx_v_del_o_reg = ((PyArrayObject *)values[57]); + else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_view->len))) { + PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); + __PYX_ERR(1, 903, __pyx_L1_error) + } + __pyx_v_shape = __Pyx_div_Py_ssize_t(__pyx_v_view->len, __pyx_v_itemsize); + + /* "View.MemoryView":904 + * if view.ndim == 0: + * shape = view.len // itemsize + * stride = itemsize # <<<<<<<<<<<<<< + * else: + * shape = view.shape[dim] + */ + __pyx_v_stride = __pyx_v_itemsize; + + /* "View.MemoryView":902 + * cdef char *resultp + * + * if view.ndim == 0: # <<<<<<<<<<<<<< + * shape = view.len // itemsize + * stride = itemsize + */ + goto __pyx_L3; } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 485, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uia), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uia", 0))) __PYX_ERR(0, 487, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uao", 0))) __PYX_ERR(0, 488, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_iao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_iao", 0))) __PYX_ERR(0, 489, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_pair), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_pair", 0))) __PYX_ERR(0, 490, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos", 0))) __PYX_ERR(0, 491, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_neg), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_neg", 0))) __PYX_ERR(0, 492, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rating_dict), __pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict, 1, "rating_dict", 0))) __PYX_ERR(0, 497, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1), __pyx_ptype_5numpy_ndarray, 1, "del_g1", 0))) __PYX_ERR(0, 514, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2), __pyx_ptype_5numpy_ndarray, 1, "del_g2", 0))) __PYX_ERR(0, 515, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3), __pyx_ptype_5numpy_ndarray, 1, "del_g3", 0))) __PYX_ERR(0, 516, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u), __pyx_ptype_5numpy_ndarray, 1, "del_u", 0))) __PYX_ERR(0, 517, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i), __pyx_ptype_5numpy_ndarray, 1, "del_i", 0))) __PYX_ERR(0, 518, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a), __pyx_ptype_5numpy_ndarray, 1, "del_a", 0))) __PYX_ERR(0, 519, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o), __pyx_ptype_5numpy_ndarray, 1, "del_o", 0))) __PYX_ERR(0, 520, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g1_reg", 0))) __PYX_ERR(0, 521, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g2_reg", 0))) __PYX_ERR(0, 522, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g3_reg", 0))) __PYX_ERR(0, 523, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u_reg), __pyx_ptype_5numpy_ndarray, 1, "del_u_reg", 0))) __PYX_ERR(0, 524, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i_reg), __pyx_ptype_5numpy_ndarray, 1, "del_i_reg", 0))) __PYX_ERR(0, 525, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a_reg), __pyx_ptype_5numpy_ndarray, 1, "del_a_reg", 0))) __PYX_ERR(0, 526, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o_reg), __pyx_ptype_5numpy_ndarray, 1, "del_o_reg", 0))) __PYX_ERR(0, 527, __pyx_L1_error) - __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_16_fit_mter(__pyx_self, __pyx_v_self, __pyx_v_rng_pos_uia, __pyx_v_rng_pos_uao, __pyx_v_rng_pos_iao, __pyx_v_rng_pos_pair, __pyx_v_rng_pos, __pyx_v_rng_neg, __pyx_v_n_threads, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_iids, __pyx_v_X_aids, __pyx_v_YU, __pyx_v_YU_uids, __pyx_v_YU_aids, __pyx_v_YU_oids, __pyx_v_YI, __pyx_v_YI_iids, __pyx_v_YI_aids, __pyx_v_YI_oids, __pyx_v_rating_dict, __pyx_v_user_ids, __pyx_v_item_ids, __pyx_v_neg_item_ids, __pyx_v_indptr, __pyx_v_p_user_indices, __pyx_v_earlier_indices, __pyx_v_later_indices, __pyx_v_aspect_indices, __pyx_v_pair_counts, __pyx_v_G1, __pyx_v_G2, __pyx_v_G3, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_sgrad_G1, __pyx_v_sgrad_G2, __pyx_v_sgrad_G3, __pyx_v_sgrad_U, __pyx_v_sgrad_I, __pyx_v_sgrad_A, __pyx_v_sgrad_O, __pyx_v_del_g1, __pyx_v_del_g2, __pyx_v_del_g3, __pyx_v_del_u, __pyx_v_del_i, __pyx_v_del_a, __pyx_v_del_o, __pyx_v_del_g1_reg, __pyx_v_del_g2_reg, __pyx_v_del_g3_reg, __pyx_v_del_u_reg, __pyx_v_del_i_reg, __pyx_v_del_a_reg, __pyx_v_del_o_reg); - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "View.MemoryView":906 + * stride = itemsize + * else: + * shape = view.shape[dim] # <<<<<<<<<<<<<< + * stride = view.strides[dim] + * if view.suboffsets != NULL: + */ + /*else*/ { + __pyx_v_shape = (__pyx_v_view->shape[__pyx_v_dim]); -static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_16_fit_mter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg, int __pyx_v_n_threads, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_iids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_YU, __Pyx_memviewslice __pyx_v_YU_uids, __Pyx_memviewslice __pyx_v_YU_aids, __Pyx_memviewslice __pyx_v_YU_oids, __Pyx_memviewslice __pyx_v_YI, __Pyx_memviewslice __pyx_v_YI_iids, __Pyx_memviewslice __pyx_v_YI_aids, __Pyx_memviewslice __pyx_v_YI_oids, struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict, __Pyx_memviewslice __pyx_v_user_ids, __Pyx_memviewslice __pyx_v_item_ids, __Pyx_memviewslice __pyx_v_neg_item_ids, __Pyx_memviewslice __pyx_v_indptr, __Pyx_memviewslice __pyx_v_p_user_indices, __Pyx_memviewslice __pyx_v_earlier_indices, __Pyx_memviewslice __pyx_v_later_indices, __Pyx_memviewslice __pyx_v_aspect_indices, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts, __Pyx_memviewslice __pyx_v_G1, __Pyx_memviewslice __pyx_v_G2, __Pyx_memviewslice __pyx_v_G3, __Pyx_memviewslice __pyx_v_U, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_O, __Pyx_memviewslice __pyx_v_sgrad_G1, __Pyx_memviewslice __pyx_v_sgrad_G2, __Pyx_memviewslice __pyx_v_sgrad_G3, __Pyx_memviewslice __pyx_v_sgrad_U, __Pyx_memviewslice __pyx_v_sgrad_I, __Pyx_memviewslice __pyx_v_sgrad_A, __Pyx_memviewslice __pyx_v_sgrad_O, PyArrayObject *__pyx_v_del_g1, PyArrayObject *__pyx_v_del_g2, PyArrayObject *__pyx_v_del_g3, PyArrayObject *__pyx_v_del_u, PyArrayObject *__pyx_v_del_i, PyArrayObject *__pyx_v_del_a, PyArrayObject *__pyx_v_del_o, PyArrayObject *__pyx_v_del_g1_reg, PyArrayObject *__pyx_v_del_g2_reg, PyArrayObject *__pyx_v_del_g3_reg, PyArrayObject *__pyx_v_del_u_reg, PyArrayObject *__pyx_v_del_i_reg, PyArrayObject *__pyx_v_del_a_reg, PyArrayObject *__pyx_v_del_o_reg) { - long __pyx_v_s; - long __pyx_v_correct; - long __pyx_v_skipped; - long __pyx_v_aspect_correct; - long __pyx_v_n_users; - long __pyx_v_n_items; - long __pyx_v_n_aspects; - CYTHON_UNUSED long __pyx_v_n_opinions; - long __pyx_v_n_user_factors; - long __pyx_v_n_item_factors; - long __pyx_v_n_aspect_factors; - long __pyx_v_n_opinion_factors; - CYTHON_UNUSED int __pyx_v_num_samples; - CYTHON_UNUSED int __pyx_v_num_bpr_samples; - CYTHON_UNUSED int __pyx_v_num_pair_samples; - CYTHON_UNUSED int __pyx_v__; - int __pyx_v_i; - int __pyx_v_j; - int __pyx_v_k; - int __pyx_v_idx; - int __pyx_v_jdx; - int __pyx_v_u_idx; - int __pyx_v_i_idx; - int __pyx_v_a_idx; - int __pyx_v_o_idx; - int __pyx_v_j_idx; - int __pyx_v_thread_id; - float __pyx_v_z; - float __pyx_v_score; - float __pyx_v_i_score; - float __pyx_v_j_score; - float __pyx_v_pred; - float __pyx_v_i_ij; - float __pyx_v_a_ji; - float __pyx_v_loss; - float __pyx_v_bpr_loss; - float __pyx_v_aspect_bpr_loss; - float __pyx_v_del_sqerror; - float __pyx_v_del_bpr; - float __pyx_v_del_aspect_bpr; - float __pyx_v_eps; - float __pyx_v_lr; - float __pyx_v_ld_reg; - float __pyx_v_ld_bpr; - float __pyx_v_lambda_d; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a; - __Pyx_Buffer __pyx_pybuffer_del_a; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a_reg; - __Pyx_Buffer __pyx_pybuffer_del_a_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1; - __Pyx_Buffer __pyx_pybuffer_del_g1; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1_reg; - __Pyx_Buffer __pyx_pybuffer_del_g1_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2; - __Pyx_Buffer __pyx_pybuffer_del_g2; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2_reg; - __Pyx_Buffer __pyx_pybuffer_del_g2_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3; - __Pyx_Buffer __pyx_pybuffer_del_g3; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3_reg; - __Pyx_Buffer __pyx_pybuffer_del_g3_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i; - __Pyx_Buffer __pyx_pybuffer_del_i; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i_reg; - __Pyx_Buffer __pyx_pybuffer_del_i_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o; - __Pyx_Buffer __pyx_pybuffer_del_o; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o_reg; - __Pyx_Buffer __pyx_pybuffer_del_o_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u; - __Pyx_Buffer __pyx_pybuffer_del_u; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u_reg; - __Pyx_Buffer __pyx_pybuffer_del_u_reg; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - long __pyx_t_3; - int __pyx_t_4; - float __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - int __pyx_t_8; - Py_ssize_t __pyx_t_9; - long __pyx_t_10; - int __pyx_t_11; - long __pyx_t_12; - long __pyx_t_13; - int __pyx_t_14; - long __pyx_t_15; - long __pyx_t_16; - int __pyx_t_17; - Py_ssize_t __pyx_t_18; - Py_ssize_t __pyx_t_19; - Py_ssize_t __pyx_t_20; - Py_ssize_t __pyx_t_21; - Py_ssize_t __pyx_t_22; - Py_ssize_t __pyx_t_23; - Py_ssize_t __pyx_t_24; - Py_ssize_t __pyx_t_25; - int __pyx_t_26; - long __pyx_t_27; - PyObject *__pyx_t_28 = NULL; - PyObject *__pyx_t_29 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_fuse_0_1_fit_mter", 0); - __pyx_pybuffer_del_g1.pybuffer.buf = NULL; - __pyx_pybuffer_del_g1.refcount = 0; - __pyx_pybuffernd_del_g1.data = NULL; - __pyx_pybuffernd_del_g1.rcbuffer = &__pyx_pybuffer_del_g1; - __pyx_pybuffer_del_g2.pybuffer.buf = NULL; - __pyx_pybuffer_del_g2.refcount = 0; - __pyx_pybuffernd_del_g2.data = NULL; - __pyx_pybuffernd_del_g2.rcbuffer = &__pyx_pybuffer_del_g2; - __pyx_pybuffer_del_g3.pybuffer.buf = NULL; - __pyx_pybuffer_del_g3.refcount = 0; - __pyx_pybuffernd_del_g3.data = NULL; - __pyx_pybuffernd_del_g3.rcbuffer = &__pyx_pybuffer_del_g3; - __pyx_pybuffer_del_u.pybuffer.buf = NULL; - __pyx_pybuffer_del_u.refcount = 0; - __pyx_pybuffernd_del_u.data = NULL; - __pyx_pybuffernd_del_u.rcbuffer = &__pyx_pybuffer_del_u; - __pyx_pybuffer_del_i.pybuffer.buf = NULL; - __pyx_pybuffer_del_i.refcount = 0; - __pyx_pybuffernd_del_i.data = NULL; - __pyx_pybuffernd_del_i.rcbuffer = &__pyx_pybuffer_del_i; - __pyx_pybuffer_del_a.pybuffer.buf = NULL; - __pyx_pybuffer_del_a.refcount = 0; - __pyx_pybuffernd_del_a.data = NULL; - __pyx_pybuffernd_del_a.rcbuffer = &__pyx_pybuffer_del_a; - __pyx_pybuffer_del_o.pybuffer.buf = NULL; - __pyx_pybuffer_del_o.refcount = 0; - __pyx_pybuffernd_del_o.data = NULL; - __pyx_pybuffernd_del_o.rcbuffer = &__pyx_pybuffer_del_o; - __pyx_pybuffer_del_g1_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g1_reg.refcount = 0; - __pyx_pybuffernd_del_g1_reg.data = NULL; - __pyx_pybuffernd_del_g1_reg.rcbuffer = &__pyx_pybuffer_del_g1_reg; - __pyx_pybuffer_del_g2_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g2_reg.refcount = 0; - __pyx_pybuffernd_del_g2_reg.data = NULL; - __pyx_pybuffernd_del_g2_reg.rcbuffer = &__pyx_pybuffer_del_g2_reg; - __pyx_pybuffer_del_g3_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g3_reg.refcount = 0; - __pyx_pybuffernd_del_g3_reg.data = NULL; - __pyx_pybuffernd_del_g3_reg.rcbuffer = &__pyx_pybuffer_del_g3_reg; - __pyx_pybuffer_del_u_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_u_reg.refcount = 0; - __pyx_pybuffernd_del_u_reg.data = NULL; - __pyx_pybuffernd_del_u_reg.rcbuffer = &__pyx_pybuffer_del_u_reg; - __pyx_pybuffer_del_i_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_i_reg.refcount = 0; - __pyx_pybuffernd_del_i_reg.data = NULL; - __pyx_pybuffernd_del_i_reg.rcbuffer = &__pyx_pybuffer_del_i_reg; - __pyx_pybuffer_del_a_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_a_reg.refcount = 0; - __pyx_pybuffernd_del_a_reg.data = NULL; - __pyx_pybuffernd_del_a_reg.rcbuffer = &__pyx_pybuffer_del_a_reg; - __pyx_pybuffer_del_o_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_o_reg.refcount = 0; - __pyx_pybuffernd_del_o_reg.data = NULL; - __pyx_pybuffernd_del_o_reg.rcbuffer = &__pyx_pybuffer_del_o_reg; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g1.diminfo[0].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1.diminfo[0].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1.diminfo[1].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1.diminfo[1].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1.diminfo[2].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1.diminfo[2].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g2.diminfo[0].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2.diminfo[0].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2.diminfo[1].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2.diminfo[1].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2.diminfo[2].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2.diminfo[2].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g3.diminfo[0].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3.diminfo[0].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3.diminfo[1].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3.diminfo[1].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3.diminfo[2].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3.diminfo[2].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_u.diminfo[0].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u.diminfo[0].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u.diminfo[1].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u.diminfo[1].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_i.diminfo[0].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i.diminfo[0].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i.diminfo[1].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i.diminfo[1].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_a.diminfo[0].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a.diminfo[0].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a.diminfo[1].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a.diminfo[1].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_o.diminfo[0].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o.diminfo[0].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o.diminfo[1].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o.diminfo[1].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g1_reg.diminfo[0].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1_reg.diminfo[0].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1_reg.diminfo[1].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1_reg.diminfo[1].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1_reg.diminfo[2].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1_reg.diminfo[2].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g2_reg.diminfo[0].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2_reg.diminfo[0].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2_reg.diminfo[1].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2_reg.diminfo[1].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2_reg.diminfo[2].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2_reg.diminfo[2].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g3_reg.diminfo[0].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3_reg.diminfo[0].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3_reg.diminfo[1].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3_reg.diminfo[1].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3_reg.diminfo[2].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3_reg.diminfo[2].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_u_reg.diminfo[0].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u_reg.diminfo[0].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u_reg.diminfo[1].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u_reg.diminfo[1].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_i_reg.diminfo[0].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i_reg.diminfo[0].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i_reg.diminfo[1].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i_reg.diminfo[1].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_a_reg.diminfo[0].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a_reg.diminfo[0].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a_reg.diminfo[1].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a_reg.diminfo[1].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_o_reg.diminfo[0].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o_reg.diminfo[0].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o_reg.diminfo[1].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o_reg.diminfo[1].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[1]; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":531 - * """ - * cdef: - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 # <<<<<<<<<<<<<< - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items + /* "View.MemoryView":907 + * else: + * shape = view.shape[dim] + * stride = view.strides[dim] # <<<<<<<<<<<<<< + * if view.suboffsets != NULL: + * suboffset = view.suboffsets[dim] */ - __pyx_v_correct = 0; - __pyx_v_skipped = 0; - __pyx_v_aspect_correct = 0; + __pyx_v_stride = (__pyx_v_view->strides[__pyx_v_dim]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":532 - * cdef: - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 - * long n_users = self.train_set.num_users # <<<<<<<<<<<<<< - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects + /* "View.MemoryView":908 + * shape = view.shape[dim] + * stride = view.strides[dim] + * if view.suboffsets != NULL: # <<<<<<<<<<<<<< + * suboffset = view.suboffsets[dim] + * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_n_users = __pyx_t_3; + __pyx_t_2 = (__pyx_v_view->suboffsets != NULL); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":533 - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items # <<<<<<<<<<<<<< - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions + /* "View.MemoryView":909 + * stride = view.strides[dim] + * if view.suboffsets != NULL: + * suboffset = view.suboffsets[dim] # <<<<<<<<<<<<<< + * + * if index < 0: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_items = __pyx_t_3; + __pyx_v_suboffset = (__pyx_v_view->suboffsets[__pyx_v_dim]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":534 - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors + /* "View.MemoryView":908 + * shape = view.shape[dim] + * stride = view.strides[dim] + * if view.suboffsets != NULL: # <<<<<<<<<<<<<< + * suboffset = view.suboffsets[dim] + * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_aspects = __pyx_t_3; + } + } + __pyx_L3:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":535 - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions # <<<<<<<<<<<<<< - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors + /* "View.MemoryView":911 + * suboffset = view.suboffsets[dim] + * + * if index < 0: # <<<<<<<<<<<<<< + * index += view.shape[dim] + * if index < 0: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_opinions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_opinions = __pyx_t_3; + __pyx_t_2 = (__pyx_v_index < 0); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":536 - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors # <<<<<<<<<<<<<< - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors + /* "View.MemoryView":912 + * + * if index < 0: + * index += view.shape[dim] # <<<<<<<<<<<<<< + * if index < 0: + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_user_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 536, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 536, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_user_factors = __pyx_t_3; + __pyx_v_index = (__pyx_v_index + (__pyx_v_view->shape[__pyx_v_dim])); - /* "cornac/models/comparer/recom_comparer_sub.pyx":537 - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors # <<<<<<<<<<<<<< - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors + /* "View.MemoryView":913 + * if index < 0: + * index += view.shape[dim] + * if index < 0: # <<<<<<<<<<<<<< + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" + * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_item_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 537, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_item_factors = __pyx_t_3; + __pyx_t_2 = (__pyx_v_index < 0); + if (unlikely(__pyx_t_2)) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":538 - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors # <<<<<<<<<<<<<< - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples + /* "View.MemoryView":914 + * index += view.shape[dim] + * if index < 0: + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" # <<<<<<<<<<<<<< + * + * if index >= shape: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_aspect_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 538, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_aspect_factors = __pyx_t_3; + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 914, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = 0; + __pyx_t_4 = 127; + __Pyx_INCREF(__pyx_kp_u_Out_of_bounds_on_buffer_access_a); + __pyx_t_1 += 37; + __Pyx_GIVEREF(__pyx_kp_u_Out_of_bounds_on_buffer_access_a); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Out_of_bounds_on_buffer_access_a); + __pyx_t_5 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_dim, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 914, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5); + __pyx_t_5 = 0; + __Pyx_INCREF(__pyx_kp_u__7); + __pyx_t_1 += 1; + __Pyx_GIVEREF(__pyx_kp_u__7); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__7); + __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 914, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_builtin_IndexError, __pyx_t_5, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __PYX_ERR(1, 914, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":539 - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors # <<<<<<<<<<<<<< - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples + /* "View.MemoryView":913 + * if index < 0: + * index += view.shape[dim] + * if index < 0: # <<<<<<<<<<<<<< + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" + * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_opinion_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 539, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_opinion_factors = __pyx_t_3; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":540 - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples # <<<<<<<<<<<<<< - * int num_bpr_samples = self.n_bpr_samples - * int num_pair_samples = self.n_pair_samples + /* "View.MemoryView":911 + * suboffset = view.suboffsets[dim] + * + * if index < 0: # <<<<<<<<<<<<<< + * index += view.shape[dim] + * if index < 0: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_element_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 540, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_samples = __pyx_t_4; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":541 - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples # <<<<<<<<<<<<<< - * int num_pair_samples = self.n_pair_samples + /* "View.MemoryView":916 + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" + * + * if index >= shape: # <<<<<<<<<<<<<< + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 541, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_bpr_samples = __pyx_t_4; + __pyx_t_2 = (__pyx_v_index >= __pyx_v_shape); + if (unlikely(__pyx_t_2)) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":542 - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples - * int num_pair_samples = self.n_pair_samples # <<<<<<<<<<<<<< + /* "View.MemoryView":917 * - * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id + * if index >= shape: + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" # <<<<<<<<<<<<<< + * + * resultp = bufp + index * stride */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_pair_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 542, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_pair_samples = __pyx_t_4; + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 917, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = 0; + __pyx_t_4 = 127; + __Pyx_INCREF(__pyx_kp_u_Out_of_bounds_on_buffer_access_a); + __pyx_t_1 += 37; + __Pyx_GIVEREF(__pyx_kp_u_Out_of_bounds_on_buffer_access_a); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Out_of_bounds_on_buffer_access_a); + __pyx_t_3 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_dim, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 917, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u__7); + __pyx_t_1 += 1; + __Pyx_GIVEREF(__pyx_kp_u__7); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u__7); + __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 917, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_Raise(__pyx_builtin_IndexError, __pyx_t_3, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 917, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":546 - * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id - * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji - * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr # <<<<<<<<<<<<<< - * floating eps = 1e-9 + /* "View.MemoryView":916 + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" + * + * if index >= shape: # <<<<<<<<<<<<<< + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" * */ - __pyx_v_loss = 0.; - __pyx_v_bpr_loss = 0.; - __pyx_v_aspect_bpr_loss = 0.; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":547 - * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji - * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr - * floating eps = 1e-9 # <<<<<<<<<<<<<< + /* "View.MemoryView":919 + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" * - * floating lr = self.lr + * resultp = bufp + index * stride # <<<<<<<<<<<<<< + * if suboffset >= 0: + * resultp = ( resultp)[0] + suboffset */ - __pyx_v_eps = 1e-9; + __pyx_v_resultp = (__pyx_v_bufp + (__pyx_v_index * __pyx_v_stride)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":549 - * floating eps = 1e-9 + /* "View.MemoryView":920 + * + * resultp = bufp + index * stride + * if suboffset >= 0: # <<<<<<<<<<<<<< + * resultp = ( resultp)[0] + suboffset * - * floating lr = self.lr # <<<<<<<<<<<<<< - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 549, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 549, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lr = __pyx_t_5; + __pyx_t_2 = (__pyx_v_suboffset >= 0); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":550 + /* "View.MemoryView":921 + * resultp = bufp + index * stride + * if suboffset >= 0: + * resultp = ( resultp)[0] + suboffset # <<<<<<<<<<<<<< * - * floating lr = self.lr - * floating ld_reg = self.lambda_reg # <<<<<<<<<<<<<< - * floating ld_bpr = self.lambda_bpr - * floating lambda_d = self.lambda_d + * return resultp */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_reg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 550, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 550, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_ld_reg = __pyx_t_5; + __pyx_v_resultp = ((((char **)__pyx_v_resultp)[0]) + __pyx_v_suboffset); - /* "cornac/models/comparer/recom_comparer_sub.pyx":551 - * floating lr = self.lr - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr # <<<<<<<<<<<<<< - * floating lambda_d = self.lambda_d + /* "View.MemoryView":920 + * + * resultp = bufp + index * stride + * if suboffset >= 0: # <<<<<<<<<<<<<< + * resultp = ( resultp)[0] + suboffset * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_bpr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 551, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_ld_bpr = __pyx_t_5; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":552 - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr - * floating lambda_d = self.lambda_d # <<<<<<<<<<<<<< + /* "View.MemoryView":923 + * resultp = ( resultp)[0] + suboffset + * + * return resultp # <<<<<<<<<<<<<< + * * - * del_g1.fill(0) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 552, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_d = __pyx_t_5; + __pyx_r = __pyx_v_resultp; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":554 - * floating lambda_d = self.lambda_d + /* "View.MemoryView":896 * - * del_g1.fill(0) # <<<<<<<<<<<<<< - * del_g2.fill(0) - * del_g3.fill(0) + * @cname('__pyx_pybuffer_index') + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":555 + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.pybuffer_index", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":929 + * + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) except -1 nogil: # <<<<<<<<<<<<<< + * cdef int ndim = memslice.memview.view.ndim * - * del_g1.fill(0) - * del_g2.fill(0) # <<<<<<<<<<<<<< - * del_g3.fill(0) - * del_u.fill(0) */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 555, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":556 - * del_g1.fill(0) - * del_g2.fill(0) - * del_g3.fill(0) # <<<<<<<<<<<<<< - * del_u.fill(0) - * del_i.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":557 - * del_g2.fill(0) - * del_g3.fill(0) - * del_u.fill(0) # <<<<<<<<<<<<<< - * del_i.fill(0) - * del_a.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 557, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; +static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) { + int __pyx_v_ndim; + Py_ssize_t *__pyx_v_shape; + Py_ssize_t *__pyx_v_strides; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_r; + int __pyx_t_1; + Py_ssize_t *__pyx_t_2; + long __pyx_t_3; + long __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + int __pyx_t_7; + int __pyx_t_8; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save; + #endif - /* "cornac/models/comparer/recom_comparer_sub.pyx":558 - * del_g3.fill(0) - * del_u.fill(0) - * del_i.fill(0) # <<<<<<<<<<<<<< - * del_a.fill(0) - * del_o.fill(0) + /* "View.MemoryView":930 + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) except -1 nogil: + * cdef int ndim = memslice.memview.view.ndim # <<<<<<<<<<<<<< + * + * cdef Py_ssize_t *shape = memslice.shape */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 558, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 558, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __pyx_v_memslice->memview->view.ndim; + __pyx_v_ndim = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":559 - * del_u.fill(0) - * del_i.fill(0) - * del_a.fill(0) # <<<<<<<<<<<<<< - * del_o.fill(0) - * del_g1_reg.fill(0) + /* "View.MemoryView":932 + * cdef int ndim = memslice.memview.view.ndim + * + * cdef Py_ssize_t *shape = memslice.shape # <<<<<<<<<<<<<< + * cdef Py_ssize_t *strides = memslice.strides + * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 559, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 559, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __pyx_v_memslice->shape; + __pyx_v_shape = __pyx_t_2; - /* "cornac/models/comparer/recom_comparer_sub.pyx":560 - * del_i.fill(0) - * del_a.fill(0) - * del_o.fill(0) # <<<<<<<<<<<<<< - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) + /* "View.MemoryView":933 + * + * cdef Py_ssize_t *shape = memslice.shape + * cdef Py_ssize_t *strides = memslice.strides # <<<<<<<<<<<<<< + * + * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __pyx_v_memslice->strides; + __pyx_v_strides = __pyx_t_2; - /* "cornac/models/comparer/recom_comparer_sub.pyx":561 - * del_a.fill(0) - * del_o.fill(0) - * del_g1_reg.fill(0) # <<<<<<<<<<<<<< - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) + /* "View.MemoryView":937 + * + * cdef int i, j + * for i in range(ndim // 2): # <<<<<<<<<<<<<< + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_div_long(__pyx_v_ndim, 2); + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) { + __pyx_v_i = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":562 - * del_o.fill(0) - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) # <<<<<<<<<<<<<< - * del_g3_reg.fill(0) - * del_u_reg.fill(0) + /* "View.MemoryView":938 + * cdef int i, j + * for i in range(ndim // 2): + * j = ndim - 1 - i # <<<<<<<<<<<<<< + * strides[i], strides[j] = strides[j], strides[i] + * shape[i], shape[j] = shape[j], shape[i] */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 562, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_j = ((__pyx_v_ndim - 1) - __pyx_v_i); - /* "cornac/models/comparer/recom_comparer_sub.pyx":563 - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) # <<<<<<<<<<<<<< - * del_u_reg.fill(0) - * del_i_reg.fill(0) + /* "View.MemoryView":939 + * for i in range(ndim // 2): + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] # <<<<<<<<<<<<<< + * shape[i], shape[j] = shape[j], shape[i] + * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 563, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 563, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = (__pyx_v_strides[__pyx_v_j]); + __pyx_t_6 = (__pyx_v_strides[__pyx_v_i]); + (__pyx_v_strides[__pyx_v_i]) = __pyx_t_5; + (__pyx_v_strides[__pyx_v_j]) = __pyx_t_6; - /* "cornac/models/comparer/recom_comparer_sub.pyx":564 - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) - * del_u_reg.fill(0) # <<<<<<<<<<<<<< - * del_i_reg.fill(0) - * del_a_reg.fill(0) + /* "View.MemoryView":940 + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] + * shape[i], shape[j] = shape[j], shape[i] # <<<<<<<<<<<<<< + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 564, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_6 = (__pyx_v_shape[__pyx_v_j]); + __pyx_t_5 = (__pyx_v_shape[__pyx_v_i]); + (__pyx_v_shape[__pyx_v_i]) = __pyx_t_6; + (__pyx_v_shape[__pyx_v_j]) = __pyx_t_5; - /* "cornac/models/comparer/recom_comparer_sub.pyx":565 - * del_g3_reg.fill(0) - * del_u_reg.fill(0) - * del_i_reg.fill(0) # <<<<<<<<<<<<<< - * del_a_reg.fill(0) - * del_o_reg.fill(0) + /* "View.MemoryView":942 + * shape[i], shape[j] = shape[j], shape[i] + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< + * _err(PyExc_ValueError, "Cannot transpose memoryview with indirect dimensions") + * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 565, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_8 = ((__pyx_v_memslice->suboffsets[__pyx_v_i]) >= 0); + if (!__pyx_t_8) { + } else { + __pyx_t_7 = __pyx_t_8; + goto __pyx_L6_bool_binop_done; } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_8 = ((__pyx_v_memslice->suboffsets[__pyx_v_j]) >= 0); + __pyx_t_7 = __pyx_t_8; + __pyx_L6_bool_binop_done:; + if (__pyx_t_7) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":566 - * del_u_reg.fill(0) - * del_i_reg.fill(0) - * del_a_reg.fill(0) # <<<<<<<<<<<<<< - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): + /* "View.MemoryView":943 + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: + * _err(PyExc_ValueError, "Cannot transpose memoryview with indirect dimensions") # <<<<<<<<<<<<<< + * + * return 0 */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 566, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_9 = __pyx_memoryview_err(PyExc_ValueError, __pyx_kp_s_Cannot_transpose_memoryview_with); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 943, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":567 - * del_i_reg.fill(0) - * del_a_reg.fill(0) - * del_o_reg.fill(0) # <<<<<<<<<<<<<< - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() + /* "View.MemoryView":942 + * shape[i], shape[j] = shape[j], shape[i] + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< + * _err(PyExc_ValueError, "Cannot transpose memoryview with indirect dimensions") + * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 567, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); } } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":568 - * del_a_reg.fill(0) - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): + /* "View.MemoryView":945 + * _err(PyExc_ValueError, "Cannot transpose memoryview with indirect dimensions") + * + * return 0 # <<<<<<<<<<<<<< + * + * */ - { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); - #endif - /*try:*/ { - { - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) - #endif - #ifdef _OPENMP - #pragma omp parallel private(__pyx_v_thread_id) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_bpr_loss) reduction(+:__pyx_v_correct) reduction(+:__pyx_v_skipped) reduction(+:__pyx_v_aspect_bpr_loss) reduction(+:__pyx_v_aspect_correct) private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_3, __pyx_t_4, __pyx_t_7, __pyx_t_8, __pyx_t_9) num_threads(__pyx_v_n_threads) - #endif /* _OPENMP */ - { - /* Initialize private variables to invalid values */ - __pyx_v_thread_id = ((int)0xbad0bad0); + __pyx_r = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":569 - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() # <<<<<<<<<<<<<< - * for _ in prange(num_samples, schedule='guided'): - * # get user item aspect element + /* "View.MemoryView":929 + * + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) except -1 nogil: # <<<<<<<<<<<<<< + * cdef int ndim = memslice.memview.view.ndim + * */ - __pyx_v_thread_id = recom_bpr::get_thread_num(); - /* "cornac/models/comparer/recom_comparer_sub.pyx":570 - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): # <<<<<<<<<<<<<< - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) - */ - __pyx_t_4 = __pyx_v_num_samples; - if ((1 == 0)) abort(); - { - __pyx_t_8 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_8 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_del_sqerror) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_o_idx) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_score) lastprivate(__pyx_v_u_idx) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){ - { - __pyx_v__ = (int)(0 + 1 * __pyx_t_7); - /* Initialize private variables to invalid values */ - __pyx_v_a_idx = ((int)0xbad0bad0); - __pyx_v_del_sqerror = ((float)__PYX_NAN()); - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_i_idx = ((int)0xbad0bad0); - __pyx_v_idx = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_o_idx = ((int)0xbad0bad0); - __pyx_v_pred = ((float)__PYX_NAN()); - __pyx_v_score = ((float)__PYX_NAN()); - __pyx_v_u_idx = ((int)0xbad0bad0); + /* function exit code */ + __pyx_L1_error:; + #ifdef WITH_THREAD + __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.transpose_memslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __pyx_L0:; + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":572 - * for _ in prange(num_samples, schedule='guided'): - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] +/* "View.MemoryView":963 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * __PYX_XCLEAR_MEMVIEW(&self.from_slice, 1) + * */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uia->__pyx_vtab)->generate(__pyx_v_rng_pos_uia, __pyx_v_thread_id); - /* "cornac/models/comparer/recom_comparer_sub.pyx":573 - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) - * u_idx = X_uids[idx] # <<<<<<<<<<<<<< - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] - */ - __pyx_t_9 = __pyx_v_idx; - __pyx_v_u_idx = (*((int *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_9 * __pyx_v_X_uids.strides[0]) ))); +/* Python wrapper */ +static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":574 - * idx = rng_pos_uia.generate(thread_id) - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] # <<<<<<<<<<<<<< - * a_idx = X_aids[idx] - * score = X[idx] - */ - __pyx_t_9 = __pyx_v_idx; - __pyx_v_i_idx = (*((int *) ( /* dim=0 */ (__pyx_v_X_iids.data + __pyx_t_9 * __pyx_v_X_iids.strides[0]) ))); + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":575 - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] # <<<<<<<<<<<<<< - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) - */ - __pyx_t_9 = __pyx_v_idx; - __pyx_v_a_idx = (*((int *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_9 * __pyx_v_X_aids.strides[0]) ))); +static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":576 - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] - * score = X[idx] # <<<<<<<<<<<<<< - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) - * loss += (pred - score) * (pred - score) + /* "View.MemoryView":964 + * + * def __dealloc__(self): + * __PYX_XCLEAR_MEMVIEW(&self.from_slice, 1) # <<<<<<<<<<<<<< + * + * cdef convert_item_to_object(self, char *itemp): */ - __pyx_t_9 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_9 * __pyx_v_X.strides[0]) ))); + __PYX_XCLEAR_MEMVIEW((&__pyx_v_self->from_slice), 1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":577 - * a_idx = X_aids[idx] - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) + /* "View.MemoryView":963 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * __PYX_XCLEAR_MEMVIEW(&self.from_slice, 1) * */ - __pyx_v_pred = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); - /* "cornac/models/comparer/recom_comparer_sub.pyx":578 - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< - * - * del_sqerror = 2 * (pred - score) - */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":580 - * loss += (pred - score) * (pred - score) - * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< - * for i in range(n_user_factors): - * for j in range(n_item_factors): - */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":581 +/* "View.MemoryView":966 + * __PYX_XCLEAR_MEMVIEW(&self.from_slice, 1) * - * del_sqerror = 2 * (pred - score) - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - */ - __pyx_t_3 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":582 - * del_sqerror = 2 * (pred - score) - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; - /* "cornac/models/comparer/recom_comparer_sub.pyx":583 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; +static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("convert_item_to_object", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":584 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + /* "View.MemoryView":967 + * + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: # <<<<<<<<<<<<<< + * return self.to_object_func(itemp) + * else: */ - __pyx_t_9 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_i_idx; - __pyx_t_20 = __pyx_v_j; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_k; - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_20 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); + __pyx_t_1 = (__pyx_v_self->to_object_func != NULL); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":585 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] + /* "View.MemoryView":968 + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) # <<<<<<<<<<<<<< + * else: + * return memoryview.convert_item_to_object(self, itemp) */ - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_i_idx; - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))); + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_v_self->to_object_func(__pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 968, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":586 - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] + /* "View.MemoryView":967 * + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: # <<<<<<<<<<<<<< + * return self.to_object_func(itemp) + * else: */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_k; - __pyx_t_23 = __pyx_v_i_idx; - __pyx_t_24 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_25 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_20 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":587 - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] # <<<<<<<<<<<<<< + /* "View.MemoryView":970 + * return self.to_object_func(itemp) + * else: + * return memoryview.convert_item_to_object(self, itemp) # <<<<<<<<<<<<<< * - * # get user aspect opinion element + * cdef assign_item_from_object(self, char *itemp, object value): */ - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_j; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))); - } - } - } + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_convert_item_to_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 970, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":590 + /* "View.MemoryView":966 + * __PYX_XCLEAR_MEMVIEW(&self.from_slice, 1) * - * # get user aspect opinion element - * idx = rng_pos_uao.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] - */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uao->__pyx_vtab)->generate(__pyx_v_rng_pos_uao, __pyx_v_thread_id); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":591 - * # get user aspect opinion element - * idx = rng_pos_uao.generate(thread_id) - * u_idx = YU_uids[idx] # <<<<<<<<<<<<<< - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_u_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YU_uids.data + __pyx_t_25 * __pyx_v_YU_uids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":592 - * idx = rng_pos_uao.generate(thread_id) - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] # <<<<<<<<<<<<<< - * o_idx = YU_oids[idx] - * score = YU[idx] - */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_a_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YU_aids.data + __pyx_t_25 * __pyx_v_YU_aids.strides[0]) ))); + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":593 - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] # <<<<<<<<<<<<<< - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) +/* "View.MemoryView":972 + * return memoryview.convert_item_to_object(self, itemp) + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_o_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YU_oids.data + __pyx_t_25 * __pyx_v_YU_oids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":594 - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] - * score = YU[idx] # <<<<<<<<<<<<<< - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) - */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_YU.data + __pyx_t_25 * __pyx_v_YU.strides[0]) ))); +static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assign_item_from_object", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":595 - * o_idx = YU_oids[idx] - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) + /* "View.MemoryView":973 * + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< + * self.to_dtype_func(itemp, value) + * else: */ - __pyx_v_pred = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G2, __pyx_v_n_user_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_U, __pyx_v_A, __pyx_v_O, __pyx_v_u_idx, __pyx_v_a_idx, __pyx_v_o_idx); + __pyx_t_1 = (__pyx_v_self->to_dtype_func != NULL); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":596 - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< - * - * del_sqerror = 2 * (pred - score) + /* "View.MemoryView":974 + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) # <<<<<<<<<<<<<< + * else: + * memoryview.assign_item_from_object(self, itemp, value) */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); + __pyx_t_2 = __pyx_v_self->to_dtype_func(__pyx_v_itemp, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 974, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":598 - * loss += (pred - score) * (pred - score) - * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + /* "View.MemoryView":973 * - * for i in range(n_user_factors): + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< + * self.to_dtype_func(itemp, value) + * else: */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + goto __pyx_L3; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":600 - * del_sqerror = 2 * (pred - score) + /* "View.MemoryView":976 + * self.to_dtype_func(itemp, value) + * else: + * memoryview.assign_item_from_object(self, itemp, value) # <<<<<<<<<<<<<< * - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): + * cdef _get_base(self): */ - __pyx_t_3 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + /*else*/ { + __pyx_t_3 = __pyx_memoryview_assign_item_from_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 976, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L3:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":601 + /* "View.MemoryView":972 + * return memoryview.convert_item_to_object(self, itemp) * - * for i in range(n_user_factors): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) */ - __pyx_t_12 = __pyx_v_n_aspect_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; - /* "cornac/models/comparer/recom_comparer_sub.pyx":602 - * for i in range(n_user_factors): - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - */ - __pyx_t_15 = __pyx_v_n_opinion_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":603 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] +/* "View.MemoryView":978 + * memoryview.assign_item_from_object(self, itemp, value) + * + * cdef _get_base(self): # <<<<<<<<<<<<<< + * return self.from_object + * */ - __pyx_t_25 = __pyx_v_u_idx; - __pyx_t_9 = __pyx_v_i; - __pyx_t_18 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_j; - __pyx_t_20 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":604 - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] - */ - __pyx_t_21 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_18 = __pyx_v_a_idx; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_o_idx; - __pyx_t_24 = __pyx_v_k; - __pyx_t_23 = __pyx_v_u_idx; - __pyx_t_22 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_9 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_25 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )))); +static PyObject *__pyx_memoryviewslice__get_base(struct __pyx_memoryviewslice_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_get_base", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":605 - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] + /* "View.MemoryView":979 + * + * cdef _get_base(self): + * return self.from_object # <<<<<<<<<<<<<< * - */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_18 = __pyx_v_u_idx; - __pyx_t_19 = __pyx_v_i; - __pyx_t_20 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - __pyx_t_22 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_24 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":606 - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< * - * # get item aspect opinion element */ - __pyx_t_21 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_18 = __pyx_v_u_idx; - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_a_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_o_idx; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_24 * __pyx_v_A.strides[1]) )))); - } - } - } + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->from_object); + __pyx_r = __pyx_v_self->from_object; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":609 + /* "View.MemoryView":978 + * memoryview.assign_item_from_object(self, itemp, value) + * + * cdef _get_base(self): # <<<<<<<<<<<<<< + * return self.from_object * - * # get item aspect opinion element - * idx = rng_pos_iao.generate(thread_id) # <<<<<<<<<<<<<< - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_iao->__pyx_vtab)->generate(__pyx_v_rng_pos_iao, __pyx_v_thread_id); - /* "cornac/models/comparer/recom_comparer_sub.pyx":610 - * # get item aspect opinion element - * idx = rng_pos_iao.generate(thread_id) - * i_idx = YI_iids[idx] # <<<<<<<<<<<<<< - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] - */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_i_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YI_iids.data + __pyx_t_24 * __pyx_v_YI_iids.strides[0]) ))); + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":611 - * idx = rng_pos_iao.generate(thread_id) - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] # <<<<<<<<<<<<<< - * o_idx = YI_oids[idx] - * score = YI[idx] +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_a_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YI_aids.data + __pyx_t_24 * __pyx_v_YI_aids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":612 - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] # <<<<<<<<<<<<<< - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) - */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_o_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YI_oids.data + __pyx_t_24 * __pyx_v_YI_oids.strides[0]) ))); +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; + __pyx_r = __pyx_pf___pyx_memoryviewslice___reduce_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":613 - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] - * score = YI[idx] # <<<<<<<<<<<<<< - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) - */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_YI.data + __pyx_t_24 * __pyx_v_YI.strides[0]) ))); + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":614 - * o_idx = YI_oids[idx] - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) - * +static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" */ - __pyx_v_pred = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G3, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_i_idx, __pyx_v_a_idx, __pyx_v_o_idx); + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0); + __PYX_ERR(1, 2, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":615 - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< - * - * del_sqerror = 2 * (pred - score) + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":617 - * loss += (pred - score) * (pred - score) - * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":618 - * - * del_sqerror = 2 * (pred - score) - * for i in range(n_item_factors): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - */ - __pyx_t_3 = __pyx_v_n_item_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + PyObject* values[1] = {0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf___pyx_memoryviewslice_2__setstate_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self), __pyx_v___pyx_state); - /* "cornac/models/comparer/recom_comparer_sub.pyx":619 - * del_sqerror = 2 * (pred - score) - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - */ - __pyx_t_12 = __pyx_v_n_aspect_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":620 - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - */ - __pyx_t_15 = __pyx_v_n_opinion_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; +static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":621 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + /* "(tree fragment)":4 + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<< */ - __pyx_t_24 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_o_idx; - __pyx_t_20 = __pyx_v_k; - __pyx_t_21 = __pyx_v_i; - __pyx_t_22 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_24 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0); + __PYX_ERR(1, 4, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":622 - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_25 = __pyx_v_j; - __pyx_t_24 = __pyx_v_o_idx; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i_idx; - __pyx_t_21 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_23 * __pyx_v_O.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":623 - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":999 * + * @cname('__pyx_memoryview_fromslice') + * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< + * int ndim, + * object (*to_object_func)(char *), */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_o_idx; - __pyx_t_20 = __pyx_v_k; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_23 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":624 - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< +static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewslice, int __pyx_v_ndim, PyObject *(*__pyx_v_to_object_func)(char *), int (*__pyx_v_to_dtype_func)(char *, PyObject *), int __pyx_v_dtype_is_object) { + struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_v_length = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_TypeInfo *__pyx_t_4; + Py_buffer __pyx_t_5; + Py_ssize_t *__pyx_t_6; + Py_ssize_t *__pyx_t_7; + Py_ssize_t *__pyx_t_8; + Py_ssize_t __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_fromslice", 0); + + /* "View.MemoryView":1007 + * cdef _memoryviewslice result + * + * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< + * return None * - * for _ in prange(num_bpr_samples, schedule='guided'): */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_j; - __pyx_t_22 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); - } - } - } - } - } - } - } + __pyx_t_1 = (((PyObject *)__pyx_v_memviewslice.memview) == Py_None); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":626 - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + /* "View.MemoryView":1008 + * + * if memviewslice.memview == Py_None: + * return None # <<<<<<<<<<<<<< + * * - * for _ in prange(num_bpr_samples, schedule='guided'): # <<<<<<<<<<<<<< - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] */ - __pyx_t_8 = __pyx_v_num_bpr_samples; - if ((1 == 0)) abort(); - { - __pyx_t_4 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_4 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_del_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_i_ij) lastprivate(__pyx_v_i_score) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_j_score) lastprivate(__pyx_v_jdx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_s) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_4; __pyx_t_7++){ - { - __pyx_v__ = (int)(0 + 1 * __pyx_t_7); - /* Initialize private variables to invalid values */ - __pyx_v_del_bpr = ((float)__PYX_NAN()); - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_i_idx = ((int)0xbad0bad0); - __pyx_v_i_ij = ((float)__PYX_NAN()); - __pyx_v_i_score = ((float)__PYX_NAN()); - __pyx_v_idx = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_j_idx = ((int)0xbad0bad0); - __pyx_v_j_score = ((float)__PYX_NAN()); - __pyx_v_jdx = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_pred = ((float)__PYX_NAN()); - __pyx_v_s = ((long)0xbad0bad0); - __pyx_v_u_idx = ((int)0xbad0bad0); - __pyx_v_z = ((float)__PYX_NAN()); + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":627 + /* "View.MemoryView":1007 + * cdef _memoryviewslice result + * + * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< + * return None * - * for _ in prange(num_bpr_samples, schedule='guided'): - * idx = rng_pos.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos->__pyx_vtab)->generate(__pyx_v_rng_pos, __pyx_v_thread_id); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":628 - * for _ in prange(num_bpr_samples, schedule='guided'): - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] # <<<<<<<<<<<<<< - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) + /* "View.MemoryView":1013 + * + * + * result = _memoryviewslice.__new__(_memoryviewslice, None, 0, dtype_is_object) # <<<<<<<<<<<<<< + * + * result.from_slice = memviewslice */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_u_idx = (*((int *) ( /* dim=0 */ (__pyx_v_user_ids.data + __pyx_t_23 * __pyx_v_user_ids.strides[0]) ))); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None); + __Pyx_INCREF(__pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = ((PyObject *)__pyx_tp_new__memoryviewslice(((PyTypeObject *)__pyx_memoryviewslice_type), __pyx_t_3, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF((PyObject *)__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":629 - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] # <<<<<<<<<<<<<< - * jdx = rng_neg.generate(thread_id) - * j_idx = neg_item_ids[jdx] + /* "View.MemoryView":1015 + * result = _memoryviewslice.__new__(_memoryviewslice, None, 0, dtype_is_object) + * + * result.from_slice = memviewslice # <<<<<<<<<<<<<< + * __PYX_INC_MEMVIEW(&memviewslice, 1) + * */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_i_idx = (*((int *) ( /* dim=0 */ (__pyx_v_item_ids.data + __pyx_t_23 * __pyx_v_item_ids.strides[0]) ))); + __pyx_v_result->from_slice = __pyx_v_memviewslice; - /* "cornac/models/comparer/recom_comparer_sub.pyx":630 - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) # <<<<<<<<<<<<<< - * j_idx = neg_item_ids[jdx] + /* "View.MemoryView":1016 * + * result.from_slice = memviewslice + * __PYX_INC_MEMVIEW(&memviewslice, 1) # <<<<<<<<<<<<<< + * + * result.from_object = ( memviewslice.memview)._get_base() */ - __pyx_v_jdx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_neg->__pyx_vtab)->generate(__pyx_v_rng_neg, __pyx_v_thread_id); + __PYX_INC_MEMVIEW((&__pyx_v_memviewslice), 1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":631 - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) - * j_idx = neg_item_ids[jdx] # <<<<<<<<<<<<<< + /* "View.MemoryView":1018 + * __PYX_INC_MEMVIEW(&memviewslice, 1) + * + * result.from_object = ( memviewslice.memview)._get_base() # <<<<<<<<<<<<<< + * result.typeinfo = memviewslice.memview.typeinfo * - * s = 1 */ - __pyx_t_23 = __pyx_v_jdx; - __pyx_v_j_idx = (*((int *) ( /* dim=0 */ (__pyx_v_neg_item_ids.data + __pyx_t_23 * __pyx_v_neg_item_ids.strides[0]) ))); + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->__pyx_vtab)->_get_base(((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1018, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_v_result->from_object); + __Pyx_DECREF(__pyx_v_result->from_object); + __pyx_v_result->from_object = __pyx_t_2; + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":633 - * j_idx = neg_item_ids[jdx] + /* "View.MemoryView":1019 * - * s = 1 # <<<<<<<<<<<<<< - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): + * result.from_object = ( memviewslice.memview)._get_base() + * result.typeinfo = memviewslice.memview.typeinfo # <<<<<<<<<<<<<< + * + * result.view = memviewslice.memview.view */ - __pyx_v_s = 1; + __pyx_t_4 = __pyx_v_memviewslice.memview->typeinfo; + __pyx_v_result->__pyx_base.typeinfo = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":635 - * s = 1 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + /* "View.MemoryView":1021 + * result.typeinfo = memviewslice.memview.typeinfo + * + * result.view = memviewslice.memview.view # <<<<<<<<<<<<<< + * result.view.buf = memviewslice.data + * result.view.ndim = ndim */ - __pyx_t_26 = (__pyx_fuse_1__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero(__pyx_v_indptr, __pyx_v_item_ids, __pyx_v_u_idx, __pyx_v_j_idx) != 0); - if (__pyx_t_26) { + __pyx_t_5 = __pyx_v_memviewslice.memview->view; + __pyx_v_result->__pyx_base.view = __pyx_t_5; - /* "cornac/models/comparer/recom_comparer_sub.pyx":636 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] # <<<<<<<<<<<<<< - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: + /* "View.MemoryView":1022 + * + * result.view = memviewslice.memview.view + * result.view.buf = memviewslice.data # <<<<<<<<<<<<<< + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None */ - __pyx_v_i_score = (__pyx_v_rating_dict->my_map[__pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_i_idx)]); + __pyx_v_result->__pyx_base.view.buf = ((void *)__pyx_v_memviewslice.data); - /* "cornac/models/comparer/recom_comparer_sub.pyx":637 - * if has_non_zero(indptr, item_ids, u_idx, j_idx): - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] # <<<<<<<<<<<<<< - * if i_score == j_score: - * skipped += 1 + /* "View.MemoryView":1023 + * result.view = memviewslice.memview.view + * result.view.buf = memviewslice.data + * result.view.ndim = ndim # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &result.view).obj = Py_None + * Py_INCREF(Py_None) */ - __pyx_v_j_score = (__pyx_v_rating_dict->my_map[__pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_j_idx)]); + __pyx_v_result->__pyx_base.view.ndim = __pyx_v_ndim; - /* "cornac/models/comparer/recom_comparer_sub.pyx":638 - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: # <<<<<<<<<<<<<< - * skipped += 1 - * continue + /* "View.MemoryView":1024 + * result.view.buf = memviewslice.data + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * */ - __pyx_t_26 = ((__pyx_v_i_score == __pyx_v_j_score) != 0); - if (__pyx_t_26) { + ((Py_buffer *)(&__pyx_v_result->__pyx_base.view))->obj = Py_None; - /* "cornac/models/comparer/recom_comparer_sub.pyx":639 - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: - * skipped += 1 # <<<<<<<<<<<<<< - * continue - * elif i_score < j_score: + /* "View.MemoryView":1025 + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: */ - __pyx_v_skipped = (__pyx_v_skipped + 1); + Py_INCREF(Py_None); - /* "cornac/models/comparer/recom_comparer_sub.pyx":640 - * if i_score == j_score: - * skipped += 1 - * continue # <<<<<<<<<<<<<< - * elif i_score < j_score: - * s = -1 + /* "View.MemoryView":1027 + * Py_INCREF(Py_None) + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< + * result.flags = PyBUF_RECORDS + * else: */ - goto __pyx_L34_continue; + __pyx_t_1 = ((((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->flags & PyBUF_WRITABLE) != 0); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":638 - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: # <<<<<<<<<<<<<< - * skipped += 1 - * continue + /* "View.MemoryView":1028 + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: + * result.flags = PyBUF_RECORDS # <<<<<<<<<<<<<< + * else: + * result.flags = PyBUF_RECORDS_RO */ - } + __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS; - /* "cornac/models/comparer/recom_comparer_sub.pyx":641 - * skipped += 1 - * continue - * elif i_score < j_score: # <<<<<<<<<<<<<< - * s = -1 + /* "View.MemoryView":1027 + * Py_INCREF(Py_None) * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< + * result.flags = PyBUF_RECORDS + * else: */ - __pyx_t_26 = ((__pyx_v_i_score < __pyx_v_j_score) != 0); - if (__pyx_t_26) { + goto __pyx_L4; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":642 - * continue - * elif i_score < j_score: - * s = -1 # <<<<<<<<<<<<<< + /* "View.MemoryView":1030 + * result.flags = PyBUF_RECORDS + * else: + * result.flags = PyBUF_RECORDS_RO # <<<<<<<<<<<<<< * - * pred = ( + * result.view.shape = result.from_slice.shape */ - __pyx_v_s = -1L; + /*else*/ { + __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS_RO; + } + __pyx_L4:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":641 - * skipped += 1 - * continue - * elif i_score < j_score: # <<<<<<<<<<<<<< - * s = -1 + /* "View.MemoryView":1032 + * result.flags = PyBUF_RECORDS_RO + * + * result.view.shape = result.from_slice.shape # <<<<<<<<<<<<<< + * result.view.strides = result.from_slice.strides * */ - } + __pyx_v_result->__pyx_base.view.shape = ((Py_ssize_t *)__pyx_v_result->from_slice.shape); - /* "cornac/models/comparer/recom_comparer_sub.pyx":635 - * s = 1 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + /* "View.MemoryView":1033 + * + * result.view.shape = result.from_slice.shape + * result.view.strides = result.from_slice.strides # <<<<<<<<<<<<<< + * + * */ - } + __pyx_v_result->__pyx_base.view.strides = ((Py_ssize_t *)__pyx_v_result->from_slice.strides); - /* "cornac/models/comparer/recom_comparer_sub.pyx":647 - * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) - * ) * s # <<<<<<<<<<<<<< - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: + /* "View.MemoryView":1036 + * + * + * result.view.suboffsets = NULL # <<<<<<<<<<<<<< + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: */ - __pyx_v_pred = ((__pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_n_aspects) - __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_n_aspects)) * __pyx_v_s); + __pyx_v_result->__pyx_base.view.suboffsets = NULL; - /* "cornac/models/comparer/recom_comparer_sub.pyx":648 - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) - * ) * s - * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< - * if z < .5: - * correct += 1 + /* "View.MemoryView":1037 + * + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: # <<<<<<<<<<<<<< + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets */ - __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); + __pyx_t_7 = (__pyx_v_result->from_slice.suboffsets + __pyx_v_ndim); + for (__pyx_t_8 = __pyx_v_result->from_slice.suboffsets; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { + __pyx_t_6 = __pyx_t_8; + __pyx_v_suboffset = (__pyx_t_6[0]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":649 - * ) * s - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * correct += 1 - * del_bpr = ld_bpr * z * s + /* "View.MemoryView":1038 + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * result.view.suboffsets = result.from_slice.suboffsets + * break */ - __pyx_t_26 = ((__pyx_v_z < .5) != 0); - if (__pyx_t_26) { + __pyx_t_1 = (__pyx_v_suboffset >= 0); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":650 - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: - * correct += 1 # <<<<<<<<<<<<<< - * del_bpr = ld_bpr * z * s + /* "View.MemoryView":1039 + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets # <<<<<<<<<<<<<< + * break * */ - __pyx_v_correct = (__pyx_v_correct + 1); + __pyx_v_result->__pyx_base.view.suboffsets = ((Py_ssize_t *)__pyx_v_result->from_slice.suboffsets); - /* "cornac/models/comparer/recom_comparer_sub.pyx":649 - * ) * s - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * correct += 1 - * del_bpr = ld_bpr * z * s + /* "View.MemoryView":1040 + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets + * break # <<<<<<<<<<<<<< + * + * result.view.len = result.view.itemsize */ - } + goto __pyx_L6_break; - /* "cornac/models/comparer/recom_comparer_sub.pyx":651 - * if z < .5: - * correct += 1 - * del_bpr = ld_bpr * z * s # <<<<<<<<<<<<<< + /* "View.MemoryView":1038 + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * result.view.suboffsets = result.from_slice.suboffsets + * break + */ + } + } + __pyx_L6_break:; + + /* "View.MemoryView":1042 + * break * - * bpr_loss += log(1 / (1 + exp(-pred))) + * result.view.len = result.view.itemsize # <<<<<<<<<<<<<< + * for length in result.view.shape[:ndim]: + * result.view.len *= length */ - __pyx_v_del_bpr = ((__pyx_v_ld_bpr * __pyx_v_z) * __pyx_v_s); + __pyx_t_9 = __pyx_v_result->__pyx_base.view.itemsize; + __pyx_v_result->__pyx_base.view.len = __pyx_t_9; - /* "cornac/models/comparer/recom_comparer_sub.pyx":653 - * del_bpr = ld_bpr * z * s + /* "View.MemoryView":1043 * - * bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< + * result.view.len = result.view.itemsize + * for length in result.view.shape[:ndim]: # <<<<<<<<<<<<<< + * result.view.len *= length * - * for i in range(n_user_factors): */ - __pyx_v_bpr_loss = (__pyx_v_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); + __pyx_t_7 = (__pyx_v_result->__pyx_base.view.shape + __pyx_v_ndim); + for (__pyx_t_8 = __pyx_v_result->__pyx_base.view.shape; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { + __pyx_t_6 = __pyx_t_8; + __pyx_t_2 = PyInt_FromSsize_t((__pyx_t_6[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1043, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":655 - * bpr_loss += log(1 / (1 + exp(-pred))) + /* "View.MemoryView":1044 + * result.view.len = result.view.itemsize + * for length in result.view.shape[:ndim]: + * result.view.len *= length # <<<<<<<<<<<<<< * - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] + * result.to_object_func = to_object_func */ - __pyx_t_3 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_result->__pyx_base.view.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_2, __pyx_v_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result->__pyx_base.view.len = __pyx_t_9; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":656 + /* "View.MemoryView":1046 + * result.view.len *= length + * + * result.to_object_func = to_object_func # <<<<<<<<<<<<<< + * result.to_dtype_func = to_dtype_func * - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __pyx_v_result->to_object_func = __pyx_v_to_object_func; - /* "cornac/models/comparer/recom_comparer_sub.pyx":657 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + /* "View.MemoryView":1047 + * + * result.to_object_func = to_object_func + * result.to_dtype_func = to_dtype_func # <<<<<<<<<<<<<< + * + * return result */ - __pyx_t_23 = __pyx_v_i_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_j_idx; - __pyx_t_9 = __pyx_v_j; - __pyx_v_i_ij = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); + __pyx_v_result->to_dtype_func = __pyx_v_to_dtype_func; - /* "cornac/models/comparer/recom_comparer_sub.pyx":658 - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + /* "View.MemoryView":1049 + * result.to_dtype_func = to_dtype_func + * + * return result # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_result); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":659 - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + /* "View.MemoryView":999 + * + * @cname('__pyx_memoryview_fromslice') + * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< + * int ndim, + * object (*to_object_func)(char *), */ - __pyx_t_9 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_n_aspects; - __pyx_t_23 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":660 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview_fromslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XDECREF(__pyx_v_length); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1052 + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_9 = __pyx_v_n_aspects; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_i_ij) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":661 - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij +static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_mslice) { + struct __pyx_memoryviewslice_obj *__pyx_v_obj = 0; + __Pyx_memviewslice *__pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_slice_from_memview", 0); + + /* "View.MemoryView":1055 + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * obj = memview + * return &obj.from_slice */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_18 = __pyx_v_n_aspects; - __pyx_t_19 = __pyx_v_k; - __pyx_t_21 = __pyx_v_i_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":662 - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij - * + /* "View.MemoryView":1056 + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): + * obj = memview # <<<<<<<<<<<<<< + * return &obj.from_slice + * else: */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_9 = __pyx_v_n_aspects; - __pyx_t_20 = __pyx_v_k; - __pyx_t_22 = __pyx_v_j_idx; - __pyx_t_21 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_18 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); + if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 1056, __pyx_L1_error) + __pyx_t_2 = ((PyObject *)__pyx_v_memview); + __Pyx_INCREF(__pyx_t_2); + __pyx_v_obj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":663 - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij # <<<<<<<<<<<<<< - * - * for _ in prange(num_pair_samples, schedule='guided'): + /* "View.MemoryView":1057 + * if isinstance(memview, _memoryviewslice): + * obj = memview + * return &obj.from_slice # <<<<<<<<<<<<<< + * else: + * slice_copy(memview, mslice) */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_18 = __pyx_v_n_aspects; - __pyx_t_19 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij); - } - } - } - goto __pyx_L48; - __pyx_L34_continue:; - goto __pyx_L48; - __pyx_L48:; - } - } - } - } + __pyx_r = (&__pyx_v_obj->from_slice); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":665 - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij - * - * for _ in prange(num_pair_samples, schedule='guided'): # <<<<<<<<<<<<<< - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] + /* "View.MemoryView":1055 + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * obj = memview + * return &obj.from_slice */ - __pyx_t_4 = __pyx_v_num_pair_samples; - if ((1 == 0)) abort(); - { - __pyx_t_8 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_8 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_a_ji) lastprivate(__pyx_v_del_aspect_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){ - { - __pyx_v__ = (int)(0 + 1 * __pyx_t_7); - /* Initialize private variables to invalid values */ - __pyx_v_a_idx = ((int)0xbad0bad0); - __pyx_v_a_ji = ((float)__PYX_NAN()); - __pyx_v_del_aspect_bpr = ((float)__PYX_NAN()); - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_i_idx = ((int)0xbad0bad0); - __pyx_v_idx = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_j_idx = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_pred = ((float)__PYX_NAN()); - __pyx_v_u_idx = ((int)0xbad0bad0); - __pyx_v_z = ((float)__PYX_NAN()); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":666 + /* "View.MemoryView":1059 + * return &obj.from_slice + * else: + * slice_copy(memview, mslice) # <<<<<<<<<<<<<< + * return mslice * - * for _ in prange(num_pair_samples, schedule='guided'): - * idx = rng_pos_pair.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_pair->__pyx_vtab)->generate(__pyx_v_rng_pos_pair, __pyx_v_thread_id); + /*else*/ { + __pyx_memoryview_slice_copy(__pyx_v_memview, __pyx_v_mslice); - /* "cornac/models/comparer/recom_comparer_sub.pyx":667 - * for _ in prange(num_pair_samples, schedule='guided'): - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] # <<<<<<<<<<<<<< - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] + /* "View.MemoryView":1060 + * else: + * slice_copy(memview, mslice) + * return mslice # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_slice_copy') */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_u_idx = (*((int *) ( /* dim=0 */ (__pyx_v_p_user_indices.data + __pyx_t_23 * __pyx_v_p_user_indices.strides[0]) ))); + __pyx_r = __pyx_v_mslice; + goto __pyx_L0; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":668 - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] # <<<<<<<<<<<<<< - * j_idx = later_indices[idx] - * a_idx = aspect_indices[idx] + /* "View.MemoryView":1052 + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_i_idx = (*((int *) ( /* dim=0 */ (__pyx_v_earlier_indices.data + __pyx_t_23 * __pyx_v_earlier_indices.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":669 - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] # <<<<<<<<<<<<<< - * a_idx = aspect_indices[idx] + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_obj); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1063 * + * @cname('__pyx_memoryview_slice_copy') + * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst) noexcept: # <<<<<<<<<<<<<< + * cdef int dim + * cdef (Py_ssize_t*) shape, strides, suboffsets */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_j_idx = (*((int *) ( /* dim=0 */ (__pyx_v_later_indices.data + __pyx_t_23 * __pyx_v_later_indices.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":670 - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] - * a_idx = aspect_indices[idx] # <<<<<<<<<<<<<< +static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_dst) { + int __pyx_v_dim; + Py_ssize_t *__pyx_v_shape; + Py_ssize_t *__pyx_v_strides; + Py_ssize_t *__pyx_v_suboffsets; + __Pyx_RefNannyDeclarations + Py_ssize_t *__pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + Py_ssize_t __pyx_t_5; + __Pyx_RefNannySetupContext("slice_copy", 0); + + /* "View.MemoryView":1067 + * cdef (Py_ssize_t*) shape, strides, suboffsets * - * pred = ( + * shape = memview.view.shape # <<<<<<<<<<<<<< + * strides = memview.view.strides + * suboffsets = memview.view.suboffsets */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_a_idx = (*((int *) ( /* dim=0 */ (__pyx_v_aspect_indices.data + __pyx_t_23 * __pyx_v_aspect_indices.strides[0]) ))); + __pyx_t_1 = __pyx_v_memview->view.shape; + __pyx_v_shape = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":674 - * pred = ( - * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< - * ) + /* "View.MemoryView":1068 + * + * shape = memview.view.shape + * strides = memview.view.strides # <<<<<<<<<<<<<< + * suboffsets = memview.view.suboffsets * */ - __pyx_v_pred = (__pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_a_idx) - __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx)); + __pyx_t_1 = __pyx_v_memview->view.strides; + __pyx_v_strides = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":677 - * ) + /* "View.MemoryView":1069 + * shape = memview.view.shape + * strides = memview.view.strides + * suboffsets = memview.view.suboffsets # <<<<<<<<<<<<<< * - * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< - * if z < .5: - * aspect_correct += 1 + * dst.memview = <__pyx_memoryview *> memview */ - __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); + __pyx_t_1 = __pyx_v_memview->view.suboffsets; + __pyx_v_suboffsets = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":678 + /* "View.MemoryView":1071 + * suboffsets = memview.view.suboffsets * - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * aspect_correct += 1 + * dst.memview = <__pyx_memoryview *> memview # <<<<<<<<<<<<<< + * dst.data = memview.view.buf * */ - __pyx_t_26 = ((__pyx_v_z < .5) != 0); - if (__pyx_t_26) { + __pyx_v_dst->memview = ((struct __pyx_memoryview_obj *)__pyx_v_memview); - /* "cornac/models/comparer/recom_comparer_sub.pyx":679 - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: - * aspect_correct += 1 # <<<<<<<<<<<<<< + /* "View.MemoryView":1072 * - * del_aspect_bpr = lambda_d * z + * dst.memview = <__pyx_memoryview *> memview + * dst.data = memview.view.buf # <<<<<<<<<<<<<< + * + * for dim in range(memview.view.ndim): */ - __pyx_v_aspect_correct = (__pyx_v_aspect_correct + 1); + __pyx_v_dst->data = ((char *)__pyx_v_memview->view.buf); - /* "cornac/models/comparer/recom_comparer_sub.pyx":678 - * - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * aspect_correct += 1 + /* "View.MemoryView":1074 + * dst.data = memview.view.buf * + * for dim in range(memview.view.ndim): # <<<<<<<<<<<<<< + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] */ - } + __pyx_t_2 = __pyx_v_memview->view.ndim; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_dim = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":681 - * aspect_correct += 1 + /* "View.MemoryView":1075 * - * del_aspect_bpr = lambda_d * z # <<<<<<<<<<<<<< - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): + * for dim in range(memview.view.ndim): + * dst.shape[dim] = shape[dim] # <<<<<<<<<<<<<< + * dst.strides[dim] = strides[dim] + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 */ - __pyx_v_del_aspect_bpr = (__pyx_v_lambda_d * __pyx_v_z); + (__pyx_v_dst->shape[__pyx_v_dim]) = (__pyx_v_shape[__pyx_v_dim]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":682 + /* "View.MemoryView":1076 + * for dim in range(memview.view.ndim): + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] # <<<<<<<<<<<<<< + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 * - * del_aspect_bpr = lambda_d * z - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< - * for i in range(n_user_factors): - * for j in range(n_item_factors): */ - __pyx_v_aspect_bpr_loss = (__pyx_v_aspect_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); + (__pyx_v_dst->strides[__pyx_v_dim]) = (__pyx_v_strides[__pyx_v_dim]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":683 - * del_aspect_bpr = lambda_d * z - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] + /* "View.MemoryView":1077 + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_object') */ - __pyx_t_3 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + if ((__pyx_v_suboffsets != 0)) { + __pyx_t_5 = (__pyx_v_suboffsets[__pyx_v_dim]); + } else { + __pyx_t_5 = -1L; + } + (__pyx_v_dst->suboffsets[__pyx_v_dim]) = __pyx_t_5; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":684 - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): + /* "View.MemoryView":1063 + * + * @cname('__pyx_memoryview_slice_copy') + * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst) noexcept: # <<<<<<<<<<<<<< + * cdef int dim + * cdef (Py_ssize_t*) shape, strides, suboffsets */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; - /* "cornac/models/comparer/recom_comparer_sub.pyx":685 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - */ - __pyx_t_23 = __pyx_v_j_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i_idx; - __pyx_t_9 = __pyx_v_j; - __pyx_v_a_ji = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":686 - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] +/* "View.MemoryView":1080 + * + * @cname('__pyx_memoryview_copy_object') + * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; - /* "cornac/models/comparer/recom_comparer_sub.pyx":687 - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - */ - __pyx_t_9 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); +static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *__pyx_v_memview) { + __Pyx_memviewslice __pyx_v_memviewslice; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_copy", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":688 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + /* "View.MemoryView":1083 + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + * slice_copy(memview, &memviewslice) # <<<<<<<<<<<<<< + * return memoryview_copy_from_slice(memview, &memviewslice) + * */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_20 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_a_ji) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); + __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_memviewslice)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":689 - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji + /* "View.MemoryView":1084 + * cdef __Pyx_memviewslice memviewslice + * slice_copy(memview, &memviewslice) + * return memoryview_copy_from_slice(memview, &memviewslice) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_object_from_slice') */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_20 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_k; - __pyx_t_21 = __pyx_v_j_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_20 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_memoryview_copy_object_from_slice(__pyx_v_memview, (&__pyx_v_memviewslice)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1084, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":690 - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji + /* "View.MemoryView":1080 * + * @cname('__pyx_memoryview_copy_object') + * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i_idx; - __pyx_t_21 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_20 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":691 - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji # <<<<<<<<<<<<<< + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview_copy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1087 * - * # update params with AdaGrad + * @cname('__pyx_memoryview_copy_object_from_slice') + * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< + * """ + * Create a new memoryview object from a given memoryview object and slice. */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_20 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji); - } - } - } - } - } - } - } - } - } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":568 - * del_a_reg.fill(0) - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): - */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L5; - } - __pyx_L5:; - } - } +static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_memviewslice) { + PyObject *(*__pyx_v_to_object_func)(char *); + int (*__pyx_v_to_dtype_func)(char *, PyObject *); + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *(*__pyx_t_2)(char *); + int (*__pyx_t_3)(char *, PyObject *); + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_copy_from_slice", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":694 + /* "View.MemoryView":1094 + * cdef int (*to_dtype_func)(char *, object) except 0 * - * # update params with AdaGrad - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func */ - { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); - #endif - /*try:*/ { - { - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) - #endif - #ifdef _OPENMP - #pragma omp parallel private(__pyx_t_10, __pyx_t_12, __pyx_t_13, __pyx_t_15, __pyx_t_16, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_3, __pyx_t_7, __pyx_t_8, __pyx_t_9) num_threads(__pyx_v_n_threads) - #endif /* _OPENMP */ - { + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":695 - * # update params with AdaGrad - * with nogil, parallel(num_threads=n_threads): - * for i in prange(n_user_factors, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_users): - * if del_u[j, i] != 0: + /* "View.MemoryView":1095 + * + * if isinstance(memview, _memoryviewslice): + * to_object_func = (<_memoryviewslice> memview).to_object_func # <<<<<<<<<<<<<< + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + * else: */ - __pyx_t_3 = __pyx_v_n_user_factors; - if ((1 == 0)) abort(); - { - __pyx_t_12 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_12 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_12; __pyx_t_10++){ - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_10); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); + __pyx_t_2 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_object_func; + __pyx_v_to_object_func = __pyx_t_2; - /* "cornac/models/comparer/recom_comparer_sub.pyx":696 - * with nogil, parallel(num_threads=n_threads): - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): # <<<<<<<<<<<<<< - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + /* "View.MemoryView":1096 + * if isinstance(memview, _memoryviewslice): + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func # <<<<<<<<<<<<<< + * else: + * to_object_func = NULL */ - __pyx_t_13 = __pyx_v_n_users; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { - __pyx_v_j = __pyx_t_8; + __pyx_t_3 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_dtype_func; + __pyx_v_to_dtype_func = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":697 - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): - * if del_u[j, i] != 0: # <<<<<<<<<<<<<< - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + /* "View.MemoryView":1094 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func */ - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + goto __pyx_L3; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":698 - * for j in range(n_users): - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] # <<<<<<<<<<<<<< - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + /* "View.MemoryView":1098 + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + * else: + * to_object_func = NULL # <<<<<<<<<<<<<< + * to_dtype_func = NULL + * */ - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_u_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) ))))); + /*else*/ { + __pyx_v_to_object_func = NULL; - /* "cornac/models/comparer/recom_comparer_sub.pyx":697 - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): - * if del_u[j, i] != 0: # <<<<<<<<<<<<<< - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + /* "View.MemoryView":1099 + * else: + * to_object_func = NULL + * to_dtype_func = NULL # <<<<<<<<<<<<<< + * + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, */ - } + __pyx_v_to_dtype_func = NULL; + } + __pyx_L3:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":699 - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] # <<<<<<<<<<<<<< - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: + /* "View.MemoryView":1101 + * to_dtype_func = NULL + * + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, # <<<<<<<<<<<<<< + * to_object_func, to_dtype_func, + * memview.dtype_is_object) */ - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_19 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_U.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)))); + __Pyx_XDECREF(__pyx_r); - /* "cornac/models/comparer/recom_comparer_sub.pyx":700 - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] # <<<<<<<<<<<<<< - * if U[j, i] < 0: - * U[j, i] = 0 + /* "View.MemoryView":1103 + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, + * to_object_func, to_dtype_func, + * memview.dtype_is_object) # <<<<<<<<<<<<<< + * + * */ - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_24 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_U.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[1].strides))); + __pyx_t_4 = __pyx_memoryview_fromslice((__pyx_v_memviewslice[0]), __pyx_v_memview->view.ndim, __pyx_v_to_object_func, __pyx_v_to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":701 - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: # <<<<<<<<<<<<<< - * U[j, i] = 0 + /* "View.MemoryView":1087 * + * @cname('__pyx_memoryview_copy_object_from_slice') + * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< + * """ + * Create a new memoryview object from a given memoryview object and slice. */ - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_26 = (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":702 - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: - * U[j, i] = 0 # <<<<<<<<<<<<<< + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.memoryview_copy_from_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1109 + * + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) noexcept nogil: # <<<<<<<<<<<<<< + * return -arg if arg < 0 else arg * - * for j in range(n_item_factors): */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )) = 0.0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":701 - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: # <<<<<<<<<<<<<< - * U[j, i] = 0 +static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) { + Py_ssize_t __pyx_r; + Py_ssize_t __pyx_t_1; + + /* "View.MemoryView":1110 * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) noexcept nogil: + * return -arg if arg < 0 else arg # <<<<<<<<<<<<<< + * + * @cname('__pyx_get_best_slice_order') */ - } - } + if ((__pyx_v_arg < 0)) { + __pyx_t_1 = (-__pyx_v_arg); + } else { + __pyx_t_1 = __pyx_v_arg; + } + __pyx_r = __pyx_t_1; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":704 - * U[j, i] = 0 + /* "View.MemoryView":1109 + * + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) noexcept nogil: # <<<<<<<<<<<<<< + * return -arg if arg < 0 else arg * - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: */ - __pyx_t_13 = __pyx_v_n_item_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { - __pyx_v_j = __pyx_t_8; - /* "cornac/models/comparer/recom_comparer_sub.pyx":705 + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1113 * - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * @cname('__pyx_get_best_slice_order') + * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) noexcept nogil: # <<<<<<<<<<<<<< + * """ + * Figure out the best memory access order for a given slice. */ - __pyx_t_16 = __pyx_v_n_aspect_factors; - __pyx_t_27 = __pyx_t_16; - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_27; __pyx_t_7+=1) { - __pyx_v_k = __pyx_t_7; - /* "cornac/models/comparer/recom_comparer_sub.pyx":706 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - */ - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { +static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim) { + int __pyx_v_i; + Py_ssize_t __pyx_v_c_stride; + Py_ssize_t __pyx_v_f_stride; + char __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":707 - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + /* "View.MemoryView":1118 + * """ + * cdef int i + * cdef Py_ssize_t c_stride = 0 # <<<<<<<<<<<<<< + * cdef Py_ssize_t f_stride = 0 + * */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) ))))); + __pyx_v_c_stride = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":706 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + /* "View.MemoryView":1119 + * cdef int i + * cdef Py_ssize_t c_stride = 0 + * cdef Py_ssize_t f_stride = 0 # <<<<<<<<<<<<<< + * + * for i in range(ndim - 1, -1, -1): */ - } + __pyx_v_f_stride = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":708 - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: + /* "View.MemoryView":1121 + * cdef Py_ssize_t f_stride = 0 + * + * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_22 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G1.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)))); + for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { + __pyx_v_i = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":709 - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< - * if G1[i, j, k] < 0: - * G1[i, j, k] = 0 + /* "View.MemoryView":1122 + * + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * c_stride = mslice.strides[i] + * break */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_22 * __pyx_v_G1.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_23 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_25 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_9 * __pyx_v_sgrad_G1.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides))); + __pyx_t_2 = ((__pyx_v_mslice->shape[__pyx_v_i]) > 1); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":710 - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< - * G1[i, j, k] = 0 + /* "View.MemoryView":1123 + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] # <<<<<<<<<<<<<< + * break * */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_26 = (((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_24 * __pyx_v_G1.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_v_c_stride = (__pyx_v_mslice->strides[__pyx_v_i]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":711 - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: - * G1[i, j, k] = 0 # <<<<<<<<<<<<<< + /* "View.MemoryView":1124 + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] + * break # <<<<<<<<<<<<<< * - * for j in range(n_aspect_factors): + * for i in range(ndim): */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )) = 0.0; + goto __pyx_L4_break; - /* "cornac/models/comparer/recom_comparer_sub.pyx":710 - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< - * G1[i, j, k] = 0 + /* "View.MemoryView":1122 * + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * c_stride = mslice.strides[i] + * break */ - } - } - } + } + } + __pyx_L4_break:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":713 - * G1[i, j, k] = 0 + /* "View.MemoryView":1126 + * break * - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: + * for i in range(ndim): # <<<<<<<<<<<<<< + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] */ - __pyx_t_13 = __pyx_v_n_aspect_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { - __pyx_v_j = __pyx_t_8; + __pyx_t_1 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_1; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":714 + /* "View.MemoryView":1127 * - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - */ - __pyx_t_16 = __pyx_v_n_opinion_factors; - __pyx_t_27 = __pyx_t_16; - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_27; __pyx_t_7+=1) { - __pyx_v_k = __pyx_t_7; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":715 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { - - /* "cornac/models/comparer/recom_comparer_sub.pyx":716 - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * for i in range(ndim): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * f_stride = mslice.strides[i] + * break */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) ))))); + __pyx_t_2 = ((__pyx_v_mslice->shape[__pyx_v_i]) > 1); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":715 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + /* "View.MemoryView":1128 + * for i in range(ndim): + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] # <<<<<<<<<<<<<< + * break + * */ - } + __pyx_v_f_stride = (__pyx_v_mslice->strides[__pyx_v_i]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":717 - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: + /* "View.MemoryView":1129 + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] + * break # <<<<<<<<<<<<<< + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_20 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_22 * __pyx_v_sgrad_G2.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)))); + goto __pyx_L7_break; - /* "cornac/models/comparer/recom_comparer_sub.pyx":718 - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< - * if G2[i, j, k] < 0: - * G2[i, j, k] = 0 + /* "View.MemoryView":1127 + * + * for i in range(ndim): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * f_stride = mslice.strides[i] + * break */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_22 * __pyx_v_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_G2.strides[1]) ) + __pyx_t_20 * __pyx_v_G2.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_24 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G2.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides))); + } + } + __pyx_L7_break:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":719 - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< - * G2[i, j, k] = 0 + /* "View.MemoryView":1131 + * break * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< + * return 'C' + * else: */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_26 = (((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_23 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_2 = (abs_py_ssize_t(__pyx_v_c_stride) <= abs_py_ssize_t(__pyx_v_f_stride)); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":720 - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: - * G2[i, j, k] = 0 # <<<<<<<<<<<<<< + /* "View.MemoryView":1132 * - * for i in prange(n_item_factors, schedule='guided'): + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): + * return 'C' # <<<<<<<<<<<<<< + * else: + * return 'F' */ - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) )) = 0.0; + __pyx_r = 'C'; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":719 - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< - * G2[i, j, k] = 0 + /* "View.MemoryView":1131 + * break * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< + * return 'C' + * else: */ - } - } - } - } - } - } - } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":722 - * G2[i, j, k] = 0 + /* "View.MemoryView":1134 + * return 'C' + * else: + * return 'F' # <<<<<<<<<<<<<< * - * for i in prange(n_item_factors, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_items): - * if del_i[j, i] != 0: + * @cython.cdivision(True) */ - __pyx_t_12 = __pyx_v_n_item_factors; - if ((1 == 0)) abort(); - { - __pyx_t_3 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_3 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_3; __pyx_t_10++){ - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_10); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); + /*else*/ { + __pyx_r = 'F'; + goto __pyx_L0; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":723 + /* "View.MemoryView":1113 * - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): # <<<<<<<<<<<<<< - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * @cname('__pyx_get_best_slice_order') + * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) noexcept nogil: # <<<<<<<<<<<<<< + * """ + * Figure out the best memory access order for a given slice. */ - __pyx_t_13 = __pyx_v_n_items; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { - __pyx_v_j = __pyx_t_8; - /* "cornac/models/comparer/recom_comparer_sub.pyx":724 - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): - * if del_i[j, i] != 0: # <<<<<<<<<<<<<< - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - */ - __pyx_t_23 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":725 - * for j in range(n_items): - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] # <<<<<<<<<<<<<< - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] +/* "View.MemoryView":1137 + * + * @cython.cdivision(True) + * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< + * char *dst_data, Py_ssize_t *dst_strides, + * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) ))))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":724 - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): - * if del_i[j, i] != 0: # <<<<<<<<<<<<<< - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - */ - } +static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t *__pyx_v_src_strides, char *__pyx_v_dst_data, Py_ssize_t *__pyx_v_dst_strides, Py_ssize_t *__pyx_v_src_shape, Py_ssize_t *__pyx_v_dst_shape, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + CYTHON_UNUSED Py_ssize_t __pyx_v_src_extent; + Py_ssize_t __pyx_v_dst_extent; + Py_ssize_t __pyx_v_src_stride; + Py_ssize_t __pyx_v_dst_stride; + int __pyx_t_1; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + Py_ssize_t __pyx_t_5; - /* "cornac/models/comparer/recom_comparer_sub.pyx":726 - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] # <<<<<<<<<<<<<< - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: + /* "View.MemoryView":1144 + * + * cdef Py_ssize_t i + * cdef Py_ssize_t src_extent = src_shape[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] */ - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_24 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_I.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)))); + __pyx_v_src_extent = (__pyx_v_src_shape[0]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":727 - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] # <<<<<<<<<<<<<< - * if I[j, i] < 0: - * I[j, i] = 0 + /* "View.MemoryView":1145 + * cdef Py_ssize_t i + * cdef Py_ssize_t src_extent = src_shape[0] + * cdef Py_ssize_t dst_extent = dst_shape[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t src_stride = src_strides[0] + * cdef Py_ssize_t dst_stride = dst_strides[0] */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_25 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_I.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[1].strides))); + __pyx_v_dst_extent = (__pyx_v_dst_shape[0]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":728 - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: # <<<<<<<<<<<<<< - * I[j, i] = 0 + /* "View.MemoryView":1146 + * cdef Py_ssize_t src_extent = src_shape[0] + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t dst_stride = dst_strides[0] * */ - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_26 = (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_18 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_v_src_stride = (__pyx_v_src_strides[0]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":729 - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: - * I[j, i] = 0 # <<<<<<<<<<<<<< + /* "View.MemoryView":1147 + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] + * cdef Py_ssize_t dst_stride = dst_strides[0] # <<<<<<<<<<<<<< * - * for j in range(n_aspect_factors): + * if ndim == 1: */ - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )) = 0.0; + __pyx_v_dst_stride = (__pyx_v_dst_strides[0]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":728 - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: # <<<<<<<<<<<<<< - * I[j, i] = 0 + /* "View.MemoryView":1149 + * cdef Py_ssize_t dst_stride = dst_strides[0] * + * if ndim == 1: # <<<<<<<<<<<<<< + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): */ - } - } + __pyx_t_1 = (__pyx_v_ndim == 1); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":731 - * I[j, i] = 0 + /* "View.MemoryView":1150 * - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) */ - __pyx_t_13 = __pyx_v_n_aspect_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { - __pyx_v_j = __pyx_t_8; + __pyx_t_2 = (__pyx_v_src_stride > 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_dst_stride > 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":732 + /* "View.MemoryView":1151 + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): # <<<<<<<<<<<<<< + * memcpy(dst_data, src_data, itemsize * dst_extent) + * else: + */ + __pyx_t_2 = (((size_t)__pyx_v_src_stride) == __pyx_v_itemsize); + if (__pyx_t_2) { + __pyx_t_2 = (__pyx_v_itemsize == ((size_t)__pyx_v_dst_stride)); + } + __pyx_t_1 = __pyx_t_2; + __pyx_L5_bool_binop_done:; + + /* "View.MemoryView":1150 * - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) */ - __pyx_t_16 = __pyx_v_n_opinion_factors; - __pyx_t_27 = __pyx_t_16; - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_27; __pyx_t_7+=1) { - __pyx_v_k = __pyx_t_7; + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":733 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + /* "View.MemoryView":1152 + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) # <<<<<<<<<<<<<< + * else: + * for i in range(dst_extent): */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { + (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, (__pyx_v_itemsize * __pyx_v_dst_extent))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":734 - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + /* "View.MemoryView":1150 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) ))))); + goto __pyx_L4; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":733 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + /* "View.MemoryView":1154 + * memcpy(dst_data, src_data, itemsize * dst_extent) + * else: + * for i in range(dst_extent): # <<<<<<<<<<<<<< + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride */ - } + /*else*/ { + __pyx_t_3 = __pyx_v_dst_extent; + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { + __pyx_v_i = __pyx_t_5; - /* "cornac/models/comparer/recom_comparer_sub.pyx":735 - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: + /* "View.MemoryView":1155 + * else: + * for i in range(dst_extent): + * memcpy(dst_data, src_data, itemsize) # <<<<<<<<<<<<<< + * src_data += src_stride + * dst_data += dst_stride */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_22 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G3.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)))); + (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, __pyx_v_itemsize)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":736 - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< - * if G3[i, j, k] < 0: - * G3[i, j, k] = 0 + /* "View.MemoryView":1156 + * for i in range(dst_extent): + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride # <<<<<<<<<<<<<< + * dst_data += dst_stride + * else: */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_G3.strides[1]) ) + __pyx_t_22 * __pyx_v_G3.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_23 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G3.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides))); + __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); - /* "cornac/models/comparer/recom_comparer_sub.pyx":737 - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< - * G3[i, j, k] = 0 - * + /* "View.MemoryView":1157 + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride + * dst_data += dst_stride # <<<<<<<<<<<<<< + * else: + * for i in range(dst_extent): */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_26 = (((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_19 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); + } + } + __pyx_L4:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":738 - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: - * G3[i, j, k] = 0 # <<<<<<<<<<<<<< + /* "View.MemoryView":1149 + * cdef Py_ssize_t dst_stride = dst_strides[0] * - * for i in prange(n_aspects + 1, schedule='guided'): + * if ndim == 1: # <<<<<<<<<<<<<< + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) )) = 0.0; + goto __pyx_L3; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":737 - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< - * G3[i, j, k] = 0 - * + /* "View.MemoryView":1159 + * dst_data += dst_stride + * else: + * for i in range(dst_extent): # <<<<<<<<<<<<<< + * _copy_strided_to_strided(src_data, src_strides + 1, + * dst_data, dst_strides + 1, */ - } - } - } - } - } - } - } + /*else*/ { + __pyx_t_3 = __pyx_v_dst_extent; + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { + __pyx_v_i = __pyx_t_5; - /* "cornac/models/comparer/recom_comparer_sub.pyx":740 - * G3[i, j, k] = 0 + /* "View.MemoryView":1160 + * else: + * for i in range(dst_extent): + * _copy_strided_to_strided(src_data, src_strides + 1, # <<<<<<<<<<<<<< + * dst_data, dst_strides + 1, + * src_shape + 1, dst_shape + 1, + */ + _copy_strided_to_strided(__pyx_v_src_data, (__pyx_v_src_strides + 1), __pyx_v_dst_data, (__pyx_v_dst_strides + 1), (__pyx_v_src_shape + 1), (__pyx_v_dst_shape + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize); + + /* "View.MemoryView":1164 + * src_shape + 1, dst_shape + 1, + * ndim - 1, itemsize) + * src_data += src_stride # <<<<<<<<<<<<<< + * dst_data += dst_stride * - * for i in prange(n_aspects + 1, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: */ - __pyx_t_3 = (__pyx_v_n_aspects + 1); - if ((1 == 0)) abort(); - { - __pyx_t_12 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_12 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_12; __pyx_t_10++){ - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_10); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); - /* "cornac/models/comparer/recom_comparer_sub.pyx":741 + /* "View.MemoryView":1165 + * ndim - 1, itemsize) + * src_data += src_stride + * dst_data += dst_stride # <<<<<<<<<<<<<< * - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, */ - __pyx_t_13 = __pyx_v_n_aspect_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { - __pyx_v_j = __pyx_t_8; + __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); + } + } + __pyx_L3:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":742 - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: # <<<<<<<<<<<<<< - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + /* "View.MemoryView":1137 + * + * @cython.cdivision(True) + * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< + * char *dst_data, Py_ssize_t *dst_strides, + * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":743 - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] # <<<<<<<<<<<<<< - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + /* function exit code */ +} + +/* "View.MemoryView":1167 + * dst_data += dst_stride + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) noexcept nogil: */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) ))))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":742 - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: # <<<<<<<<<<<<<< - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] +static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + + /* "View.MemoryView":1170 + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) noexcept nogil: + * _copy_strided_to_strided(src.data, src.strides, dst.data, dst.strides, # <<<<<<<<<<<<<< + * src.shape, dst.shape, ndim, itemsize) + * */ - } + _copy_strided_to_strided(__pyx_v_src->data, __pyx_v_src->strides, __pyx_v_dst->data, __pyx_v_dst->strides, __pyx_v_src->shape, __pyx_v_dst->shape, __pyx_v_ndim, __pyx_v_itemsize); - /* "cornac/models/comparer/recom_comparer_sub.pyx":744 - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] # <<<<<<<<<<<<<< - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: + /* "View.MemoryView":1167 + * dst_data += dst_stride + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) noexcept nogil: */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_23 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_A.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":745 - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] # <<<<<<<<<<<<<< - * if A[i, j] < 0: - * A[i, j] = 0 + /* function exit code */ +} + +/* "View.MemoryView":1174 + * + * @cname('__pyx_memoryview_slice_get_size') + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) noexcept nogil: # <<<<<<<<<<<<<< + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_24 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_A.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[1].strides))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":746 - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: # <<<<<<<<<<<<<< - * A[i, j] = 0 +static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_shape; + Py_ssize_t __pyx_v_size; + Py_ssize_t __pyx_r; + Py_ssize_t __pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + + /* "View.MemoryView":1176 + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) noexcept nogil: + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize # <<<<<<<<<<<<<< * + * for shape in src.shape[:ndim]: */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_26 = (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_1 = __pyx_v_src->memview->view.itemsize; + __pyx_v_size = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":747 - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: - * A[i, j] = 0 # <<<<<<<<<<<<<< + /* "View.MemoryView":1178 + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + * + * for shape in src.shape[:ndim]: # <<<<<<<<<<<<<< + * size *= shape * - * for i in prange(n_opinions, schedule='guided'): */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )) = 0.0; + __pyx_t_3 = (__pyx_v_src->shape + __pyx_v_ndim); + for (__pyx_t_4 = __pyx_v_src->shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_v_shape = (__pyx_t_2[0]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":746 - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: # <<<<<<<<<<<<<< - * A[i, j] = 0 + /* "View.MemoryView":1179 + * + * for shape in src.shape[:ndim]: + * size *= shape # <<<<<<<<<<<<<< * + * return size */ - } - } - } - } - } - } + __pyx_v_size = (__pyx_v_size * __pyx_v_shape); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":749 - * A[i, j] = 0 + /* "View.MemoryView":1181 + * size *= shape * - * for i in prange(n_opinions, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: + * return size # <<<<<<<<<<<<<< + * + * @cname('__pyx_fill_contig_strides_array') */ - __pyx_t_12 = __pyx_v_n_opinions; - if ((1 == 0)) abort(); - { - __pyx_t_3 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_3 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_3; __pyx_t_10++){ - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_10); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + __pyx_r = __pyx_v_size; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":750 + /* "View.MemoryView":1174 * - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * @cname('__pyx_memoryview_slice_get_size') + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) noexcept nogil: # <<<<<<<<<<<<<< + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize */ - __pyx_t_13 = __pyx_v_n_opinion_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { - __pyx_v_j = __pyx_t_8; - /* "cornac/models/comparer/recom_comparer_sub.pyx":751 - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: # <<<<<<<<<<<<<< - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1184 + * + * @cname('__pyx_fill_contig_strides_array') + * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< + * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, + * int ndim, char order) noexcept nogil: */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":752 - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] # <<<<<<<<<<<<<< - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] +static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, Py_ssize_t __pyx_v_stride, int __pyx_v_ndim, char __pyx_v_order) { + int __pyx_v_idx; + Py_ssize_t __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + + /* "View.MemoryView":1193 + * cdef int idx + * + * if order == 'F': # <<<<<<<<<<<<<< + * for idx in range(ndim): + * strides[idx] = stride */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_o_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) ))))); + __pyx_t_1 = (__pyx_v_order == 'F'); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":751 - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: # <<<<<<<<<<<<<< - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + /* "View.MemoryView":1194 + * + * if order == 'F': + * for idx in range(ndim): # <<<<<<<<<<<<<< + * strides[idx] = stride + * stride *= shape[idx] */ - } + __pyx_t_2 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_idx = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":753 - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] # <<<<<<<<<<<<<< - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: + /* "View.MemoryView":1195 + * if order == 'F': + * for idx in range(ndim): + * strides[idx] = stride # <<<<<<<<<<<<<< + * stride *= shape[idx] + * else: */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_9 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_O.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)))); + (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; - /* "cornac/models/comparer/recom_comparer_sub.pyx":754 - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] # <<<<<<<<<<<<<< - * if O[i, j] < 0: - * O[i, j] = 0 + /* "View.MemoryView":1196 + * for idx in range(ndim): + * strides[idx] = stride + * stride *= shape[idx] # <<<<<<<<<<<<<< + * else: + * for idx in range(ndim - 1, -1, -1): */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_23 * __pyx_v_O.strides[0]) ) + __pyx_t_9 * __pyx_v_O.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_25 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_O.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[1].strides))); + __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":755 - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: # <<<<<<<<<<<<<< - * O[i, j] = 0 + /* "View.MemoryView":1193 + * cdef int idx * + * if order == 'F': # <<<<<<<<<<<<<< + * for idx in range(ndim): + * strides[idx] = stride */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_26 = (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_19 * __pyx_v_O.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + goto __pyx_L3; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":756 - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: - * O[i, j] = 0 # <<<<<<<<<<<<<< - * - * return correct, skipped, loss, bpr_loss + /* "View.MemoryView":1198 + * stride *= shape[idx] + * else: + * for idx in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * strides[idx] = stride + * stride *= shape[idx] */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )) = 0.0; + /*else*/ { + for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) { + __pyx_v_idx = __pyx_t_2; - /* "cornac/models/comparer/recom_comparer_sub.pyx":755 - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: # <<<<<<<<<<<<<< - * O[i, j] = 0 + /* "View.MemoryView":1199 + * else: + * for idx in range(ndim - 1, -1, -1): + * strides[idx] = stride # <<<<<<<<<<<<<< + * stride *= shape[idx] * */ - } - } - } - } - } - } - } - } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } + (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; - /* "cornac/models/comparer/recom_comparer_sub.pyx":694 + /* "View.MemoryView":1200 + * for idx in range(ndim - 1, -1, -1): + * strides[idx] = stride + * stride *= shape[idx] # <<<<<<<<<<<<<< * - * # update params with AdaGrad - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): + * return stride */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L66; - } - __pyx_L66:; - } + __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); + } } + __pyx_L3:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":758 - * O[i, j] = 0 + /* "View.MemoryView":1202 + * stride *= shape[idx] * - * return correct, skipped, loss, bpr_loss # <<<<<<<<<<<<<< + * return stride # <<<<<<<<<<<<<< * - * def rank(self, user_id, item_ids=None): + * @cname('__pyx_memoryview_copy_data_to_temp') */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_correct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v_skipped); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_28 = PyFloat_FromDouble(__pyx_v_bpr_loss); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_28); - __pyx_t_29 = PyTuple_New(4); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_29); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_29, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_29, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_29, 2, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_28); - PyTuple_SET_ITEM(__pyx_t_29, 3, __pyx_t_28); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_6 = 0; - __pyx_t_28 = 0; - __pyx_r = __pyx_t_29; - __pyx_t_29 = 0; + __pyx_r = __pyx_v_stride; goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":485 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def _fit_mter( # <<<<<<<<<<<<<< - * self, - * RNGVector rng_pos_uia, + /* "View.MemoryView":1184 + * + * @cname('__pyx_fill_contig_strides_array') + * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< + * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, + * int ndim, char order) noexcept nogil: */ /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_28); - __Pyx_XDECREF(__pyx_t_29); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - goto __pyx_L2; __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); - __pyx_L2:; - __PYX_XDEC_MEMVIEW(&__pyx_v_X, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_oids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_oids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_user_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_item_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_neg_item_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_indptr, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_p_user_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_earlier_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_later_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_aspect_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_pair_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G3, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_O, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G3, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_U, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_I, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_O, 1); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* Python wrapper */ -static PyObject *__pyx_fuse_0_2__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_19_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_fuse_0_2__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_19_fit_mter = {"__pyx_fuse_0_2_fit_mter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0_2__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_19_fit_mter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter}; -static PyObject *__pyx_fuse_0_2__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_19_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg = 0; - int __pyx_v_n_threads; - __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; - struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict = 0; - __Pyx_memviewslice __pyx_v_user_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_neg_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_indptr = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_p_user_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_earlier_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_later_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_aspect_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_O = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_U = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_I = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_O = { 0, 0, { 0 }, { 0 }, { 0 } }; - PyArrayObject *__pyx_v_del_g1 = 0; - PyArrayObject *__pyx_v_del_g2 = 0; - PyArrayObject *__pyx_v_del_g3 = 0; - PyArrayObject *__pyx_v_del_u = 0; - PyArrayObject *__pyx_v_del_i = 0; - PyArrayObject *__pyx_v_del_a = 0; - PyArrayObject *__pyx_v_del_o = 0; - PyArrayObject *__pyx_v_del_g1_reg = 0; - PyArrayObject *__pyx_v_del_g2_reg = 0; - PyArrayObject *__pyx_v_del_g3_reg = 0; - PyArrayObject *__pyx_v_del_u_reg = 0; - PyArrayObject *__pyx_v_del_i_reg = 0; - PyArrayObject *__pyx_v_del_a_reg = 0; - PyArrayObject *__pyx_v_del_o_reg = 0; +/* "View.MemoryView":1205 + * + * @cname('__pyx_memoryview_copy_data_to_temp') + * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *tmpslice, + * char order, + */ + +static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_tmpslice, char __pyx_v_order, int __pyx_v_ndim) { + int __pyx_v_i; + void *__pyx_v_result; + size_t __pyx_v_itemsize; + size_t __pyx_v_size; + void *__pyx_r; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + struct __pyx_memoryview_obj *__pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_fit_mter (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_rng_pos_uia,&__pyx_n_s_rng_pos_uao,&__pyx_n_s_rng_pos_iao,&__pyx_n_s_rng_pos_pair,&__pyx_n_s_rng_pos,&__pyx_n_s_rng_neg,&__pyx_n_s_n_threads,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_iids,&__pyx_n_s_X_aids,&__pyx_n_s_YU,&__pyx_n_s_YU_uids,&__pyx_n_s_YU_aids,&__pyx_n_s_YU_oids,&__pyx_n_s_YI,&__pyx_n_s_YI_iids,&__pyx_n_s_YI_aids,&__pyx_n_s_YI_oids,&__pyx_n_s_rating_dict,&__pyx_n_s_user_ids,&__pyx_n_s_item_ids,&__pyx_n_s_neg_item_ids,&__pyx_n_s_indptr,&__pyx_n_s_p_user_indices,&__pyx_n_s_earlier_indices,&__pyx_n_s_later_indices,&__pyx_n_s_aspect_indices,&__pyx_n_s_pair_counts,&__pyx_n_s_G1,&__pyx_n_s_G2,&__pyx_n_s_G3,&__pyx_n_s_U,&__pyx_n_s_I,&__pyx_n_s_A,&__pyx_n_s_O,&__pyx_n_s_sgrad_G1,&__pyx_n_s_sgrad_G2,&__pyx_n_s_sgrad_G3,&__pyx_n_s_sgrad_U,&__pyx_n_s_sgrad_I,&__pyx_n_s_sgrad_A,&__pyx_n_s_sgrad_O,&__pyx_n_s_del_g1,&__pyx_n_s_del_g2,&__pyx_n_s_del_g3,&__pyx_n_s_del_u,&__pyx_n_s_del_i,&__pyx_n_s_del_a,&__pyx_n_s_del_o,&__pyx_n_s_del_g1_reg,&__pyx_n_s_del_g2_reg,&__pyx_n_s_del_g3_reg,&__pyx_n_s_del_u_reg,&__pyx_n_s_del_i_reg,&__pyx_n_s_del_a_reg,&__pyx_n_s_del_o_reg,0}; - PyObject* values[58] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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 58: values[57] = PyTuple_GET_ITEM(__pyx_args, 57); - CYTHON_FALLTHROUGH; - case 57: values[56] = PyTuple_GET_ITEM(__pyx_args, 56); - CYTHON_FALLTHROUGH; - case 56: values[55] = PyTuple_GET_ITEM(__pyx_args, 55); - CYTHON_FALLTHROUGH; - case 55: values[54] = PyTuple_GET_ITEM(__pyx_args, 54); - CYTHON_FALLTHROUGH; - case 54: values[53] = PyTuple_GET_ITEM(__pyx_args, 53); - CYTHON_FALLTHROUGH; - case 53: values[52] = PyTuple_GET_ITEM(__pyx_args, 52); - CYTHON_FALLTHROUGH; - case 52: values[51] = PyTuple_GET_ITEM(__pyx_args, 51); - CYTHON_FALLTHROUGH; - case 51: values[50] = PyTuple_GET_ITEM(__pyx_args, 50); - CYTHON_FALLTHROUGH; - case 50: values[49] = PyTuple_GET_ITEM(__pyx_args, 49); - CYTHON_FALLTHROUGH; - case 49: values[48] = PyTuple_GET_ITEM(__pyx_args, 48); - CYTHON_FALLTHROUGH; - case 48: values[47] = PyTuple_GET_ITEM(__pyx_args, 47); - CYTHON_FALLTHROUGH; - case 47: values[46] = PyTuple_GET_ITEM(__pyx_args, 46); - CYTHON_FALLTHROUGH; - case 46: values[45] = PyTuple_GET_ITEM(__pyx_args, 45); - CYTHON_FALLTHROUGH; - case 45: values[44] = PyTuple_GET_ITEM(__pyx_args, 44); - CYTHON_FALLTHROUGH; - case 44: values[43] = PyTuple_GET_ITEM(__pyx_args, 43); - CYTHON_FALLTHROUGH; - case 43: values[42] = PyTuple_GET_ITEM(__pyx_args, 42); - CYTHON_FALLTHROUGH; - case 42: values[41] = PyTuple_GET_ITEM(__pyx_args, 41); - CYTHON_FALLTHROUGH; - case 41: values[40] = PyTuple_GET_ITEM(__pyx_args, 40); - CYTHON_FALLTHROUGH; - case 40: values[39] = PyTuple_GET_ITEM(__pyx_args, 39); - CYTHON_FALLTHROUGH; - case 39: values[38] = PyTuple_GET_ITEM(__pyx_args, 38); - CYTHON_FALLTHROUGH; - case 38: values[37] = PyTuple_GET_ITEM(__pyx_args, 37); - CYTHON_FALLTHROUGH; - case 37: values[36] = PyTuple_GET_ITEM(__pyx_args, 36); - CYTHON_FALLTHROUGH; - case 36: values[35] = PyTuple_GET_ITEM(__pyx_args, 35); - CYTHON_FALLTHROUGH; - case 35: values[34] = PyTuple_GET_ITEM(__pyx_args, 34); - CYTHON_FALLTHROUGH; - case 34: values[33] = PyTuple_GET_ITEM(__pyx_args, 33); - CYTHON_FALLTHROUGH; - case 33: values[32] = PyTuple_GET_ITEM(__pyx_args, 32); - CYTHON_FALLTHROUGH; - case 32: values[31] = PyTuple_GET_ITEM(__pyx_args, 31); - CYTHON_FALLTHROUGH; - case 31: values[30] = PyTuple_GET_ITEM(__pyx_args, 30); - CYTHON_FALLTHROUGH; - case 30: values[29] = PyTuple_GET_ITEM(__pyx_args, 29); - CYTHON_FALLTHROUGH; - case 29: values[28] = PyTuple_GET_ITEM(__pyx_args, 28); - CYTHON_FALLTHROUGH; - case 28: values[27] = PyTuple_GET_ITEM(__pyx_args, 27); - CYTHON_FALLTHROUGH; - case 27: values[26] = PyTuple_GET_ITEM(__pyx_args, 26); - CYTHON_FALLTHROUGH; - case 26: values[25] = PyTuple_GET_ITEM(__pyx_args, 25); - CYTHON_FALLTHROUGH; - case 25: values[24] = PyTuple_GET_ITEM(__pyx_args, 24); - CYTHON_FALLTHROUGH; - case 24: values[23] = PyTuple_GET_ITEM(__pyx_args, 23); - CYTHON_FALLTHROUGH; - case 23: values[22] = PyTuple_GET_ITEM(__pyx_args, 22); - CYTHON_FALLTHROUGH; - case 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - CYTHON_FALLTHROUGH; - case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - CYTHON_FALLTHROUGH; - case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - CYTHON_FALLTHROUGH; - case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - CYTHON_FALLTHROUGH; - case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - CYTHON_FALLTHROUGH; - case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - CYTHON_FALLTHROUGH; - case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - CYTHON_FALLTHROUGH; - case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - CYTHON_FALLTHROUGH; - case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - CYTHON_FALLTHROUGH; - case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - CYTHON_FALLTHROUGH; - case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - CYTHON_FALLTHROUGH; - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_uia)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 1); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_uao)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 2); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_iao)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 3); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_pair)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 4); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 5); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_neg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 6); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_threads)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 7); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 8); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 9: - if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 9); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 10: - if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 10); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 11: - if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 11); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 12: - if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 12); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 13: - if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 13); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 14: - if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 14); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 15: - if (likely((values[15] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_oids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 15); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 16: - if (likely((values[16] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 16); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 17: - if (likely((values[17] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 17); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 18: - if (likely((values[18] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 18); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 19: - if (likely((values[19] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_oids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 19); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 20: - if (likely((values[20] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rating_dict)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 20); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 21: - if (likely((values[21] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_user_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 21); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 22: - if (likely((values[22] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 22); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 23: - if (likely((values[23] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_neg_item_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 23); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 24: - if (likely((values[24] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_indptr)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 24); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 25: - if (likely((values[25] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_p_user_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 25); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 26: - if (likely((values[26] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_earlier_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 26); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 27: - if (likely((values[27] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_later_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 27); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 28: - if (likely((values[28] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_aspect_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 28); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 29: - if (likely((values[29] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pair_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 29); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 30: - if (likely((values[30] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 30); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 31: - if (likely((values[31] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 31); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 32: - if (likely((values[32] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 32); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 33: - if (likely((values[33] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 33); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 34: - if (likely((values[34] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 34); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 35: - if (likely((values[35] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 35); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 36: - if (likely((values[36] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_O)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 36); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 37: - if (likely((values[37] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 37); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 38: - if (likely((values[38] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 38); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 39: - if (likely((values[39] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 39); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 40: - if (likely((values[40] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_U)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 40); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 41: - if (likely((values[41] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_I)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 41); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 42: - if (likely((values[42] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 42); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 43: - if (likely((values[43] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_O)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 43); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 44: - if (likely((values[44] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 44); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 45: - if (likely((values[45] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 45); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 46: - if (likely((values[46] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 46); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 47: - if (likely((values[47] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_u)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 47); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 48: - if (likely((values[48] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_i)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 48); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 49: - if (likely((values[49] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_a)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 49); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 50: - if (likely((values[50] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_o)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 50); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 51: - if (likely((values[51] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g1_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 51); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 52: - if (likely((values[52] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g2_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 52); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 53: - if (likely((values[53] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g3_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 53); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 54: - if (likely((values[54] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_u_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 54); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 55: - if (likely((values[55] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_i_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 55); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 56: - if (likely((values[56] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_a_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 56); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 57: - if (likely((values[57] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_o_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 57); __PYX_ERR(0, 485, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_fit_mter") < 0)) __PYX_ERR(0, 485, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 58) { - 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); - values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - values[22] = PyTuple_GET_ITEM(__pyx_args, 22); - values[23] = PyTuple_GET_ITEM(__pyx_args, 23); - values[24] = PyTuple_GET_ITEM(__pyx_args, 24); - values[25] = PyTuple_GET_ITEM(__pyx_args, 25); - values[26] = PyTuple_GET_ITEM(__pyx_args, 26); - values[27] = PyTuple_GET_ITEM(__pyx_args, 27); - values[28] = PyTuple_GET_ITEM(__pyx_args, 28); - values[29] = PyTuple_GET_ITEM(__pyx_args, 29); - values[30] = PyTuple_GET_ITEM(__pyx_args, 30); - values[31] = PyTuple_GET_ITEM(__pyx_args, 31); - values[32] = PyTuple_GET_ITEM(__pyx_args, 32); - values[33] = PyTuple_GET_ITEM(__pyx_args, 33); - values[34] = PyTuple_GET_ITEM(__pyx_args, 34); - values[35] = PyTuple_GET_ITEM(__pyx_args, 35); - values[36] = PyTuple_GET_ITEM(__pyx_args, 36); - values[37] = PyTuple_GET_ITEM(__pyx_args, 37); - values[38] = PyTuple_GET_ITEM(__pyx_args, 38); - values[39] = PyTuple_GET_ITEM(__pyx_args, 39); - values[40] = PyTuple_GET_ITEM(__pyx_args, 40); - values[41] = PyTuple_GET_ITEM(__pyx_args, 41); - values[42] = PyTuple_GET_ITEM(__pyx_args, 42); - values[43] = PyTuple_GET_ITEM(__pyx_args, 43); - values[44] = PyTuple_GET_ITEM(__pyx_args, 44); - values[45] = PyTuple_GET_ITEM(__pyx_args, 45); - values[46] = PyTuple_GET_ITEM(__pyx_args, 46); - values[47] = PyTuple_GET_ITEM(__pyx_args, 47); - values[48] = PyTuple_GET_ITEM(__pyx_args, 48); - values[49] = PyTuple_GET_ITEM(__pyx_args, 49); - values[50] = PyTuple_GET_ITEM(__pyx_args, 50); - values[51] = PyTuple_GET_ITEM(__pyx_args, 51); - values[52] = PyTuple_GET_ITEM(__pyx_args, 52); - values[53] = PyTuple_GET_ITEM(__pyx_args, 53); - values[54] = PyTuple_GET_ITEM(__pyx_args, 54); - values[55] = PyTuple_GET_ITEM(__pyx_args, 55); - values[56] = PyTuple_GET_ITEM(__pyx_args, 56); - values[57] = PyTuple_GET_ITEM(__pyx_args, 57); - } - __pyx_v_self = values[0]; - __pyx_v_rng_pos_uia = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[1]); - __pyx_v_rng_pos_uao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[2]); - __pyx_v_rng_pos_iao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[3]); - __pyx_v_rng_pos_pair = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[4]); - __pyx_v_rng_pos = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[5]); - __pyx_v_rng_neg = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[6]); - __pyx_v_n_threads = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_n_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 493, __pyx_L3_error) - __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_iids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_YU = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_uids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_aids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_oids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YI = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_iids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_aids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_oids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_rating_dict = ((struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *)values[20]); - __pyx_v_user_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_user_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[22], PyBUF_WRITABLE); if (unlikely(!__pyx_v_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_neg_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[23], PyBUF_WRITABLE); if (unlikely(!__pyx_v_neg_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_indptr = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[24], PyBUF_WRITABLE); if (unlikely(!__pyx_v_indptr.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_p_user_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[25], PyBUF_WRITABLE); if (unlikely(!__pyx_v_p_user_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_earlier_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[26], PyBUF_WRITABLE); if (unlikely(!__pyx_v_earlier_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_later_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[27], PyBUF_WRITABLE); if (unlikely(!__pyx_v_later_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_aspect_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[28], PyBUF_WRITABLE); if (unlikely(!__pyx_v_aspect_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_pair_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[29], PyBUF_WRITABLE); if (unlikely(!__pyx_v_pair_counts.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[30], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G1.memview)) __PYX_ERR(0, 500, __pyx_L3_error) - __pyx_v_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[31], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G2.memview)) __PYX_ERR(0, 501, __pyx_L3_error) - __pyx_v_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[32], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G3.memview)) __PYX_ERR(0, 502, __pyx_L3_error) - __pyx_v_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[33], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U.memview)) __PYX_ERR(0, 503, __pyx_L3_error) - __pyx_v_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[34], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I.memview)) __PYX_ERR(0, 504, __pyx_L3_error) - __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[35], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 505, __pyx_L3_error) - __pyx_v_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[36], PyBUF_WRITABLE); if (unlikely(!__pyx_v_O.memview)) __PYX_ERR(0, 506, __pyx_L3_error) - __pyx_v_sgrad_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[37], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G1.memview)) __PYX_ERR(0, 507, __pyx_L3_error) - __pyx_v_sgrad_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[38], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G2.memview)) __PYX_ERR(0, 508, __pyx_L3_error) - __pyx_v_sgrad_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[39], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G3.memview)) __PYX_ERR(0, 509, __pyx_L3_error) - __pyx_v_sgrad_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[40], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_U.memview)) __PYX_ERR(0, 510, __pyx_L3_error) - __pyx_v_sgrad_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[41], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_I.memview)) __PYX_ERR(0, 511, __pyx_L3_error) - __pyx_v_sgrad_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[42], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_A.memview)) __PYX_ERR(0, 512, __pyx_L3_error) - __pyx_v_sgrad_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[43], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_O.memview)) __PYX_ERR(0, 513, __pyx_L3_error) - __pyx_v_del_g1 = ((PyArrayObject *)values[44]); - __pyx_v_del_g2 = ((PyArrayObject *)values[45]); - __pyx_v_del_g3 = ((PyArrayObject *)values[46]); - __pyx_v_del_u = ((PyArrayObject *)values[47]); - __pyx_v_del_i = ((PyArrayObject *)values[48]); - __pyx_v_del_a = ((PyArrayObject *)values[49]); - __pyx_v_del_o = ((PyArrayObject *)values[50]); - __pyx_v_del_g1_reg = ((PyArrayObject *)values[51]); - __pyx_v_del_g2_reg = ((PyArrayObject *)values[52]); - __pyx_v_del_g3_reg = ((PyArrayObject *)values[53]); - __pyx_v_del_u_reg = ((PyArrayObject *)values[54]); - __pyx_v_del_i_reg = ((PyArrayObject *)values[55]); - __pyx_v_del_a_reg = ((PyArrayObject *)values[56]); - __pyx_v_del_o_reg = ((PyArrayObject *)values[57]); - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 485, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uia), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uia", 0))) __PYX_ERR(0, 487, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uao", 0))) __PYX_ERR(0, 488, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_iao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_iao", 0))) __PYX_ERR(0, 489, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_pair), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_pair", 0))) __PYX_ERR(0, 490, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos", 0))) __PYX_ERR(0, 491, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_neg), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_neg", 0))) __PYX_ERR(0, 492, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rating_dict), __pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict, 1, "rating_dict", 0))) __PYX_ERR(0, 497, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1), __pyx_ptype_5numpy_ndarray, 1, "del_g1", 0))) __PYX_ERR(0, 514, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2), __pyx_ptype_5numpy_ndarray, 1, "del_g2", 0))) __PYX_ERR(0, 515, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3), __pyx_ptype_5numpy_ndarray, 1, "del_g3", 0))) __PYX_ERR(0, 516, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u), __pyx_ptype_5numpy_ndarray, 1, "del_u", 0))) __PYX_ERR(0, 517, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i), __pyx_ptype_5numpy_ndarray, 1, "del_i", 0))) __PYX_ERR(0, 518, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a), __pyx_ptype_5numpy_ndarray, 1, "del_a", 0))) __PYX_ERR(0, 519, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o), __pyx_ptype_5numpy_ndarray, 1, "del_o", 0))) __PYX_ERR(0, 520, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g1_reg", 0))) __PYX_ERR(0, 521, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g2_reg", 0))) __PYX_ERR(0, 522, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g3_reg", 0))) __PYX_ERR(0, 523, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u_reg), __pyx_ptype_5numpy_ndarray, 1, "del_u_reg", 0))) __PYX_ERR(0, 524, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i_reg), __pyx_ptype_5numpy_ndarray, 1, "del_i_reg", 0))) __PYX_ERR(0, 525, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a_reg), __pyx_ptype_5numpy_ndarray, 1, "del_a_reg", 0))) __PYX_ERR(0, 526, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o_reg), __pyx_ptype_5numpy_ndarray, 1, "del_o_reg", 0))) __PYX_ERR(0, 527, __pyx_L1_error) - __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_18_fit_mter(__pyx_self, __pyx_v_self, __pyx_v_rng_pos_uia, __pyx_v_rng_pos_uao, __pyx_v_rng_pos_iao, __pyx_v_rng_pos_pair, __pyx_v_rng_pos, __pyx_v_rng_neg, __pyx_v_n_threads, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_iids, __pyx_v_X_aids, __pyx_v_YU, __pyx_v_YU_uids, __pyx_v_YU_aids, __pyx_v_YU_oids, __pyx_v_YI, __pyx_v_YI_iids, __pyx_v_YI_aids, __pyx_v_YI_oids, __pyx_v_rating_dict, __pyx_v_user_ids, __pyx_v_item_ids, __pyx_v_neg_item_ids, __pyx_v_indptr, __pyx_v_p_user_indices, __pyx_v_earlier_indices, __pyx_v_later_indices, __pyx_v_aspect_indices, __pyx_v_pair_counts, __pyx_v_G1, __pyx_v_G2, __pyx_v_G3, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_sgrad_G1, __pyx_v_sgrad_G2, __pyx_v_sgrad_G3, __pyx_v_sgrad_U, __pyx_v_sgrad_I, __pyx_v_sgrad_A, __pyx_v_sgrad_O, __pyx_v_del_g1, __pyx_v_del_g2, __pyx_v_del_g3, __pyx_v_del_u, __pyx_v_del_i, __pyx_v_del_a, __pyx_v_del_o, __pyx_v_del_g1_reg, __pyx_v_del_g2_reg, __pyx_v_del_g3_reg, __pyx_v_del_u_reg, __pyx_v_del_i_reg, __pyx_v_del_a_reg, __pyx_v_del_o_reg); + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save; + #endif - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "View.MemoryView":1216 + * cdef void *result + * + * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< + * cdef size_t size = slice_get_size(src, ndim) + * + */ + __pyx_t_1 = __pyx_v_src->memview->view.itemsize; + __pyx_v_itemsize = __pyx_t_1; -static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_18_fit_mter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg, int __pyx_v_n_threads, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_iids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_YU, __Pyx_memviewslice __pyx_v_YU_uids, __Pyx_memviewslice __pyx_v_YU_aids, __Pyx_memviewslice __pyx_v_YU_oids, __Pyx_memviewslice __pyx_v_YI, __Pyx_memviewslice __pyx_v_YI_iids, __Pyx_memviewslice __pyx_v_YI_aids, __Pyx_memviewslice __pyx_v_YI_oids, struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict, __Pyx_memviewslice __pyx_v_user_ids, __Pyx_memviewslice __pyx_v_item_ids, __Pyx_memviewslice __pyx_v_neg_item_ids, __Pyx_memviewslice __pyx_v_indptr, __Pyx_memviewslice __pyx_v_p_user_indices, __Pyx_memviewslice __pyx_v_earlier_indices, __Pyx_memviewslice __pyx_v_later_indices, __Pyx_memviewslice __pyx_v_aspect_indices, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts, __Pyx_memviewslice __pyx_v_G1, __Pyx_memviewslice __pyx_v_G2, __Pyx_memviewslice __pyx_v_G3, __Pyx_memviewslice __pyx_v_U, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_O, __Pyx_memviewslice __pyx_v_sgrad_G1, __Pyx_memviewslice __pyx_v_sgrad_G2, __Pyx_memviewslice __pyx_v_sgrad_G3, __Pyx_memviewslice __pyx_v_sgrad_U, __Pyx_memviewslice __pyx_v_sgrad_I, __Pyx_memviewslice __pyx_v_sgrad_A, __Pyx_memviewslice __pyx_v_sgrad_O, PyArrayObject *__pyx_v_del_g1, PyArrayObject *__pyx_v_del_g2, PyArrayObject *__pyx_v_del_g3, PyArrayObject *__pyx_v_del_u, PyArrayObject *__pyx_v_del_i, PyArrayObject *__pyx_v_del_a, PyArrayObject *__pyx_v_del_o, PyArrayObject *__pyx_v_del_g1_reg, PyArrayObject *__pyx_v_del_g2_reg, PyArrayObject *__pyx_v_del_g3_reg, PyArrayObject *__pyx_v_del_u_reg, PyArrayObject *__pyx_v_del_i_reg, PyArrayObject *__pyx_v_del_a_reg, PyArrayObject *__pyx_v_del_o_reg) { - long __pyx_v_s; - long __pyx_v_correct; - long __pyx_v_skipped; - long __pyx_v_aspect_correct; - long __pyx_v_n_users; - long __pyx_v_n_items; - long __pyx_v_n_aspects; - CYTHON_UNUSED long __pyx_v_n_opinions; - long __pyx_v_n_user_factors; - long __pyx_v_n_item_factors; - long __pyx_v_n_aspect_factors; - long __pyx_v_n_opinion_factors; - CYTHON_UNUSED int __pyx_v_num_samples; - CYTHON_UNUSED int __pyx_v_num_bpr_samples; - CYTHON_UNUSED int __pyx_v_num_pair_samples; - CYTHON_UNUSED long __pyx_v__; - long __pyx_v_i; - long __pyx_v_j; - long __pyx_v_k; - long __pyx_v_idx; - long __pyx_v_jdx; - long __pyx_v_u_idx; - long __pyx_v_i_idx; - long __pyx_v_a_idx; - long __pyx_v_o_idx; - long __pyx_v_j_idx; - long __pyx_v_thread_id; - float __pyx_v_z; - float __pyx_v_score; - float __pyx_v_i_score; - float __pyx_v_j_score; - float __pyx_v_pred; - float __pyx_v_i_ij; - float __pyx_v_a_ji; - float __pyx_v_loss; - float __pyx_v_bpr_loss; - float __pyx_v_aspect_bpr_loss; - float __pyx_v_del_sqerror; - float __pyx_v_del_bpr; - float __pyx_v_del_aspect_bpr; - float __pyx_v_eps; - float __pyx_v_lr; - float __pyx_v_ld_reg; - float __pyx_v_ld_bpr; - float __pyx_v_lambda_d; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a; - __Pyx_Buffer __pyx_pybuffer_del_a; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a_reg; - __Pyx_Buffer __pyx_pybuffer_del_a_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1; - __Pyx_Buffer __pyx_pybuffer_del_g1; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1_reg; - __Pyx_Buffer __pyx_pybuffer_del_g1_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2; - __Pyx_Buffer __pyx_pybuffer_del_g2; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2_reg; - __Pyx_Buffer __pyx_pybuffer_del_g2_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3; - __Pyx_Buffer __pyx_pybuffer_del_g3; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3_reg; - __Pyx_Buffer __pyx_pybuffer_del_g3_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i; - __Pyx_Buffer __pyx_pybuffer_del_i; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i_reg; - __Pyx_Buffer __pyx_pybuffer_del_i_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o; - __Pyx_Buffer __pyx_pybuffer_del_o; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o_reg; - __Pyx_Buffer __pyx_pybuffer_del_o_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u; - __Pyx_Buffer __pyx_pybuffer_del_u; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u_reg; - __Pyx_Buffer __pyx_pybuffer_del_u_reg; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - long __pyx_t_3; - int __pyx_t_4; - float __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - long __pyx_t_7; - Py_ssize_t __pyx_t_8; - long __pyx_t_9; - long __pyx_t_10; - long __pyx_t_11; - long __pyx_t_12; - long __pyx_t_13; - long __pyx_t_14; - long __pyx_t_15; - long __pyx_t_16; - long __pyx_t_17; - Py_ssize_t __pyx_t_18; - Py_ssize_t __pyx_t_19; - Py_ssize_t __pyx_t_20; - Py_ssize_t __pyx_t_21; - Py_ssize_t __pyx_t_22; - Py_ssize_t __pyx_t_23; - Py_ssize_t __pyx_t_24; - Py_ssize_t __pyx_t_25; - int __pyx_t_26; - PyObject *__pyx_t_27 = NULL; - PyObject *__pyx_t_28 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_fuse_0_2_fit_mter", 0); - __pyx_pybuffer_del_g1.pybuffer.buf = NULL; - __pyx_pybuffer_del_g1.refcount = 0; - __pyx_pybuffernd_del_g1.data = NULL; - __pyx_pybuffernd_del_g1.rcbuffer = &__pyx_pybuffer_del_g1; - __pyx_pybuffer_del_g2.pybuffer.buf = NULL; - __pyx_pybuffer_del_g2.refcount = 0; - __pyx_pybuffernd_del_g2.data = NULL; - __pyx_pybuffernd_del_g2.rcbuffer = &__pyx_pybuffer_del_g2; - __pyx_pybuffer_del_g3.pybuffer.buf = NULL; - __pyx_pybuffer_del_g3.refcount = 0; - __pyx_pybuffernd_del_g3.data = NULL; - __pyx_pybuffernd_del_g3.rcbuffer = &__pyx_pybuffer_del_g3; - __pyx_pybuffer_del_u.pybuffer.buf = NULL; - __pyx_pybuffer_del_u.refcount = 0; - __pyx_pybuffernd_del_u.data = NULL; - __pyx_pybuffernd_del_u.rcbuffer = &__pyx_pybuffer_del_u; - __pyx_pybuffer_del_i.pybuffer.buf = NULL; - __pyx_pybuffer_del_i.refcount = 0; - __pyx_pybuffernd_del_i.data = NULL; - __pyx_pybuffernd_del_i.rcbuffer = &__pyx_pybuffer_del_i; - __pyx_pybuffer_del_a.pybuffer.buf = NULL; - __pyx_pybuffer_del_a.refcount = 0; - __pyx_pybuffernd_del_a.data = NULL; - __pyx_pybuffernd_del_a.rcbuffer = &__pyx_pybuffer_del_a; - __pyx_pybuffer_del_o.pybuffer.buf = NULL; - __pyx_pybuffer_del_o.refcount = 0; - __pyx_pybuffernd_del_o.data = NULL; - __pyx_pybuffernd_del_o.rcbuffer = &__pyx_pybuffer_del_o; - __pyx_pybuffer_del_g1_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g1_reg.refcount = 0; - __pyx_pybuffernd_del_g1_reg.data = NULL; - __pyx_pybuffernd_del_g1_reg.rcbuffer = &__pyx_pybuffer_del_g1_reg; - __pyx_pybuffer_del_g2_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g2_reg.refcount = 0; - __pyx_pybuffernd_del_g2_reg.data = NULL; - __pyx_pybuffernd_del_g2_reg.rcbuffer = &__pyx_pybuffer_del_g2_reg; - __pyx_pybuffer_del_g3_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g3_reg.refcount = 0; - __pyx_pybuffernd_del_g3_reg.data = NULL; - __pyx_pybuffernd_del_g3_reg.rcbuffer = &__pyx_pybuffer_del_g3_reg; - __pyx_pybuffer_del_u_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_u_reg.refcount = 0; - __pyx_pybuffernd_del_u_reg.data = NULL; - __pyx_pybuffernd_del_u_reg.rcbuffer = &__pyx_pybuffer_del_u_reg; - __pyx_pybuffer_del_i_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_i_reg.refcount = 0; - __pyx_pybuffernd_del_i_reg.data = NULL; - __pyx_pybuffernd_del_i_reg.rcbuffer = &__pyx_pybuffer_del_i_reg; - __pyx_pybuffer_del_a_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_a_reg.refcount = 0; - __pyx_pybuffernd_del_a_reg.data = NULL; - __pyx_pybuffernd_del_a_reg.rcbuffer = &__pyx_pybuffer_del_a_reg; - __pyx_pybuffer_del_o_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_o_reg.refcount = 0; - __pyx_pybuffernd_del_o_reg.data = NULL; - __pyx_pybuffernd_del_o_reg.rcbuffer = &__pyx_pybuffer_del_o_reg; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g1.diminfo[0].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1.diminfo[0].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1.diminfo[1].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1.diminfo[1].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1.diminfo[2].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1.diminfo[2].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g2.diminfo[0].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2.diminfo[0].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2.diminfo[1].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2.diminfo[1].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2.diminfo[2].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2.diminfo[2].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g3.diminfo[0].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3.diminfo[0].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3.diminfo[1].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3.diminfo[1].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3.diminfo[2].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3.diminfo[2].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_u.diminfo[0].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u.diminfo[0].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u.diminfo[1].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u.diminfo[1].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_i.diminfo[0].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i.diminfo[0].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i.diminfo[1].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i.diminfo[1].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_a.diminfo[0].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a.diminfo[0].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a.diminfo[1].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a.diminfo[1].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_o.diminfo[0].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o.diminfo[0].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o.diminfo[1].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o.diminfo[1].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g1_reg.diminfo[0].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1_reg.diminfo[0].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1_reg.diminfo[1].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1_reg.diminfo[1].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1_reg.diminfo[2].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1_reg.diminfo[2].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g2_reg.diminfo[0].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2_reg.diminfo[0].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2_reg.diminfo[1].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2_reg.diminfo[1].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2_reg.diminfo[2].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2_reg.diminfo[2].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g3_reg.diminfo[0].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3_reg.diminfo[0].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3_reg.diminfo[1].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3_reg.diminfo[1].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3_reg.diminfo[2].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3_reg.diminfo[2].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_u_reg.diminfo[0].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u_reg.diminfo[0].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u_reg.diminfo[1].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u_reg.diminfo[1].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_i_reg.diminfo[0].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i_reg.diminfo[0].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i_reg.diminfo[1].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i_reg.diminfo[1].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_a_reg.diminfo[0].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a_reg.diminfo[0].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a_reg.diminfo[1].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a_reg.diminfo[1].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_o_reg.diminfo[0].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o_reg.diminfo[0].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o_reg.diminfo[1].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o_reg.diminfo[1].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[1]; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":531 - * """ - * cdef: - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 # <<<<<<<<<<<<<< - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items - */ - __pyx_v_correct = 0; - __pyx_v_skipped = 0; - __pyx_v_aspect_correct = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":532 - * cdef: - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 - * long n_users = self.train_set.num_users # <<<<<<<<<<<<<< - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects + /* "View.MemoryView":1217 + * + * cdef size_t itemsize = src.memview.view.itemsize + * cdef size_t size = slice_get_size(src, ndim) # <<<<<<<<<<<<<< + * + * result = malloc(size) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_n_users = __pyx_t_3; + __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim); - /* "cornac/models/comparer/recom_comparer_sub.pyx":533 - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items # <<<<<<<<<<<<<< - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions + /* "View.MemoryView":1219 + * cdef size_t size = slice_get_size(src, ndim) + * + * result = malloc(size) # <<<<<<<<<<<<<< + * if not result: + * _err_no_memory() */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_items = __pyx_t_3; + __pyx_v_result = malloc(__pyx_v_size); - /* "cornac/models/comparer/recom_comparer_sub.pyx":534 - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors + /* "View.MemoryView":1220 + * + * result = malloc(size) + * if not result: # <<<<<<<<<<<<<< + * _err_no_memory() + * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_aspects = __pyx_t_3; + __pyx_t_2 = (!(__pyx_v_result != 0)); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":535 - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions # <<<<<<<<<<<<<< - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors + /* "View.MemoryView":1221 + * result = malloc(size) + * if not result: + * _err_no_memory() # <<<<<<<<<<<<<< + * + * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_opinions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_opinions = __pyx_t_3; + __pyx_t_3 = __pyx_memoryview_err_no_memory(); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1221, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":536 - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors # <<<<<<<<<<<<<< - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors + /* "View.MemoryView":1220 + * + * result = malloc(size) + * if not result: # <<<<<<<<<<<<<< + * _err_no_memory() + * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_user_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 536, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 536, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_user_factors = __pyx_t_3; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":537 - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors # <<<<<<<<<<<<<< - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors + /* "View.MemoryView":1224 + * + * + * tmpslice.data = result # <<<<<<<<<<<<<< + * tmpslice.memview = src.memview + * for i in range(ndim): */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_item_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 537, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_item_factors = __pyx_t_3; + __pyx_v_tmpslice->data = ((char *)__pyx_v_result); - /* "cornac/models/comparer/recom_comparer_sub.pyx":538 - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors # <<<<<<<<<<<<<< - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples + /* "View.MemoryView":1225 + * + * tmpslice.data = result + * tmpslice.memview = src.memview # <<<<<<<<<<<<<< + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_aspect_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 538, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_aspect_factors = __pyx_t_3; + __pyx_t_4 = __pyx_v_src->memview; + __pyx_v_tmpslice->memview = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":539 - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors # <<<<<<<<<<<<<< - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples + /* "View.MemoryView":1226 + * tmpslice.data = result + * tmpslice.memview = src.memview + * for i in range(ndim): # <<<<<<<<<<<<<< + * tmpslice.shape[i] = src.shape[i] + * tmpslice.suboffsets[i] = -1 */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_opinion_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 539, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_opinion_factors = __pyx_t_3; + __pyx_t_3 = __pyx_v_ndim; + __pyx_t_5 = __pyx_t_3; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; - /* "cornac/models/comparer/recom_comparer_sub.pyx":540 - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples # <<<<<<<<<<<<<< - * int num_bpr_samples = self.n_bpr_samples - * int num_pair_samples = self.n_pair_samples + /* "View.MemoryView":1227 + * tmpslice.memview = src.memview + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] # <<<<<<<<<<<<<< + * tmpslice.suboffsets[i] = -1 + * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_element_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 540, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_samples = __pyx_t_4; + (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":541 - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples # <<<<<<<<<<<<<< - * int num_pair_samples = self.n_pair_samples + /* "View.MemoryView":1228 + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] + * tmpslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< * + * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, ndim, order) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 541, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_bpr_samples = __pyx_t_4; + (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":542 - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples - * int num_pair_samples = self.n_pair_samples # <<<<<<<<<<<<<< + /* "View.MemoryView":1230 + * tmpslice.suboffsets[i] = -1 + * + * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, ndim, order) # <<<<<<<<<<<<<< + * * - * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_pair_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 542, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_pair_samples = __pyx_t_4; + (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":546 - * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id - * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji - * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr # <<<<<<<<<<<<<< - * floating eps = 1e-9 + /* "View.MemoryView":1233 + * * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if tmpslice.shape[i] == 1: + * tmpslice.strides[i] = 0 */ - __pyx_v_loss = 0.; - __pyx_v_bpr_loss = 0.; - __pyx_v_aspect_bpr_loss = 0.; + __pyx_t_3 = __pyx_v_ndim; + __pyx_t_5 = __pyx_t_3; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; - /* "cornac/models/comparer/recom_comparer_sub.pyx":547 - * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji - * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr - * floating eps = 1e-9 # <<<<<<<<<<<<<< + /* "View.MemoryView":1234 + * + * for i in range(ndim): + * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< + * tmpslice.strides[i] = 0 * - * floating lr = self.lr */ - __pyx_v_eps = 1e-9; + __pyx_t_2 = ((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":549 - * floating eps = 1e-9 + /* "View.MemoryView":1235 + * for i in range(ndim): + * if tmpslice.shape[i] == 1: + * tmpslice.strides[i] = 0 # <<<<<<<<<<<<<< * - * floating lr = self.lr # <<<<<<<<<<<<<< - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr + * if slice_is_contig(src[0], order, ndim): */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 549, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 549, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lr = __pyx_t_5; + (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":550 + /* "View.MemoryView":1234 + * + * for i in range(ndim): + * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< + * tmpslice.strides[i] = 0 * - * floating lr = self.lr - * floating ld_reg = self.lambda_reg # <<<<<<<<<<<<<< - * floating ld_bpr = self.lambda_bpr - * floating lambda_d = self.lambda_d */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_reg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 550, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 550, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_ld_reg = __pyx_t_5; + } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":551 - * floating lr = self.lr - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr # <<<<<<<<<<<<<< - * floating lambda_d = self.lambda_d + /* "View.MemoryView":1237 + * tmpslice.strides[i] = 0 * + * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< + * memcpy(result, src.data, size) + * else: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_bpr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 551, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_ld_bpr = __pyx_t_5; + __pyx_t_2 = __pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":552 - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr - * floating lambda_d = self.lambda_d # <<<<<<<<<<<<<< + /* "View.MemoryView":1238 * - * del_g1.fill(0) + * if slice_is_contig(src[0], order, ndim): + * memcpy(result, src.data, size) # <<<<<<<<<<<<<< + * else: + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 552, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_d = __pyx_t_5; + (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":554 - * floating lambda_d = self.lambda_d + /* "View.MemoryView":1237 + * tmpslice.strides[i] = 0 * - * del_g1.fill(0) # <<<<<<<<<<<<<< - * del_g2.fill(0) - * del_g3.fill(0) + * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< + * memcpy(result, src.data, size) + * else: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } + goto __pyx_L9; } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":555 + /* "View.MemoryView":1240 + * memcpy(result, src.data, size) + * else: + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) # <<<<<<<<<<<<<< * - * del_g1.fill(0) - * del_g2.fill(0) # <<<<<<<<<<<<<< - * del_g3.fill(0) - * del_u.fill(0) + * return result */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } + /*else*/ { + copy_strided_to_strided(__pyx_v_src, __pyx_v_tmpslice, __pyx_v_ndim, __pyx_v_itemsize); } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 555, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_L9:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":556 - * del_g1.fill(0) - * del_g2.fill(0) - * del_g3.fill(0) # <<<<<<<<<<<<<< - * del_u.fill(0) - * del_i.fill(0) + /* "View.MemoryView":1242 + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) + * + * return result # <<<<<<<<<<<<<< + * + * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_v_result; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":557 - * del_g2.fill(0) - * del_g3.fill(0) - * del_u.fill(0) # <<<<<<<<<<<<<< - * del_i.fill(0) - * del_a.fill(0) + /* "View.MemoryView":1205 + * + * @cname('__pyx_memoryview_copy_data_to_temp') + * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *tmpslice, + * char order, */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 557, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":558 - * del_g3.fill(0) - * del_u.fill(0) - * del_i.fill(0) # <<<<<<<<<<<<<< - * del_a.fill(0) - * del_o.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 558, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 558, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* function exit code */ + __pyx_L1_error:; + #ifdef WITH_THREAD + __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.copy_data_to_temp", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __pyx_L0:; + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":559 - * del_u.fill(0) - * del_i.fill(0) - * del_a.fill(0) # <<<<<<<<<<<<<< - * del_o.fill(0) - * del_g1_reg.fill(0) +/* "View.MemoryView":1247 + * + * @cname('__pyx_memoryview_err_extents') + * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError, f"got differing extents in dimension {i} (got {extent1} and {extent2})" */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 559, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 559, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":560 - * del_i.fill(0) - * del_a.fill(0) - * del_o.fill(0) # <<<<<<<<<<<<<< - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; +static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent1, Py_ssize_t __pyx_v_extent2) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + Py_UCS4 __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_extents", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":561 - * del_a.fill(0) - * del_o.fill(0) - * del_g1_reg.fill(0) # <<<<<<<<<<<<<< - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) + /* "View.MemoryView":1249 + * cdef int _err_extents(int i, Py_ssize_t extent1, + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError, f"got differing extents in dimension {i} (got {extent1} and {extent2})" # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err_dim') */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1249, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 127; + __Pyx_INCREF(__pyx_kp_u_got_differing_extents_in_dimensi); + __pyx_t_2 += 35; + __Pyx_GIVEREF(__pyx_kp_u_got_differing_extents_in_dimensi); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_got_differing_extents_in_dimensi); + __pyx_t_4 = __Pyx_PyUnicode_From_int(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u_got); + __pyx_t_2 += 6; + __Pyx_GIVEREF(__pyx_kp_u_got); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_got); + __pyx_t_4 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_extent1, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u_and); + __pyx_t_2 += 5; + __Pyx_GIVEREF(__pyx_kp_u_and); + PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_and); + __pyx_t_4 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_extent2, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u__7); + __pyx_t_2 += 1; + __Pyx_GIVEREF(__pyx_kp_u__7); + PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_kp_u__7); + __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 7, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_4, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(1, 1249, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":562 - * del_o.fill(0) - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) # <<<<<<<<<<<<<< - * del_g3_reg.fill(0) - * del_u_reg.fill(0) + /* "View.MemoryView":1247 + * + * @cname('__pyx_memoryview_err_extents') + * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError, f"got differing extents in dimension {i} (got {extent1} and {extent2})" */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 562, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":563 - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) # <<<<<<<<<<<<<< - * del_u_reg.fill(0) - * del_i_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 563, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 563, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView._err_extents", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":564 - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) - * del_u_reg.fill(0) # <<<<<<<<<<<<<< - * del_i_reg.fill(0) - * del_a_reg.fill(0) +/* "View.MemoryView":1252 + * + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(PyObject *error, str msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< + * raise error, msg % dim + * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 564, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":565 - * del_g3_reg.fill(0) - * del_u_reg.fill(0) - * del_i_reg.fill(0) # <<<<<<<<<<<<<< - * del_a_reg.fill(0) - * del_o_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 565, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; +static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, PyObject *__pyx_v_msg, int __pyx_v_dim) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_dim", 0); + __Pyx_INCREF(__pyx_v_msg); - /* "cornac/models/comparer/recom_comparer_sub.pyx":566 - * del_u_reg.fill(0) - * del_i_reg.fill(0) - * del_a_reg.fill(0) # <<<<<<<<<<<<<< - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): + /* "View.MemoryView":1253 + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(PyObject *error, str msg, int dim) except -1 with gil: + * raise error, msg % dim # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err') */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 566, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":567 - * del_i_reg.fill(0) - * del_a_reg.fill(0) - * del_o_reg.fill(0) # <<<<<<<<<<<<<< - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 567, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_v_msg, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_Raise(((PyObject *)__pyx_v_error), __pyx_t_2, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 1253, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":568 - * del_a_reg.fill(0) - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): - */ - { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); - #endif - /*try:*/ { - { - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) - #endif - #ifdef _OPENMP - #pragma omp parallel private(__pyx_v_thread_id) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_bpr_loss) reduction(+:__pyx_v_correct) reduction(+:__pyx_v_skipped) reduction(+:__pyx_v_aspect_bpr_loss) reduction(+:__pyx_v_aspect_correct) private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_3, __pyx_t_4, __pyx_t_7, __pyx_t_8, __pyx_t_9) num_threads(__pyx_v_n_threads) - #endif /* _OPENMP */ - { - /* Initialize private variables to invalid values */ - __pyx_v_thread_id = ((long)0xbad0bad0); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":569 - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() # <<<<<<<<<<<<<< - * for _ in prange(num_samples, schedule='guided'): - * # get user item aspect element + /* "View.MemoryView":1252 + * + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(PyObject *error, str msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< + * raise error, msg % dim + * */ - __pyx_v_thread_id = recom_bpr::get_thread_num(); - /* "cornac/models/comparer/recom_comparer_sub.pyx":570 - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): # <<<<<<<<<<<<<< - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) - */ - __pyx_t_4 = __pyx_v_num_samples; - if ((1 == 0)) abort(); - { - __pyx_t_7 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_7 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_del_sqerror) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_o_idx) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_score) lastprivate(__pyx_v_u_idx) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_7; __pyx_t_3++){ - { - __pyx_v__ = (long)(0 + 1 * __pyx_t_3); - /* Initialize private variables to invalid values */ - __pyx_v_a_idx = ((long)0xbad0bad0); - __pyx_v_del_sqerror = ((float)__PYX_NAN()); - __pyx_v_i = ((long)0xbad0bad0); - __pyx_v_i_idx = ((long)0xbad0bad0); - __pyx_v_idx = ((long)0xbad0bad0); - __pyx_v_j = ((long)0xbad0bad0); - __pyx_v_k = ((long)0xbad0bad0); - __pyx_v_o_idx = ((long)0xbad0bad0); - __pyx_v_pred = ((float)__PYX_NAN()); - __pyx_v_score = ((float)__PYX_NAN()); - __pyx_v_u_idx = ((long)0xbad0bad0); + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView._err_dim", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_XDECREF(__pyx_v_msg); + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":572 - * for _ in prange(num_samples, schedule='guided'): - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] +/* "View.MemoryView":1256 + * + * @cname('__pyx_memoryview_err') + * cdef int _err(PyObject *error, str msg) except -1 with gil: # <<<<<<<<<<<<<< + * raise error, msg + * */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uia->__pyx_vtab)->generate(__pyx_v_rng_pos_uia, __pyx_v_thread_id); - /* "cornac/models/comparer/recom_comparer_sub.pyx":573 - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) - * u_idx = X_uids[idx] # <<<<<<<<<<<<<< - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] - */ - __pyx_t_8 = __pyx_v_idx; - __pyx_v_u_idx = (*((long *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_8 * __pyx_v_X_uids.strides[0]) ))); +static int __pyx_memoryview_err(PyObject *__pyx_v_error, PyObject *__pyx_v_msg) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err", 0); + __Pyx_INCREF(__pyx_v_msg); - /* "cornac/models/comparer/recom_comparer_sub.pyx":574 - * idx = rng_pos_uia.generate(thread_id) - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] # <<<<<<<<<<<<<< - * a_idx = X_aids[idx] - * score = X[idx] + /* "View.MemoryView":1257 + * @cname('__pyx_memoryview_err') + * cdef int _err(PyObject *error, str msg) except -1 with gil: + * raise error, msg # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err_no_memory') */ - __pyx_t_8 = __pyx_v_idx; - __pyx_v_i_idx = (*((long *) ( /* dim=0 */ (__pyx_v_X_iids.data + __pyx_t_8 * __pyx_v_X_iids.strides[0]) ))); + __Pyx_Raise(((PyObject *)__pyx_v_error), __pyx_v_msg, 0, 0); + __PYX_ERR(1, 1257, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":575 - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] # <<<<<<<<<<<<<< - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + /* "View.MemoryView":1256 + * + * @cname('__pyx_memoryview_err') + * cdef int _err(PyObject *error, str msg) except -1 with gil: # <<<<<<<<<<<<<< + * raise error, msg + * */ - __pyx_t_8 = __pyx_v_idx; - __pyx_v_a_idx = (*((long *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_8 * __pyx_v_X_aids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":576 - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] - * score = X[idx] # <<<<<<<<<<<<<< - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) - * loss += (pred - score) * (pred - score) - */ - __pyx_t_8 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_8 * __pyx_v_X.strides[0]) ))); + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView._err", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_XDECREF(__pyx_v_msg); + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":577 - * a_idx = X_aids[idx] - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) +/* "View.MemoryView":1260 + * + * @cname('__pyx_memoryview_err_no_memory') + * cdef int _err_no_memory() except -1 with gil: # <<<<<<<<<<<<<< + * raise MemoryError * */ - __pyx_v_pred = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); - /* "cornac/models/comparer/recom_comparer_sub.pyx":578 - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< +static int __pyx_memoryview_err_no_memory(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_no_memory", 0); + + /* "View.MemoryView":1261 + * @cname('__pyx_memoryview_err_no_memory') + * cdef int _err_no_memory() except -1 with gil: + * raise MemoryError # <<<<<<<<<<<<<< + * * - * del_sqerror = 2 * (pred - score) */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); + PyErr_NoMemory(); __PYX_ERR(1, 1261, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":580 - * loss += (pred - score) * (pred - score) + /* "View.MemoryView":1260 + * + * @cname('__pyx_memoryview_err_no_memory') + * cdef int _err_no_memory() except -1 with gil: # <<<<<<<<<<<<<< + * raise MemoryError * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< - * for i in range(n_user_factors): - * for j in range(n_item_factors): */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":581 + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView._err_no_memory", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1265 * - * del_sqerror = 2 * (pred - score) - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): + * @cname('__pyx_memoryview_copy_contents') + * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice dst, + * int src_ndim, int dst_ndim, */ - __pyx_t_9 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_9; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; - /* "cornac/models/comparer/recom_comparer_sub.pyx":582 - * del_sqerror = 2 * (pred - score) - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; +static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_memviewslice __pyx_v_dst, int __pyx_v_src_ndim, int __pyx_v_dst_ndim, int __pyx_v_dtype_is_object) { + void *__pyx_v_tmpdata; + size_t __pyx_v_itemsize; + int __pyx_v_i; + char __pyx_v_order; + int __pyx_v_broadcasting; + int __pyx_v_direct_copy; + __Pyx_memviewslice __pyx_v_tmp; + int __pyx_v_ndim; + int __pyx_r; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + void *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save; + #endif - /* "cornac/models/comparer/recom_comparer_sub.pyx":583 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + /* "View.MemoryView":1273 + * Check for overlapping memory and verify the shapes. + * """ + * cdef void *tmpdata = NULL # <<<<<<<<<<<<<< + * cdef size_t itemsize = src.memview.view.itemsize + * cdef int i */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __pyx_v_tmpdata = NULL; - /* "cornac/models/comparer/recom_comparer_sub.pyx":584 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + /* "View.MemoryView":1274 + * """ + * cdef void *tmpdata = NULL + * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) */ - __pyx_t_8 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_i_idx; - __pyx_t_20 = __pyx_v_j; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_k; - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_8 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_20 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); + __pyx_t_1 = __pyx_v_src.memview->view.itemsize; + __pyx_v_itemsize = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":585 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] + /* "View.MemoryView":1276 + * cdef size_t itemsize = src.memview.view.itemsize + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) # <<<<<<<<<<<<<< + * cdef bint broadcasting = False + * cdef bint direct_copy = False */ - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_i_idx; - __pyx_t_18 = __pyx_v_j; - __pyx_t_8 = __pyx_v_a_idx; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_8 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))); + __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim); - /* "cornac/models/comparer/recom_comparer_sub.pyx":586 - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] - * + /* "View.MemoryView":1277 + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) + * cdef bint broadcasting = False # <<<<<<<<<<<<<< + * cdef bint direct_copy = False + * cdef __Pyx_memviewslice tmp */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_k; - __pyx_t_23 = __pyx_v_i_idx; - __pyx_t_24 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_25 * __pyx_v_G1.strides[0]) ) + __pyx_t_8 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_20 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); + __pyx_v_broadcasting = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":587 - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] # <<<<<<<<<<<<<< + /* "View.MemoryView":1278 + * cdef char order = get_best_order(&src, src_ndim) + * cdef bint broadcasting = False + * cdef bint direct_copy = False # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice tmp * - * # get user aspect opinion element */ - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_8 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_j; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_8 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))); - } - } - } + __pyx_v_direct_copy = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":590 + /* "View.MemoryView":1281 + * cdef __Pyx_memviewslice tmp * - * # get user aspect opinion element - * idx = rng_pos_uao.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] - */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uao->__pyx_vtab)->generate(__pyx_v_rng_pos_uao, __pyx_v_thread_id); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":591 - * # get user aspect opinion element - * idx = rng_pos_uao.generate(thread_id) - * u_idx = YU_uids[idx] # <<<<<<<<<<<<<< - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] + * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_u_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YU_uids.data + __pyx_t_25 * __pyx_v_YU_uids.strides[0]) ))); + __pyx_t_2 = (__pyx_v_src_ndim < __pyx_v_dst_ndim); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":592 - * idx = rng_pos_uao.generate(thread_id) - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] # <<<<<<<<<<<<<< - * o_idx = YU_oids[idx] - * score = YU[idx] + /* "View.MemoryView":1282 + * + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) # <<<<<<<<<<<<<< + * elif dst_ndim < src_ndim: + * broadcast_leading(&dst, dst_ndim, src_ndim) */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_a_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YU_aids.data + __pyx_t_25 * __pyx_v_YU_aids.strides[0]) ))); + __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim); - /* "cornac/models/comparer/recom_comparer_sub.pyx":593 - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] # <<<<<<<<<<<<<< - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + /* "View.MemoryView":1281 + * cdef __Pyx_memviewslice tmp + * + * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_o_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YU_oids.data + __pyx_t_25 * __pyx_v_YU_oids.strides[0]) ))); + goto __pyx_L3; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":594 - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] - * score = YU[idx] # <<<<<<<<<<<<<< - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) + /* "View.MemoryView":1283 + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&dst, dst_ndim, src_ndim) + * */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_YU.data + __pyx_t_25 * __pyx_v_YU.strides[0]) ))); + __pyx_t_2 = (__pyx_v_dst_ndim < __pyx_v_src_ndim); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":595 - * o_idx = YU_oids[idx] - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) + /* "View.MemoryView":1284 + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + * broadcast_leading(&dst, dst_ndim, src_ndim) # <<<<<<<<<<<<<< * + * cdef int ndim = max(src_ndim, dst_ndim) */ - __pyx_v_pred = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G2, __pyx_v_n_user_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_U, __pyx_v_A, __pyx_v_O, __pyx_v_u_idx, __pyx_v_a_idx, __pyx_v_o_idx); + __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim); - /* "cornac/models/comparer/recom_comparer_sub.pyx":596 - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< + /* "View.MemoryView":1283 + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&dst, dst_ndim, src_ndim) * - * del_sqerror = 2 * (pred - score) */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); + } + __pyx_L3:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":598 - * loss += (pred - score) * (pred - score) + /* "View.MemoryView":1286 + * broadcast_leading(&dst, dst_ndim, src_ndim) * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * cdef int ndim = max(src_ndim, dst_ndim) # <<<<<<<<<<<<<< * - * for i in range(n_user_factors): + * for i in range(ndim): */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + __pyx_t_3 = __pyx_v_dst_ndim; + __pyx_t_4 = __pyx_v_src_ndim; + if ((__pyx_t_3 > __pyx_t_4)) { + __pyx_t_5 = __pyx_t_3; + } else { + __pyx_t_5 = __pyx_t_4; + } + __pyx_v_ndim = __pyx_t_5; - /* "cornac/models/comparer/recom_comparer_sub.pyx":600 - * del_sqerror = 2 * (pred - score) + /* "View.MemoryView":1288 + * cdef int ndim = max(src_ndim, dst_ndim) * - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): + * for i in range(ndim): # <<<<<<<<<<<<<< + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: */ - __pyx_t_9 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_9; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __pyx_t_5 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_5; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":601 + /* "View.MemoryView":1289 * - * for i in range(n_user_factors): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< + * if src.shape[i] == 1: + * broadcasting = True */ - __pyx_t_12 = __pyx_v_n_aspect_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __pyx_t_2 = ((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":602 - * for i in range(n_user_factors): - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + /* "View.MemoryView":1290 + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: # <<<<<<<<<<<<<< + * broadcasting = True + * src.strides[i] = 0 */ - __pyx_t_15 = __pyx_v_n_opinion_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __pyx_t_2 = ((__pyx_v_src.shape[__pyx_v_i]) == 1); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":603 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + /* "View.MemoryView":1291 + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: + * broadcasting = True # <<<<<<<<<<<<<< + * src.strides[i] = 0 + * else: */ - __pyx_t_25 = __pyx_v_u_idx; - __pyx_t_8 = __pyx_v_i; - __pyx_t_18 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_j; - __pyx_t_20 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_8 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); + __pyx_v_broadcasting = 1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":604 - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] + /* "View.MemoryView":1292 + * if src.shape[i] == 1: + * broadcasting = True + * src.strides[i] = 0 # <<<<<<<<<<<<<< + * else: + * _err_extents(i, dst.shape[i], src.shape[i]) */ - __pyx_t_21 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_18 = __pyx_v_a_idx; - __pyx_t_8 = __pyx_v_j; - __pyx_t_25 = __pyx_v_o_idx; - __pyx_t_24 = __pyx_v_k; - __pyx_t_23 = __pyx_v_u_idx; - __pyx_t_22 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_8 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_25 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )))); + (__pyx_v_src.strides[__pyx_v_i]) = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":605 - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] - * + /* "View.MemoryView":1290 + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: # <<<<<<<<<<<<<< + * broadcasting = True + * src.strides[i] = 0 */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_k; - __pyx_t_18 = __pyx_v_u_idx; - __pyx_t_19 = __pyx_v_i; - __pyx_t_20 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - __pyx_t_22 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_24 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_8 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); + goto __pyx_L7; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":606 - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< + /* "View.MemoryView":1294 + * src.strides[i] = 0 + * else: + * _err_extents(i, dst.shape[i], src.shape[i]) # <<<<<<<<<<<<<< * - * # get item aspect opinion element + * if src.suboffsets[i] >= 0: */ - __pyx_t_21 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_18 = __pyx_v_u_idx; - __pyx_t_8 = __pyx_v_i; - __pyx_t_25 = __pyx_v_a_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_o_idx; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_8 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_24 * __pyx_v_A.strides[1]) )))); - } - } - } + /*else*/ { + __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1294, __pyx_L1_error) + } + __pyx_L7:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":609 + /* "View.MemoryView":1289 * - * # get item aspect opinion element - * idx = rng_pos_iao.generate(thread_id) # <<<<<<<<<<<<<< - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< + * if src.shape[i] == 1: + * broadcasting = True */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_iao->__pyx_vtab)->generate(__pyx_v_rng_pos_iao, __pyx_v_thread_id); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":610 - * # get item aspect opinion element - * idx = rng_pos_iao.generate(thread_id) - * i_idx = YI_iids[idx] # <<<<<<<<<<<<<< - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] + /* "View.MemoryView":1296 + * _err_extents(i, dst.shape[i], src.shape[i]) + * + * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< + * _err_dim(PyExc_ValueError, "Dimension %d is not direct", i) + * */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_i_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YI_iids.data + __pyx_t_24 * __pyx_v_YI_iids.strides[0]) ))); + __pyx_t_2 = ((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":611 - * idx = rng_pos_iao.generate(thread_id) - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] # <<<<<<<<<<<<<< - * o_idx = YI_oids[idx] - * score = YI[idx] + /* "View.MemoryView":1297 + * + * if src.suboffsets[i] >= 0: + * _err_dim(PyExc_ValueError, "Dimension %d is not direct", i) # <<<<<<<<<<<<<< + * + * if slices_overlap(&src, &dst, ndim, itemsize): */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_a_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YI_aids.data + __pyx_t_24 * __pyx_v_YI_aids.strides[0]) ))); + __pyx_t_6 = __pyx_memoryview_err_dim(PyExc_ValueError, __pyx_kp_s_Dimension_d_is_not_direct, __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1297, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":612 - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] # <<<<<<<<<<<<<< - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + /* "View.MemoryView":1296 + * _err_extents(i, dst.shape[i], src.shape[i]) + * + * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< + * _err_dim(PyExc_ValueError, "Dimension %d is not direct", i) + * */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_o_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YI_oids.data + __pyx_t_24 * __pyx_v_YI_oids.strides[0]) ))); + } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":613 - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] - * score = YI[idx] # <<<<<<<<<<<<<< - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) + /* "View.MemoryView":1299 + * _err_dim(PyExc_ValueError, "Dimension %d is not direct", i) + * + * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + * + * if not slice_is_contig(src, order, ndim): */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_YI.data + __pyx_t_24 * __pyx_v_YI.strides[0]) ))); + __pyx_t_2 = __pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":614 - * o_idx = YI_oids[idx] - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) + /* "View.MemoryView":1301 + * if slices_overlap(&src, &dst, ndim, itemsize): + * + * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< + * order = get_best_order(&dst, ndim) * */ - __pyx_v_pred = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G3, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_i_idx, __pyx_v_a_idx, __pyx_v_o_idx); + __pyx_t_2 = (!__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim)); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":615 - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< + /* "View.MemoryView":1302 * - * del_sqerror = 2 * (pred - score) + * if not slice_is_contig(src, order, ndim): + * order = get_best_order(&dst, ndim) # <<<<<<<<<<<<<< + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); + __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim); - /* "cornac/models/comparer/recom_comparer_sub.pyx":617 - * loss += (pred - score) * (pred - score) + /* "View.MemoryView":1301 + * if slices_overlap(&src, &dst, ndim, itemsize): + * + * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< + * order = get_best_order(&dst, ndim) * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":618 + /* "View.MemoryView":1304 + * order = get_best_order(&dst, ndim) + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) # <<<<<<<<<<<<<< + * src = tmp * - * del_sqerror = 2 * (pred - score) - * for i in range(n_item_factors): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): */ - __pyx_t_9 = __pyx_v_n_item_factors; - __pyx_t_10 = __pyx_t_9; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(1, 1304, __pyx_L1_error) + __pyx_v_tmpdata = __pyx_t_7; - /* "cornac/models/comparer/recom_comparer_sub.pyx":619 - * del_sqerror = 2 * (pred - score) - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + /* "View.MemoryView":1305 + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) + * src = tmp # <<<<<<<<<<<<<< + * + * if not broadcasting: */ - __pyx_t_12 = __pyx_v_n_aspect_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __pyx_v_src = __pyx_v_tmp; - /* "cornac/models/comparer/recom_comparer_sub.pyx":620 - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + /* "View.MemoryView":1299 + * _err_dim(PyExc_ValueError, "Dimension %d is not direct", i) + * + * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + * + * if not slice_is_contig(src, order, ndim): */ - __pyx_t_15 = __pyx_v_n_opinion_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":621 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + /* "View.MemoryView":1307 + * src = tmp + * + * if not broadcasting: # <<<<<<<<<<<<<< + * + * */ - __pyx_t_24 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_8 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_o_idx; - __pyx_t_20 = __pyx_v_k; - __pyx_t_21 = __pyx_v_i; - __pyx_t_22 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_24 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_8 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); + __pyx_t_2 = (!__pyx_v_broadcasting); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":622 - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + /* "View.MemoryView":1310 + * + * + * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_8 = __pyx_v_a_idx; - __pyx_t_25 = __pyx_v_j; - __pyx_t_24 = __pyx_v_o_idx; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i_idx; - __pyx_t_21 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_8 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_23 * __pyx_v_O.strides[1]) )))); + __pyx_t_2 = __pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":623 - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + /* "View.MemoryView":1311 * + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) # <<<<<<<<<<<<<< + * elif slice_is_contig(src, 'F', ndim): + * direct_copy = slice_is_contig(dst, 'F', ndim) */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_8 = __pyx_v_i_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_o_idx; - __pyx_t_20 = __pyx_v_k; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_23 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_8 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); + __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim); - /* "cornac/models/comparer/recom_comparer_sub.pyx":624 - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< + /* "View.MemoryView":1310 * - * for _ in prange(num_bpr_samples, schedule='guided'): + * + * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_8 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_j; - __pyx_t_22 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_8 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); - } - } - } - } - } - } - } + goto __pyx_L12; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":626 - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + /* "View.MemoryView":1312 + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'F', ndim) * - * for _ in prange(num_bpr_samples, schedule='guided'): # <<<<<<<<<<<<<< - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] */ - __pyx_t_4 = __pyx_v_num_bpr_samples; - if ((1 == 0)) abort(); - { - __pyx_t_3 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_3 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_del_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_i_ij) lastprivate(__pyx_v_i_score) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_j_score) lastprivate(__pyx_v_jdx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_s) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_3; __pyx_t_7++){ - { - __pyx_v__ = (long)(0 + 1 * __pyx_t_7); - /* Initialize private variables to invalid values */ - __pyx_v_del_bpr = ((float)__PYX_NAN()); - __pyx_v_i = ((long)0xbad0bad0); - __pyx_v_i_idx = ((long)0xbad0bad0); - __pyx_v_i_ij = ((float)__PYX_NAN()); - __pyx_v_i_score = ((float)__PYX_NAN()); - __pyx_v_idx = ((long)0xbad0bad0); - __pyx_v_j = ((long)0xbad0bad0); - __pyx_v_j_idx = ((long)0xbad0bad0); - __pyx_v_j_score = ((float)__PYX_NAN()); - __pyx_v_jdx = ((long)0xbad0bad0); - __pyx_v_k = ((long)0xbad0bad0); - __pyx_v_pred = ((float)__PYX_NAN()); - __pyx_v_s = ((long)0xbad0bad0); - __pyx_v_u_idx = ((long)0xbad0bad0); - __pyx_v_z = ((float)__PYX_NAN()); + __pyx_t_2 = __pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":627 + /* "View.MemoryView":1313 + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + * direct_copy = slice_is_contig(dst, 'F', ndim) # <<<<<<<<<<<<<< * - * for _ in prange(num_bpr_samples, schedule='guided'): - * idx = rng_pos.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] + * if direct_copy: */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos->__pyx_vtab)->generate(__pyx_v_rng_pos, __pyx_v_thread_id); + __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim); - /* "cornac/models/comparer/recom_comparer_sub.pyx":628 - * for _ in prange(num_bpr_samples, schedule='guided'): - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] # <<<<<<<<<<<<<< - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) + /* "View.MemoryView":1312 + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'F', ndim) + * */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_u_idx = (*((long *) ( /* dim=0 */ (__pyx_v_user_ids.data + __pyx_t_23 * __pyx_v_user_ids.strides[0]) ))); + } + __pyx_L12:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":629 - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] # <<<<<<<<<<<<<< - * jdx = rng_neg.generate(thread_id) - * j_idx = neg_item_ids[jdx] + /* "View.MemoryView":1315 + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + * if direct_copy: # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_i_idx = (*((long *) ( /* dim=0 */ (__pyx_v_item_ids.data + __pyx_t_23 * __pyx_v_item_ids.strides[0]) ))); + if (__pyx_v_direct_copy) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":630 - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) # <<<<<<<<<<<<<< - * j_idx = neg_item_ids[jdx] + /* "View.MemoryView":1317 + * if direct_copy: * + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) # <<<<<<<<<<<<<< + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) */ - __pyx_v_jdx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_neg->__pyx_vtab)->generate(__pyx_v_rng_neg, __pyx_v_thread_id); + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":631 - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) - * j_idx = neg_item_ids[jdx] # <<<<<<<<<<<<<< + /* "View.MemoryView":1318 * - * s = 1 + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) + * free(tmpdata) */ - __pyx_t_23 = __pyx_v_jdx; - __pyx_v_j_idx = (*((long *) ( /* dim=0 */ (__pyx_v_neg_item_ids.data + __pyx_t_23 * __pyx_v_neg_item_ids.strides[0]) ))); + (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":633 - * j_idx = neg_item_ids[jdx] - * - * s = 1 # <<<<<<<<<<<<<< - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): + /* "View.MemoryView":1319 + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) # <<<<<<<<<<<<<< + * free(tmpdata) + * return 0 */ - __pyx_v_s = 1; + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":635 - * s = 1 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + /* "View.MemoryView":1320 + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) + * free(tmpdata) # <<<<<<<<<<<<<< + * return 0 + * */ - __pyx_t_26 = (__pyx_fuse_2__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero(__pyx_v_indptr, __pyx_v_item_ids, __pyx_v_u_idx, __pyx_v_j_idx) != 0); - if (__pyx_t_26) { + free(__pyx_v_tmpdata); - /* "cornac/models/comparer/recom_comparer_sub.pyx":636 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] # <<<<<<<<<<<<<< - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: + /* "View.MemoryView":1321 + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) + * free(tmpdata) + * return 0 # <<<<<<<<<<<<<< + * + * if order == 'F' == get_best_order(&dst, ndim): */ - __pyx_v_i_score = (__pyx_v_rating_dict->my_map[__pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_i_idx)]); + __pyx_r = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":637 - * if has_non_zero(indptr, item_ids, u_idx, j_idx): - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] # <<<<<<<<<<<<<< - * if i_score == j_score: - * skipped += 1 + /* "View.MemoryView":1315 + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + * if direct_copy: # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) */ - __pyx_v_j_score = (__pyx_v_rating_dict->my_map[__pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_j_idx)]); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":638 - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: # <<<<<<<<<<<<<< - * skipped += 1 - * continue + /* "View.MemoryView":1307 + * src = tmp + * + * if not broadcasting: # <<<<<<<<<<<<<< + * + * */ - __pyx_t_26 = ((__pyx_v_i_score == __pyx_v_j_score) != 0); - if (__pyx_t_26) { + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":639 - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: - * skipped += 1 # <<<<<<<<<<<<<< - * continue - * elif i_score < j_score: + /* "View.MemoryView":1323 + * return 0 + * + * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< + * + * */ - __pyx_v_skipped = (__pyx_v_skipped + 1); + __pyx_t_2 = (__pyx_v_order == 'F'); + if (__pyx_t_2) { + __pyx_t_2 = ('F' == __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim)); + } + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":640 - * if i_score == j_score: - * skipped += 1 - * continue # <<<<<<<<<<<<<< - * elif i_score < j_score: - * s = -1 + /* "View.MemoryView":1326 + * + * + * transpose_memslice(&src) # <<<<<<<<<<<<<< + * transpose_memslice(&dst) + * */ - goto __pyx_L34_continue; + __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 1326, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":638 - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: # <<<<<<<<<<<<<< - * skipped += 1 - * continue + /* "View.MemoryView":1327 + * + * transpose_memslice(&src) + * transpose_memslice(&dst) # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) */ - } + __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 1327, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":641 - * skipped += 1 - * continue - * elif i_score < j_score: # <<<<<<<<<<<<<< - * s = -1 + /* "View.MemoryView":1323 + * return 0 + * + * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< + * * */ - __pyx_t_26 = ((__pyx_v_i_score < __pyx_v_j_score) != 0); - if (__pyx_t_26) { + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":642 - * continue - * elif i_score < j_score: - * s = -1 # <<<<<<<<<<<<<< + /* "View.MemoryView":1329 + * transpose_memslice(&dst) * - * pred = ( + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) # <<<<<<<<<<<<<< + * copy_strided_to_strided(&src, &dst, ndim, itemsize) + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) */ - __pyx_v_s = -1L; + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":641 - * skipped += 1 - * continue - * elif i_score < j_score: # <<<<<<<<<<<<<< - * s = -1 + /* "View.MemoryView":1330 + * + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) + * copy_strided_to_strided(&src, &dst, ndim, itemsize) # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) * */ - } + copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize); - /* "cornac/models/comparer/recom_comparer_sub.pyx":635 - * s = 1 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + /* "View.MemoryView":1331 + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) + * copy_strided_to_strided(&src, &dst, ndim, itemsize) + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) # <<<<<<<<<<<<<< + * + * free(tmpdata) */ - } + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":647 - * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) - * ) * s # <<<<<<<<<<<<<< - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: + /* "View.MemoryView":1333 + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) + * + * free(tmpdata) # <<<<<<<<<<<<<< + * return 0 + * */ - __pyx_v_pred = ((__pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_n_aspects) - __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_n_aspects)) * __pyx_v_s); + free(__pyx_v_tmpdata); - /* "cornac/models/comparer/recom_comparer_sub.pyx":648 - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) - * ) * s - * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< - * if z < .5: - * correct += 1 + /* "View.MemoryView":1334 + * + * free(tmpdata) + * return 0 # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_broadcast_leading') */ - __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); + __pyx_r = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":649 - * ) * s - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * correct += 1 - * del_bpr = ld_bpr * z * s + /* "View.MemoryView":1265 + * + * @cname('__pyx_memoryview_copy_contents') + * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice dst, + * int src_ndim, int dst_ndim, */ - __pyx_t_26 = ((__pyx_v_z < .5) != 0); - if (__pyx_t_26) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":650 - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: - * correct += 1 # <<<<<<<<<<<<<< - * del_bpr = ld_bpr * z * s + /* function exit code */ + __pyx_L1_error:; + #ifdef WITH_THREAD + __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.memoryview_copy_contents", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1337 * + * @cname('__pyx_memoryview_broadcast_leading') + * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< + * int ndim, + * int ndim_other) noexcept nogil: */ - __pyx_v_correct = (__pyx_v_correct + 1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":649 - * ) * s - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * correct += 1 - * del_bpr = ld_bpr * z * s +static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim, int __pyx_v_ndim_other) { + int __pyx_v_i; + int __pyx_v_offset; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + + /* "View.MemoryView":1341 + * int ndim_other) noexcept nogil: + * cdef int i + * cdef int offset = ndim_other - ndim # <<<<<<<<<<<<<< + * + * for i in range(ndim - 1, -1, -1): */ - } + __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim); - /* "cornac/models/comparer/recom_comparer_sub.pyx":651 - * if z < .5: - * correct += 1 - * del_bpr = ld_bpr * z * s # <<<<<<<<<<<<<< + /* "View.MemoryView":1343 + * cdef int offset = ndim_other - ndim * - * bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] */ - __pyx_v_del_bpr = ((__pyx_v_ld_bpr * __pyx_v_z) * __pyx_v_s); + for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { + __pyx_v_i = __pyx_t_1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":653 - * del_bpr = ld_bpr * z * s + /* "View.MemoryView":1344 * - * bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< + * for i in range(ndim - 1, -1, -1): + * mslice.shape[i + offset] = mslice.shape[i] # <<<<<<<<<<<<<< + * mslice.strides[i + offset] = mslice.strides[i] + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + */ + (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]); + + /* "View.MemoryView":1345 + * for i in range(ndim - 1, -1, -1): + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] # <<<<<<<<<<<<<< + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] * - * for i in range(n_user_factors): */ - __pyx_v_bpr_loss = (__pyx_v_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); + (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":655 - * bpr_loss += log(1 / (1 + exp(-pred))) + /* "View.MemoryView":1346 + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] # <<<<<<<<<<<<<< * - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] + * for i in range(offset): */ - __pyx_t_9 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_9; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":656 + /* "View.MemoryView":1348 + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] * - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): + * for i in range(offset): # <<<<<<<<<<<<<< + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __pyx_t_1 = __pyx_v_offset; + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":657 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + /* "View.MemoryView":1349 + * + * for i in range(offset): + * mslice.shape[i] = 1 # <<<<<<<<<<<<<< + * mslice.strides[i] = mslice.strides[0] + * mslice.suboffsets[i] = -1 */ - __pyx_t_23 = __pyx_v_i_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_j_idx; - __pyx_t_8 = __pyx_v_j; - __pyx_v_i_ij = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_8 * __pyx_v_I.strides[1]) )))); + (__pyx_v_mslice->shape[__pyx_v_i]) = 1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":658 - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + /* "View.MemoryView":1350 + * for i in range(offset): + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] # <<<<<<<<<<<<<< + * mslice.suboffsets[i] = -1 + * */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":659 - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + /* "View.MemoryView":1351 + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] + * mslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< + * + * */ - __pyx_t_8 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_n_aspects; - __pyx_t_23 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_8 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); + (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":660 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + /* "View.MemoryView":1337 + * + * @cname('__pyx_memoryview_broadcast_leading') + * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< + * int ndim, + * int ndim_other) noexcept nogil: */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_8 = __pyx_v_n_aspects; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_i_ij) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_8 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":661 - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij + /* function exit code */ +} + +/* "View.MemoryView":1359 + * + * @cname('__pyx_memoryview_refcount_copying') + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, int ndim, bint inc) noexcept nogil: # <<<<<<<<<<<<<< + * + * if dtype_is_object: */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_18 = __pyx_v_n_aspects; - __pyx_t_19 = __pyx_v_k; - __pyx_t_21 = __pyx_v_i_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_8 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":662 - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij +static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) { + + /* "View.MemoryView":1361 + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, int ndim, bint inc) noexcept nogil: + * + * if dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, dst.strides, ndim, inc) * */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_8 = __pyx_v_n_aspects; - __pyx_t_20 = __pyx_v_k; - __pyx_t_22 = __pyx_v_j_idx; - __pyx_t_21 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_18 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_8 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); + if (__pyx_v_dtype_is_object) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":663 - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij # <<<<<<<<<<<<<< + /* "View.MemoryView":1362 * - * for _ in prange(num_pair_samples, schedule='guided'): + * if dtype_is_object: + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, dst.strides, ndim, inc) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_18 = __pyx_v_n_aspects; - __pyx_t_19 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_8 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij); - } - } - } - goto __pyx_L48; - __pyx_L34_continue:; - goto __pyx_L48; - __pyx_L48:; - } - } - } - } + __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc); - /* "cornac/models/comparer/recom_comparer_sub.pyx":665 - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij + /* "View.MemoryView":1361 + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, int ndim, bint inc) noexcept nogil: + * + * if dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, dst.strides, ndim, inc) * - * for _ in prange(num_pair_samples, schedule='guided'): # <<<<<<<<<<<<<< - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] */ - __pyx_t_4 = __pyx_v_num_pair_samples; - if ((1 == 0)) abort(); - { - __pyx_t_7 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_7 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_a_ji) lastprivate(__pyx_v_del_aspect_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_7; __pyx_t_3++){ - { - __pyx_v__ = (long)(0 + 1 * __pyx_t_3); - /* Initialize private variables to invalid values */ - __pyx_v_a_idx = ((long)0xbad0bad0); - __pyx_v_a_ji = ((float)__PYX_NAN()); - __pyx_v_del_aspect_bpr = ((float)__PYX_NAN()); - __pyx_v_i = ((long)0xbad0bad0); - __pyx_v_i_idx = ((long)0xbad0bad0); - __pyx_v_idx = ((long)0xbad0bad0); - __pyx_v_j = ((long)0xbad0bad0); - __pyx_v_j_idx = ((long)0xbad0bad0); - __pyx_v_k = ((long)0xbad0bad0); - __pyx_v_pred = ((float)__PYX_NAN()); - __pyx_v_u_idx = ((long)0xbad0bad0); - __pyx_v_z = ((float)__PYX_NAN()); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":666 + /* "View.MemoryView":1359 * - * for _ in prange(num_pair_samples, schedule='guided'): - * idx = rng_pos_pair.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] + * @cname('__pyx_memoryview_refcount_copying') + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, int ndim, bint inc) noexcept nogil: # <<<<<<<<<<<<<< + * + * if dtype_is_object: */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_pair->__pyx_vtab)->generate(__pyx_v_rng_pos_pair, __pyx_v_thread_id); - /* "cornac/models/comparer/recom_comparer_sub.pyx":667 - * for _ in prange(num_pair_samples, schedule='guided'): - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] # <<<<<<<<<<<<<< - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] + /* function exit code */ +} + +/* "View.MemoryView":1365 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * bint inc) noexcept with gil: */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_u_idx = (*((long *) ( /* dim=0 */ (__pyx_v_p_user_indices.data + __pyx_t_23 * __pyx_v_p_user_indices.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":668 - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] # <<<<<<<<<<<<<< - * j_idx = later_indices[idx] - * a_idx = aspect_indices[idx] +static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { + __Pyx_RefNannyDeclarations + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0); + + /* "View.MemoryView":1368 + * Py_ssize_t *strides, int ndim, + * bint inc) noexcept with gil: + * refcount_objects_in_slice(data, shape, strides, ndim, inc) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_i_idx = (*((long *) ( /* dim=0 */ (__pyx_v_earlier_indices.data + __pyx_t_23 * __pyx_v_earlier_indices.strides[0]) ))); + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc); - /* "cornac/models/comparer/recom_comparer_sub.pyx":669 - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] # <<<<<<<<<<<<<< - * a_idx = aspect_indices[idx] + /* "View.MemoryView":1365 * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * bint inc) noexcept with gil: */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_j_idx = (*((long *) ( /* dim=0 */ (__pyx_v_later_indices.data + __pyx_t_23 * __pyx_v_later_indices.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":670 - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] - * a_idx = aspect_indices[idx] # <<<<<<<<<<<<<< + /* function exit code */ + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif +} + +/* "View.MemoryView":1371 * - * pred = ( + * @cname('__pyx_memoryview_refcount_objects_in_slice') + * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, bint inc) noexcept: + * cdef Py_ssize_t i */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_a_idx = (*((long *) ( /* dim=0 */ (__pyx_v_aspect_indices.data + __pyx_t_23 * __pyx_v_aspect_indices.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":674 - * pred = ( - * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< - * ) +static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + Py_ssize_t __pyx_v_stride; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0); + + /* "View.MemoryView":1374 + * Py_ssize_t *strides, int ndim, bint inc) noexcept: + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<< * + * for i in range(shape[0]): */ - __pyx_v_pred = (__pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_a_idx) - __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx)); + __pyx_v_stride = (__pyx_v_strides[0]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":677 - * ) + /* "View.MemoryView":1376 + * cdef Py_ssize_t stride = strides[0] * - * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< - * if z < .5: - * aspect_correct += 1 + * for i in range(shape[0]): # <<<<<<<<<<<<<< + * if ndim == 1: + * if inc: */ - __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); + __pyx_t_1 = (__pyx_v_shape[0]); + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":678 + /* "View.MemoryView":1377 * - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * aspect_correct += 1 + * for i in range(shape[0]): + * if ndim == 1: # <<<<<<<<<<<<<< + * if inc: + * Py_INCREF(( data)[0]) + */ + __pyx_t_4 = (__pyx_v_ndim == 1); + if (__pyx_t_4) { + + /* "View.MemoryView":1378 + * for i in range(shape[0]): + * if ndim == 1: + * if inc: # <<<<<<<<<<<<<< + * Py_INCREF(( data)[0]) + * else: + */ + if (__pyx_v_inc) { + + /* "View.MemoryView":1379 + * if ndim == 1: + * if inc: + * Py_INCREF(( data)[0]) # <<<<<<<<<<<<<< + * else: + * Py_DECREF(( data)[0]) + */ + Py_INCREF((((PyObject **)__pyx_v_data)[0])); + + /* "View.MemoryView":1378 + * for i in range(shape[0]): + * if ndim == 1: + * if inc: # <<<<<<<<<<<<<< + * Py_INCREF(( data)[0]) + * else: + */ + goto __pyx_L6; + } + + /* "View.MemoryView":1381 + * Py_INCREF(( data)[0]) + * else: + * Py_DECREF(( data)[0]) # <<<<<<<<<<<<<< + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, ndim - 1, inc) + */ + /*else*/ { + Py_DECREF((((PyObject **)__pyx_v_data)[0])); + } + __pyx_L6:; + + /* "View.MemoryView":1377 * + * for i in range(shape[0]): + * if ndim == 1: # <<<<<<<<<<<<<< + * if inc: + * Py_INCREF(( data)[0]) */ - __pyx_t_26 = ((__pyx_v_z < .5) != 0); - if (__pyx_t_26) { + goto __pyx_L5; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":679 - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: - * aspect_correct += 1 # <<<<<<<<<<<<<< + /* "View.MemoryView":1383 + * Py_DECREF(( data)[0]) + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, ndim - 1, inc) # <<<<<<<<<<<<<< * - * del_aspect_bpr = lambda_d * z + * data += stride */ - __pyx_v_aspect_correct = (__pyx_v_aspect_correct + 1); + /*else*/ { + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_inc); + } + __pyx_L5:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":678 + /* "View.MemoryView":1385 + * refcount_objects_in_slice(data, shape + 1, strides + 1, ndim - 1, inc) + * + * data += stride # <<<<<<<<<<<<<< * - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * aspect_correct += 1 * */ - } + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":681 - * aspect_correct += 1 + /* "View.MemoryView":1371 * - * del_aspect_bpr = lambda_d * z # <<<<<<<<<<<<<< - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): + * @cname('__pyx_memoryview_refcount_objects_in_slice') + * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, bint inc) noexcept: + * cdef Py_ssize_t i */ - __pyx_v_del_aspect_bpr = (__pyx_v_lambda_d * __pyx_v_z); - /* "cornac/models/comparer/recom_comparer_sub.pyx":682 + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":1391 * - * del_aspect_bpr = lambda_d * z - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< - * for i in range(n_user_factors): - * for j in range(n_item_factors): + * @cname('__pyx_memoryview_slice_assign_scalar') + * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< + * size_t itemsize, void *item, + * bint dtype_is_object) noexcept nogil: */ - __pyx_v_aspect_bpr_loss = (__pyx_v_aspect_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":683 - * del_aspect_bpr = lambda_d * z - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] - */ - __pyx_t_9 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_9; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; +static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":684 - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): + /* "View.MemoryView":1394 + * size_t itemsize, void *item, + * bint dtype_is_object) noexcept nogil: + * refcount_copying(dst, dtype_is_object, ndim, inc=False) # <<<<<<<<<<<<<< + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, itemsize, item) + * refcount_copying(dst, dtype_is_object, ndim, inc=True) */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":685 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + /* "View.MemoryView":1395 + * bint dtype_is_object) noexcept nogil: + * refcount_copying(dst, dtype_is_object, ndim, inc=False) + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, itemsize, item) # <<<<<<<<<<<<<< + * refcount_copying(dst, dtype_is_object, ndim, inc=True) + * */ - __pyx_t_23 = __pyx_v_j_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i_idx; - __pyx_t_8 = __pyx_v_j; - __pyx_v_a_ji = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_8 * __pyx_v_I.strides[1]) )))); + __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item); - /* "cornac/models/comparer/recom_comparer_sub.pyx":686 - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + /* "View.MemoryView":1396 + * refcount_copying(dst, dtype_is_object, ndim, inc=False) + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, itemsize, item) + * refcount_copying(dst, dtype_is_object, ndim, inc=True) # <<<<<<<<<<<<<< + * + * */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":687 - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + /* "View.MemoryView":1391 + * + * @cname('__pyx_memoryview_slice_assign_scalar') + * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< + * size_t itemsize, void *item, + * bint dtype_is_object) noexcept nogil: */ - __pyx_t_8 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_8 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":688 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_8 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_20 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_a_ji) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_8 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); + /* function exit code */ +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":689 - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji +/* "View.MemoryView":1400 + * + * @cname('__pyx_memoryview__slice_assign_scalar') + * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * size_t itemsize, void *item) noexcept nogil: */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_20 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_k; - __pyx_t_21 = __pyx_v_j_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_8 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_20 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":690 - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji +static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + Py_ssize_t __pyx_v_stride; + Py_ssize_t __pyx_v_extent; + int __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + + /* "View.MemoryView":1404 + * size_t itemsize, void *item) noexcept nogil: + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t extent = shape[0] * */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_8 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i_idx; - __pyx_t_21 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_20 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_8 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); + __pyx_v_stride = (__pyx_v_strides[0]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":691 - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji # <<<<<<<<<<<<<< + /* "View.MemoryView":1405 + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] + * cdef Py_ssize_t extent = shape[0] # <<<<<<<<<<<<<< * - * # update params with AdaGrad + * if ndim == 1: */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_20 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_8 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji); - } - } - } - } - } - } - } - } - } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } + __pyx_v_extent = (__pyx_v_shape[0]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":568 - * del_a_reg.fill(0) - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): + /* "View.MemoryView":1407 + * cdef Py_ssize_t extent = shape[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * for i in range(extent): + * memcpy(data, item, itemsize) */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L5; - } - __pyx_L5:; - } - } + __pyx_t_1 = (__pyx_v_ndim == 1); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":694 + /* "View.MemoryView":1408 * - * # update params with AdaGrad - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): - */ - { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); - #endif - /*try:*/ { - { - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) - #endif - #ifdef _OPENMP - #pragma omp parallel private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_3, __pyx_t_7, __pyx_t_8, __pyx_t_9) num_threads(__pyx_v_n_threads) - #endif /* _OPENMP */ - { - - /* "cornac/models/comparer/recom_comparer_sub.pyx":695 - * # update params with AdaGrad - * with nogil, parallel(num_threads=n_threads): - * for i in prange(n_user_factors, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_users): - * if del_u[j, i] != 0: - */ - __pyx_t_7 = __pyx_v_n_user_factors; - if ((1 == 0)) abort(); - { - __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_9 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_9; __pyx_t_3++){ - { - __pyx_v_i = (long)(0 + 1 * __pyx_t_3); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((long)0xbad0bad0); - __pyx_v_k = ((long)0xbad0bad0); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":696 - * with nogil, parallel(num_threads=n_threads): - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): # <<<<<<<<<<<<<< - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - */ - __pyx_t_10 = __pyx_v_n_users; - __pyx_t_11 = __pyx_t_10; - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { - __pyx_v_j = __pyx_t_12; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":697 - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): - * if del_u[j, i] != 0: # <<<<<<<<<<<<<< - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * if ndim == 1: + * for i in range(extent): # <<<<<<<<<<<<<< + * memcpy(data, item, itemsize) + * data += stride */ - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_2 = __pyx_v_extent; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":698 - * for j in range(n_users): - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] # <<<<<<<<<<<<<< - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + /* "View.MemoryView":1409 + * if ndim == 1: + * for i in range(extent): + * memcpy(data, item, itemsize) # <<<<<<<<<<<<<< + * data += stride + * else: */ - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_u_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_8 * __pyx_v_U.strides[1]) ))))); + (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":697 - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): - * if del_u[j, i] != 0: # <<<<<<<<<<<<<< - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + /* "View.MemoryView":1410 + * for i in range(extent): + * memcpy(data, item, itemsize) + * data += stride # <<<<<<<<<<<<<< + * else: + * for i in range(extent): */ - } + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":699 - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] # <<<<<<<<<<<<<< - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: + /* "View.MemoryView":1407 + * cdef Py_ssize_t extent = shape[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * for i in range(extent): + * memcpy(data, item, itemsize) */ - __pyx_t_8 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_19 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_U.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)))); + goto __pyx_L3; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":700 - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] # <<<<<<<<<<<<<< - * if U[j, i] < 0: - * U[j, i] = 0 + /* "View.MemoryView":1412 + * data += stride + * else: + * for i in range(extent): # <<<<<<<<<<<<<< + * _slice_assign_scalar(data, shape + 1, strides + 1, ndim - 1, itemsize, item) + * data += stride */ - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_24 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_U.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_8, __pyx_pybuffernd_del_u_reg.diminfo[1].strides))); + /*else*/ { + __pyx_t_2 = __pyx_v_extent; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":701 - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: # <<<<<<<<<<<<<< - * U[j, i] = 0 + /* "View.MemoryView":1413 + * else: + * for i in range(extent): + * _slice_assign_scalar(data, shape + 1, strides + 1, ndim - 1, itemsize, item) # <<<<<<<<<<<<<< + * data += stride * */ - __pyx_t_8 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_26 = (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_8 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item); - /* "cornac/models/comparer/recom_comparer_sub.pyx":702 - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: - * U[j, i] = 0 # <<<<<<<<<<<<<< + /* "View.MemoryView":1414 + * for i in range(extent): + * _slice_assign_scalar(data, shape + 1, strides + 1, ndim - 1, itemsize, item) + * data += stride # <<<<<<<<<<<<<< * - * for j in range(n_item_factors): - */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_8 * __pyx_v_U.strides[1]) )) = 0.0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":701 - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: # <<<<<<<<<<<<<< - * U[j, i] = 0 * */ - } - } + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + } + } + __pyx_L3:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":704 - * U[j, i] = 0 + /* "View.MemoryView":1400 * - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: + * @cname('__pyx_memoryview__slice_assign_scalar') + * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * size_t itemsize, void *item) noexcept nogil: */ - __pyx_t_10 = __pyx_v_n_item_factors; - __pyx_t_11 = __pyx_t_10; - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { - __pyx_v_j = __pyx_t_12; - /* "cornac/models/comparer/recom_comparer_sub.pyx":705 - * - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - */ - __pyx_t_13 = __pyx_v_n_aspect_factors; - __pyx_t_14 = __pyx_t_13; - for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { - __pyx_v_k = __pyx_t_15; + /* function exit code */ +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":706 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] +/* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result */ - __pyx_t_8 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":707 - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_k; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_8, __pyx_pybuffernd_del_g1.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) ))))); +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum = {"__pyx_unpickle_Enum", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_Enum") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v___pyx_type = values[0]; + __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_v___pyx_state = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); - /* "cornac/models/comparer/recom_comparer_sub.pyx":706 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - */ - } + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":708 - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: - */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_8 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_22 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G1.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)))); +static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":709 - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< - * if G1[i, j, k] < 0: - * G1[i, j, k] = 0 + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0x82a3537, 0x6ae9995, 0xb068931): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_k; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_22 * __pyx_v_G1.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_23 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_25 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_8 * __pyx_v_sgrad_G1.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides))); + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__8, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":710 - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< - * G1[i, j, k] = 0 - * + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum not in (0x82a3537, 0x6ae9995, 0xb068931): + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum + * __pyx_result = Enum.__new__(__pyx_type) */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_26 = (((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_24 * __pyx_v_G1.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_1); + __pyx_v___pyx_PickleError = __pyx_t_1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":711 - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: - * G1[i, j, k] = 0 # <<<<<<<<<<<<<< - * - * for j in range(n_aspect_factors): + /* "(tree fragment)":6 + * if __pyx_checksum not in (0x82a3537, 0x6ae9995, 0xb068931): + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum # <<<<<<<<<<<<<< + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )) = 0.0; + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":710 - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< - * G1[i, j, k] = 0 - * + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0x82a3537, 0x6ae9995, 0xb068931): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum */ - } - } - } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":713 - * G1[i, j, k] = 0 - * - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum + * __pyx_result = Enum.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) */ - __pyx_t_10 = __pyx_v_n_aspect_factors; - __pyx_t_11 = __pyx_t_10; - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { - __pyx_v_j = __pyx_t_12; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_MemviewEnum_type), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":714 - * - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + /* "(tree fragment)":8 + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result */ - __pyx_t_13 = __pyx_v_n_opinion_factors; - __pyx_t_14 = __pyx_t_13; - for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { - __pyx_v_k = __pyx_t_15; + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":715 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + /* "(tree fragment)":9 + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_unpickle_Enum__set_state(((struct __pyx_MemviewEnum_obj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":716 - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + /* "(tree fragment)":8 + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_8 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_8 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) ))))); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":715 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] */ - } + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v___pyx_result); + __pyx_r = __pyx_v___pyx_result; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":717 - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_20 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_22 * __pyx_v_sgrad_G2.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_8, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":718 - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< - * if G2[i, j, k] < 0: - * G2[i, j, k] = 0 - */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_8 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_22 * __pyx_v_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_G2.strides[1]) ) + __pyx_t_20 * __pyx_v_G2.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_24 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G2.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides))); + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v___pyx_PickleError); + __Pyx_XDECREF(__pyx_v___pyx_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":719 - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< - * G2[i, j, k] = 0 - * +/* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_k; - __pyx_t_26 = (((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_23 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_8 * __pyx_v_G2.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":720 - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: - * G2[i, j, k] = 0 # <<<<<<<<<<<<<< - * - * for i in prange(n_item_factors, schedule='guided'): - */ - __pyx_t_8 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_8 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) )) = 0.0; +static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum__set_state", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":719 - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< - * G2[i, j, k] = 0 - * + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[1]) */ - } - } - } - } - } - } - } + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->name); + __Pyx_DECREF(__pyx_v___pyx_result->name); + __pyx_v___pyx_result->name = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":722 - * G2[i, j, k] = 0 - * - * for i in prange(n_item_factors, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_items): - * if del_i[j, i] != 0: + /* "(tree fragment)":13 + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[1]) */ - __pyx_t_9 = __pyx_v_n_item_factors; - if ((1 == 0)) abort(); - { - __pyx_t_7 = (__pyx_t_9 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_7 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_7; __pyx_t_3++){ - { - __pyx_v_i = (long)(0 + 1 * __pyx_t_3); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((long)0xbad0bad0); - __pyx_v_k = ((long)0xbad0bad0); + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 13, __pyx_L1_error) + } + __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_3 > 1); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_2 = __pyx_t_4; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":723 - * - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): # <<<<<<<<<<<<<< - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + /* "(tree fragment)":14 + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<< */ - __pyx_t_10 = __pyx_v_n_items; - __pyx_t_11 = __pyx_t_10; - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { - __pyx_v_j = __pyx_t_12; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_update); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 14, __pyx_L1_error) + } + __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":724 - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): - * if del_i[j, i] != 0: # <<<<<<<<<<<<<< - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + /* "(tree fragment)":13 + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[1]) */ - __pyx_t_23 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":725 - * for j in range(n_items): - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] # <<<<<<<<<<<<<< - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + /* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_8 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) ))))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":724 - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): - * if del_i[j, i] != 0: # <<<<<<<<<<<<<< - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - */ - } + /* 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_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":726 - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] # <<<<<<<<<<<<<< - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":245 + * + * @property + * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<< + * """Returns a borrowed reference to the object owning the data/memory. + * """ */ - __pyx_t_18 = __pyx_v_j; - __pyx_t_8 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_24 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_I.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_8, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":727 - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] # <<<<<<<<<<<<<< - * if I[j, i] < 0: - * I[j, i] = 0 - */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_25 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_I.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[1].strides))); +static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self) { + PyObject *__pyx_r; - /* "cornac/models/comparer/recom_comparer_sub.pyx":728 - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: # <<<<<<<<<<<<<< - * I[j, i] = 0 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":248 + * """Returns a borrowed reference to the object owning the data/memory. + * """ + * return PyArray_BASE(self) # <<<<<<<<<<<<<< * + * @property */ - __pyx_t_18 = __pyx_v_j; - __pyx_t_8 = __pyx_v_i; - __pyx_t_26 = (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_18 * __pyx_v_I.strides[0]) ) + __pyx_t_8 * __pyx_v_I.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_r = PyArray_BASE(__pyx_v_self); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":729 - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: - * I[j, i] = 0 # <<<<<<<<<<<<<< + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":245 * - * for j in range(n_aspect_factors): + * @property + * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<< + * """Returns a borrowed reference to the object owning the data/memory. + * """ */ - __pyx_t_8 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_8 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )) = 0.0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":728 - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: # <<<<<<<<<<<<<< - * I[j, i] = 0 + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":251 * + * @property + * cdef inline dtype descr(self): # <<<<<<<<<<<<<< + * """Returns an owned reference to the dtype of the array. + * """ */ - } - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":731 - * I[j, i] = 0 +static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self) { + PyArray_Descr *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyArray_Descr *__pyx_t_1; + __Pyx_RefNannySetupContext("descr", 0); + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":254 + * """Returns an owned reference to the dtype of the array. + * """ + * return PyArray_DESCR(self) # <<<<<<<<<<<<<< * - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: + * @property */ - __pyx_t_10 = __pyx_v_n_aspect_factors; - __pyx_t_11 = __pyx_t_10; - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { - __pyx_v_j = __pyx_t_12; + __Pyx_XDECREF((PyObject *)__pyx_r); + __pyx_t_1 = PyArray_DESCR(__pyx_v_self); + __Pyx_INCREF((PyObject *)((PyArray_Descr *)__pyx_t_1)); + __pyx_r = ((PyArray_Descr *)__pyx_t_1); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":732 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":251 * - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * @property + * cdef inline dtype descr(self): # <<<<<<<<<<<<<< + * """Returns an owned reference to the dtype of the array. + * """ */ - __pyx_t_13 = __pyx_v_n_opinion_factors; - __pyx_t_14 = __pyx_t_13; - for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { - __pyx_v_k = __pyx_t_15; - /* "cornac/models/comparer/recom_comparer_sub.pyx":733 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_8, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":734 - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":257 + * + * @property + * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<< + * """Returns the number of dimensions in the array. + * """ */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_8, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) ))))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":733 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] +static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self) { + int __pyx_r; + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":260 + * """Returns the number of dimensions in the array. + * """ + * return PyArray_NDIM(self) # <<<<<<<<<<<<<< + * + * @property */ - } + __pyx_r = PyArray_NDIM(__pyx_v_self); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":735 - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":257 + * + * @property + * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<< + * """Returns the number of dimensions in the array. + * """ */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_22 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G3.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_8, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":736 - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< - * if G3[i, j, k] < 0: - * G3[i, j, k] = 0 + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":263 + * + * @property + * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the dimensions/shape of the array. + * The number of elements matches the number of dimensions of the array (ndim). */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_G3.strides[1]) ) + __pyx_t_22 * __pyx_v_G3.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_23 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_8 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G3.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":737 - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< - * G3[i, j, k] = 0 +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self) { + npy_intp *__pyx_r; + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":268 + * Can return NULL for 0-dimensional arrays. + * """ + * return PyArray_DIMS(self) # <<<<<<<<<<<<<< * + * @property */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_26 = (((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_19 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_r = PyArray_DIMS(__pyx_v_self); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":738 - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: - * G3[i, j, k] = 0 # <<<<<<<<<<<<<< + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":263 * - * for i in prange(n_aspects + 1, schedule='guided'): + * @property + * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the dimensions/shape of the array. + * The number of elements matches the number of dimensions of the array (ndim). */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) )) = 0.0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":737 - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< - * G3[i, j, k] = 0 + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":271 * + * @property + * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the strides of the array. + * The number of elements matches the number of dimensions of the array (ndim). */ - } - } - } - } - } - } - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":740 - * G3[i, j, k] = 0 +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self) { + npy_intp *__pyx_r; + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":275 + * The number of elements matches the number of dimensions of the array (ndim). + * """ + * return PyArray_STRIDES(self) # <<<<<<<<<<<<<< * - * for i in prange(n_aspects + 1, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: + * @property */ - __pyx_t_7 = (__pyx_v_n_aspects + 1); - if ((1 == 0)) abort(); - { - __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_9 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_9; __pyx_t_3++){ - { - __pyx_v_i = (long)(0 + 1 * __pyx_t_3); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((long)0xbad0bad0); + __pyx_r = PyArray_STRIDES(__pyx_v_self); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":741 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":271 * - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * @property + * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the strides of the array. + * The number of elements matches the number of dimensions of the array (ndim). */ - __pyx_t_10 = __pyx_v_n_aspect_factors; - __pyx_t_11 = __pyx_t_10; - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { - __pyx_v_j = __pyx_t_12; - /* "cornac/models/comparer/recom_comparer_sub.pyx":742 - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: # <<<<<<<<<<<<<< - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":278 + * + * @property + * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<< + * """Returns the total size (in number of elements) of the array. + * """ */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":743 - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] # <<<<<<<<<<<<<< - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] +static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self) { + npy_intp __pyx_r; + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":281 + * """Returns the total size (in number of elements) of the array. + * """ + * return PyArray_SIZE(self) # <<<<<<<<<<<<<< + * + * @property */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_8 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) ))))); + __pyx_r = PyArray_SIZE(__pyx_v_self); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":742 - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: # <<<<<<<<<<<<<< - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":278 + * + * @property + * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<< + * """Returns the total size (in number of elements) of the array. + * """ */ - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":744 - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] # <<<<<<<<<<<<<< - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":284 + * + * @property + * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<< + * """The pointer to the data buffer as a char*. + * This is provided for legacy reasons to avoid direct struct field access. */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_23 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_8 * __pyx_v_sgrad_A.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":745 - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] # <<<<<<<<<<<<<< - * if A[i, j] < 0: - * A[i, j] = 0 +static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self) { + char *__pyx_r; + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":290 + * of `PyArray_DATA()` instead, which returns a 'void*'. + * """ + * return PyArray_BYTES(self) # <<<<<<<<<<<<<< + * + * ctypedef unsigned char npy_bool */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_8 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_8 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_24 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_A.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[1].strides))); + __pyx_r = PyArray_BYTES(__pyx_v_self); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":746 - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: # <<<<<<<<<<<<<< - * A[i, j] = 0 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":284 * + * @property + * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<< + * """The pointer to the data buffer as a char*. + * This is provided for legacy reasons to avoid direct struct field access. */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_26 = (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":747 - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: - * A[i, j] = 0 # <<<<<<<<<<<<<< + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":773 + * ctypedef npy_cdouble complex_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) * - * for i in prange(n_opinions, schedule='guided'): */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )) = 0.0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":746 - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: # <<<<<<<<<<<<<< - * A[i, j] = 0 +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0); + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":774 + * + * cdef inline object PyArray_MultiIterNew1(a): + * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< * + * cdef inline object PyArray_MultiIterNew2(a, b): */ - } - } - } - } - } - } + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 774, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":749 - * A[i, j] = 0 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":773 + * ctypedef npy_cdouble complex_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) * - * for i in prange(n_opinions, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: */ - __pyx_t_9 = __pyx_v_n_opinions; - if ((1 == 0)) abort(); - { - __pyx_t_7 = (__pyx_t_9 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_7 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_7; __pyx_t_3++){ - { - __pyx_v_i = (long)(0 + 1 * __pyx_t_3); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((long)0xbad0bad0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":750 + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":776 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) * - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] */ - __pyx_t_10 = __pyx_v_n_opinion_factors; - __pyx_t_11 = __pyx_t_10; - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { - __pyx_v_j = __pyx_t_12; - /* "cornac/models/comparer/recom_comparer_sub.pyx":751 - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: # <<<<<<<<<<<<<< - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0); + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":777 + * + * cdef inline object PyArray_MultiIterNew2(a, b): + * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 777, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":752 - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] # <<<<<<<<<<<<<< - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":776 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_8, __pyx_pybuffernd_del_o_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) ))))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":751 - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: # <<<<<<<<<<<<<< - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":779 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * */ - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":753 - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] # <<<<<<<<<<<<<< - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0); + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":780 + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_8 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_O.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)))); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 780, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":754 - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] # <<<<<<<<<<<<<< - * if O[i, j] < 0: - * O[i, j] = 0 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":779 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_23 * __pyx_v_O.strides[0]) ) + __pyx_t_8 * __pyx_v_O.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_25 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_O.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[1].strides))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":755 - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: # <<<<<<<<<<<<<< - * O[i, j] = 0 + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":782 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) * */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_26 = (((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_19 * __pyx_v_O.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":756 - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: - * O[i, j] = 0 # <<<<<<<<<<<<<< +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0); + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":783 * - * return correct, skipped, loss, bpr_loss + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )) = 0.0; + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 783, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":755 - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: # <<<<<<<<<<<<<< - * O[i, j] = 0 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":782 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) * */ - } - } - } - } - } - } - } - } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":694 + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":785 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) * - * # update params with AdaGrad - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L66; - } - __pyx_L66:; - } - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":758 - * O[i, j] = 0 +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0); + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":786 * - * return correct, skipped, loss, bpr_loss # <<<<<<<<<<<<<< + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< * - * def rank(self, user_id, item_ids=None): + * cdef inline tuple PyDataType_SHAPE(dtype d): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_correct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error) + __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 786, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v_skipped); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_27 = PyFloat_FromDouble(__pyx_v_bpr_loss); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_27); - __pyx_t_28 = PyTuple_New(4); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_28); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_28, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_28, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_28, 2, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_27); - PyTuple_SET_ITEM(__pyx_t_28, 3, __pyx_t_27); + __pyx_r = __pyx_t_1; __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_6 = 0; - __pyx_t_27 = 0; - __pyx_r = __pyx_t_28; - __pyx_t_28 = 0; goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":485 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def _fit_mter( # <<<<<<<<<<<<<< - * self, - * RNGVector rng_pos_uia, + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":785 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_27); - __Pyx_XDECREF(__pyx_t_28); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - goto __pyx_L2; + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); - __pyx_L2:; - __PYX_XDEC_MEMVIEW(&__pyx_v_X, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_oids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_oids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_user_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_item_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_neg_item_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_indptr, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_p_user_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_earlier_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_later_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_aspect_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_pair_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G3, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_O, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G3, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_U, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_I, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_O, 1); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* Python wrapper */ -static PyObject *__pyx_fuse_1_0__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_21_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_fuse_1_0__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_21_fit_mter = {"__pyx_fuse_1_0_fit_mter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1_0__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_21_fit_mter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter}; -static PyObject *__pyx_fuse_1_0__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_21_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg = 0; - int __pyx_v_n_threads; - __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; - struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict = 0; - __Pyx_memviewslice __pyx_v_user_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_neg_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_indptr = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_p_user_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_earlier_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_later_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_aspect_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_O = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_U = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_I = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_O = { 0, 0, { 0 }, { 0 }, { 0 } }; - PyArrayObject *__pyx_v_del_g1 = 0; - PyArrayObject *__pyx_v_del_g2 = 0; - PyArrayObject *__pyx_v_del_g3 = 0; - PyArrayObject *__pyx_v_del_u = 0; - PyArrayObject *__pyx_v_del_i = 0; - PyArrayObject *__pyx_v_del_a = 0; - PyArrayObject *__pyx_v_del_o = 0; - PyArrayObject *__pyx_v_del_g1_reg = 0; - PyArrayObject *__pyx_v_del_g2_reg = 0; - PyArrayObject *__pyx_v_del_g3_reg = 0; - PyArrayObject *__pyx_v_del_u_reg = 0; - PyArrayObject *__pyx_v_del_i_reg = 0; - PyArrayObject *__pyx_v_del_a_reg = 0; - PyArrayObject *__pyx_v_del_o_reg = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":788 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__pyx_v_d) { + PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_fit_mter (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_rng_pos_uia,&__pyx_n_s_rng_pos_uao,&__pyx_n_s_rng_pos_iao,&__pyx_n_s_rng_pos_pair,&__pyx_n_s_rng_pos,&__pyx_n_s_rng_neg,&__pyx_n_s_n_threads,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_iids,&__pyx_n_s_X_aids,&__pyx_n_s_YU,&__pyx_n_s_YU_uids,&__pyx_n_s_YU_aids,&__pyx_n_s_YU_oids,&__pyx_n_s_YI,&__pyx_n_s_YI_iids,&__pyx_n_s_YI_aids,&__pyx_n_s_YI_oids,&__pyx_n_s_rating_dict,&__pyx_n_s_user_ids,&__pyx_n_s_item_ids,&__pyx_n_s_neg_item_ids,&__pyx_n_s_indptr,&__pyx_n_s_p_user_indices,&__pyx_n_s_earlier_indices,&__pyx_n_s_later_indices,&__pyx_n_s_aspect_indices,&__pyx_n_s_pair_counts,&__pyx_n_s_G1,&__pyx_n_s_G2,&__pyx_n_s_G3,&__pyx_n_s_U,&__pyx_n_s_I,&__pyx_n_s_A,&__pyx_n_s_O,&__pyx_n_s_sgrad_G1,&__pyx_n_s_sgrad_G2,&__pyx_n_s_sgrad_G3,&__pyx_n_s_sgrad_U,&__pyx_n_s_sgrad_I,&__pyx_n_s_sgrad_A,&__pyx_n_s_sgrad_O,&__pyx_n_s_del_g1,&__pyx_n_s_del_g2,&__pyx_n_s_del_g3,&__pyx_n_s_del_u,&__pyx_n_s_del_i,&__pyx_n_s_del_a,&__pyx_n_s_del_o,&__pyx_n_s_del_g1_reg,&__pyx_n_s_del_g2_reg,&__pyx_n_s_del_g3_reg,&__pyx_n_s_del_u_reg,&__pyx_n_s_del_i_reg,&__pyx_n_s_del_a_reg,&__pyx_n_s_del_o_reg,0}; - PyObject* values[58] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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 58: values[57] = PyTuple_GET_ITEM(__pyx_args, 57); - CYTHON_FALLTHROUGH; - case 57: values[56] = PyTuple_GET_ITEM(__pyx_args, 56); - CYTHON_FALLTHROUGH; - case 56: values[55] = PyTuple_GET_ITEM(__pyx_args, 55); - CYTHON_FALLTHROUGH; - case 55: values[54] = PyTuple_GET_ITEM(__pyx_args, 54); - CYTHON_FALLTHROUGH; - case 54: values[53] = PyTuple_GET_ITEM(__pyx_args, 53); - CYTHON_FALLTHROUGH; - case 53: values[52] = PyTuple_GET_ITEM(__pyx_args, 52); - CYTHON_FALLTHROUGH; - case 52: values[51] = PyTuple_GET_ITEM(__pyx_args, 51); - CYTHON_FALLTHROUGH; - case 51: values[50] = PyTuple_GET_ITEM(__pyx_args, 50); - CYTHON_FALLTHROUGH; - case 50: values[49] = PyTuple_GET_ITEM(__pyx_args, 49); - CYTHON_FALLTHROUGH; - case 49: values[48] = PyTuple_GET_ITEM(__pyx_args, 48); - CYTHON_FALLTHROUGH; - case 48: values[47] = PyTuple_GET_ITEM(__pyx_args, 47); - CYTHON_FALLTHROUGH; - case 47: values[46] = PyTuple_GET_ITEM(__pyx_args, 46); - CYTHON_FALLTHROUGH; - case 46: values[45] = PyTuple_GET_ITEM(__pyx_args, 45); - CYTHON_FALLTHROUGH; - case 45: values[44] = PyTuple_GET_ITEM(__pyx_args, 44); - CYTHON_FALLTHROUGH; - case 44: values[43] = PyTuple_GET_ITEM(__pyx_args, 43); - CYTHON_FALLTHROUGH; - case 43: values[42] = PyTuple_GET_ITEM(__pyx_args, 42); - CYTHON_FALLTHROUGH; - case 42: values[41] = PyTuple_GET_ITEM(__pyx_args, 41); - CYTHON_FALLTHROUGH; - case 41: values[40] = PyTuple_GET_ITEM(__pyx_args, 40); - CYTHON_FALLTHROUGH; - case 40: values[39] = PyTuple_GET_ITEM(__pyx_args, 39); - CYTHON_FALLTHROUGH; - case 39: values[38] = PyTuple_GET_ITEM(__pyx_args, 38); - CYTHON_FALLTHROUGH; - case 38: values[37] = PyTuple_GET_ITEM(__pyx_args, 37); - CYTHON_FALLTHROUGH; - case 37: values[36] = PyTuple_GET_ITEM(__pyx_args, 36); - CYTHON_FALLTHROUGH; - case 36: values[35] = PyTuple_GET_ITEM(__pyx_args, 35); - CYTHON_FALLTHROUGH; - case 35: values[34] = PyTuple_GET_ITEM(__pyx_args, 34); - CYTHON_FALLTHROUGH; - case 34: values[33] = PyTuple_GET_ITEM(__pyx_args, 33); - CYTHON_FALLTHROUGH; - case 33: values[32] = PyTuple_GET_ITEM(__pyx_args, 32); - CYTHON_FALLTHROUGH; - case 32: values[31] = PyTuple_GET_ITEM(__pyx_args, 31); - CYTHON_FALLTHROUGH; - case 31: values[30] = PyTuple_GET_ITEM(__pyx_args, 30); - CYTHON_FALLTHROUGH; - case 30: values[29] = PyTuple_GET_ITEM(__pyx_args, 29); - CYTHON_FALLTHROUGH; - case 29: values[28] = PyTuple_GET_ITEM(__pyx_args, 28); - CYTHON_FALLTHROUGH; - case 28: values[27] = PyTuple_GET_ITEM(__pyx_args, 27); - CYTHON_FALLTHROUGH; - case 27: values[26] = PyTuple_GET_ITEM(__pyx_args, 26); - CYTHON_FALLTHROUGH; - case 26: values[25] = PyTuple_GET_ITEM(__pyx_args, 25); - CYTHON_FALLTHROUGH; - case 25: values[24] = PyTuple_GET_ITEM(__pyx_args, 24); - CYTHON_FALLTHROUGH; - case 24: values[23] = PyTuple_GET_ITEM(__pyx_args, 23); - CYTHON_FALLTHROUGH; - case 23: values[22] = PyTuple_GET_ITEM(__pyx_args, 22); - CYTHON_FALLTHROUGH; - case 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - CYTHON_FALLTHROUGH; - case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - CYTHON_FALLTHROUGH; - case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - CYTHON_FALLTHROUGH; - case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - CYTHON_FALLTHROUGH; - case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - CYTHON_FALLTHROUGH; - case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - CYTHON_FALLTHROUGH; - case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - CYTHON_FALLTHROUGH; - case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - CYTHON_FALLTHROUGH; - case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - CYTHON_FALLTHROUGH; - case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - CYTHON_FALLTHROUGH; - case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - CYTHON_FALLTHROUGH; - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_uia)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 1); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_uao)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 2); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_iao)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 3); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_pair)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 4); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 5); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_neg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 6); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_threads)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 7); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 8); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 9: - if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 9); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 10: - if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 10); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 11: - if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 11); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 12: - if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 12); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 13: - if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 13); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 14: - if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 14); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 15: - if (likely((values[15] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_oids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 15); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 16: - if (likely((values[16] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 16); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 17: - if (likely((values[17] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 17); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 18: - if (likely((values[18] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 18); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 19: - if (likely((values[19] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_oids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 19); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 20: - if (likely((values[20] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rating_dict)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 20); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 21: - if (likely((values[21] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_user_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 21); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 22: - if (likely((values[22] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 22); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 23: - if (likely((values[23] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_neg_item_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 23); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 24: - if (likely((values[24] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_indptr)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 24); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 25: - if (likely((values[25] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_p_user_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 25); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 26: - if (likely((values[26] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_earlier_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 26); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 27: - if (likely((values[27] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_later_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 27); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 28: - if (likely((values[28] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_aspect_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 28); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 29: - if (likely((values[29] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pair_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 29); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 30: - if (likely((values[30] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 30); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 31: - if (likely((values[31] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 31); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 32: - if (likely((values[32] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 32); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 33: - if (likely((values[33] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 33); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 34: - if (likely((values[34] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 34); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 35: - if (likely((values[35] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 35); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 36: - if (likely((values[36] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_O)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 36); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 37: - if (likely((values[37] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 37); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 38: - if (likely((values[38] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 38); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 39: - if (likely((values[39] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 39); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 40: - if (likely((values[40] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_U)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 40); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 41: - if (likely((values[41] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_I)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 41); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 42: - if (likely((values[42] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 42); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 43: - if (likely((values[43] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_O)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 43); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 44: - if (likely((values[44] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 44); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 45: - if (likely((values[45] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 45); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 46: - if (likely((values[46] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 46); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 47: - if (likely((values[47] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_u)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 47); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 48: - if (likely((values[48] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_i)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 48); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 49: - if (likely((values[49] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_a)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 49); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 50: - if (likely((values[50] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_o)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 50); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 51: - if (likely((values[51] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g1_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 51); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 52: - if (likely((values[52] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g2_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 52); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 53: - if (likely((values[53] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g3_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 53); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 54: - if (likely((values[54] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_u_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 54); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 55: - if (likely((values[55] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_i_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 55); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 56: - if (likely((values[56] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_a_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 56); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 57: - if (likely((values[57] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_o_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 57); __PYX_ERR(0, 485, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_fit_mter") < 0)) __PYX_ERR(0, 485, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 58) { - 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); - values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - values[22] = PyTuple_GET_ITEM(__pyx_args, 22); - values[23] = PyTuple_GET_ITEM(__pyx_args, 23); - values[24] = PyTuple_GET_ITEM(__pyx_args, 24); - values[25] = PyTuple_GET_ITEM(__pyx_args, 25); - values[26] = PyTuple_GET_ITEM(__pyx_args, 26); - values[27] = PyTuple_GET_ITEM(__pyx_args, 27); - values[28] = PyTuple_GET_ITEM(__pyx_args, 28); - values[29] = PyTuple_GET_ITEM(__pyx_args, 29); - values[30] = PyTuple_GET_ITEM(__pyx_args, 30); - values[31] = PyTuple_GET_ITEM(__pyx_args, 31); - values[32] = PyTuple_GET_ITEM(__pyx_args, 32); - values[33] = PyTuple_GET_ITEM(__pyx_args, 33); - values[34] = PyTuple_GET_ITEM(__pyx_args, 34); - values[35] = PyTuple_GET_ITEM(__pyx_args, 35); - values[36] = PyTuple_GET_ITEM(__pyx_args, 36); - values[37] = PyTuple_GET_ITEM(__pyx_args, 37); - values[38] = PyTuple_GET_ITEM(__pyx_args, 38); - values[39] = PyTuple_GET_ITEM(__pyx_args, 39); - values[40] = PyTuple_GET_ITEM(__pyx_args, 40); - values[41] = PyTuple_GET_ITEM(__pyx_args, 41); - values[42] = PyTuple_GET_ITEM(__pyx_args, 42); - values[43] = PyTuple_GET_ITEM(__pyx_args, 43); - values[44] = PyTuple_GET_ITEM(__pyx_args, 44); - values[45] = PyTuple_GET_ITEM(__pyx_args, 45); - values[46] = PyTuple_GET_ITEM(__pyx_args, 46); - values[47] = PyTuple_GET_ITEM(__pyx_args, 47); - values[48] = PyTuple_GET_ITEM(__pyx_args, 48); - values[49] = PyTuple_GET_ITEM(__pyx_args, 49); - values[50] = PyTuple_GET_ITEM(__pyx_args, 50); - values[51] = PyTuple_GET_ITEM(__pyx_args, 51); - values[52] = PyTuple_GET_ITEM(__pyx_args, 52); - values[53] = PyTuple_GET_ITEM(__pyx_args, 53); - values[54] = PyTuple_GET_ITEM(__pyx_args, 54); - values[55] = PyTuple_GET_ITEM(__pyx_args, 55); - values[56] = PyTuple_GET_ITEM(__pyx_args, 56); - values[57] = PyTuple_GET_ITEM(__pyx_args, 57); - } - __pyx_v_self = values[0]; - __pyx_v_rng_pos_uia = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[1]); - __pyx_v_rng_pos_uao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[2]); - __pyx_v_rng_pos_iao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[3]); - __pyx_v_rng_pos_pair = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[4]); - __pyx_v_rng_pos = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[5]); - __pyx_v_rng_neg = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[6]); - __pyx_v_n_threads = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_n_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 493, __pyx_L3_error) - __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_iids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_YU = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_uids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_aids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_oids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YI = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_iids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_aids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_oids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_rating_dict = ((struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *)values[20]); - __pyx_v_user_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_user_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[22], PyBUF_WRITABLE); if (unlikely(!__pyx_v_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_neg_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[23], PyBUF_WRITABLE); if (unlikely(!__pyx_v_neg_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_indptr = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[24], PyBUF_WRITABLE); if (unlikely(!__pyx_v_indptr.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_p_user_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[25], PyBUF_WRITABLE); if (unlikely(!__pyx_v_p_user_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_earlier_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[26], PyBUF_WRITABLE); if (unlikely(!__pyx_v_earlier_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_later_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[27], PyBUF_WRITABLE); if (unlikely(!__pyx_v_later_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_aspect_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[28], PyBUF_WRITABLE); if (unlikely(!__pyx_v_aspect_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_pair_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[29], PyBUF_WRITABLE); if (unlikely(!__pyx_v_pair_counts.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[30], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G1.memview)) __PYX_ERR(0, 500, __pyx_L3_error) - __pyx_v_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[31], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G2.memview)) __PYX_ERR(0, 501, __pyx_L3_error) - __pyx_v_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[32], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G3.memview)) __PYX_ERR(0, 502, __pyx_L3_error) - __pyx_v_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[33], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U.memview)) __PYX_ERR(0, 503, __pyx_L3_error) - __pyx_v_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[34], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I.memview)) __PYX_ERR(0, 504, __pyx_L3_error) - __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[35], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 505, __pyx_L3_error) - __pyx_v_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[36], PyBUF_WRITABLE); if (unlikely(!__pyx_v_O.memview)) __PYX_ERR(0, 506, __pyx_L3_error) - __pyx_v_sgrad_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[37], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G1.memview)) __PYX_ERR(0, 507, __pyx_L3_error) - __pyx_v_sgrad_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[38], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G2.memview)) __PYX_ERR(0, 508, __pyx_L3_error) - __pyx_v_sgrad_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[39], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G3.memview)) __PYX_ERR(0, 509, __pyx_L3_error) - __pyx_v_sgrad_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[40], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_U.memview)) __PYX_ERR(0, 510, __pyx_L3_error) - __pyx_v_sgrad_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[41], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_I.memview)) __PYX_ERR(0, 511, __pyx_L3_error) - __pyx_v_sgrad_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[42], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_A.memview)) __PYX_ERR(0, 512, __pyx_L3_error) - __pyx_v_sgrad_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[43], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_O.memview)) __PYX_ERR(0, 513, __pyx_L3_error) - __pyx_v_del_g1 = ((PyArrayObject *)values[44]); - __pyx_v_del_g2 = ((PyArrayObject *)values[45]); - __pyx_v_del_g3 = ((PyArrayObject *)values[46]); - __pyx_v_del_u = ((PyArrayObject *)values[47]); - __pyx_v_del_i = ((PyArrayObject *)values[48]); - __pyx_v_del_a = ((PyArrayObject *)values[49]); - __pyx_v_del_o = ((PyArrayObject *)values[50]); - __pyx_v_del_g1_reg = ((PyArrayObject *)values[51]); - __pyx_v_del_g2_reg = ((PyArrayObject *)values[52]); - __pyx_v_del_g3_reg = ((PyArrayObject *)values[53]); - __pyx_v_del_u_reg = ((PyArrayObject *)values[54]); - __pyx_v_del_i_reg = ((PyArrayObject *)values[55]); - __pyx_v_del_a_reg = ((PyArrayObject *)values[56]); - __pyx_v_del_o_reg = ((PyArrayObject *)values[57]); + int __pyx_t_1; + __Pyx_RefNannySetupContext("PyDataType_SHAPE", 0); + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":789 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ + __pyx_t_1 = PyDataType_HASSUBARRAY(__pyx_v_d); + if (__pyx_t_1) { + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":790 + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape # <<<<<<<<<<<<<< + * else: + * return () + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject*)__pyx_v_d->subarray->shape)); + __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape); + goto __pyx_L0; + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":789 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 485, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uia), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uia", 0))) __PYX_ERR(0, 487, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uao", 0))) __PYX_ERR(0, 488, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_iao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_iao", 0))) __PYX_ERR(0, 489, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_pair), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_pair", 0))) __PYX_ERR(0, 490, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos", 0))) __PYX_ERR(0, 491, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_neg), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_neg", 0))) __PYX_ERR(0, 492, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rating_dict), __pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict, 1, "rating_dict", 0))) __PYX_ERR(0, 497, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1), __pyx_ptype_5numpy_ndarray, 1, "del_g1", 0))) __PYX_ERR(0, 514, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2), __pyx_ptype_5numpy_ndarray, 1, "del_g2", 0))) __PYX_ERR(0, 515, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3), __pyx_ptype_5numpy_ndarray, 1, "del_g3", 0))) __PYX_ERR(0, 516, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u), __pyx_ptype_5numpy_ndarray, 1, "del_u", 0))) __PYX_ERR(0, 517, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i), __pyx_ptype_5numpy_ndarray, 1, "del_i", 0))) __PYX_ERR(0, 518, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a), __pyx_ptype_5numpy_ndarray, 1, "del_a", 0))) __PYX_ERR(0, 519, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o), __pyx_ptype_5numpy_ndarray, 1, "del_o", 0))) __PYX_ERR(0, 520, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g1_reg", 0))) __PYX_ERR(0, 521, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g2_reg", 0))) __PYX_ERR(0, 522, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g3_reg", 0))) __PYX_ERR(0, 523, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u_reg), __pyx_ptype_5numpy_ndarray, 1, "del_u_reg", 0))) __PYX_ERR(0, 524, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i_reg), __pyx_ptype_5numpy_ndarray, 1, "del_i_reg", 0))) __PYX_ERR(0, 525, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a_reg), __pyx_ptype_5numpy_ndarray, 1, "del_a_reg", 0))) __PYX_ERR(0, 526, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o_reg), __pyx_ptype_5numpy_ndarray, 1, "del_o_reg", 0))) __PYX_ERR(0, 527, __pyx_L1_error) - __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_20_fit_mter(__pyx_self, __pyx_v_self, __pyx_v_rng_pos_uia, __pyx_v_rng_pos_uao, __pyx_v_rng_pos_iao, __pyx_v_rng_pos_pair, __pyx_v_rng_pos, __pyx_v_rng_neg, __pyx_v_n_threads, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_iids, __pyx_v_X_aids, __pyx_v_YU, __pyx_v_YU_uids, __pyx_v_YU_aids, __pyx_v_YU_oids, __pyx_v_YI, __pyx_v_YI_iids, __pyx_v_YI_aids, __pyx_v_YI_oids, __pyx_v_rating_dict, __pyx_v_user_ids, __pyx_v_item_ids, __pyx_v_neg_item_ids, __pyx_v_indptr, __pyx_v_p_user_indices, __pyx_v_earlier_indices, __pyx_v_later_indices, __pyx_v_aspect_indices, __pyx_v_pair_counts, __pyx_v_G1, __pyx_v_G2, __pyx_v_G3, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_sgrad_G1, __pyx_v_sgrad_G2, __pyx_v_sgrad_G3, __pyx_v_sgrad_U, __pyx_v_sgrad_I, __pyx_v_sgrad_A, __pyx_v_sgrad_O, __pyx_v_del_g1, __pyx_v_del_g2, __pyx_v_del_g3, __pyx_v_del_u, __pyx_v_del_i, __pyx_v_del_a, __pyx_v_del_o, __pyx_v_del_g1_reg, __pyx_v_del_g2_reg, __pyx_v_del_g3_reg, __pyx_v_del_u_reg, __pyx_v_del_i_reg, __pyx_v_del_a_reg, __pyx_v_del_o_reg); + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":792 + * return d.subarray.shape + * else: + * return () # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_empty_tuple); + __pyx_r = __pyx_empty_tuple; + goto __pyx_L0; + } + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":788 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape + */ /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_20_fit_mter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg, int __pyx_v_n_threads, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_iids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_YU, __Pyx_memviewslice __pyx_v_YU_uids, __Pyx_memviewslice __pyx_v_YU_aids, __Pyx_memviewslice __pyx_v_YU_oids, __Pyx_memviewslice __pyx_v_YI, __Pyx_memviewslice __pyx_v_YI_iids, __Pyx_memviewslice __pyx_v_YI_aids, __Pyx_memviewslice __pyx_v_YI_oids, struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict, __Pyx_memviewslice __pyx_v_user_ids, __Pyx_memviewslice __pyx_v_item_ids, __Pyx_memviewslice __pyx_v_neg_item_ids, __Pyx_memviewslice __pyx_v_indptr, __Pyx_memviewslice __pyx_v_p_user_indices, __Pyx_memviewslice __pyx_v_earlier_indices, __Pyx_memviewslice __pyx_v_later_indices, __Pyx_memviewslice __pyx_v_aspect_indices, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts, __Pyx_memviewslice __pyx_v_G1, __Pyx_memviewslice __pyx_v_G2, __Pyx_memviewslice __pyx_v_G3, __Pyx_memviewslice __pyx_v_U, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_O, __Pyx_memviewslice __pyx_v_sgrad_G1, __Pyx_memviewslice __pyx_v_sgrad_G2, __Pyx_memviewslice __pyx_v_sgrad_G3, __Pyx_memviewslice __pyx_v_sgrad_U, __Pyx_memviewslice __pyx_v_sgrad_I, __Pyx_memviewslice __pyx_v_sgrad_A, __Pyx_memviewslice __pyx_v_sgrad_O, PyArrayObject *__pyx_v_del_g1, PyArrayObject *__pyx_v_del_g2, PyArrayObject *__pyx_v_del_g3, PyArrayObject *__pyx_v_del_u, PyArrayObject *__pyx_v_del_i, PyArrayObject *__pyx_v_del_a, PyArrayObject *__pyx_v_del_o, PyArrayObject *__pyx_v_del_g1_reg, PyArrayObject *__pyx_v_del_g2_reg, PyArrayObject *__pyx_v_del_g3_reg, PyArrayObject *__pyx_v_del_u_reg, PyArrayObject *__pyx_v_del_i_reg, PyArrayObject *__pyx_v_del_a_reg, PyArrayObject *__pyx_v_del_o_reg) { - long __pyx_v_s; - long __pyx_v_correct; - long __pyx_v_skipped; - long __pyx_v_aspect_correct; - long __pyx_v_n_users; - long __pyx_v_n_items; - long __pyx_v_n_aspects; - CYTHON_UNUSED long __pyx_v_n_opinions; - long __pyx_v_n_user_factors; - long __pyx_v_n_item_factors; - long __pyx_v_n_aspect_factors; - long __pyx_v_n_opinion_factors; - CYTHON_UNUSED int __pyx_v_num_samples; - CYTHON_UNUSED int __pyx_v_num_bpr_samples; - CYTHON_UNUSED int __pyx_v_num_pair_samples; - CYTHON_UNUSED short __pyx_v__; - short __pyx_v_i; - short __pyx_v_j; - short __pyx_v_k; - short __pyx_v_idx; - short __pyx_v_jdx; - short __pyx_v_u_idx; - short __pyx_v_i_idx; - short __pyx_v_a_idx; - short __pyx_v_o_idx; - short __pyx_v_j_idx; - short __pyx_v_thread_id; - double __pyx_v_z; - double __pyx_v_score; - double __pyx_v_i_score; - double __pyx_v_j_score; - double __pyx_v_pred; - double __pyx_v_i_ij; - double __pyx_v_a_ji; - double __pyx_v_loss; - double __pyx_v_bpr_loss; - double __pyx_v_aspect_bpr_loss; - double __pyx_v_del_sqerror; - double __pyx_v_del_bpr; - double __pyx_v_del_aspect_bpr; - double __pyx_v_eps; - double __pyx_v_lr; - double __pyx_v_ld_reg; - double __pyx_v_ld_bpr; - double __pyx_v_lambda_d; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a; - __Pyx_Buffer __pyx_pybuffer_del_a; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a_reg; - __Pyx_Buffer __pyx_pybuffer_del_a_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1; - __Pyx_Buffer __pyx_pybuffer_del_g1; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1_reg; - __Pyx_Buffer __pyx_pybuffer_del_g1_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2; - __Pyx_Buffer __pyx_pybuffer_del_g2; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2_reg; - __Pyx_Buffer __pyx_pybuffer_del_g2_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3; - __Pyx_Buffer __pyx_pybuffer_del_g3; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3_reg; - __Pyx_Buffer __pyx_pybuffer_del_g3_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i; - __Pyx_Buffer __pyx_pybuffer_del_i; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i_reg; - __Pyx_Buffer __pyx_pybuffer_del_i_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o; - __Pyx_Buffer __pyx_pybuffer_del_o; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o_reg; - __Pyx_Buffer __pyx_pybuffer_del_o_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u; - __Pyx_Buffer __pyx_pybuffer_del_u; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u_reg; - __Pyx_Buffer __pyx_pybuffer_del_u_reg; - PyObject *__pyx_r = NULL; +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":967 + * int _import_umath() except -1 + * + * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) + */ + +static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - long __pyx_t_3; - int __pyx_t_4; - double __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - int __pyx_t_8; - Py_ssize_t __pyx_t_9; - long __pyx_t_10; - short __pyx_t_11; - long __pyx_t_12; - long __pyx_t_13; - short __pyx_t_14; - long __pyx_t_15; - long __pyx_t_16; - short __pyx_t_17; - Py_ssize_t __pyx_t_18; - Py_ssize_t __pyx_t_19; - Py_ssize_t __pyx_t_20; - Py_ssize_t __pyx_t_21; - Py_ssize_t __pyx_t_22; - Py_ssize_t __pyx_t_23; - Py_ssize_t __pyx_t_24; - Py_ssize_t __pyx_t_25; - int __pyx_t_26; - long __pyx_t_27; - PyObject *__pyx_t_28 = NULL; - PyObject *__pyx_t_29 = NULL; + int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_fuse_1_0_fit_mter", 0); - __pyx_pybuffer_del_g1.pybuffer.buf = NULL; - __pyx_pybuffer_del_g1.refcount = 0; - __pyx_pybuffernd_del_g1.data = NULL; - __pyx_pybuffernd_del_g1.rcbuffer = &__pyx_pybuffer_del_g1; - __pyx_pybuffer_del_g2.pybuffer.buf = NULL; - __pyx_pybuffer_del_g2.refcount = 0; - __pyx_pybuffernd_del_g2.data = NULL; - __pyx_pybuffernd_del_g2.rcbuffer = &__pyx_pybuffer_del_g2; - __pyx_pybuffer_del_g3.pybuffer.buf = NULL; - __pyx_pybuffer_del_g3.refcount = 0; - __pyx_pybuffernd_del_g3.data = NULL; - __pyx_pybuffernd_del_g3.rcbuffer = &__pyx_pybuffer_del_g3; - __pyx_pybuffer_del_u.pybuffer.buf = NULL; - __pyx_pybuffer_del_u.refcount = 0; - __pyx_pybuffernd_del_u.data = NULL; - __pyx_pybuffernd_del_u.rcbuffer = &__pyx_pybuffer_del_u; - __pyx_pybuffer_del_i.pybuffer.buf = NULL; - __pyx_pybuffer_del_i.refcount = 0; - __pyx_pybuffernd_del_i.data = NULL; - __pyx_pybuffernd_del_i.rcbuffer = &__pyx_pybuffer_del_i; - __pyx_pybuffer_del_a.pybuffer.buf = NULL; - __pyx_pybuffer_del_a.refcount = 0; - __pyx_pybuffernd_del_a.data = NULL; - __pyx_pybuffernd_del_a.rcbuffer = &__pyx_pybuffer_del_a; - __pyx_pybuffer_del_o.pybuffer.buf = NULL; - __pyx_pybuffer_del_o.refcount = 0; - __pyx_pybuffernd_del_o.data = NULL; - __pyx_pybuffernd_del_o.rcbuffer = &__pyx_pybuffer_del_o; - __pyx_pybuffer_del_g1_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g1_reg.refcount = 0; - __pyx_pybuffernd_del_g1_reg.data = NULL; - __pyx_pybuffernd_del_g1_reg.rcbuffer = &__pyx_pybuffer_del_g1_reg; - __pyx_pybuffer_del_g2_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g2_reg.refcount = 0; - __pyx_pybuffernd_del_g2_reg.data = NULL; - __pyx_pybuffernd_del_g2_reg.rcbuffer = &__pyx_pybuffer_del_g2_reg; - __pyx_pybuffer_del_g3_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g3_reg.refcount = 0; - __pyx_pybuffernd_del_g3_reg.data = NULL; - __pyx_pybuffernd_del_g3_reg.rcbuffer = &__pyx_pybuffer_del_g3_reg; - __pyx_pybuffer_del_u_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_u_reg.refcount = 0; - __pyx_pybuffernd_del_u_reg.data = NULL; - __pyx_pybuffernd_del_u_reg.rcbuffer = &__pyx_pybuffer_del_u_reg; - __pyx_pybuffer_del_i_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_i_reg.refcount = 0; - __pyx_pybuffernd_del_i_reg.data = NULL; - __pyx_pybuffernd_del_i_reg.rcbuffer = &__pyx_pybuffer_del_i_reg; - __pyx_pybuffer_del_a_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_a_reg.refcount = 0; - __pyx_pybuffernd_del_a_reg.data = NULL; - __pyx_pybuffernd_del_a_reg.rcbuffer = &__pyx_pybuffer_del_a_reg; - __pyx_pybuffer_del_o_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_o_reg.refcount = 0; - __pyx_pybuffernd_del_o_reg.data = NULL; - __pyx_pybuffernd_del_o_reg.rcbuffer = &__pyx_pybuffer_del_o_reg; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g1.diminfo[0].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1.diminfo[0].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1.diminfo[1].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1.diminfo[1].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1.diminfo[2].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1.diminfo[2].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g2.diminfo[0].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2.diminfo[0].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2.diminfo[1].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2.diminfo[1].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2.diminfo[2].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2.diminfo[2].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g3.diminfo[0].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3.diminfo[0].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3.diminfo[1].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3.diminfo[1].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3.diminfo[2].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3.diminfo[2].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_u.diminfo[0].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u.diminfo[0].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u.diminfo[1].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u.diminfo[1].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_i.diminfo[0].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i.diminfo[0].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i.diminfo[1].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i.diminfo[1].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_a.diminfo[0].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a.diminfo[0].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a.diminfo[1].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a.diminfo[1].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_o.diminfo[0].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o.diminfo[0].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o.diminfo[1].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o.diminfo[1].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g1_reg.diminfo[0].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1_reg.diminfo[0].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1_reg.diminfo[1].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1_reg.diminfo[1].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1_reg.diminfo[2].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1_reg.diminfo[2].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g2_reg.diminfo[0].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2_reg.diminfo[0].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2_reg.diminfo[1].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2_reg.diminfo[1].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2_reg.diminfo[2].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2_reg.diminfo[2].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g3_reg.diminfo[0].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3_reg.diminfo[0].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3_reg.diminfo[1].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3_reg.diminfo[1].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3_reg.diminfo[2].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3_reg.diminfo[2].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_u_reg.diminfo[0].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u_reg.diminfo[0].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u_reg.diminfo[1].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u_reg.diminfo[1].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_i_reg.diminfo[0].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i_reg.diminfo[0].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i_reg.diminfo[1].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i_reg.diminfo[1].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_a_reg.diminfo[0].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a_reg.diminfo[0].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a_reg.diminfo[1].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a_reg.diminfo[1].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_o_reg.diminfo[0].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o_reg.diminfo[0].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o_reg.diminfo[1].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o_reg.diminfo[1].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[1]; + __Pyx_RefNannySetupContext("set_array_base", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":531 - * """ - * cdef: - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 # <<<<<<<<<<<<<< - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":968 + * + * cdef inline void set_array_base(ndarray arr, object base): + * Py_INCREF(base) # important to do this before stealing the reference below! # <<<<<<<<<<<<<< + * PyArray_SetBaseObject(arr, base) + * */ - __pyx_v_correct = 0; - __pyx_v_skipped = 0; - __pyx_v_aspect_correct = 0; + Py_INCREF(__pyx_v_base); - /* "cornac/models/comparer/recom_comparer_sub.pyx":532 - * cdef: - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 - * long n_users = self.train_set.num_users # <<<<<<<<<<<<<< - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":969 + * cdef inline void set_array_base(ndarray arr, object base): + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) # <<<<<<<<<<<<<< + * + * cdef inline object get_array_base(ndarray arr): */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_n_users = __pyx_t_3; + __pyx_t_1 = PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 969, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":533 - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items # <<<<<<<<<<<<<< - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":967 + * int _import_umath() except -1 + * + * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_items = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":534 - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_aspects = __pyx_t_3; + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("numpy.set_array_base", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; + __Pyx_RefNannyFinishContext(); +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":535 - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions # <<<<<<<<<<<<<< - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":971 + * PyArray_SetBaseObject(arr, base) + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * base = PyArray_BASE(arr) + * if base is NULL: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_opinions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_opinions = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":536 - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors # <<<<<<<<<<<<<< - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_user_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 536, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 536, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_user_factors = __pyx_t_3; +static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { + PyObject *__pyx_v_base; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("get_array_base", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":537 - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors # <<<<<<<<<<<<<< - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":972 + * + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) # <<<<<<<<<<<<<< + * if base is NULL: + * return None */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_item_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 537, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_item_factors = __pyx_t_3; + __pyx_v_base = PyArray_BASE(__pyx_v_arr); - /* "cornac/models/comparer/recom_comparer_sub.pyx":538 - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors # <<<<<<<<<<<<<< - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":973 + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) + * if base is NULL: # <<<<<<<<<<<<<< + * return None + * return base */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_aspect_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 538, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_aspect_factors = __pyx_t_3; + __pyx_t_1 = (__pyx_v_base == NULL); + if (__pyx_t_1) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":539 - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors # <<<<<<<<<<<<<< - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":974 + * base = PyArray_BASE(arr) + * if base is NULL: + * return None # <<<<<<<<<<<<<< + * return base + * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_opinion_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 539, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_opinion_factors = __pyx_t_3; + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":540 - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples # <<<<<<<<<<<<<< - * int num_bpr_samples = self.n_bpr_samples - * int num_pair_samples = self.n_pair_samples + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":973 + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) + * if base is NULL: # <<<<<<<<<<<<<< + * return None + * return base */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_element_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 540, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_samples = __pyx_t_4; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":541 - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples # <<<<<<<<<<<<<< - * int num_pair_samples = self.n_pair_samples + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":975 + * if base is NULL: + * return None + * return base # <<<<<<<<<<<<<< * + * # Versions of the import_* functions which are more suitable for */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 541, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_bpr_samples = __pyx_t_4; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_base)); + __pyx_r = ((PyObject *)__pyx_v_base); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":542 - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples - * int num_pair_samples = self.n_pair_samples # <<<<<<<<<<<<<< + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":971 + * PyArray_SetBaseObject(arr, base) * - * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * base = PyArray_BASE(arr) + * if base is NULL: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_pair_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 542, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_pair_samples = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":546 - * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id - * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji - * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr # <<<<<<<<<<<<<< - * floating eps = 1e-9 - * - */ - __pyx_v_loss = 0.; - __pyx_v_bpr_loss = 0.; - __pyx_v_aspect_bpr_loss = 0.; + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":547 - * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji - * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr - * floating eps = 1e-9 # <<<<<<<<<<<<<< - * - * floating lr = self.lr +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":979 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * __pyx_import_array() */ - __pyx_v_eps = 1e-9; - /* "cornac/models/comparer/recom_comparer_sub.pyx":549 - * floating eps = 1e-9 - * - * floating lr = self.lr # <<<<<<<<<<<<<< - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr +static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("import_array", 0); + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":980 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 549, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 549, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lr = __pyx_t_5; + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { - /* "cornac/models/comparer/recom_comparer_sub.pyx":550 - * - * floating lr = self.lr - * floating ld_reg = self.lambda_reg # <<<<<<<<<<<<<< - * floating ld_bpr = self.lambda_bpr - * floating lambda_d = self.lambda_d + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":981 + * cdef inline int import_array() except -1: + * try: + * __pyx_import_array() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy.core.multiarray failed to import") */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_reg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 550, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 550, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_ld_reg = __pyx_t_5; + __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 981, __pyx_L3_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":551 - * floating lr = self.lr - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr # <<<<<<<<<<<<<< - * floating lambda_d = self.lambda_d - * + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":980 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_bpr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 551, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_ld_bpr = __pyx_t_5; + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":552 - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr - * floating lambda_d = self.lambda_d # <<<<<<<<<<<<<< + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":982 + * try: + * __pyx_import_array() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy.core.multiarray failed to import") * - * del_g1.fill(0) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 552, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_d = __pyx_t_5; + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(2, 982, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); - /* "cornac/models/comparer/recom_comparer_sub.pyx":554 - * floating lambda_d = self.lambda_d + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":983 + * __pyx_import_array() + * except Exception: + * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< * - * del_g1.fill(0) # <<<<<<<<<<<<<< - * del_g2.fill(0) - * del_g3.fill(0) + * cdef inline int import_umath() except -1: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 983, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(2, 983, __pyx_L5_except_error) } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L5_except_error; - /* "cornac/models/comparer/recom_comparer_sub.pyx":555 - * - * del_g1.fill(0) - * del_g2.fill(0) # <<<<<<<<<<<<<< - * del_g3.fill(0) - * del_u.fill(0) + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":980 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 555, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":556 - * del_g1.fill(0) - * del_g2.fill(0) - * del_g3.fill(0) # <<<<<<<<<<<<<< - * del_u.fill(0) - * del_i.fill(0) + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":979 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * __pyx_import_array() */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":557 - * del_g2.fill(0) - * del_g3.fill(0) - * del_u.fill(0) # <<<<<<<<<<<<<< - * del_i.fill(0) - * del_a.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 557, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":558 - * del_g3.fill(0) - * del_u.fill(0) - * del_i.fill(0) # <<<<<<<<<<<<<< - * del_a.fill(0) - * del_o.fill(0) +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":985 + * raise ImportError("numpy.core.multiarray failed to import") + * + * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 558, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 558, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":559 - * del_u.fill(0) - * del_i.fill(0) - * del_a.fill(0) # <<<<<<<<<<<<<< - * del_o.fill(0) - * del_g1_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 559, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 559, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; +static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("import_umath", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":560 - * del_i.fill(0) - * del_a.fill(0) - * del_o.fill(0) # <<<<<<<<<<<<<< - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":986 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { - /* "cornac/models/comparer/recom_comparer_sub.pyx":561 - * del_a.fill(0) - * del_o.fill(0) - * del_g1_reg.fill(0) # <<<<<<<<<<<<<< - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":987 + * cdef inline int import_umath() except -1: + * try: + * _import_umath() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy.core.umath failed to import") */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 987, __pyx_L3_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":562 - * del_o.fill(0) - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) # <<<<<<<<<<<<<< - * del_g3_reg.fill(0) - * del_u_reg.fill(0) + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":986 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 562, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":563 - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) # <<<<<<<<<<<<<< - * del_u_reg.fill(0) - * del_i_reg.fill(0) + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":988 + * try: + * _import_umath() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy.core.umath failed to import") + * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 563, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 563, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(2, 988, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); - /* "cornac/models/comparer/recom_comparer_sub.pyx":564 - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) - * del_u_reg.fill(0) # <<<<<<<<<<<<<< - * del_i_reg.fill(0) - * del_a_reg.fill(0) + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":989 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_ufunc() except -1: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 564, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 989, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(2, 989, __pyx_L5_except_error) } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L5_except_error; - /* "cornac/models/comparer/recom_comparer_sub.pyx":565 - * del_g3_reg.fill(0) - * del_u_reg.fill(0) - * del_i_reg.fill(0) # <<<<<<<<<<<<<< - * del_a_reg.fill(0) - * del_o_reg.fill(0) + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":986 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 565, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":566 - * del_u_reg.fill(0) - * del_i_reg.fill(0) - * del_a_reg.fill(0) # <<<<<<<<<<<<<< - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":985 + * raise ImportError("numpy.core.multiarray failed to import") + * + * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 566, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":567 - * del_i_reg.fill(0) - * del_a_reg.fill(0) - * del_o_reg.fill(0) # <<<<<<<<<<<<<< - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":991 + * raise ImportError("numpy.core.umath failed to import") + * + * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 567, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":568 - * del_a_reg.fill(0) - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): +static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("import_ufunc", 0); + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":992 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: */ { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); - #endif - /*try:*/ { - { - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) - #endif - #ifdef _OPENMP - #pragma omp parallel private(__pyx_v_thread_id) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_bpr_loss) reduction(+:__pyx_v_correct) reduction(+:__pyx_v_skipped) reduction(+:__pyx_v_aspect_bpr_loss) reduction(+:__pyx_v_aspect_correct) private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_3, __pyx_t_4, __pyx_t_7, __pyx_t_8, __pyx_t_9) num_threads(__pyx_v_n_threads) - #endif /* _OPENMP */ - { - /* Initialize private variables to invalid values */ - __pyx_v_thread_id = ((short)0xbad0bad0); + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { - /* "cornac/models/comparer/recom_comparer_sub.pyx":569 - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() # <<<<<<<<<<<<<< - * for _ in prange(num_samples, schedule='guided'): - * # get user item aspect element + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":993 + * cdef inline int import_ufunc() except -1: + * try: + * _import_umath() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy.core.umath failed to import") */ - __pyx_v_thread_id = recom_bpr::get_thread_num(); + __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 993, __pyx_L3_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":570 - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): # <<<<<<<<<<<<<< - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":992 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: */ - __pyx_t_4 = __pyx_v_num_samples; - if ((1 == 0)) abort(); - { - __pyx_t_8 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_8 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_del_sqerror) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_o_idx) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_score) lastprivate(__pyx_v_u_idx) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){ - { - __pyx_v__ = (short)(0 + 1 * __pyx_t_7); - /* Initialize private variables to invalid values */ - __pyx_v_a_idx = ((short)0xbad0bad0); - __pyx_v_del_sqerror = ((double)__PYX_NAN()); - __pyx_v_i = ((short)0xbad0bad0); - __pyx_v_i_idx = ((short)0xbad0bad0); - __pyx_v_idx = ((short)0xbad0bad0); - __pyx_v_j = ((short)0xbad0bad0); - __pyx_v_k = ((short)0xbad0bad0); - __pyx_v_o_idx = ((short)0xbad0bad0); - __pyx_v_pred = ((double)__PYX_NAN()); - __pyx_v_score = ((double)__PYX_NAN()); - __pyx_v_u_idx = ((short)0xbad0bad0); + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; - /* "cornac/models/comparer/recom_comparer_sub.pyx":572 - * for _ in prange(num_samples, schedule='guided'): - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":994 + * try: + * _import_umath() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy.core.umath failed to import") + * */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uia->__pyx_vtab)->generate(__pyx_v_rng_pos_uia, __pyx_v_thread_id); + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(2, 994, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); - /* "cornac/models/comparer/recom_comparer_sub.pyx":573 - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) - * u_idx = X_uids[idx] # <<<<<<<<<<<<<< - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":995 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * + * */ - __pyx_t_9 = __pyx_v_idx; - __pyx_v_u_idx = (*((short *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_9 * __pyx_v_X_uids.strides[0]) ))); + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 995, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(2, 995, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; - /* "cornac/models/comparer/recom_comparer_sub.pyx":574 - * idx = rng_pos_uia.generate(thread_id) - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] # <<<<<<<<<<<<<< - * a_idx = X_aids[idx] - * score = X[idx] + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":992 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: */ - __pyx_t_9 = __pyx_v_idx; - __pyx_v_i_idx = (*((short *) ( /* dim=0 */ (__pyx_v_X_iids.data + __pyx_t_9 * __pyx_v_X_iids.strides[0]) ))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":575 - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] # <<<<<<<<<<<<<< - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) - */ - __pyx_t_9 = __pyx_v_idx; - __pyx_v_a_idx = (*((short *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_9 * __pyx_v_X_aids.strides[0]) ))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":576 - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] - * score = X[idx] # <<<<<<<<<<<<<< - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) - * loss += (pred - score) * (pred - score) - */ - __pyx_t_9 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_9 * __pyx_v_X.strides[0]) ))); + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":577 - * a_idx = X_aids[idx] - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":991 + * raise ImportError("numpy.core.umath failed to import") * + * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() */ - __pyx_v_pred = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); - /* "cornac/models/comparer/recom_comparer_sub.pyx":578 - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< - * - * del_sqerror = 2 * (pred - score) - */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":580 - * loss += (pred - score) * (pred - score) +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":998 * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< - * for i in range(n_user_factors): - * for j in range(n_item_factors): - */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":581 * - * del_sqerror = 2 * (pred - score) - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - */ - __pyx_t_3 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":582 - * del_sqerror = 2 * (pred - score) - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":583 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":584 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.timedelta64)` */ - __pyx_t_9 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_i_idx; - __pyx_t_20 = __pyx_v_j; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_k; - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_20 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":585 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] - */ - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_i_idx; - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))); +static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_obj) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_timedelta64_object", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":586 - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1010 + * bool + * """ + * return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type) # <<<<<<<<<<<<<< * - */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_k; - __pyx_t_23 = __pyx_v_i_idx; - __pyx_t_24 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_25 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_20 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":587 - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] # <<<<<<<<<<<<<< * - * # get user aspect opinion element */ - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_j; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))); - } - } - } + __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyTimedeltaArrType_Type)); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":590 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":998 * - * # get user aspect opinion element - * idx = rng_pos_uao.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] - */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uao->__pyx_vtab)->generate(__pyx_v_rng_pos_uao, __pyx_v_thread_id); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":591 - * # get user aspect opinion element - * idx = rng_pos_uao.generate(thread_id) - * u_idx = YU_uids[idx] # <<<<<<<<<<<<<< - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] + * + * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.timedelta64)` */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_u_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YU_uids.data + __pyx_t_25 * __pyx_v_YU_uids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":592 - * idx = rng_pos_uao.generate(thread_id) - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] # <<<<<<<<<<<<<< - * o_idx = YU_oids[idx] - * score = YU[idx] - */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_a_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YU_aids.data + __pyx_t_25 * __pyx_v_YU_aids.strides[0]) ))); + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":593 - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] # <<<<<<<<<<<<<< - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1013 + * + * + * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.datetime64)` */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_o_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YU_oids.data + __pyx_t_25 * __pyx_v_YU_oids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":594 - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] - * score = YU[idx] # <<<<<<<<<<<<<< - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) - */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_YU.data + __pyx_t_25 * __pyx_v_YU.strides[0]) ))); +static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_obj) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_datetime64_object", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":595 - * o_idx = YU_oids[idx] - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1025 + * bool + * """ + * return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type) # <<<<<<<<<<<<<< + * * */ - __pyx_v_pred = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G2, __pyx_v_n_user_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_U, __pyx_v_A, __pyx_v_O, __pyx_v_u_idx, __pyx_v_a_idx, __pyx_v_o_idx); + __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyDatetimeArrType_Type)); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":596 - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1013 * - * del_sqerror = 2 * (pred - score) + * + * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.datetime64)` */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":598 - * loss += (pred - score) * (pred - score) + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1028 * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< * - * for i in range(n_user_factors): + * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy datetime64 object */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":600 - * del_sqerror = 2 * (pred - score) +static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject *__pyx_v_obj) { + npy_datetime __pyx_r; + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1035 + * also needed. That can be found using `get_datetime64_unit`. + * """ + * return (obj).obval # <<<<<<<<<<<<<< + * * - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): */ - __pyx_t_3 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __pyx_r = ((PyDatetimeScalarObject *)__pyx_v_obj)->obval; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":601 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1028 * - * for i in range(n_user_factors): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * + * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy datetime64 object */ - __pyx_t_12 = __pyx_v_n_aspect_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; - /* "cornac/models/comparer/recom_comparer_sub.pyx":602 - * for i in range(n_user_factors): - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - */ - __pyx_t_15 = __pyx_v_n_opinion_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":603 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1038 + * + * + * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy timedelta64 object */ - __pyx_t_25 = __pyx_v_u_idx; - __pyx_t_9 = __pyx_v_i; - __pyx_t_18 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_j; - __pyx_t_20 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":604 - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] - */ - __pyx_t_21 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_18 = __pyx_v_a_idx; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_o_idx; - __pyx_t_24 = __pyx_v_k; - __pyx_t_23 = __pyx_v_u_idx; - __pyx_t_22 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_9 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_25 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )))); +static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject *__pyx_v_obj) { + npy_timedelta __pyx_r; - /* "cornac/models/comparer/recom_comparer_sub.pyx":605 - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1042 + * returns the int64 value underlying scalar numpy timedelta64 object + * """ + * return (obj).obval # <<<<<<<<<<<<<< * - */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_18 = __pyx_v_u_idx; - __pyx_t_19 = __pyx_v_i; - __pyx_t_20 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - __pyx_t_22 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_24 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":606 - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< * - * # get item aspect opinion element */ - __pyx_t_21 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_18 = __pyx_v_u_idx; - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_a_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_o_idx; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_24 * __pyx_v_A.strides[1]) )))); - } - } - } + __pyx_r = ((PyTimedeltaScalarObject *)__pyx_v_obj)->obval; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":609 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1038 * - * # get item aspect opinion element - * idx = rng_pos_iao.generate(thread_id) # <<<<<<<<<<<<<< - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] + * + * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy timedelta64 object */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_iao->__pyx_vtab)->generate(__pyx_v_rng_pos_iao, __pyx_v_thread_id); - /* "cornac/models/comparer/recom_comparer_sub.pyx":610 - * # get item aspect opinion element - * idx = rng_pos_iao.generate(thread_id) - * i_idx = YI_iids[idx] # <<<<<<<<<<<<<< - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] - */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_i_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YI_iids.data + __pyx_t_24 * __pyx_v_YI_iids.strides[0]) ))); + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":611 - * idx = rng_pos_iao.generate(thread_id) - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] # <<<<<<<<<<<<<< - * o_idx = YI_oids[idx] - * score = YI[idx] +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1045 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_a_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YI_aids.data + __pyx_t_24 * __pyx_v_YI_aids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":612 - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] # <<<<<<<<<<<<<< - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) - */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_o_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YI_oids.data + __pyx_t_24 * __pyx_v_YI_oids.strides[0]) ))); +static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObject *__pyx_v_obj) { + NPY_DATETIMEUNIT __pyx_r; - /* "cornac/models/comparer/recom_comparer_sub.pyx":613 - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] - * score = YI[idx] # <<<<<<<<<<<<<< - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1049 + * returns the unit part of the dtype for a numpy datetime64 object. + * """ + * return (obj).obmeta.base # <<<<<<<<<<<<<< */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_YI.data + __pyx_t_24 * __pyx_v_YI.strides[0]) ))); + __pyx_r = ((NPY_DATETIMEUNIT)((PyDatetimeScalarObject *)__pyx_v_obj)->obmeta.base); + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":614 - * o_idx = YI_oids[idx] - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1045 * - */ - __pyx_v_pred = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G3, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_i_idx, __pyx_v_a_idx, __pyx_v_o_idx); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":615 - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< * - * del_sqerror = 2 * (pred - score) + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":617 - * loss += (pred - score) * (pred - score) - * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): - */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":618 - * - * del_sqerror = 2 * (pred - score) - * for i in range(n_item_factors): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): +/* "cornac/models/comparer/recom_comparer_sub.pyx":137 + * ACM International Conference on Web Search and Data Mining (WSDM). 2021. + * """ + * def __init__( # <<<<<<<<<<<<<< + * self, + * name="ComparERSub", */ - __pyx_t_3 = __pyx_v_n_item_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; - /* "cornac/models/comparer/recom_comparer_sub.pyx":619 - * del_sqerror = 2 * (pred - score) - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - */ - __pyx_t_12 = __pyx_v_n_aspect_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; +/* Python wrapper */ +static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_1__init__(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_1__init__ = {"__init__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_1__init__(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_name = 0; + PyObject *__pyx_v_rating_scale = 0; + PyObject *__pyx_v_n_user_factors = 0; + PyObject *__pyx_v_n_item_factors = 0; + PyObject *__pyx_v_n_aspect_factors = 0; + PyObject *__pyx_v_n_opinion_factors = 0; + PyObject *__pyx_v_n_pair_samples = 0; + PyObject *__pyx_v_n_bpr_samples = 0; + PyObject *__pyx_v_n_element_samples = 0; + PyObject *__pyx_v_n_top_aspects = 0; + PyObject *__pyx_v_alpha = 0; + PyObject *__pyx_v_min_user_freq = 0; + PyObject *__pyx_v_min_pair_freq = 0; + PyObject *__pyx_v_min_common_freq = 0; + PyObject *__pyx_v_use_item_aspect_popularity = 0; + PyObject *__pyx_v_enum_window = 0; + PyObject *__pyx_v_lambda_reg = 0; + PyObject *__pyx_v_lambda_bpr = 0; + PyObject *__pyx_v_lambda_d = 0; + PyObject *__pyx_v_max_iter = 0; + PyObject *__pyx_v_lr = 0; + PyObject *__pyx_v_n_threads = 0; + PyObject *__pyx_v_trainable = 0; + PyObject *__pyx_v_verbose = 0; + PyObject *__pyx_v_init_params = 0; + PyObject *__pyx_v_seed = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_name,&__pyx_n_s_rating_scale,&__pyx_n_s_n_user_factors,&__pyx_n_s_n_item_factors,&__pyx_n_s_n_aspect_factors,&__pyx_n_s_n_opinion_factors,&__pyx_n_s_n_pair_samples,&__pyx_n_s_n_bpr_samples,&__pyx_n_s_n_element_samples,&__pyx_n_s_n_top_aspects,&__pyx_n_s_alpha,&__pyx_n_s_min_user_freq,&__pyx_n_s_min_pair_freq,&__pyx_n_s_min_common_freq,&__pyx_n_s_use_item_aspect_popularity,&__pyx_n_s_enum_window,&__pyx_n_s_lambda_reg,&__pyx_n_s_lambda_bpr,&__pyx_n_s_lambda_d,&__pyx_n_s_max_iter,&__pyx_n_s_lr,&__pyx_n_s_n_threads,&__pyx_n_s_trainable,&__pyx_n_s_verbose,&__pyx_n_s_init_params,&__pyx_n_s_seed,0}; + PyObject* values[27] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + values[1] = ((PyObject *)((PyObject*)__pyx_n_u_ComparERSub)); + values[2] = ((PyObject *)((PyObject*)__pyx_float_5_0)); + values[3] = ((PyObject *)((PyObject *)__pyx_int_8)); + values[4] = ((PyObject *)((PyObject *)__pyx_int_8)); + values[5] = ((PyObject *)((PyObject *)__pyx_int_8)); + values[6] = ((PyObject *)((PyObject *)__pyx_int_8)); + values[7] = ((PyObject *)((PyObject *)__pyx_int_1000)); + values[8] = ((PyObject *)((PyObject *)__pyx_int_1000)); + values[9] = ((PyObject *)((PyObject *)__pyx_int_50)); + values[10] = ((PyObject *)((PyObject *)__pyx_int_100)); + values[11] = ((PyObject *)((PyObject*)__pyx_float_0_5)); + values[12] = ((PyObject *)((PyObject *)__pyx_int_2)); + values[13] = ((PyObject *)((PyObject *)__pyx_int_1)); + values[14] = ((PyObject *)((PyObject *)__pyx_int_1)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":620 - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":153 + * min_pair_freq=1, + * min_common_freq=1, + * use_item_aspect_popularity=True, # <<<<<<<<<<<<<< + * enum_window=None, + * lambda_reg=0.1, */ - __pyx_t_15 = __pyx_v_n_opinion_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + values[15] = ((PyObject *)((PyObject *)Py_True)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":621 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":154 + * min_common_freq=1, + * use_item_aspect_popularity=True, + * enum_window=None, # <<<<<<<<<<<<<< + * lambda_reg=0.1, + * lambda_bpr=10, */ - __pyx_t_24 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_o_idx; - __pyx_t_20 = __pyx_v_k; - __pyx_t_21 = __pyx_v_i; - __pyx_t_22 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_24 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); + values[16] = ((PyObject *)((PyObject *)Py_None)); + values[17] = ((PyObject *)((PyObject*)__pyx_float_0_1)); + values[18] = ((PyObject *)((PyObject *)__pyx_int_10)); + values[19] = ((PyObject *)((PyObject*)__pyx_float_0_01)); + values[20] = ((PyObject *)((PyObject *)__pyx_int_200000)); + values[21] = ((PyObject *)((PyObject*)__pyx_float_0_5)); + values[22] = ((PyObject *)((PyObject *)__pyx_int_0)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":622 - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":161 + * lr=0.5, + * n_threads=0, + * trainable=True, # <<<<<<<<<<<<<< + * verbose=False, + * init_params=None, */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_25 = __pyx_v_j; - __pyx_t_24 = __pyx_v_o_idx; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i_idx; - __pyx_t_21 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_23 * __pyx_v_O.strides[1]) )))); + values[23] = ((PyObject *)((PyObject *)Py_True)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":623 - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":162 + * n_threads=0, + * trainable=True, + * verbose=False, # <<<<<<<<<<<<<< + * init_params=None, + * seed=None, */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_o_idx; - __pyx_t_20 = __pyx_v_k; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_23 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); + values[24] = ((PyObject *)((PyObject *)Py_False)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":624 - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< - * - * for _ in prange(num_bpr_samples, schedule='guided'): + /* "cornac/models/comparer/recom_comparer_sub.pyx":163 + * trainable=True, + * verbose=False, + * init_params=None, # <<<<<<<<<<<<<< + * seed=None, + * ): */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_j; - __pyx_t_22 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); - } - } - } - } - } - } - } + values[25] = ((PyObject *)((PyObject *)Py_None)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":626 - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] - * - * for _ in prange(num_bpr_samples, schedule='guided'): # <<<<<<<<<<<<<< - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":164 + * verbose=False, + * init_params=None, + * seed=None, # <<<<<<<<<<<<<< + * ): + * super().__init__(name=name, rating_scale = rating_scale, n_user_factors = n_user_factors, n_item_factors = n_item_factors, n_aspect_factors = n_aspect_factors, n_opinion_factors = n_opinion_factors, n_bpr_samples = n_bpr_samples, n_element_samples = n_element_samples, lambda_reg = lambda_reg, lambda_bpr = lambda_bpr, max_iter = max_iter, lr = lr, n_threads=n_threads, seed = seed, trainable=trainable, init_params=init_params, verbose=verbose) */ - __pyx_t_8 = __pyx_v_num_bpr_samples; - if ((1 == 0)) abort(); - { - __pyx_t_4 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_4 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_del_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_i_ij) lastprivate(__pyx_v_i_score) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_j_score) lastprivate(__pyx_v_jdx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_s) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_4; __pyx_t_7++){ - { - __pyx_v__ = (short)(0 + 1 * __pyx_t_7); - /* Initialize private variables to invalid values */ - __pyx_v_del_bpr = ((double)__PYX_NAN()); - __pyx_v_i = ((short)0xbad0bad0); - __pyx_v_i_idx = ((short)0xbad0bad0); - __pyx_v_i_ij = ((double)__PYX_NAN()); - __pyx_v_i_score = ((double)__PYX_NAN()); - __pyx_v_idx = ((short)0xbad0bad0); - __pyx_v_j = ((short)0xbad0bad0); - __pyx_v_j_idx = ((short)0xbad0bad0); - __pyx_v_j_score = ((double)__PYX_NAN()); - __pyx_v_jdx = ((short)0xbad0bad0); - __pyx_v_k = ((short)0xbad0bad0); - __pyx_v_pred = ((double)__PYX_NAN()); - __pyx_v_s = ((long)0xbad0bad0); - __pyx_v_u_idx = ((short)0xbad0bad0); - __pyx_v_z = ((double)__PYX_NAN()); + values[26] = ((PyObject *)((PyObject *)Py_None)); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 27: values[26] = __Pyx_Arg_FASTCALL(__pyx_args, 26); + CYTHON_FALLTHROUGH; + case 26: values[25] = __Pyx_Arg_FASTCALL(__pyx_args, 25); + CYTHON_FALLTHROUGH; + case 25: values[24] = __Pyx_Arg_FASTCALL(__pyx_args, 24); + CYTHON_FALLTHROUGH; + case 24: values[23] = __Pyx_Arg_FASTCALL(__pyx_args, 23); + CYTHON_FALLTHROUGH; + case 23: values[22] = __Pyx_Arg_FASTCALL(__pyx_args, 22); + CYTHON_FALLTHROUGH; + case 22: values[21] = __Pyx_Arg_FASTCALL(__pyx_args, 21); + CYTHON_FALLTHROUGH; + case 21: values[20] = __Pyx_Arg_FASTCALL(__pyx_args, 20); + CYTHON_FALLTHROUGH; + case 20: values[19] = __Pyx_Arg_FASTCALL(__pyx_args, 19); + CYTHON_FALLTHROUGH; + case 19: values[18] = __Pyx_Arg_FASTCALL(__pyx_args, 18); + CYTHON_FALLTHROUGH; + case 18: values[17] = __Pyx_Arg_FASTCALL(__pyx_args, 17); + CYTHON_FALLTHROUGH; + case 17: values[16] = __Pyx_Arg_FASTCALL(__pyx_args, 16); + CYTHON_FALLTHROUGH; + case 16: values[15] = __Pyx_Arg_FASTCALL(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = __Pyx_Arg_FASTCALL(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = __Pyx_Arg_FASTCALL(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = __Pyx_Arg_FASTCALL(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = __Pyx_Arg_FASTCALL(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = __Pyx_Arg_FASTCALL(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_name); + if (value) { values[1] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rating_scale); + if (value) { values[2] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_user_factors); + if (value) { values[3] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_item_factors); + if (value) { values[4] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_aspect_factors); + if (value) { values[5] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_opinion_factors); + if (value) { values[6] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_pair_samples); + if (value) { values[7] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_bpr_samples); + if (value) { values[8] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_element_samples); + if (value) { values[9] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_top_aspects); + if (value) { values[10] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_alpha); + if (value) { values[11] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_min_user_freq); + if (value) { values[12] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_min_pair_freq); + if (value) { values[13] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_min_common_freq); + if (value) { values[14] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 15: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_use_item_aspect_popularity); + if (value) { values[15] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 16: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_enum_window); + if (value) { values[16] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 17: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lambda_reg); + if (value) { values[17] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 18: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lambda_bpr); + if (value) { values[18] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 19: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lambda_d); + if (value) { values[19] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 20: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_iter); + if (value) { values[20] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 21: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lr); + if (value) { values[21] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 22: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_threads); + if (value) { values[22] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 23: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_trainable); + if (value) { values[23] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 24: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_verbose); + if (value) { values[24] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 25: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_init_params); + if (value) { values[25] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 26: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seed); + if (value) { values[26] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 137, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 27: values[26] = __Pyx_Arg_FASTCALL(__pyx_args, 26); + CYTHON_FALLTHROUGH; + case 26: values[25] = __Pyx_Arg_FASTCALL(__pyx_args, 25); + CYTHON_FALLTHROUGH; + case 25: values[24] = __Pyx_Arg_FASTCALL(__pyx_args, 24); + CYTHON_FALLTHROUGH; + case 24: values[23] = __Pyx_Arg_FASTCALL(__pyx_args, 23); + CYTHON_FALLTHROUGH; + case 23: values[22] = __Pyx_Arg_FASTCALL(__pyx_args, 22); + CYTHON_FALLTHROUGH; + case 22: values[21] = __Pyx_Arg_FASTCALL(__pyx_args, 21); + CYTHON_FALLTHROUGH; + case 21: values[20] = __Pyx_Arg_FASTCALL(__pyx_args, 20); + CYTHON_FALLTHROUGH; + case 20: values[19] = __Pyx_Arg_FASTCALL(__pyx_args, 19); + CYTHON_FALLTHROUGH; + case 19: values[18] = __Pyx_Arg_FASTCALL(__pyx_args, 18); + CYTHON_FALLTHROUGH; + case 18: values[17] = __Pyx_Arg_FASTCALL(__pyx_args, 17); + CYTHON_FALLTHROUGH; + case 17: values[16] = __Pyx_Arg_FASTCALL(__pyx_args, 16); + CYTHON_FALLTHROUGH; + case 16: values[15] = __Pyx_Arg_FASTCALL(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = __Pyx_Arg_FASTCALL(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = __Pyx_Arg_FASTCALL(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = __Pyx_Arg_FASTCALL(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = __Pyx_Arg_FASTCALL(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = __Pyx_Arg_FASTCALL(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_self = values[0]; + __pyx_v_name = values[1]; + __pyx_v_rating_scale = values[2]; + __pyx_v_n_user_factors = values[3]; + __pyx_v_n_item_factors = values[4]; + __pyx_v_n_aspect_factors = values[5]; + __pyx_v_n_opinion_factors = values[6]; + __pyx_v_n_pair_samples = values[7]; + __pyx_v_n_bpr_samples = values[8]; + __pyx_v_n_element_samples = values[9]; + __pyx_v_n_top_aspects = values[10]; + __pyx_v_alpha = values[11]; + __pyx_v_min_user_freq = values[12]; + __pyx_v_min_pair_freq = values[13]; + __pyx_v_min_common_freq = values[14]; + __pyx_v_use_item_aspect_popularity = values[15]; + __pyx_v_enum_window = values[16]; + __pyx_v_lambda_reg = values[17]; + __pyx_v_lambda_bpr = values[18]; + __pyx_v_lambda_d = values[19]; + __pyx_v_max_iter = values[20]; + __pyx_v_lr = values[21]; + __pyx_v_n_threads = values[22]; + __pyx_v_trainable = values[23]; + __pyx_v_verbose = values[24]; + __pyx_v_init_params = values[25]; + __pyx_v_seed = values[26]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 27, __pyx_nargs); __PYX_ERR(0, 137, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub___init__(__pyx_self, __pyx_v_self, __pyx_v_name, __pyx_v_rating_scale, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_n_pair_samples, __pyx_v_n_bpr_samples, __pyx_v_n_element_samples, __pyx_v_n_top_aspects, __pyx_v_alpha, __pyx_v_min_user_freq, __pyx_v_min_pair_freq, __pyx_v_min_common_freq, __pyx_v_use_item_aspect_popularity, __pyx_v_enum_window, __pyx_v_lambda_reg, __pyx_v_lambda_bpr, __pyx_v_lambda_d, __pyx_v_max_iter, __pyx_v_lr, __pyx_v_n_threads, __pyx_v_trainable, __pyx_v_verbose, __pyx_v_init_params, __pyx_v_seed); - /* "cornac/models/comparer/recom_comparer_sub.pyx":627 - * - * for _ in prange(num_bpr_samples, schedule='guided'): - * idx = rng_pos.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":137 + * ACM International Conference on Web Search and Data Mining (WSDM). 2021. + * """ + * def __init__( # <<<<<<<<<<<<<< + * self, + * name="ComparERSub", */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos->__pyx_vtab)->generate(__pyx_v_rng_pos, __pyx_v_thread_id); - /* "cornac/models/comparer/recom_comparer_sub.pyx":628 - * for _ in prange(num_bpr_samples, schedule='guided'): - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] # <<<<<<<<<<<<<< - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) - */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_u_idx = (*((short *) ( /* dim=0 */ (__pyx_v_user_ids.data + __pyx_t_23 * __pyx_v_user_ids.strides[0]) ))); + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":629 - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] # <<<<<<<<<<<<<< - * jdx = rng_neg.generate(thread_id) - * j_idx = neg_item_ids[jdx] - */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_i_idx = (*((short *) ( /* dim=0 */ (__pyx_v_item_ids.data + __pyx_t_23 * __pyx_v_item_ids.strides[0]) ))); +static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_rating_scale, PyObject *__pyx_v_n_user_factors, PyObject *__pyx_v_n_item_factors, PyObject *__pyx_v_n_aspect_factors, PyObject *__pyx_v_n_opinion_factors, PyObject *__pyx_v_n_pair_samples, PyObject *__pyx_v_n_bpr_samples, PyObject *__pyx_v_n_element_samples, PyObject *__pyx_v_n_top_aspects, PyObject *__pyx_v_alpha, PyObject *__pyx_v_min_user_freq, PyObject *__pyx_v_min_pair_freq, PyObject *__pyx_v_min_common_freq, PyObject *__pyx_v_use_item_aspect_popularity, PyObject *__pyx_v_enum_window, PyObject *__pyx_v_lambda_reg, PyObject *__pyx_v_lambda_bpr, PyObject *__pyx_v_lambda_d, PyObject *__pyx_v_max_iter, PyObject *__pyx_v_lr, PyObject *__pyx_v_n_threads, PyObject *__pyx_v_trainable, PyObject *__pyx_v_verbose, PyObject *__pyx_v_init_params, PyObject *__pyx_v_seed) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":630 - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) # <<<<<<<<<<<<<< - * j_idx = neg_item_ids[jdx] - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":166 + * seed=None, + * ): + * super().__init__(name=name, rating_scale = rating_scale, n_user_factors = n_user_factors, n_item_factors = n_item_factors, n_aspect_factors = n_aspect_factors, n_opinion_factors = n_opinion_factors, n_bpr_samples = n_bpr_samples, n_element_samples = n_element_samples, lambda_reg = lambda_reg, lambda_bpr = lambda_bpr, max_iter = max_iter, lr = lr, n_threads=n_threads, seed = seed, trainable=trainable, init_params=init_params, verbose=verbose) # <<<<<<<<<<<<<< + * self.lambda_d = lambda_d + * self.n_pair_samples = n_pair_samples */ - __pyx_v_jdx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_neg->__pyx_vtab)->generate(__pyx_v_rng_neg, __pyx_v_thread_id); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":631 - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) - * j_idx = neg_item_ids[jdx] # <<<<<<<<<<<<<< - * - * s = 1 - */ - __pyx_t_23 = __pyx_v_jdx; - __pyx_v_j_idx = (*((short *) ( /* dim=0 */ (__pyx_v_neg_item_ids.data + __pyx_t_23 * __pyx_v_neg_item_ids.strides[0]) ))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":633 - * j_idx = neg_item_ids[jdx] - * - * s = 1 # <<<<<<<<<<<<<< - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): - */ - __pyx_v_s = 1; + __pyx_t_1 = __Pyx_CyFunction_GetClassObj(__pyx_self); + if (!__pyx_t_1) { PyErr_SetString(PyExc_SystemError, "super(): empty __class__ cell"); __PYX_ERR(0, 166, __pyx_L1_error) } + __Pyx_INCREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 166, __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_self); + __Pyx_GIVEREF(__pyx_v_self); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(17); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_name, __pyx_v_name) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_rating_scale, __pyx_v_rating_scale) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_n_user_factors, __pyx_v_n_user_factors) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_n_item_factors, __pyx_v_n_item_factors) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_n_aspect_factors, __pyx_v_n_aspect_factors) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_n_opinion_factors, __pyx_v_n_opinion_factors) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_n_bpr_samples, __pyx_v_n_bpr_samples) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_n_element_samples, __pyx_v_n_element_samples) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_lambda_reg, __pyx_v_lambda_reg) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_lambda_bpr, __pyx_v_lambda_bpr) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_max_iter, __pyx_v_max_iter) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_lr, __pyx_v_lr) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_n_threads, __pyx_v_n_threads) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_seed, __pyx_v_seed) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_trainable, __pyx_v_trainable) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_init_params, __pyx_v_init_params) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_verbose, __pyx_v_verbose) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":635 - * s = 1 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + /* "cornac/models/comparer/recom_comparer_sub.pyx":167 + * ): + * super().__init__(name=name, rating_scale = rating_scale, n_user_factors = n_user_factors, n_item_factors = n_item_factors, n_aspect_factors = n_aspect_factors, n_opinion_factors = n_opinion_factors, n_bpr_samples = n_bpr_samples, n_element_samples = n_element_samples, lambda_reg = lambda_reg, lambda_bpr = lambda_bpr, max_iter = max_iter, lr = lr, n_threads=n_threads, seed = seed, trainable=trainable, init_params=init_params, verbose=verbose) + * self.lambda_d = lambda_d # <<<<<<<<<<<<<< + * self.n_pair_samples = n_pair_samples + * self.n_top_aspects = n_top_aspects */ - __pyx_t_26 = (__pyx_fuse_0__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero(__pyx_v_indptr, __pyx_v_item_ids, __pyx_v_u_idx, __pyx_v_j_idx) != 0); - if (__pyx_t_26) { + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lambda_d, __pyx_v_lambda_d) < 0) __PYX_ERR(0, 167, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":636 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] # <<<<<<<<<<<<<< - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: + /* "cornac/models/comparer/recom_comparer_sub.pyx":168 + * super().__init__(name=name, rating_scale = rating_scale, n_user_factors = n_user_factors, n_item_factors = n_item_factors, n_aspect_factors = n_aspect_factors, n_opinion_factors = n_opinion_factors, n_bpr_samples = n_bpr_samples, n_element_samples = n_element_samples, lambda_reg = lambda_reg, lambda_bpr = lambda_bpr, max_iter = max_iter, lr = lr, n_threads=n_threads, seed = seed, trainable=trainable, init_params=init_params, verbose=verbose) + * self.lambda_d = lambda_d + * self.n_pair_samples = n_pair_samples # <<<<<<<<<<<<<< + * self.n_top_aspects = n_top_aspects + * self.alpha = alpha */ - __pyx_v_i_score = (__pyx_v_rating_dict->my_map[__pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_i_idx)]); + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_n_pair_samples, __pyx_v_n_pair_samples) < 0) __PYX_ERR(0, 168, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":637 - * if has_non_zero(indptr, item_ids, u_idx, j_idx): - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] # <<<<<<<<<<<<<< - * if i_score == j_score: - * skipped += 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":169 + * self.lambda_d = lambda_d + * self.n_pair_samples = n_pair_samples + * self.n_top_aspects = n_top_aspects # <<<<<<<<<<<<<< + * self.alpha = alpha + * self.min_user_freq = min_user_freq */ - __pyx_v_j_score = (__pyx_v_rating_dict->my_map[__pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_j_idx)]); + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_n_top_aspects, __pyx_v_n_top_aspects) < 0) __PYX_ERR(0, 169, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":638 - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: # <<<<<<<<<<<<<< - * skipped += 1 - * continue + /* "cornac/models/comparer/recom_comparer_sub.pyx":170 + * self.n_pair_samples = n_pair_samples + * self.n_top_aspects = n_top_aspects + * self.alpha = alpha # <<<<<<<<<<<<<< + * self.min_user_freq = min_user_freq + * self.min_pair_freq = min_pair_freq */ - __pyx_t_26 = ((__pyx_v_i_score == __pyx_v_j_score) != 0); - if (__pyx_t_26) { + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_alpha, __pyx_v_alpha) < 0) __PYX_ERR(0, 170, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":639 - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: - * skipped += 1 # <<<<<<<<<<<<<< - * continue - * elif i_score < j_score: + /* "cornac/models/comparer/recom_comparer_sub.pyx":171 + * self.n_top_aspects = n_top_aspects + * self.alpha = alpha + * self.min_user_freq = min_user_freq # <<<<<<<<<<<<<< + * self.min_pair_freq = min_pair_freq + * self.min_common_freq = min_common_freq */ - __pyx_v_skipped = (__pyx_v_skipped + 1); + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_min_user_freq, __pyx_v_min_user_freq) < 0) __PYX_ERR(0, 171, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":640 - * if i_score == j_score: - * skipped += 1 - * continue # <<<<<<<<<<<<<< - * elif i_score < j_score: - * s = -1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":172 + * self.alpha = alpha + * self.min_user_freq = min_user_freq + * self.min_pair_freq = min_pair_freq # <<<<<<<<<<<<<< + * self.min_common_freq = min_common_freq + * self.use_item_aspect_popularity = use_item_aspect_popularity */ - goto __pyx_L34_continue; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_min_pair_freq, __pyx_v_min_pair_freq) < 0) __PYX_ERR(0, 172, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":638 - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: # <<<<<<<<<<<<<< - * skipped += 1 - * continue + /* "cornac/models/comparer/recom_comparer_sub.pyx":173 + * self.min_user_freq = min_user_freq + * self.min_pair_freq = min_pair_freq + * self.min_common_freq = min_common_freq # <<<<<<<<<<<<<< + * self.use_item_aspect_popularity = use_item_aspect_popularity + * self.enum_window = enum_window */ - } + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_min_common_freq, __pyx_v_min_common_freq) < 0) __PYX_ERR(0, 173, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":641 - * skipped += 1 - * continue - * elif i_score < j_score: # <<<<<<<<<<<<<< - * s = -1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":174 + * self.min_pair_freq = min_pair_freq + * self.min_common_freq = min_common_freq + * self.use_item_aspect_popularity = use_item_aspect_popularity # <<<<<<<<<<<<<< + * self.enum_window = enum_window * */ - __pyx_t_26 = ((__pyx_v_i_score < __pyx_v_j_score) != 0); - if (__pyx_t_26) { + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_use_item_aspect_popularity, __pyx_v_use_item_aspect_popularity) < 0) __PYX_ERR(0, 174, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":642 - * continue - * elif i_score < j_score: - * s = -1 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":175 + * self.min_common_freq = min_common_freq + * self.use_item_aspect_popularity = use_item_aspect_popularity + * self.enum_window = enum_window # <<<<<<<<<<<<<< * - * pred = ( - */ - __pyx_v_s = -1L; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":641 - * skipped += 1 - * continue - * elif i_score < j_score: # <<<<<<<<<<<<<< - * s = -1 * */ - } - - /* "cornac/models/comparer/recom_comparer_sub.pyx":635 - * s = 1 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - */ - } - - /* "cornac/models/comparer/recom_comparer_sub.pyx":647 - * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) - * ) * s # <<<<<<<<<<<<<< - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: - */ - __pyx_v_pred = ((__pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_n_aspects) - __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_n_aspects)) * __pyx_v_s); + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_enum_window, __pyx_v_enum_window) < 0) __PYX_ERR(0, 175, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":648 - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) - * ) * s - * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< - * if z < .5: - * correct += 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":137 + * ACM International Conference on Web Search and Data Mining (WSDM). 2021. + * """ + * def __init__( # <<<<<<<<<<<<<< + * self, + * name="ComparERSub", */ - __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":649 - * ) * s - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * correct += 1 - * del_bpr = ld_bpr * z * s - */ - __pyx_t_26 = ((__pyx_v_z < .5) != 0); - if (__pyx_t_26) { + /* 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_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":650 - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: - * correct += 1 # <<<<<<<<<<<<<< - * del_bpr = ld_bpr * z * s +/* "cornac/models/comparer/recom_comparer_sub.pyx":178 * + * + * def _build_item_quality_matrix(self, data_set, sentiment): # <<<<<<<<<<<<<< + * start_time = time() + * quality_scores = [] */ - __pyx_v_correct = (__pyx_v_correct + 1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":649 - * ) * s - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * correct += 1 - * del_bpr = ld_bpr * z * s - */ - } +/* Python wrapper */ +static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_3_build_item_quality_matrix(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_3_build_item_quality_matrix = {"_build_item_quality_matrix", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_3_build_item_quality_matrix, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_3_build_item_quality_matrix(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_self = 0; + CYTHON_UNUSED PyObject *__pyx_v_data_set = 0; + PyObject *__pyx_v_sentiment = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_build_item_quality_matrix (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_data_set,&__pyx_n_s_sentiment,0}; + PyObject* values[3] = {0,0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 178, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data_set)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 178, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_build_item_quality_matrix", 1, 3, 3, 1); __PYX_ERR(0, 178, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sentiment)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 178, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_build_item_quality_matrix", 1, 3, 3, 2); __PYX_ERR(0, 178, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_build_item_quality_matrix") < 0)) __PYX_ERR(0, 178, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v_self = values[0]; + __pyx_v_data_set = values[1]; + __pyx_v_sentiment = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_build_item_quality_matrix", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 178, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._build_item_quality_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_2_build_item_quality_matrix(__pyx_self, __pyx_v_self, __pyx_v_data_set, __pyx_v_sentiment); - /* "cornac/models/comparer/recom_comparer_sub.pyx":651 - * if z < .5: - * correct += 1 - * del_bpr = ld_bpr * z * s # <<<<<<<<<<<<<< - * - * bpr_loss += log(1 / (1 + exp(-pred))) - */ - __pyx_v_del_bpr = ((__pyx_v_ld_bpr * __pyx_v_z) * __pyx_v_s); + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":653 - * del_bpr = ld_bpr * z * s - * - * bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< - * - * for i in range(n_user_factors): - */ - __pyx_v_bpr_loss = (__pyx_v_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); +static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_2_build_item_quality_matrix(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_data_set, PyObject *__pyx_v_sentiment) { + PyObject *__pyx_v_start_time = NULL; + PyObject *__pyx_v_quality_scores = NULL; + PyObject *__pyx_v_map_iid = NULL; + PyObject *__pyx_v_map_aspect_id = NULL; + PyObject *__pyx_v_iid = NULL; + PyObject *__pyx_v_sentiment_tup_ids_by_user = NULL; + PyObject *__pyx_v_item_aspects = NULL; + PyObject *__pyx_v_item_aspect_count = NULL; + PyObject *__pyx_v_total_sentiment_by_aspect = NULL; + PyObject *__pyx_v_tup_id = NULL; + PyObject *__pyx_v_aid = NULL; + CYTHON_UNUSED PyObject *__pyx_v__ = NULL; + PyObject *__pyx_v_sentiment_polarity = NULL; + PyObject *__pyx_v_total_sentiment = NULL; + PyObject *__pyx_v_avg_sentiment = NULL; + PyObject *__pyx_v_Y = NULL; + PyObject *__pyx_7genexpr__pyx_v_tup_id = NULL; + PyObject *__pyx_7genexpr__pyx_v_tup = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + Py_ssize_t __pyx_t_10; + Py_ssize_t __pyx_t_11; + int __pyx_t_12; + PyObject *__pyx_t_13 = NULL; + Py_ssize_t __pyx_t_14; + PyObject *(*__pyx_t_15)(PyObject *); + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + PyObject *__pyx_t_18 = NULL; + PyObject *(*__pyx_t_19)(PyObject *); + int __pyx_t_20; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_build_item_quality_matrix", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":655 - * bpr_loss += log(1 / (1 + exp(-pred))) + /* "cornac/models/comparer/recom_comparer_sub.pyx":179 * - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] + * def _build_item_quality_matrix(self, data_set, sentiment): + * start_time = time() # <<<<<<<<<<<<<< + * quality_scores = [] + * map_iid = [] */ - __pyx_t_3 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_3, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_start_time = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":656 - * - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): + /* "cornac/models/comparer/recom_comparer_sub.pyx":180 + * def _build_item_quality_matrix(self, data_set, sentiment): + * start_time = time() + * quality_scores = [] # <<<<<<<<<<<<<< + * map_iid = [] + * map_aspect_id = [] */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_quality_scores = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":657 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":181 + * start_time = time() + * quality_scores = [] + * map_iid = [] # <<<<<<<<<<<<<< + * map_aspect_id = [] + * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): */ - __pyx_t_23 = __pyx_v_i_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_j_idx; - __pyx_t_9 = __pyx_v_j; - __pyx_v_i_ij = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_map_iid = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":658 - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":182 + * quality_scores = [] + * map_iid = [] + * map_aspect_id = [] # <<<<<<<<<<<<<< + * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): + * if self.train_set.is_unk_item(iid): */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 182, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_map_aspect_id = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":659 - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":183 + * map_iid = [] + * map_aspect_id = [] + * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): # <<<<<<<<<<<<<< + * if self.train_set.is_unk_item(iid): + * continue */ - __pyx_t_9 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_n_aspects; - __pyx_t_23 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); + __pyx_t_5 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_item_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 183, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely(__pyx_t_2 == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 183, __pyx_L1_error) + } + __pyx_t_3 = __Pyx_dict_iterator(__pyx_t_2, 0, __pyx_n_s_items, (&__pyx_t_6), (&__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 183, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_1); + __pyx_t_1 = __pyx_t_3; + __pyx_t_3 = 0; + while (1) { + __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_6, &__pyx_t_5, &__pyx_t_3, &__pyx_t_2, NULL, __pyx_t_4); + if (unlikely(__pyx_t_7 == 0)) break; + if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 183, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF_SET(__pyx_v_iid, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_XDECREF_SET(__pyx_v_sentiment_tup_ids_by_user, __pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":660 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_9 = __pyx_v_n_aspects; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_i_ij) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":661 - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij - */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_18 = __pyx_v_n_aspects; - __pyx_t_19 = __pyx_v_k; - __pyx_t_21 = __pyx_v_i_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":662 - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":184 + * map_aspect_id = [] + * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): + * if self.train_set.is_unk_item(iid): # <<<<<<<<<<<<<< + * continue + * item_aspects = [tup[0] */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_9 = __pyx_v_n_aspects; - __pyx_t_20 = __pyx_v_k; - __pyx_t_22 = __pyx_v_j_idx; - __pyx_t_21 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_18 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_is_unk_item); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_7 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_iid}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_9) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":663 - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij # <<<<<<<<<<<<<< - * - * for _ in prange(num_pair_samples, schedule='guided'): + /* "cornac/models/comparer/recom_comparer_sub.pyx":185 + * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): + * if self.train_set.is_unk_item(iid): + * continue # <<<<<<<<<<<<<< + * item_aspects = [tup[0] + * for tup_id in sentiment_tup_ids_by_user.values() */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_18 = __pyx_v_n_aspects; - __pyx_t_19 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij); - } - } - } - goto __pyx_L48; - __pyx_L34_continue:; - goto __pyx_L48; - __pyx_L48:; - } - } - } - } + goto __pyx_L3_continue; - /* "cornac/models/comparer/recom_comparer_sub.pyx":665 - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij - * - * for _ in prange(num_pair_samples, schedule='guided'): # <<<<<<<<<<<<<< - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":184 + * map_aspect_id = [] + * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): + * if self.train_set.is_unk_item(iid): # <<<<<<<<<<<<<< + * continue + * item_aspects = [tup[0] */ - __pyx_t_4 = __pyx_v_num_pair_samples; - if ((1 == 0)) abort(); - { - __pyx_t_8 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_8 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_a_ji) lastprivate(__pyx_v_del_aspect_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){ - { - __pyx_v__ = (short)(0 + 1 * __pyx_t_7); - /* Initialize private variables to invalid values */ - __pyx_v_a_idx = ((short)0xbad0bad0); - __pyx_v_a_ji = ((double)__PYX_NAN()); - __pyx_v_del_aspect_bpr = ((double)__PYX_NAN()); - __pyx_v_i = ((short)0xbad0bad0); - __pyx_v_i_idx = ((short)0xbad0bad0); - __pyx_v_idx = ((short)0xbad0bad0); - __pyx_v_j = ((short)0xbad0bad0); - __pyx_v_j_idx = ((short)0xbad0bad0); - __pyx_v_k = ((short)0xbad0bad0); - __pyx_v_pred = ((double)__PYX_NAN()); - __pyx_v_u_idx = ((short)0xbad0bad0); - __pyx_v_z = ((double)__PYX_NAN()); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":666 - * - * for _ in prange(num_pair_samples, schedule='guided'): - * idx = rng_pos_pair.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":186 + * if self.train_set.is_unk_item(iid): + * continue + * item_aspects = [tup[0] # <<<<<<<<<<<<<< + * for tup_id in sentiment_tup_ids_by_user.values() + * for tup in sentiment.sentiment[tup_id]] */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_pair->__pyx_vtab)->generate(__pyx_v_rng_pos_pair, __pyx_v_thread_id); + { /* enter inner scope */ + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 186, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_2); - /* "cornac/models/comparer/recom_comparer_sub.pyx":667 - * for _ in prange(num_pair_samples, schedule='guided'): - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] # <<<<<<<<<<<<<< - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":187 + * continue + * item_aspects = [tup[0] + * for tup_id in sentiment_tup_ids_by_user.values() # <<<<<<<<<<<<<< + * for tup in sentiment.sentiment[tup_id]] + * item_aspect_count = Counter(item_aspects) */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_u_idx = (*((short *) ( /* dim=0 */ (__pyx_v_p_user_indices.data + __pyx_t_23 * __pyx_v_p_user_indices.strides[0]) ))); + __pyx_t_10 = 0; + if (unlikely(__pyx_v_sentiment_tup_ids_by_user == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); + __PYX_ERR(0, 187, __pyx_L8_error) + } + __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_sentiment_tup_ids_by_user, 0, __pyx_n_s_values, (&__pyx_t_11), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 187, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_8); + __pyx_t_8 = __pyx_t_3; + __pyx_t_3 = 0; + while (1) { + __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_8, __pyx_t_11, &__pyx_t_10, NULL, &__pyx_t_3, NULL, __pyx_t_7); + if (unlikely(__pyx_t_12 == 0)) break; + if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 187, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_tup_id, __pyx_t_3); + __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":668 - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] # <<<<<<<<<<<<<< - * j_idx = later_indices[idx] - * a_idx = aspect_indices[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":188 + * item_aspects = [tup[0] + * for tup_id in sentiment_tup_ids_by_user.values() + * for tup in sentiment.sentiment[tup_id]] # <<<<<<<<<<<<<< + * item_aspect_count = Counter(item_aspects) + * total_sentiment_by_aspect = OrderedDict() */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_i_idx = (*((short *) ( /* dim=0 */ (__pyx_v_earlier_indices.data + __pyx_t_23 * __pyx_v_earlier_indices.strides[0]) ))); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 188, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_13 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_7genexpr__pyx_v_tup_id); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 188, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (likely(PyList_CheckExact(__pyx_t_13)) || PyTuple_CheckExact(__pyx_t_13)) { + __pyx_t_3 = __pyx_t_13; __Pyx_INCREF(__pyx_t_3); __pyx_t_14 = 0; + __pyx_t_15 = NULL; + } else { + __pyx_t_14 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 188, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 188, __pyx_L8_error) + } + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + for (;;) { + if (likely(!__pyx_t_15)) { + if (likely(PyList_CheckExact(__pyx_t_3))) { + if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_13 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_14); __Pyx_INCREF(__pyx_t_13); __pyx_t_14++; if (unlikely((0 < 0))) __PYX_ERR(0, 188, __pyx_L8_error) + #else + __pyx_t_13 = PySequence_ITEM(__pyx_t_3, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 188, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_13); + #endif + } else { + if (__pyx_t_14 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_13 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_14); __Pyx_INCREF(__pyx_t_13); __pyx_t_14++; if (unlikely((0 < 0))) __PYX_ERR(0, 188, __pyx_L8_error) + #else + __pyx_t_13 = PySequence_ITEM(__pyx_t_3, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 188, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_13); + #endif + } + } else { + __pyx_t_13 = __pyx_t_15(__pyx_t_3); + if (unlikely(!__pyx_t_13)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 188, __pyx_L8_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_13); + } + __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_tup, __pyx_t_13); + __pyx_t_13 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":669 - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] # <<<<<<<<<<<<<< - * a_idx = aspect_indices[idx] - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":186 + * if self.train_set.is_unk_item(iid): + * continue + * item_aspects = [tup[0] # <<<<<<<<<<<<<< + * for tup_id in sentiment_tup_ids_by_user.values() + * for tup in sentiment.sentiment[tup_id]] */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_j_idx = (*((short *) ( /* dim=0 */ (__pyx_v_later_indices.data + __pyx_t_23 * __pyx_v_later_indices.strides[0]) ))); + __pyx_t_13 = __Pyx_GetItemInt(__pyx_7genexpr__pyx_v_tup, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 186, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_13); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_13))) __PYX_ERR(0, 186, __pyx_L8_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":670 - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] - * a_idx = aspect_indices[idx] # <<<<<<<<<<<<<< - * - * pred = ( + /* "cornac/models/comparer/recom_comparer_sub.pyx":188 + * item_aspects = [tup[0] + * for tup_id in sentiment_tup_ids_by_user.values() + * for tup in sentiment.sentiment[tup_id]] # <<<<<<<<<<<<<< + * item_aspect_count = Counter(item_aspects) + * total_sentiment_by_aspect = OrderedDict() */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_a_idx = (*((short *) ( /* dim=0 */ (__pyx_v_aspect_indices.data + __pyx_t_23 * __pyx_v_aspect_indices.strides[0]) ))); + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup); __pyx_7genexpr__pyx_v_tup = 0; + __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup_id); __pyx_7genexpr__pyx_v_tup_id = 0; + goto __pyx_L14_exit_scope; + __pyx_L8_error:; + __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup); __pyx_7genexpr__pyx_v_tup = 0; + __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup_id); __pyx_7genexpr__pyx_v_tup_id = 0; + goto __pyx_L1_error; + __pyx_L14_exit_scope:; + } /* exit inner scope */ + __Pyx_XDECREF_SET(__pyx_v_item_aspects, ((PyObject*)__pyx_t_2)); + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":674 - * pred = ( - * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< - * ) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":189 + * for tup_id in sentiment_tup_ids_by_user.values() + * for tup in sentiment.sentiment[tup_id]] + * item_aspect_count = Counter(item_aspects) # <<<<<<<<<<<<<< + * total_sentiment_by_aspect = OrderedDict() + * for tup_id in sentiment_tup_ids_by_user.values(): */ - __pyx_v_pred = (__pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_a_idx) - __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx)); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_Counter); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_3 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_7 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_item_aspects}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_item_aspect_count, __pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":677 - * ) - * - * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< - * if z < .5: - * aspect_correct += 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":190 + * for tup in sentiment.sentiment[tup_id]] + * item_aspect_count = Counter(item_aspects) + * total_sentiment_by_aspect = OrderedDict() # <<<<<<<<<<<<<< + * for tup_id in sentiment_tup_ids_by_user.values(): + * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: */ - __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_OrderedDict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_3 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_7 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_3, }; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_total_sentiment_by_aspect, __pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":678 - * - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * aspect_correct += 1 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":191 + * item_aspect_count = Counter(item_aspects) + * total_sentiment_by_aspect = OrderedDict() + * for tup_id in sentiment_tup_ids_by_user.values(): # <<<<<<<<<<<<<< + * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: + * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity */ - __pyx_t_26 = ((__pyx_v_z < .5) != 0); - if (__pyx_t_26) { + __pyx_t_11 = 0; + if (unlikely(__pyx_v_sentiment_tup_ids_by_user == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); + __PYX_ERR(0, 191, __pyx_L1_error) + } + __pyx_t_8 = __Pyx_dict_iterator(__pyx_v_sentiment_tup_ids_by_user, 0, __pyx_n_s_values, (&__pyx_t_10), (&__pyx_t_7)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); + __pyx_t_2 = __pyx_t_8; + __pyx_t_8 = 0; + while (1) { + __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_10, &__pyx_t_11, NULL, &__pyx_t_8, NULL, __pyx_t_7); + if (unlikely(__pyx_t_12 == 0)) break; + if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_XDECREF_SET(__pyx_v_tup_id, __pyx_t_8); + __pyx_t_8 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":679 - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: - * aspect_correct += 1 # <<<<<<<<<<<<<< - * - * del_aspect_bpr = lambda_d * z + /* "cornac/models/comparer/recom_comparer_sub.pyx":192 + * total_sentiment_by_aspect = OrderedDict() + * for tup_id in sentiment_tup_ids_by_user.values(): + * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: # <<<<<<<<<<<<<< + * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity + * for aid, total_sentiment in total_sentiment_by_aspect.items(): */ - __pyx_v_aspect_correct = (__pyx_v_aspect_correct + 1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_8, __pyx_v_tup_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { + __pyx_t_8 = __pyx_t_3; __Pyx_INCREF(__pyx_t_8); __pyx_t_14 = 0; + __pyx_t_15 = NULL; + } else { + __pyx_t_14 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 192, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + for (;;) { + if (likely(!__pyx_t_15)) { + if (likely(PyList_CheckExact(__pyx_t_8))) { + if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_8)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_14); __Pyx_INCREF(__pyx_t_3); __pyx_t_14++; if (unlikely((0 < 0))) __PYX_ERR(0, 192, __pyx_L1_error) + #else + __pyx_t_3 = PySequence_ITEM(__pyx_t_8, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } else { + if (__pyx_t_14 >= PyTuple_GET_SIZE(__pyx_t_8)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_14); __Pyx_INCREF(__pyx_t_3); __pyx_t_14++; if (unlikely((0 < 0))) __PYX_ERR(0, 192, __pyx_L1_error) + #else + __pyx_t_3 = PySequence_ITEM(__pyx_t_8, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } + } else { + __pyx_t_3 = __pyx_t_15(__pyx_t_8); + if (unlikely(!__pyx_t_3)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 192, __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; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 192, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_13 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_16 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_17 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_13 = PyList_GET_ITEM(sequence, 0); + __pyx_t_16 = PyList_GET_ITEM(sequence, 1); + __pyx_t_17 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(__pyx_t_16); + __Pyx_INCREF(__pyx_t_17); + #else + __pyx_t_13 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_16 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_17 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + #endif + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_18 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_18); + index = 0; __pyx_t_13 = __pyx_t_19(__pyx_t_18); if (unlikely(!__pyx_t_13)) goto __pyx_L19_unpacking_failed; + __Pyx_GOTREF(__pyx_t_13); + index = 1; __pyx_t_16 = __pyx_t_19(__pyx_t_18); if (unlikely(!__pyx_t_16)) goto __pyx_L19_unpacking_failed; + __Pyx_GOTREF(__pyx_t_16); + index = 2; __pyx_t_17 = __pyx_t_19(__pyx_t_18); if (unlikely(!__pyx_t_17)) goto __pyx_L19_unpacking_failed; + __Pyx_GOTREF(__pyx_t_17); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_18), 3) < 0) __PYX_ERR(0, 192, __pyx_L1_error) + __pyx_t_19 = NULL; + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + goto __pyx_L20_unpacking_done; + __pyx_L19_unpacking_failed:; + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + __pyx_t_19 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 192, __pyx_L1_error) + __pyx_L20_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_aid, __pyx_t_13); + __pyx_t_13 = 0; + __Pyx_XDECREF_SET(__pyx_v__, __pyx_t_16); + __pyx_t_16 = 0; + __Pyx_XDECREF_SET(__pyx_v_sentiment_polarity, __pyx_t_17); + __pyx_t_17 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":678 - * - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * aspect_correct += 1 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":193 + * for tup_id in sentiment_tup_ids_by_user.values(): + * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: + * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity # <<<<<<<<<<<<<< + * for aid, total_sentiment in total_sentiment_by_aspect.items(): + * map_iid.append(iid) */ - } - - /* "cornac/models/comparer/recom_comparer_sub.pyx":681 - * aspect_correct += 1 - * - * del_aspect_bpr = lambda_d * z # <<<<<<<<<<<<<< - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): - */ - __pyx_v_del_aspect_bpr = (__pyx_v_lambda_d * __pyx_v_z); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":682 - * - * del_aspect_bpr = lambda_d * z - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< - * for i in range(n_user_factors): - * for j in range(n_item_factors): - */ - __pyx_v_aspect_bpr_loss = (__pyx_v_aspect_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_total_sentiment_by_aspect, __pyx_n_s_get); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_16 = NULL; + __pyx_t_12 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) { + __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_17); + if (likely(__pyx_t_16)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17); + __Pyx_INCREF(__pyx_t_16); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_17, function); + __pyx_t_12 = 1; + } + } + { + PyObject *__pyx_callargs[3] = {__pyx_t_16, __pyx_v_aid, __pyx_int_0}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_17, __pyx_callargs+1-__pyx_t_12, 2+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + } + __pyx_t_17 = PyNumber_Add(__pyx_t_3, __pyx_v_sentiment_polarity); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely((PyObject_SetItem(__pyx_v_total_sentiment_by_aspect, __pyx_v_aid, __pyx_t_17) < 0))) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":683 - * del_aspect_bpr = lambda_d * z - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":192 + * total_sentiment_by_aspect = OrderedDict() + * for tup_id in sentiment_tup_ids_by_user.values(): + * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: # <<<<<<<<<<<<<< + * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity + * for aid, total_sentiment in total_sentiment_by_aspect.items(): */ - __pyx_t_3 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":684 - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): + /* "cornac/models/comparer/recom_comparer_sub.pyx":194 + * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: + * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity + * for aid, total_sentiment in total_sentiment_by_aspect.items(): # <<<<<<<<<<<<<< + * map_iid.append(iid) + * map_aspect_id.append(aid) */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __pyx_t_10 = 0; + if (unlikely(__pyx_v_total_sentiment_by_aspect == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 194, __pyx_L1_error) + } + __pyx_t_8 = __Pyx_dict_iterator(__pyx_v_total_sentiment_by_aspect, 0, __pyx_n_s_items, (&__pyx_t_11), (&__pyx_t_7)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 194, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); + __pyx_t_2 = __pyx_t_8; + __pyx_t_8 = 0; + while (1) { + __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_11, &__pyx_t_10, &__pyx_t_8, &__pyx_t_17, NULL, __pyx_t_7); + if (unlikely(__pyx_t_12 == 0)) break; + if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 194, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GOTREF(__pyx_t_17); + __Pyx_XDECREF_SET(__pyx_v_aid, __pyx_t_8); + __pyx_t_8 = 0; + __Pyx_XDECREF_SET(__pyx_v_total_sentiment, __pyx_t_17); + __pyx_t_17 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":685 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":195 + * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity + * for aid, total_sentiment in total_sentiment_by_aspect.items(): + * map_iid.append(iid) # <<<<<<<<<<<<<< + * map_aspect_id.append(aid) + * if self.use_item_aspect_popularity: */ - __pyx_t_23 = __pyx_v_j_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i_idx; - __pyx_t_9 = __pyx_v_j; - __pyx_v_a_ji = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_map_iid, __pyx_v_iid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 195, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":686 - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":196 + * for aid, total_sentiment in total_sentiment_by_aspect.items(): + * map_iid.append(iid) + * map_aspect_id.append(aid) # <<<<<<<<<<<<<< + * if self.use_item_aspect_popularity: + * quality_scores.append(self._compute_quality_score(total_sentiment)) */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_map_aspect_id, __pyx_v_aid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 196, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":687 - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":197 + * map_iid.append(iid) + * map_aspect_id.append(aid) + * if self.use_item_aspect_popularity: # <<<<<<<<<<<<<< + * quality_scores.append(self._compute_quality_score(total_sentiment)) + * else: */ - __pyx_t_9 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_use_item_aspect_popularity); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 197, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 197, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + if (__pyx_t_9) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":688 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":198 + * map_aspect_id.append(aid) + * if self.use_item_aspect_popularity: + * quality_scores.append(self._compute_quality_score(total_sentiment)) # <<<<<<<<<<<<<< + * else: + * avg_sentiment = total_sentiment / item_aspect_count[aid] */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_20 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_a_ji) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_compute_quality_score); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 198, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_3 = NULL; + __pyx_t_12 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_12 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_total_sentiment}; + __pyx_t_17 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_12, 1+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 198, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_quality_scores, __pyx_t_17); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 198, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":689 - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji + /* "cornac/models/comparer/recom_comparer_sub.pyx":197 + * map_iid.append(iid) + * map_aspect_id.append(aid) + * if self.use_item_aspect_popularity: # <<<<<<<<<<<<<< + * quality_scores.append(self._compute_quality_score(total_sentiment)) + * else: */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_20 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_k; - __pyx_t_21 = __pyx_v_j_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_20 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); + goto __pyx_L24; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":690 - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":200 + * quality_scores.append(self._compute_quality_score(total_sentiment)) + * else: + * avg_sentiment = total_sentiment / item_aspect_count[aid] # <<<<<<<<<<<<<< + * quality_scores.append(self._compute_quality_score(avg_sentiment)) + * quality_scores = np.asarray(quality_scores, dtype=np.float32).flatten() */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i_idx; - __pyx_t_21 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_20 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); + /*else*/ { + __pyx_t_17 = __Pyx_PyObject_GetItem(__pyx_v_item_aspect_count, __pyx_v_aid); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 200, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_v_total_sentiment, __pyx_t_17); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 200, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_XDECREF_SET(__pyx_v_avg_sentiment, __pyx_t_8); + __pyx_t_8 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":691 - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji # <<<<<<<<<<<<<< - * - * # update params with AdaGrad + /* "cornac/models/comparer/recom_comparer_sub.pyx":201 + * else: + * avg_sentiment = total_sentiment / item_aspect_count[aid] + * quality_scores.append(self._compute_quality_score(avg_sentiment)) # <<<<<<<<<<<<<< + * quality_scores = np.asarray(quality_scores, dtype=np.float32).flatten() + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_20 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji); - } - } - } - } - } - } - } - } + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_compute_quality_score); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_3 = NULL; + __pyx_t_12 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_17); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_17, function); + __pyx_t_12 = 1; + } } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } - - /* "cornac/models/comparer/recom_comparer_sub.pyx":568 - * del_a_reg.fill(0) - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): - */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L5; + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_avg_sentiment}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_17, __pyx_callargs+1-__pyx_t_12, 1+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; } - __pyx_L5:; + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_quality_scores, __pyx_t_8); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 201, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } + __pyx_L24:; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_L3_continue:; } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":694 - * - * # update params with AdaGrad - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): + /* "cornac/models/comparer/recom_comparer_sub.pyx":202 + * avg_sentiment = total_sentiment / item_aspect_count[aid] + * quality_scores.append(self._compute_quality_score(avg_sentiment)) + * quality_scores = np.asarray(quality_scores, dtype=np.float32).flatten() # <<<<<<<<<<<<<< + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_quality_scores); + __Pyx_GIVEREF(__pyx_v_quality_scores); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_quality_scores); + __pyx_t_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float32); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_t_17, __pyx_n_s_dtype, __pyx_t_16) < 0) __PYX_ERR(0, 202, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_2, __pyx_t_17); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_flatten); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + __pyx_t_16 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) { + __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_17); + if (likely(__pyx_t_16)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17); + __Pyx_INCREF(__pyx_t_16); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_17, function); + __pyx_t_4 = 1; + } + } { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); - #endif - /*try:*/ { - { - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) - #endif - #ifdef _OPENMP - #pragma omp parallel private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_3, __pyx_t_9) num_threads(__pyx_v_n_threads) - #endif /* _OPENMP */ - { - - /* "cornac/models/comparer/recom_comparer_sub.pyx":695 - * # update params with AdaGrad - * with nogil, parallel(num_threads=n_threads): - * for i in prange(n_user_factors, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_users): - * if del_u[j, i] != 0: - */ - __pyx_t_3 = __pyx_v_n_user_factors; - if ((1 == 0)) abort(); - { - __pyx_t_12 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_12 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_12; __pyx_t_10++){ - { - __pyx_v_i = (short)(0 + 1 * __pyx_t_10); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((short)0xbad0bad0); - __pyx_v_k = ((short)0xbad0bad0); + PyObject *__pyx_callargs[1] = {__pyx_t_16, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_17, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + } + __Pyx_DECREF_SET(__pyx_v_quality_scores, __pyx_t_1); + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":696 - * with nogil, parallel(num_threads=n_threads): - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): # <<<<<<<<<<<<<< - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":203 + * quality_scores.append(self._compute_quality_score(avg_sentiment)) + * quality_scores = np.asarray(quality_scores, dtype=np.float32).flatten() + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() # <<<<<<<<<<<<<< + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() + * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), */ - __pyx_t_13 = __pyx_v_n_users; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { - __pyx_v_j = __pyx_t_11; + __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_n_s_np); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_asarray); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_17 = PyTuple_New(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_INCREF(__pyx_v_map_iid); + __Pyx_GIVEREF(__pyx_v_map_iid); + PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_v_map_iid); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_int32); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_16, __pyx_t_17, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_flatten); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_3, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF_SET(__pyx_v_map_iid, __pyx_t_1); + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":697 - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): - * if del_u[j, i] != 0: # <<<<<<<<<<<<<< - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":204 + * quality_scores = np.asarray(quality_scores, dtype=np.float32).flatten() + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() # <<<<<<<<<<<<<< + * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), + * shape=(self.train_set.num_items, sentiment.num_aspects)) */ - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_map_aspect_id); + __Pyx_GIVEREF(__pyx_v_map_aspect_id); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_map_aspect_id); + __pyx_t_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_np); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_int32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + if (PyDict_SetItem(__pyx_t_17, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 204, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_17); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_flatten); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_17); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_17, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_8, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_17, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + } + __Pyx_DECREF_SET(__pyx_v_map_aspect_id, __pyx_t_1); + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":698 - * for j in range(n_users): - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] # <<<<<<<<<<<<<< - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":205 + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() + * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), # <<<<<<<<<<<<<< + * shape=(self.train_set.num_items, sentiment.num_aspects)) + * */ - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_u_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) ))))); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_sp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_csr_matrix); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_map_iid); + __Pyx_GIVEREF(__pyx_v_map_iid); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_map_iid); + __Pyx_INCREF(__pyx_v_map_aspect_id); + __Pyx_GIVEREF(__pyx_v_map_aspect_id); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_map_aspect_id); + __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_quality_scores); + __Pyx_GIVEREF(__pyx_v_quality_scores); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_quality_scores); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8); + __pyx_t_8 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":697 - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): - * if del_u[j, i] != 0: # <<<<<<<<<<<<<< - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":206 + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() + * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), + * shape=(self.train_set.num_items, sentiment.num_aspects)) # <<<<<<<<<<<<<< + * + * if self.verbose: */ - } + __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_2); + __pyx_t_3 = 0; + __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_shape, __pyx_t_16) < 0) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":699 - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] # <<<<<<<<<<<<<< - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":205 + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() + * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), # <<<<<<<<<<<<<< + * shape=(self.train_set.num_items, sentiment.num_aspects)) + * */ - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_19 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_U.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)))); + __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_Y = __pyx_t_16; + __pyx_t_16 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":700 - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] # <<<<<<<<<<<<<< - * if U[j, i] < 0: - * U[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":208 + * shape=(self.train_set.num_items, sentiment.num_aspects)) + * + * if self.verbose: # <<<<<<<<<<<<<< + * print('Building item aspect quality matrix completed in %d s' % (time() - start_time)) + * */ - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_24 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_U.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[1].strides))); + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_16); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + if (__pyx_t_9) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":701 - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: # <<<<<<<<<<<<<< - * U[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":209 + * + * if self.verbose: + * print('Building item aspect quality matrix completed in %d s' % (time() - start_time)) # <<<<<<<<<<<<<< * + * return Y */ - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_26 = (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_time); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_1, }; + __pyx_t_16 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __pyx_t_8 = PyNumber_Subtract(__pyx_t_16, __pyx_v_start_time); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + __pyx_t_16 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_Building_item_aspect_quality_mat, __pyx_t_8); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_16); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":702 - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: - * U[j, i] = 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":208 + * shape=(self.train_set.num_items, sentiment.num_aspects)) + * + * if self.verbose: # <<<<<<<<<<<<<< + * print('Building item aspect quality matrix completed in %d s' % (time() - start_time)) * - * for j in range(n_item_factors): */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )) = 0.0; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":701 - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: # <<<<<<<<<<<<<< - * U[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":211 + * print('Building item aspect quality matrix completed in %d s' % (time() - start_time)) + * + * return Y # <<<<<<<<<<<<<< * + * def _build_data(self, data_set): */ - } - } + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_Y); + __pyx_r = __pyx_v_Y; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":704 - * U[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":178 * - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: + * + * def _build_item_quality_matrix(self, data_set, sentiment): # <<<<<<<<<<<<<< + * start_time = time() + * quality_scores = [] */ - __pyx_t_13 = __pyx_v_n_item_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { - __pyx_v_j = __pyx_t_11; - /* "cornac/models/comparer/recom_comparer_sub.pyx":705 + /* 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_8); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_16); + __Pyx_XDECREF(__pyx_t_17); + __Pyx_XDECREF(__pyx_t_18); + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._build_item_quality_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_start_time); + __Pyx_XDECREF(__pyx_v_quality_scores); + __Pyx_XDECREF(__pyx_v_map_iid); + __Pyx_XDECREF(__pyx_v_map_aspect_id); + __Pyx_XDECREF(__pyx_v_iid); + __Pyx_XDECREF(__pyx_v_sentiment_tup_ids_by_user); + __Pyx_XDECREF(__pyx_v_item_aspects); + __Pyx_XDECREF(__pyx_v_item_aspect_count); + __Pyx_XDECREF(__pyx_v_total_sentiment_by_aspect); + __Pyx_XDECREF(__pyx_v_tup_id); + __Pyx_XDECREF(__pyx_v_aid); + __Pyx_XDECREF(__pyx_v__); + __Pyx_XDECREF(__pyx_v_sentiment_polarity); + __Pyx_XDECREF(__pyx_v_total_sentiment); + __Pyx_XDECREF(__pyx_v_avg_sentiment); + __Pyx_XDECREF(__pyx_v_Y); + __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup_id); + __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cornac/models/comparer/recom_comparer_sub.pyx":213 + * return Y * - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * def _build_data(self, data_set): # <<<<<<<<<<<<<< + * import time + * from tqdm import tqdm */ - __pyx_t_16 = __pyx_v_n_aspect_factors; - __pyx_t_27 = __pyx_t_16; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_27; __pyx_t_14+=1) { - __pyx_v_k = __pyx_t_14; - /* "cornac/models/comparer/recom_comparer_sub.pyx":706 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - */ - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { +/* Python wrapper */ +static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_5_build_data(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_5_build_data = {"_build_data", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_5_build_data, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_5_build_data(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_data_set = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_build_data (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_data_set,0}; + PyObject* values[2] = {0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 213, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data_set)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 213, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_build_data", 1, 2, 2, 1); __PYX_ERR(0, 213, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_build_data") < 0)) __PYX_ERR(0, 213, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_self = values[0]; + __pyx_v_data_set = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_build_data", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 213, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._build_data", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_4_build_data(__pyx_self, __pyx_v_self, __pyx_v_data_set); - /* "cornac/models/comparer/recom_comparer_sub.pyx":707 - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) ))))); + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":706 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - */ - } +static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_4_build_data(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_data_set) { + PyObject *__pyx_v_time = NULL; + PyObject *__pyx_v_tqdm = NULL; + PyObject *__pyx_v_start_time = NULL; + PyObject *__pyx_v_sentiment = NULL; + PyObject *__pyx_v_u_indices = NULL; + PyObject *__pyx_v_i_indices = NULL; + PyObject *__pyx_v_r_values = NULL; + PyObject *__pyx_v_keys = NULL; + struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict = 0; + PyObject *__pyx_v_rating_matrix = NULL; + PyObject *__pyx_v_user_item_aspect = NULL; + PyObject *__pyx_v_user_aspect_opinion = NULL; + PyObject *__pyx_v_item_aspect_opinion = NULL; + PyObject *__pyx_v_u_idx = NULL; + PyObject *__pyx_v_sentiment_tup_ids_by_item = NULL; + PyObject *__pyx_v_i_idx = NULL; + PyObject *__pyx_v_tup_idx = NULL; + PyObject *__pyx_v_a_idx = NULL; + PyObject *__pyx_v_o_idx = NULL; + PyObject *__pyx_v_polarity = NULL; + PyObject *__pyx_v_key = NULL; + PyObject *__pyx_v_Y = NULL; + PyObject *__pyx_v_user_indices = NULL; + PyObject *__pyx_v_earlier_indices = NULL; + PyObject *__pyx_v_later_indices = NULL; + PyObject *__pyx_v_aspect_indices = NULL; + PyObject *__pyx_v_pair_freq = NULL; + PyObject *__pyx_v_total_time = NULL; + PyObject *__pyx_8genexpr1__pyx_v_u = NULL; + PyObject *__pyx_8genexpr1__pyx_v_i = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *(*__pyx_t_8)(PyObject *); + Py_ssize_t __pyx_t_9; + PyObject *(*__pyx_t_10)(PyObject *); + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + int __pyx_t_13; + int __pyx_t_14; + Py_ssize_t __pyx_t_15; + Py_ssize_t __pyx_t_16; + Py_ssize_t __pyx_t_17; + PyObject *(*__pyx_t_18)(PyObject *); + PyObject *__pyx_t_19 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_build_data", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":708 - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":214 + * + * def _build_data(self, data_set): + * import time # <<<<<<<<<<<<<< + * from tqdm import tqdm + * */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_22 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G1.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)))); + __pyx_t_1 = __Pyx_ImportDottedModule(__pyx_n_s_time, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_time = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":709 - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< - * if G1[i, j, k] < 0: - * G1[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":215 + * def _build_data(self, data_set): + * import time + * from tqdm import tqdm # <<<<<<<<<<<<<< + * + * start_time = time.time() */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_22 * __pyx_v_G1.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_23 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_25 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_9 * __pyx_v_sgrad_G1.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides))); + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_tqdm); + __Pyx_GIVEREF(__pyx_n_s_tqdm); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_tqdm); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_tqdm, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 215, __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_tqdm); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_tqdm = __pyx_t_1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":710 - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< - * G1[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":217 + * from tqdm import tqdm * + * start_time = time.time() # <<<<<<<<<<<<<< + * if self.verbose: + * print("Building data started!") */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_26 = (((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_24 * __pyx_v_G1.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_time, __pyx_n_s_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 217, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_3, }; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 217, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_start_time = __pyx_t_2; + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":711 - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: - * G1[i, j, k] = 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":218 + * + * start_time = time.time() + * if self.verbose: # <<<<<<<<<<<<<< + * print("Building data started!") * - * for j in range(n_aspect_factors): */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )) = 0.0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_5) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":710 - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< - * G1[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":219 + * start_time = time.time() + * if self.verbose: + * print("Building data started!") # <<<<<<<<<<<<<< * + * sentiment = self.train_set.sentiment */ - } - } - } + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":713 - * G1[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":218 + * + * start_time = time.time() + * if self.verbose: # <<<<<<<<<<<<<< + * print("Building data started!") * - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: */ - __pyx_t_13 = __pyx_v_n_aspect_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { - __pyx_v_j = __pyx_t_11; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":714 + /* "cornac/models/comparer/recom_comparer_sub.pyx":221 + * print("Building data started!") * - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - */ - __pyx_t_16 = __pyx_v_n_opinion_factors; - __pyx_t_27 = __pyx_t_16; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_27; __pyx_t_14+=1) { - __pyx_v_k = __pyx_t_14; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":715 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { - - /* "cornac/models/comparer/recom_comparer_sub.pyx":716 - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * sentiment = self.train_set.sentiment # <<<<<<<<<<<<<< + * (u_indices, i_indices, r_values) = data_set.uir_tuple + * keys = np.array([get_key(u, i) for u, i in zip(u_indices, i_indices)], dtype=np.intp) */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) ))))); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_sentiment = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":715 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":222 + * + * sentiment = self.train_set.sentiment + * (u_indices, i_indices, r_values) = data_set.uir_tuple # <<<<<<<<<<<<<< + * keys = np.array([get_key(u, i) for u, i in zip(u_indices, i_indices)], dtype=np.intp) + * cdef IntFloatDict rating_dict = IntFloatDict(keys, np.array(r_values, dtype=np.float64)) */ - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_data_set, __pyx_n_s_uir_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 222, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_2 = PyList_GET_ITEM(sequence, 0); + __pyx_t_3 = PyList_GET_ITEM(sequence, 1); + __pyx_t_6 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_6); + #else + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_8 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); + index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L4_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 1; __pyx_t_3 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_8 = NULL; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L5_unpacking_done; + __pyx_L4_unpacking_failed:; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_8 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_L5_unpacking_done:; + } + __pyx_v_u_indices = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_i_indices = __pyx_t_3; + __pyx_t_3 = 0; + __pyx_v_r_values = __pyx_t_6; + __pyx_t_6 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":717 - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":223 + * sentiment = self.train_set.sentiment + * (u_indices, i_indices, r_values) = data_set.uir_tuple + * keys = np.array([get_key(u, i) for u, i in zip(u_indices, i_indices)], dtype=np.intp) # <<<<<<<<<<<<<< + * cdef IntFloatDict rating_dict = IntFloatDict(keys, np.array(r_values, dtype=np.float64)) + * rating_matrix = sp.csr_matrix( */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_20 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_22 * __pyx_v_sgrad_G2.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)))); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + { /* enter inner scope */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_u_indices); + __Pyx_GIVEREF(__pyx_v_u_indices); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_u_indices); + __Pyx_INCREF(__pyx_v_i_indices); + __Pyx_GIVEREF(__pyx_v_i_indices); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_i_indices); + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + 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_9 = 0; + __pyx_t_10 = NULL; + } else { + __pyx_t_9 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 223, __pyx_L8_error) + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + for (;;) { + if (likely(!__pyx_t_10)) { + if (likely(PyList_CheckExact(__pyx_t_3))) { + if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_9); __Pyx_INCREF(__pyx_t_2); __pyx_t_9++; if (unlikely((0 < 0))) __PYX_ERR(0, 223, __pyx_L8_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } else { + if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_9); __Pyx_INCREF(__pyx_t_2); __pyx_t_9++; if (unlikely((0 < 0))) __PYX_ERR(0, 223, __pyx_L8_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } + } else { + __pyx_t_2 = __pyx_t_10(__pyx_t_3); + if (unlikely(!__pyx_t_2)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 223, __pyx_L8_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_2); + } + if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { + PyObject* sequence = __pyx_t_2; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 223, __pyx_L8_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_7 = PyList_GET_ITEM(sequence, 0); + __pyx_t_11 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(__pyx_t_11); + #else + __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 223, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 223, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_11); + #endif + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_12 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 223, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_8 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_12); + index = 0; __pyx_t_7 = __pyx_t_8(__pyx_t_12); if (unlikely(!__pyx_t_7)) goto __pyx_L11_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + index = 1; __pyx_t_11 = __pyx_t_8(__pyx_t_12); if (unlikely(!__pyx_t_11)) goto __pyx_L11_unpacking_failed; + __Pyx_GOTREF(__pyx_t_11); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_12), 2) < 0) __PYX_ERR(0, 223, __pyx_L8_error) + __pyx_t_8 = NULL; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + goto __pyx_L12_unpacking_done; + __pyx_L11_unpacking_failed:; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_8 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 223, __pyx_L8_error) + __pyx_L12_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_u, __pyx_t_7); + __pyx_t_7 = 0; + __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_i, __pyx_t_11); + __pyx_t_11 = 0; + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_8genexpr1__pyx_v_u); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 223, __pyx_L8_error) + __pyx_t_13 = __Pyx_PyInt_As_int(__pyx_8genexpr1__pyx_v_i); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 223, __pyx_L8_error) + __pyx_t_14 = __pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_t_4, __pyx_t_13); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 223, __pyx_L8_error) + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_t_14); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 223, __pyx_L8_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_i); __pyx_8genexpr1__pyx_v_i = 0; + __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_u); __pyx_8genexpr1__pyx_v_u = 0; + goto __pyx_L14_exit_scope; + __pyx_L8_error:; + __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_i); __pyx_8genexpr1__pyx_v_i = 0; + __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_u); __pyx_8genexpr1__pyx_v_u = 0; + goto __pyx_L1_error; + __pyx_L14_exit_scope:; + } /* exit inner scope */ + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_intp); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_11) < 0) __PYX_ERR(0, 223, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_keys = __pyx_t_11; + __pyx_t_11 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":718 - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< - * if G2[i, j, k] < 0: - * G2[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":224 + * (u_indices, i_indices, r_values) = data_set.uir_tuple + * keys = np.array([get_key(u, i) for u, i in zip(u_indices, i_indices)], dtype=np.intp) + * cdef IntFloatDict rating_dict = IntFloatDict(keys, np.array(r_values, dtype=np.float64)) # <<<<<<<<<<<<<< + * rating_matrix = sp.csr_matrix( + * (r_values, (u_indices, i_indices)), */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_22 * __pyx_v_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_G2.strides[1]) ) + __pyx_t_20 * __pyx_v_G2.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_24 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G2.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides))); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_v_r_values); + __Pyx_GIVEREF(__pyx_v_r_values); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_r_values); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_keys); + __Pyx_GIVEREF(__pyx_v_keys); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_keys); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_rating_dict = ((struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *)__pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":719 - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< - * G2[i, j, k] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":225 + * keys = np.array([get_key(u, i) for u, i in zip(u_indices, i_indices)], dtype=np.intp) + * cdef IntFloatDict rating_dict = IntFloatDict(keys, np.array(r_values, dtype=np.float64)) + * rating_matrix = sp.csr_matrix( # <<<<<<<<<<<<<< + * (r_values, (u_indices, i_indices)), + * shape=(self.train_set.num_users, self.train_set.num_items), */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_26 = (((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_23 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_sp); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_csr_matrix); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 225, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":720 - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: - * G2[i, j, k] = 0 # <<<<<<<<<<<<<< - * - * for i in prange(n_item_factors, schedule='guided'): + /* "cornac/models/comparer/recom_comparer_sub.pyx":226 + * cdef IntFloatDict rating_dict = IntFloatDict(keys, np.array(r_values, dtype=np.float64)) + * rating_matrix = sp.csr_matrix( + * (r_values, (u_indices, i_indices)), # <<<<<<<<<<<<<< + * shape=(self.train_set.num_users, self.train_set.num_items), + * ) */ - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) )) = 0.0; + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 226, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_u_indices); + __Pyx_GIVEREF(__pyx_v_u_indices); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_u_indices); + __Pyx_INCREF(__pyx_v_i_indices); + __Pyx_GIVEREF(__pyx_v_i_indices); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_i_indices); + __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 226, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_v_r_values); + __Pyx_GIVEREF(__pyx_v_r_values); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_r_values); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":719 - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< - * G2[i, j, k] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":225 + * keys = np.array([get_key(u, i) for u, i in zip(u_indices, i_indices)], dtype=np.intp) + * cdef IntFloatDict rating_dict = IntFloatDict(keys, np.array(r_values, dtype=np.float64)) + * rating_matrix = sp.csr_matrix( # <<<<<<<<<<<<<< + * (r_values, (u_indices, i_indices)), + * shape=(self.train_set.num_users, self.train_set.num_items), */ - } - } - } - } - } - } - } + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_11); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_11); + __pyx_t_11 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":722 - * G2[i, j, k] = 0 - * - * for i in prange(n_item_factors, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_items): - * if del_i[j, i] != 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":227 + * rating_matrix = sp.csr_matrix( + * (r_values, (u_indices, i_indices)), + * shape=(self.train_set.num_users, self.train_set.num_items), # <<<<<<<<<<<<<< + * ) + * user_item_aspect = {} */ - __pyx_t_12 = __pyx_v_n_item_factors; - if ((1 == 0)) abort(); - { - __pyx_t_3 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_3 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_3; __pyx_t_10++){ - { - __pyx_v_i = (short)(0 + 1 * __pyx_t_10); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((short)0xbad0bad0); - __pyx_v_k = ((short)0xbad0bad0); + __pyx_t_11 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_items); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_7); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_shape, __pyx_t_1) < 0) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":723 - * - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): # <<<<<<<<<<<<<< - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":225 + * keys = np.array([get_key(u, i) for u, i in zip(u_indices, i_indices)], dtype=np.intp) + * cdef IntFloatDict rating_dict = IntFloatDict(keys, np.array(r_values, dtype=np.float64)) + * rating_matrix = sp.csr_matrix( # <<<<<<<<<<<<<< + * (r_values, (u_indices, i_indices)), + * shape=(self.train_set.num_users, self.train_set.num_items), */ - __pyx_t_13 = __pyx_v_n_items; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { - __pyx_v_j = __pyx_t_11; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 225, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_v_rating_matrix = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":724 - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): - * if del_i[j, i] != 0: # <<<<<<<<<<<<<< - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":229 + * shape=(self.train_set.num_users, self.train_set.num_items), + * ) + * user_item_aspect = {} # <<<<<<<<<<<<<< + * user_aspect_opinion = {} + * item_aspect_opinion = {} */ - __pyx_t_23 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 229, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_user_item_aspect = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":725 - * for j in range(n_items): - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] # <<<<<<<<<<<<<< - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":230 + * ) + * user_item_aspect = {} + * user_aspect_opinion = {} # <<<<<<<<<<<<<< + * item_aspect_opinion = {} + * for u_idx, sentiment_tup_ids_by_item in tqdm(sentiment.user_sentiment.items(), disable=not self.verbose, desc='Count aspects'): */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) ))))); + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_user_aspect_opinion = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":724 - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): - * if del_i[j, i] != 0: # <<<<<<<<<<<<<< - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":231 + * user_item_aspect = {} + * user_aspect_opinion = {} + * item_aspect_opinion = {} # <<<<<<<<<<<<<< + * for u_idx, sentiment_tup_ids_by_item in tqdm(sentiment.user_sentiment.items(), disable=not self.verbose, desc='Count aspects'): + * if self.train_set.is_unk_user(u_idx): */ - } + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_item_aspect_opinion = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":726 - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] # <<<<<<<<<<<<<< - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":232 + * user_aspect_opinion = {} + * item_aspect_opinion = {} + * for u_idx, sentiment_tup_ids_by_item in tqdm(sentiment.user_sentiment.items(), disable=not self.verbose, desc='Count aspects'): # <<<<<<<<<<<<<< + * if self.train_set.is_unk_user(u_idx): + * continue */ - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_24 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_I.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":727 - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] # <<<<<<<<<<<<<< - * if I[j, i] < 0: - * I[j, i] = 0 - */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_25 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_I.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[1].strides))); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_user_sentiment); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_items); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_14 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_14 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_11, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_14, 0+__pyx_t_14); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + 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; + } + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 232, __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_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyBool_FromLong((!__pyx_t_5)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_disable, __pyx_t_11) < 0) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_desc, __pyx_kp_u_Count_aspects) < 0) __PYX_ERR(0, 232, __pyx_L1_error) + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_v_tqdm, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_t_11)) || PyTuple_CheckExact(__pyx_t_11)) { + __pyx_t_1 = __pyx_t_11; __Pyx_INCREF(__pyx_t_1); __pyx_t_9 = 0; + __pyx_t_10 = NULL; + } else { + __pyx_t_9 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 232, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + for (;;) { + if (likely(!__pyx_t_10)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_11 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_11); __pyx_t_9++; if (unlikely((0 < 0))) __PYX_ERR(0, 232, __pyx_L1_error) + #else + __pyx_t_11 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + #endif + } else { + if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_11); __pyx_t_9++; if (unlikely((0 < 0))) __PYX_ERR(0, 232, __pyx_L1_error) + #else + __pyx_t_11 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + #endif + } + } else { + __pyx_t_11 = __pyx_t_10(__pyx_t_1); + if (unlikely(!__pyx_t_11)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 232, __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; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 232, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_2 = PyList_GET_ITEM(sequence, 0); + __pyx_t_3 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + #else + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_7 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_8 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); + index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L17_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 1; __pyx_t_3 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L17_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 232, __pyx_L1_error) + __pyx_t_8 = NULL; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L18_unpacking_done; + __pyx_L17_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, 232, __pyx_L1_error) + __pyx_L18_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_u_idx, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_XDECREF_SET(__pyx_v_sentiment_tup_ids_by_item, __pyx_t_3); + __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":728 - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: # <<<<<<<<<<<<<< - * I[j, i] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":233 + * item_aspect_opinion = {} + * for u_idx, sentiment_tup_ids_by_item in tqdm(sentiment.user_sentiment.items(), disable=not self.verbose, desc='Count aspects'): + * if self.train_set.is_unk_user(u_idx): # <<<<<<<<<<<<<< + * continue + * for i_idx, tup_idx in sentiment_tup_ids_by_item.items(): */ - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_26 = (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_18 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_is_unk_user); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_14 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_14 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_u_idx}; + __pyx_t_11 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_14, 1+__pyx_t_14); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (__pyx_t_5) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":729 - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: - * I[j, i] = 0 # <<<<<<<<<<<<<< - * - * for j in range(n_aspect_factors): + /* "cornac/models/comparer/recom_comparer_sub.pyx":234 + * for u_idx, sentiment_tup_ids_by_item in tqdm(sentiment.user_sentiment.items(), disable=not self.verbose, desc='Count aspects'): + * if self.train_set.is_unk_user(u_idx): + * continue # <<<<<<<<<<<<<< + * for i_idx, tup_idx in sentiment_tup_ids_by_item.items(): + * user_item_aspect[ */ - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )) = 0.0; + goto __pyx_L15_continue; - /* "cornac/models/comparer/recom_comparer_sub.pyx":728 - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: # <<<<<<<<<<<<<< - * I[j, i] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":233 + * item_aspect_opinion = {} + * for u_idx, sentiment_tup_ids_by_item in tqdm(sentiment.user_sentiment.items(), disable=not self.verbose, desc='Count aspects'): + * if self.train_set.is_unk_user(u_idx): # <<<<<<<<<<<<<< + * continue + * for i_idx, tup_idx in sentiment_tup_ids_by_item.items(): */ - } - } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":731 - * I[j, i] = 0 - * - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":235 + * if self.train_set.is_unk_user(u_idx): + * continue + * for i_idx, tup_idx in sentiment_tup_ids_by_item.items(): # <<<<<<<<<<<<<< + * user_item_aspect[ + * (u_idx, i_idx, sentiment.num_aspects) */ - __pyx_t_13 = __pyx_v_n_aspect_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { - __pyx_v_j = __pyx_t_11; + __pyx_t_15 = 0; + if (unlikely(__pyx_v_sentiment_tup_ids_by_item == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 235, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_sentiment_tup_ids_by_item, 0, __pyx_n_s_items, (&__pyx_t_16), (&__pyx_t_14)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 235, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_11); + __pyx_t_11 = __pyx_t_2; + __pyx_t_2 = 0; + while (1) { + __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_11, __pyx_t_16, &__pyx_t_15, &__pyx_t_2, &__pyx_t_3, NULL, __pyx_t_14); + if (unlikely(__pyx_t_13 == 0)) break; + if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 235, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_i_idx, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_XDECREF_SET(__pyx_v_tup_idx, __pyx_t_3); + __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":732 - * - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":238 + * user_item_aspect[ + * (u_idx, i_idx, sentiment.num_aspects) + * ] = rating_matrix[u_idx, i_idx] # <<<<<<<<<<<<<< + * for a_idx, o_idx, polarity in sentiment.sentiment[tup_idx]: + * user_item_aspect[(u_idx, i_idx, a_idx)] = ( */ - __pyx_t_16 = __pyx_v_n_opinion_factors; - __pyx_t_27 = __pyx_t_16; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_27; __pyx_t_14+=1) { - __pyx_v_k = __pyx_t_14; + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_u_idx); + __Pyx_GIVEREF(__pyx_v_u_idx); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_u_idx); + __Pyx_INCREF(__pyx_v_i_idx); + __Pyx_GIVEREF(__pyx_v_i_idx); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_i_idx); + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_rating_matrix, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":733 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":237 + * for i_idx, tup_idx in sentiment_tup_ids_by_item.items(): + * user_item_aspect[ + * (u_idx, i_idx, sentiment.num_aspects) # <<<<<<<<<<<<<< + * ] = rating_matrix[u_idx, i_idx] + * for a_idx, o_idx, polarity in sentiment.sentiment[tup_idx]: */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_v_u_idx); + __Pyx_GIVEREF(__pyx_v_u_idx); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_u_idx); + __Pyx_INCREF(__pyx_v_i_idx); + __Pyx_GIVEREF(__pyx_v_i_idx); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_i_idx); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_3); + __pyx_t_3 = 0; + if (unlikely((PyDict_SetItem(__pyx_v_user_item_aspect, __pyx_t_7, __pyx_t_2) < 0))) __PYX_ERR(0, 236, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":734 - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":239 + * (u_idx, i_idx, sentiment.num_aspects) + * ] = rating_matrix[u_idx, i_idx] + * for a_idx, o_idx, polarity in sentiment.sentiment[tup_idx]: # <<<<<<<<<<<<<< + * user_item_aspect[(u_idx, i_idx, a_idx)] = ( + * user_item_aspect.get((u_idx, i_idx, a_idx), 0) */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) ))))); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_v_tup_idx); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) { + __pyx_t_2 = __pyx_t_7; __Pyx_INCREF(__pyx_t_2); __pyx_t_17 = 0; + __pyx_t_18 = NULL; + } else { + __pyx_t_17 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_18 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 239, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + for (;;) { + if (likely(!__pyx_t_18)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + if (__pyx_t_17 >= PyList_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_17); __Pyx_INCREF(__pyx_t_7); __pyx_t_17++; if (unlikely((0 < 0))) __PYX_ERR(0, 239, __pyx_L1_error) + #else + __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } else { + if (__pyx_t_17 >= PyTuple_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_17); __Pyx_INCREF(__pyx_t_7); __pyx_t_17++; if (unlikely((0 < 0))) __PYX_ERR(0, 239, __pyx_L1_error) + #else + __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } + } else { + __pyx_t_7 = __pyx_t_18(__pyx_t_2); + if (unlikely(!__pyx_t_7)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 239, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_7); + } + if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) { + PyObject* sequence = __pyx_t_7; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 239, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_12 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_3 = PyList_GET_ITEM(sequence, 0); + __pyx_t_6 = PyList_GET_ITEM(sequence, 1); + __pyx_t_12 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_12); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_12 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + #endif + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_19 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_19); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_8 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_19); + index = 0; __pyx_t_3 = __pyx_t_8(__pyx_t_19); if (unlikely(!__pyx_t_3)) goto __pyx_L24_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_19); if (unlikely(!__pyx_t_6)) goto __pyx_L24_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + index = 2; __pyx_t_12 = __pyx_t_8(__pyx_t_19); if (unlikely(!__pyx_t_12)) goto __pyx_L24_unpacking_failed; + __Pyx_GOTREF(__pyx_t_12); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_19), 3) < 0) __PYX_ERR(0, 239, __pyx_L1_error) + __pyx_t_8 = NULL; + __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; + goto __pyx_L25_unpacking_done; + __pyx_L24_unpacking_failed:; + __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; + __pyx_t_8 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 239, __pyx_L1_error) + __pyx_L25_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_a_idx, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_XDECREF_SET(__pyx_v_o_idx, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_XDECREF_SET(__pyx_v_polarity, __pyx_t_12); + __pyx_t_12 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":733 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":241 + * for a_idx, o_idx, polarity in sentiment.sentiment[tup_idx]: + * user_item_aspect[(u_idx, i_idx, a_idx)] = ( + * user_item_aspect.get((u_idx, i_idx, a_idx), 0) # <<<<<<<<<<<<<< + * + polarity + * ) */ - } + __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_v_u_idx); + __Pyx_GIVEREF(__pyx_v_u_idx); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_u_idx); + __Pyx_INCREF(__pyx_v_i_idx); + __Pyx_GIVEREF(__pyx_v_i_idx); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_i_idx); + __Pyx_INCREF(__pyx_v_a_idx); + __Pyx_GIVEREF(__pyx_v_a_idx); + PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_a_idx); + __pyx_t_12 = __Pyx_PyDict_GetItemDefault(__pyx_v_user_item_aspect, __pyx_t_7, __pyx_int_0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":735 - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":242 + * user_item_aspect[(u_idx, i_idx, a_idx)] = ( + * user_item_aspect.get((u_idx, i_idx, a_idx), 0) + * + polarity # <<<<<<<<<<<<<< + * ) + * if ( */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_22 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G3.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)))); + __pyx_t_7 = PyNumber_Add(__pyx_t_12, __pyx_v_polarity); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 242, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":736 - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< - * if G3[i, j, k] < 0: - * G3[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":240 + * ] = rating_matrix[u_idx, i_idx] + * for a_idx, o_idx, polarity in sentiment.sentiment[tup_idx]: + * user_item_aspect[(u_idx, i_idx, a_idx)] = ( # <<<<<<<<<<<<<< + * user_item_aspect.get((u_idx, i_idx, a_idx), 0) + * + polarity */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_G3.strides[1]) ) + __pyx_t_22 * __pyx_v_G3.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_23 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G3.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides))); + __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_INCREF(__pyx_v_u_idx); + __Pyx_GIVEREF(__pyx_v_u_idx); + PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_u_idx); + __Pyx_INCREF(__pyx_v_i_idx); + __Pyx_GIVEREF(__pyx_v_i_idx); + PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_i_idx); + __Pyx_INCREF(__pyx_v_a_idx); + __Pyx_GIVEREF(__pyx_v_a_idx); + PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_v_a_idx); + if (unlikely((PyDict_SetItem(__pyx_v_user_item_aspect, __pyx_t_12, __pyx_t_7) < 0))) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":737 - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< - * G3[i, j, k] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":245 + * ) + * if ( + * polarity > 0 # <<<<<<<<<<<<<< + * ): # only include opinion with positive sentiment polarity + * user_aspect_opinion[(u_idx, a_idx, o_idx)] = ( */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_26 = (((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_19 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_7 = PyObject_RichCompare(__pyx_v_polarity, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 245, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 245, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":738 - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: - * G3[i, j, k] = 0 # <<<<<<<<<<<<<< - * - * for i in prange(n_aspects + 1, schedule='guided'): + /* "cornac/models/comparer/recom_comparer_sub.pyx":244 + * + polarity + * ) + * if ( # <<<<<<<<<<<<<< + * polarity > 0 + * ): # only include opinion with positive sentiment polarity */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) )) = 0.0; + if (__pyx_t_5) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":737 - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< - * G3[i, j, k] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":249 + * user_aspect_opinion[(u_idx, a_idx, o_idx)] = ( + * user_aspect_opinion.get( + * (u_idx, a_idx, o_idx), 0 # <<<<<<<<<<<<<< + * ) + * + 1 */ - } - } - } - } - } - } - } + __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_v_u_idx); + __Pyx_GIVEREF(__pyx_v_u_idx); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_u_idx); + __Pyx_INCREF(__pyx_v_a_idx); + __Pyx_GIVEREF(__pyx_v_a_idx); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_a_idx); + __Pyx_INCREF(__pyx_v_o_idx); + __Pyx_GIVEREF(__pyx_v_o_idx); + PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_o_idx); - /* "cornac/models/comparer/recom_comparer_sub.pyx":740 - * G3[i, j, k] = 0 - * - * for i in prange(n_aspects + 1, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":248 + * ): # only include opinion with positive sentiment polarity + * user_aspect_opinion[(u_idx, a_idx, o_idx)] = ( + * user_aspect_opinion.get( # <<<<<<<<<<<<<< + * (u_idx, a_idx, o_idx), 0 + * ) */ - __pyx_t_3 = (__pyx_v_n_aspects + 1); - if ((1 == 0)) abort(); - { - __pyx_t_12 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_12 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_12; __pyx_t_10++){ - { - __pyx_v_i = (short)(0 + 1 * __pyx_t_10); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((short)0xbad0bad0); + __pyx_t_12 = __Pyx_PyDict_GetItemDefault(__pyx_v_user_aspect_opinion, __pyx_t_7, __pyx_int_0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 248, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":741 - * - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":251 + * (u_idx, a_idx, o_idx), 0 + * ) + * + 1 # <<<<<<<<<<<<<< + * ) + * item_aspect_opinion[(i_idx, a_idx, o_idx)] = ( */ - __pyx_t_13 = __pyx_v_n_aspect_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { - __pyx_v_j = __pyx_t_11; + __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_12, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":742 - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: # <<<<<<<<<<<<<< - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":247 + * polarity > 0 + * ): # only include opinion with positive sentiment polarity + * user_aspect_opinion[(u_idx, a_idx, o_idx)] = ( # <<<<<<<<<<<<<< + * user_aspect_opinion.get( + * (u_idx, a_idx, o_idx), 0 */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_INCREF(__pyx_v_u_idx); + __Pyx_GIVEREF(__pyx_v_u_idx); + PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_u_idx); + __Pyx_INCREF(__pyx_v_a_idx); + __Pyx_GIVEREF(__pyx_v_a_idx); + PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_a_idx); + __Pyx_INCREF(__pyx_v_o_idx); + __Pyx_GIVEREF(__pyx_v_o_idx); + PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_v_o_idx); + if (unlikely((PyDict_SetItem(__pyx_v_user_aspect_opinion, __pyx_t_12, __pyx_t_7) < 0))) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":743 - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] # <<<<<<<<<<<<<< - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":255 + * item_aspect_opinion[(i_idx, a_idx, o_idx)] = ( + * item_aspect_opinion.get( + * (i_idx, a_idx, o_idx), 0 # <<<<<<<<<<<<<< + * ) + * + 1 */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) ))))); + __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_v_i_idx); + __Pyx_GIVEREF(__pyx_v_i_idx); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_i_idx); + __Pyx_INCREF(__pyx_v_a_idx); + __Pyx_GIVEREF(__pyx_v_a_idx); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_a_idx); + __Pyx_INCREF(__pyx_v_o_idx); + __Pyx_GIVEREF(__pyx_v_o_idx); + PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_o_idx); - /* "cornac/models/comparer/recom_comparer_sub.pyx":742 - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: # <<<<<<<<<<<<<< - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":254 + * ) + * item_aspect_opinion[(i_idx, a_idx, o_idx)] = ( + * item_aspect_opinion.get( # <<<<<<<<<<<<<< + * (i_idx, a_idx, o_idx), 0 + * ) */ - } + __pyx_t_12 = __Pyx_PyDict_GetItemDefault(__pyx_v_item_aspect_opinion, __pyx_t_7, __pyx_int_0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":744 - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] # <<<<<<<<<<<<<< - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":257 + * (i_idx, a_idx, o_idx), 0 + * ) + * + 1 # <<<<<<<<<<<<<< + * ) + * */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_23 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_A.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)))); + __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_12, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":745 - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] # <<<<<<<<<<<<<< - * if A[i, j] < 0: - * A[i, j] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":253 + * + 1 + * ) + * item_aspect_opinion[(i_idx, a_idx, o_idx)] = ( # <<<<<<<<<<<<<< + * item_aspect_opinion.get( + * (i_idx, a_idx, o_idx), 0 */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_24 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_A.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[1].strides))); + __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_INCREF(__pyx_v_i_idx); + __Pyx_GIVEREF(__pyx_v_i_idx); + PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_i_idx); + __Pyx_INCREF(__pyx_v_a_idx); + __Pyx_GIVEREF(__pyx_v_a_idx); + PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_a_idx); + __Pyx_INCREF(__pyx_v_o_idx); + __Pyx_GIVEREF(__pyx_v_o_idx); + PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_v_o_idx); + if (unlikely((PyDict_SetItem(__pyx_v_item_aspect_opinion, __pyx_t_12, __pyx_t_7) < 0))) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":746 - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: # <<<<<<<<<<<<<< - * A[i, j] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":244 + * + polarity + * ) + * if ( # <<<<<<<<<<<<<< + * polarity > 0 + * ): # only include opinion with positive sentiment polarity */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_26 = (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":747 - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: - * A[i, j] = 0 # <<<<<<<<<<<<<< - * - * for i in prange(n_opinions, schedule='guided'): + /* "cornac/models/comparer/recom_comparer_sub.pyx":239 + * (u_idx, i_idx, sentiment.num_aspects) + * ] = rating_matrix[u_idx, i_idx] + * for a_idx, o_idx, polarity in sentiment.sentiment[tup_idx]: # <<<<<<<<<<<<<< + * user_item_aspect[(u_idx, i_idx, a_idx)] = ( + * user_item_aspect.get((u_idx, i_idx, a_idx), 0) */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )) = 0.0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":746 - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: # <<<<<<<<<<<<<< - * A[i, j] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":232 + * user_aspect_opinion = {} + * item_aspect_opinion = {} + * for u_idx, sentiment_tup_ids_by_item in tqdm(sentiment.user_sentiment.items(), disable=not self.verbose, desc='Count aspects'): # <<<<<<<<<<<<<< + * if self.train_set.is_unk_user(u_idx): + * continue */ - } - } - } - } - } - } + __pyx_L15_continue:; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":749 - * A[i, j] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":260 + * ) * - * for i in prange(n_opinions, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: + * for key in tqdm(user_item_aspect.keys(), disable=not self.verbose, desc='Compute X'): # <<<<<<<<<<<<<< + * if key[2] != sentiment.num_aspects: + * user_item_aspect[key] = self._compute_quality_score( */ - __pyx_t_12 = __pyx_v_n_opinions; - if ((1 == 0)) abort(); - { - __pyx_t_3 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_3 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_3; __pyx_t_10++){ - { - __pyx_v_i = (short)(0 + 1 * __pyx_t_10); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((short)0xbad0bad0); + __pyx_t_1 = __Pyx_PyDict_Keys(__pyx_v_user_item_aspect); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyBool_FromLong((!__pyx_t_5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_disable, __pyx_t_2) < 0) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_desc, __pyx_kp_u_Compute_X) < 0) __PYX_ERR(0, 260, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_tqdm, __pyx_t_11, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { + __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_9 = 0; + __pyx_t_10 = NULL; + } else { + __pyx_t_9 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 260, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + for (;;) { + if (likely(!__pyx_t_10)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_2); __pyx_t_9++; if (unlikely((0 < 0))) __PYX_ERR(0, 260, __pyx_L1_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } else { + if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_2); __pyx_t_9++; if (unlikely((0 < 0))) __PYX_ERR(0, 260, __pyx_L1_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } + } else { + __pyx_t_2 = __pyx_t_10(__pyx_t_1); + if (unlikely(!__pyx_t_2)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 260, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_2); + } + __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":750 + /* "cornac/models/comparer/recom_comparer_sub.pyx":261 * - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * for key in tqdm(user_item_aspect.keys(), disable=not self.verbose, desc='Compute X'): + * if key[2] != sentiment.num_aspects: # <<<<<<<<<<<<<< + * user_item_aspect[key] = self._compute_quality_score( + * user_item_aspect[key] */ - __pyx_t_13 = __pyx_v_n_opinion_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { - __pyx_v_j = __pyx_t_11; + __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_key, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_7 = PyObject_RichCompare(__pyx_t_2, __pyx_t_11, Py_NE); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (__pyx_t_5) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":751 - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: # <<<<<<<<<<<<<< - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":262 + * for key in tqdm(user_item_aspect.keys(), disable=not self.verbose, desc='Compute X'): + * if key[2] != sentiment.num_aspects: + * user_item_aspect[key] = self._compute_quality_score( # <<<<<<<<<<<<<< + * user_item_aspect[key] + * ) */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_compute_quality_score); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 262, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); - /* "cornac/models/comparer/recom_comparer_sub.pyx":752 - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] # <<<<<<<<<<<<<< - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":263 + * if key[2] != sentiment.num_aspects: + * user_item_aspect[key] = self._compute_quality_score( + * user_item_aspect[key] # <<<<<<<<<<<<<< + * ) + * */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_o_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) ))))); + __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_user_item_aspect, __pyx_v_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 263, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_12 = NULL; + __pyx_t_14 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_14 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_2}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_14, 1+__pyx_t_14); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 262, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":751 - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: # <<<<<<<<<<<<<< - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":262 + * for key in tqdm(user_item_aspect.keys(), disable=not self.verbose, desc='Compute X'): + * if key[2] != sentiment.num_aspects: + * user_item_aspect[key] = self._compute_quality_score( # <<<<<<<<<<<<<< + * user_item_aspect[key] + * ) */ - } + if (unlikely((PyDict_SetItem(__pyx_v_user_item_aspect, __pyx_v_key, __pyx_t_7) < 0))) __PYX_ERR(0, 262, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":753 - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] # <<<<<<<<<<<<<< - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":261 + * + * for key in tqdm(user_item_aspect.keys(), disable=not self.verbose, desc='Compute X'): + * if key[2] != sentiment.num_aspects: # <<<<<<<<<<<<<< + * user_item_aspect[key] = self._compute_quality_score( + * user_item_aspect[key] */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_9 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_O.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)))); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":754 - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] # <<<<<<<<<<<<<< - * if O[i, j] < 0: - * O[i, j] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":260 + * ) + * + * for key in tqdm(user_item_aspect.keys(), disable=not self.verbose, desc='Compute X'): # <<<<<<<<<<<<<< + * if key[2] != sentiment.num_aspects: + * user_item_aspect[key] = self._compute_quality_score( */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_23 * __pyx_v_O.strides[0]) ) + __pyx_t_9 * __pyx_v_O.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_25 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_O.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[1].strides))); + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":755 - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: # <<<<<<<<<<<<<< - * O[i, j] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":266 + * ) * + * for key in tqdm(user_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YU'): # <<<<<<<<<<<<<< + * user_aspect_opinion[key] = self._compute_attention_score( + * user_aspect_opinion[key] */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_26 = (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_19 * __pyx_v_O.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_1 = __Pyx_PyDict_Keys(__pyx_v_user_aspect_opinion); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 266, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 266, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 266, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyBool_FromLong((!__pyx_t_5)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 266, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_disable, __pyx_t_11) < 0) __PYX_ERR(0, 266, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_desc, __pyx_kp_u_Compute_YU) < 0) __PYX_ERR(0, 266, __pyx_L1_error) + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_v_tqdm, __pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 266, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_t_11)) || PyTuple_CheckExact(__pyx_t_11)) { + __pyx_t_1 = __pyx_t_11; __Pyx_INCREF(__pyx_t_1); __pyx_t_9 = 0; + __pyx_t_10 = NULL; + } else { + __pyx_t_9 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 266, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + for (;;) { + if (likely(!__pyx_t_10)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_11 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_11); __pyx_t_9++; if (unlikely((0 < 0))) __PYX_ERR(0, 266, __pyx_L1_error) + #else + __pyx_t_11 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 266, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + #endif + } else { + if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_11); __pyx_t_9++; if (unlikely((0 < 0))) __PYX_ERR(0, 266, __pyx_L1_error) + #else + __pyx_t_11 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 266, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + #endif + } + } else { + __pyx_t_11 = __pyx_t_10(__pyx_t_1); + if (unlikely(!__pyx_t_11)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 266, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_11); + } + __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_11); + __pyx_t_11 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":756 - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: - * O[i, j] = 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":267 * - * return correct, skipped, loss, bpr_loss + * for key in tqdm(user_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YU'): + * user_aspect_opinion[key] = self._compute_attention_score( # <<<<<<<<<<<<<< + * user_aspect_opinion[key] + * ) */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )) = 0.0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_compute_attention_score); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); - /* "cornac/models/comparer/recom_comparer_sub.pyx":755 - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: # <<<<<<<<<<<<<< - * O[i, j] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":268 + * for key in tqdm(user_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YU'): + * user_aspect_opinion[key] = self._compute_attention_score( + * user_aspect_opinion[key] # <<<<<<<<<<<<<< + * ) * */ - } - } - } - } - } - } - } - } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif + __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_user_aspect_opinion, __pyx_v_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 268, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_12 = NULL; + __pyx_t_14 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_14 = 1; } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_2}; + __pyx_t_11 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_14, 1+__pyx_t_14); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":694 + /* "cornac/models/comparer/recom_comparer_sub.pyx":267 * - * # update params with AdaGrad - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): + * for key in tqdm(user_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YU'): + * user_aspect_opinion[key] = self._compute_attention_score( # <<<<<<<<<<<<<< + * user_aspect_opinion[key] + * ) */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L66; - } - __pyx_L66:; - } - } + if (unlikely((PyDict_SetItem(__pyx_v_user_aspect_opinion, __pyx_v_key, __pyx_t_11) < 0))) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":758 - * O[i, j] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":266 + * ) * - * return correct, skipped, loss, bpr_loss # <<<<<<<<<<<<<< + * for key in tqdm(user_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YU'): # <<<<<<<<<<<<<< + * user_aspect_opinion[key] = self._compute_attention_score( + * user_aspect_opinion[key] + */ + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":271 + * ) * - * def rank(self, user_id, item_ids=None): + * for key in tqdm(item_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YI'): # <<<<<<<<<<<<<< + * item_aspect_opinion[key] = self._compute_attention_score( + * item_aspect_opinion[key] */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_correct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_Keys(__pyx_v_item_aspect_opinion); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 271, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v_skipped); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_28 = PyFloat_FromDouble(__pyx_v_bpr_loss); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_28); - __pyx_t_29 = PyTuple_New(4); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_29); + __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_29, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_29, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_29, 2, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_28); - PyTuple_SET_ITEM(__pyx_t_29, 3, __pyx_t_28); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyBool_FromLong((!__pyx_t_5)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_disable, __pyx_t_7) < 0) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_desc, __pyx_kp_u_Compute_YI) < 0) __PYX_ERR(0, 271, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_tqdm, __pyx_t_11, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) { + __pyx_t_1 = __pyx_t_7; __Pyx_INCREF(__pyx_t_1); __pyx_t_9 = 0; + __pyx_t_10 = NULL; + } else { + __pyx_t_9 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 271, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + for (;;) { + if (likely(!__pyx_t_10)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_7); __pyx_t_9++; if (unlikely((0 < 0))) __PYX_ERR(0, 271, __pyx_L1_error) + #else + __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } else { + if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_7); __pyx_t_9++; if (unlikely((0 < 0))) __PYX_ERR(0, 271, __pyx_L1_error) + #else + __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } + } else { + __pyx_t_7 = __pyx_t_10(__pyx_t_1); + if (unlikely(!__pyx_t_7)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 271, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_7); + } + __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_7); + __pyx_t_7 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":272 + * + * for key in tqdm(item_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YI'): + * item_aspect_opinion[key] = self._compute_attention_score( # <<<<<<<<<<<<<< + * item_aspect_opinion[key] + * ) + */ + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_compute_attention_score); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":273 + * for key in tqdm(item_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YI'): + * item_aspect_opinion[key] = self._compute_attention_score( + * item_aspect_opinion[key] # <<<<<<<<<<<<<< + * ) + * Y = self._build_item_quality_matrix(data_set, sentiment) + */ + __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_item_aspect_opinion, __pyx_v_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_12 = NULL; + __pyx_t_14 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_14 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_2}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_14, 1+__pyx_t_14); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":272 + * + * for key in tqdm(item_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YI'): + * item_aspect_opinion[key] = self._compute_attention_score( # <<<<<<<<<<<<<< + * item_aspect_opinion[key] + * ) + */ + if (unlikely((PyDict_SetItem(__pyx_v_item_aspect_opinion, __pyx_v_key, __pyx_t_7) < 0))) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":271 + * ) + * + * for key in tqdm(item_aspect_opinion.keys(), disable=not self.verbose, desc='Compute YI'): # <<<<<<<<<<<<<< + * item_aspect_opinion[key] = self._compute_attention_score( + * item_aspect_opinion[key] + */ + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":275 + * item_aspect_opinion[key] + * ) + * Y = self._build_item_quality_matrix(data_set, sentiment) # <<<<<<<<<<<<<< + * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = self._build_chrono_purchased_pairs(data_set, user_item_aspect, Y) + * + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_build_item_quality_matrix); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_11 = NULL; + __pyx_t_14 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_14 = 1; + } + } + { + PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_v_data_set, __pyx_v_sentiment}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_14, 2+__pyx_t_14); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_v_Y = __pyx_t_1; __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":276 + * ) + * Y = self._build_item_quality_matrix(data_set, sentiment) + * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = self._build_chrono_purchased_pairs(data_set, user_item_aspect, Y) # <<<<<<<<<<<<<< + * + * if self.verbose: + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_build_chrono_purchased_pairs); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_11 = NULL; + __pyx_t_14 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_14 = 1; + } + } + { + PyObject *__pyx_callargs[4] = {__pyx_t_11, __pyx_v_data_set, __pyx_v_user_item_aspect, __pyx_v_Y}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_14, 3+__pyx_t_14); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 5)) { + if (size > 5) __Pyx_RaiseTooManyValuesError(5); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 276, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_12 = PyTuple_GET_ITEM(sequence, 3); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 4); + } else { + __pyx_t_7 = PyList_GET_ITEM(sequence, 0); + __pyx_t_11 = PyList_GET_ITEM(sequence, 1); + __pyx_t_2 = PyList_GET_ITEM(sequence, 2); + __pyx_t_12 = PyList_GET_ITEM(sequence, 3); + __pyx_t_6 = PyList_GET_ITEM(sequence, 4); + } + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(__pyx_t_6); + #else + { + Py_ssize_t i; + PyObject** temps[5] = {&__pyx_t_7,&__pyx_t_11,&__pyx_t_2,&__pyx_t_12,&__pyx_t_6}; + for (i=0; i < 5; i++) { + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 276, __pyx_L1_error) + __Pyx_GOTREF(item); + *(temps[i]) = item; + } + } + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + Py_ssize_t index = -1; + PyObject** temps[5] = {&__pyx_t_7,&__pyx_t_11,&__pyx_t_2,&__pyx_t_12,&__pyx_t_6}; + __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_8 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); + for (index=0; index < 5; index++) { + PyObject* item = __pyx_t_8(__pyx_t_3); if (unlikely(!item)) goto __pyx_L39_unpacking_failed; + __Pyx_GOTREF(item); + *(temps[index]) = item; + } + if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_3), 5) < 0) __PYX_ERR(0, 276, __pyx_L1_error) + __pyx_t_8 = NULL; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L40_unpacking_done; + __pyx_L39_unpacking_failed:; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_8 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 276, __pyx_L1_error) + __pyx_L40_unpacking_done:; + } + __pyx_v_user_indices = __pyx_t_7; + __pyx_t_7 = 0; + __pyx_v_earlier_indices = __pyx_t_11; + __pyx_t_11 = 0; + __pyx_v_later_indices = __pyx_t_2; __pyx_t_2 = 0; + __pyx_v_aspect_indices = __pyx_t_12; + __pyx_t_12 = 0; + __pyx_v_pair_freq = __pyx_t_6; __pyx_t_6 = 0; - __pyx_t_28 = 0; - __pyx_r = __pyx_t_29; - __pyx_t_29 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":278 + * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = self._build_chrono_purchased_pairs(data_set, user_item_aspect, Y) + * + * if self.verbose: # <<<<<<<<<<<<<< + * total_time = time.time() - start_time + * print("Building data completed in %d s" % total_time) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 278, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 278, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_5) { + + /* "cornac/models/comparer/recom_comparer_sub.pyx":279 + * + * if self.verbose: + * total_time = time.time() - start_time # <<<<<<<<<<<<<< + * print("Building data completed in %d s" % total_time) + * return ( + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_time, __pyx_n_s_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 279, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_12 = NULL; + __pyx_t_14 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_14 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_12, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_14, 0+__pyx_t_14); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 279, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_6 = PyNumber_Subtract(__pyx_t_1, __pyx_v_start_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 279, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_total_time = __pyx_t_6; + __pyx_t_6 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":280 + * if self.verbose: + * total_time = time.time() - start_time + * print("Building data completed in %d s" % total_time) # <<<<<<<<<<<<<< + * return ( + * rating_matrix, + */ + __pyx_t_6 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_Building_data_completed_in_d_s, __pyx_v_total_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 280, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 280, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":278 + * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = self._build_chrono_purchased_pairs(data_set, user_item_aspect, Y) + * + * if self.verbose: # <<<<<<<<<<<<<< + * total_time = time.time() - start_time + * print("Building data completed in %d s" % total_time) + */ + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":281 + * total_time = time.time() - start_time + * print("Building data completed in %d s" % total_time) + * return ( # <<<<<<<<<<<<<< + * rating_matrix, + * rating_dict, + */ + __Pyx_XDECREF(__pyx_r); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":282 + * print("Building data completed in %d s" % total_time) + * return ( + * rating_matrix, # <<<<<<<<<<<<<< + * rating_dict, + * user_item_aspect, + */ + __pyx_t_1 = PyTuple_New(10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 282, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_rating_matrix); + __Pyx_GIVEREF(__pyx_v_rating_matrix); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_rating_matrix); + __Pyx_INCREF((PyObject *)__pyx_v_rating_dict); + __Pyx_GIVEREF((PyObject *)__pyx_v_rating_dict); + PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_rating_dict)); + __Pyx_INCREF(__pyx_v_user_item_aspect); + __Pyx_GIVEREF(__pyx_v_user_item_aspect); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_user_item_aspect); + __Pyx_INCREF(__pyx_v_user_aspect_opinion); + __Pyx_GIVEREF(__pyx_v_user_aspect_opinion); + PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_user_aspect_opinion); + __Pyx_INCREF(__pyx_v_item_aspect_opinion); + __Pyx_GIVEREF(__pyx_v_item_aspect_opinion); + PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_v_item_aspect_opinion); + __Pyx_INCREF(__pyx_v_user_indices); + __Pyx_GIVEREF(__pyx_v_user_indices); + PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_v_user_indices); + __Pyx_INCREF(__pyx_v_earlier_indices); + __Pyx_GIVEREF(__pyx_v_earlier_indices); + PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_v_earlier_indices); + __Pyx_INCREF(__pyx_v_later_indices); + __Pyx_GIVEREF(__pyx_v_later_indices); + PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_v_later_indices); + __Pyx_INCREF(__pyx_v_aspect_indices); + __Pyx_GIVEREF(__pyx_v_aspect_indices); + PyTuple_SET_ITEM(__pyx_t_1, 8, __pyx_v_aspect_indices); + __Pyx_INCREF(__pyx_v_pair_freq); + __Pyx_GIVEREF(__pyx_v_pair_freq); + PyTuple_SET_ITEM(__pyx_t_1, 9, __pyx_v_pair_freq); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":485 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def _fit_mter( # <<<<<<<<<<<<<< - * self, - * RNGVector rng_pos_uia, + /* "cornac/models/comparer/recom_comparer_sub.pyx":213 + * return Y + * + * def _build_data(self, data_set): # <<<<<<<<<<<<<< + * import time + * from tqdm import tqdm */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_28); - __Pyx_XDECREF(__pyx_t_29); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_19); + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._build_data", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; - goto __pyx_L2; __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); - __pyx_L2:; - __PYX_XDEC_MEMVIEW(&__pyx_v_X, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_oids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_oids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_user_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_item_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_neg_item_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_indptr, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_p_user_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_earlier_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_later_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_aspect_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_pair_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G3, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_O, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G3, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_U, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_I, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_O, 1); + __Pyx_XDECREF(__pyx_v_time); + __Pyx_XDECREF(__pyx_v_tqdm); + __Pyx_XDECREF(__pyx_v_start_time); + __Pyx_XDECREF(__pyx_v_sentiment); + __Pyx_XDECREF(__pyx_v_u_indices); + __Pyx_XDECREF(__pyx_v_i_indices); + __Pyx_XDECREF(__pyx_v_r_values); + __Pyx_XDECREF(__pyx_v_keys); + __Pyx_XDECREF((PyObject *)__pyx_v_rating_dict); + __Pyx_XDECREF(__pyx_v_rating_matrix); + __Pyx_XDECREF(__pyx_v_user_item_aspect); + __Pyx_XDECREF(__pyx_v_user_aspect_opinion); + __Pyx_XDECREF(__pyx_v_item_aspect_opinion); + __Pyx_XDECREF(__pyx_v_u_idx); + __Pyx_XDECREF(__pyx_v_sentiment_tup_ids_by_item); + __Pyx_XDECREF(__pyx_v_i_idx); + __Pyx_XDECREF(__pyx_v_tup_idx); + __Pyx_XDECREF(__pyx_v_a_idx); + __Pyx_XDECREF(__pyx_v_o_idx); + __Pyx_XDECREF(__pyx_v_polarity); + __Pyx_XDECREF(__pyx_v_key); + __Pyx_XDECREF(__pyx_v_Y); + __Pyx_XDECREF(__pyx_v_user_indices); + __Pyx_XDECREF(__pyx_v_earlier_indices); + __Pyx_XDECREF(__pyx_v_later_indices); + __Pyx_XDECREF(__pyx_v_aspect_indices); + __Pyx_XDECREF(__pyx_v_pair_freq); + __Pyx_XDECREF(__pyx_v_total_time); + __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_u); + __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_i); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } +/* "cornac/models/comparer/recom_comparer_sub.pyx":290 + * ) + * + * def _build_chrono_purchased_pairs(self, data_set, user_item_aspect, Y): # <<<<<<<<<<<<<< + * start_time = time() + * from tqdm import tqdm + */ + /* Python wrapper */ -static PyObject *__pyx_fuse_1_1__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_23_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_fuse_1_1__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_23_fit_mter = {"__pyx_fuse_1_1_fit_mter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1_1__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_23_fit_mter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter}; -static PyObject *__pyx_fuse_1_1__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_23_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_7_build_chrono_purchased_pairs(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_7_build_chrono_purchased_pairs = {"_build_chrono_purchased_pairs", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_7_build_chrono_purchased_pairs, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_7_build_chrono_purchased_pairs(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v_self = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg = 0; - int __pyx_v_n_threads; - __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; - struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict = 0; - __Pyx_memviewslice __pyx_v_user_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_neg_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_indptr = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_p_user_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_earlier_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_later_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_aspect_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_O = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_U = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_I = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_O = { 0, 0, { 0 }, { 0 }, { 0 } }; - PyArrayObject *__pyx_v_del_g1 = 0; - PyArrayObject *__pyx_v_del_g2 = 0; - PyArrayObject *__pyx_v_del_g3 = 0; - PyArrayObject *__pyx_v_del_u = 0; - PyArrayObject *__pyx_v_del_i = 0; - PyArrayObject *__pyx_v_del_a = 0; - PyArrayObject *__pyx_v_del_o = 0; - PyArrayObject *__pyx_v_del_g1_reg = 0; - PyArrayObject *__pyx_v_del_g2_reg = 0; - PyArrayObject *__pyx_v_del_g3_reg = 0; - PyArrayObject *__pyx_v_del_u_reg = 0; - PyArrayObject *__pyx_v_del_i_reg = 0; - PyArrayObject *__pyx_v_del_a_reg = 0; - PyArrayObject *__pyx_v_del_o_reg = 0; + PyObject *__pyx_v_data_set = 0; + PyObject *__pyx_v_user_item_aspect = 0; + PyObject *__pyx_v_Y = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_fit_mter (wrapper)", 0); + __Pyx_RefNannySetupContext("_build_chrono_purchased_pairs (wrapper)", 0); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_rng_pos_uia,&__pyx_n_s_rng_pos_uao,&__pyx_n_s_rng_pos_iao,&__pyx_n_s_rng_pos_pair,&__pyx_n_s_rng_pos,&__pyx_n_s_rng_neg,&__pyx_n_s_n_threads,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_iids,&__pyx_n_s_X_aids,&__pyx_n_s_YU,&__pyx_n_s_YU_uids,&__pyx_n_s_YU_aids,&__pyx_n_s_YU_oids,&__pyx_n_s_YI,&__pyx_n_s_YI_iids,&__pyx_n_s_YI_aids,&__pyx_n_s_YI_oids,&__pyx_n_s_rating_dict,&__pyx_n_s_user_ids,&__pyx_n_s_item_ids,&__pyx_n_s_neg_item_ids,&__pyx_n_s_indptr,&__pyx_n_s_p_user_indices,&__pyx_n_s_earlier_indices,&__pyx_n_s_later_indices,&__pyx_n_s_aspect_indices,&__pyx_n_s_pair_counts,&__pyx_n_s_G1,&__pyx_n_s_G2,&__pyx_n_s_G3,&__pyx_n_s_U,&__pyx_n_s_I,&__pyx_n_s_A,&__pyx_n_s_O,&__pyx_n_s_sgrad_G1,&__pyx_n_s_sgrad_G2,&__pyx_n_s_sgrad_G3,&__pyx_n_s_sgrad_U,&__pyx_n_s_sgrad_I,&__pyx_n_s_sgrad_A,&__pyx_n_s_sgrad_O,&__pyx_n_s_del_g1,&__pyx_n_s_del_g2,&__pyx_n_s_del_g3,&__pyx_n_s_del_u,&__pyx_n_s_del_i,&__pyx_n_s_del_a,&__pyx_n_s_del_o,&__pyx_n_s_del_g1_reg,&__pyx_n_s_del_g2_reg,&__pyx_n_s_del_g3_reg,&__pyx_n_s_del_u_reg,&__pyx_n_s_del_i_reg,&__pyx_n_s_del_a_reg,&__pyx_n_s_del_o_reg,0}; - PyObject* values[58] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_data_set,&__pyx_n_s_user_item_aspect,&__pyx_n_s_Y,0}; + PyObject* values[4] = {0,0,0,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 58: values[57] = PyTuple_GET_ITEM(__pyx_args, 57); - CYTHON_FALLTHROUGH; - case 57: values[56] = PyTuple_GET_ITEM(__pyx_args, 56); - CYTHON_FALLTHROUGH; - case 56: values[55] = PyTuple_GET_ITEM(__pyx_args, 55); - CYTHON_FALLTHROUGH; - case 55: values[54] = PyTuple_GET_ITEM(__pyx_args, 54); - CYTHON_FALLTHROUGH; - case 54: values[53] = PyTuple_GET_ITEM(__pyx_args, 53); - CYTHON_FALLTHROUGH; - case 53: values[52] = PyTuple_GET_ITEM(__pyx_args, 52); - CYTHON_FALLTHROUGH; - case 52: values[51] = PyTuple_GET_ITEM(__pyx_args, 51); - CYTHON_FALLTHROUGH; - case 51: values[50] = PyTuple_GET_ITEM(__pyx_args, 50); - CYTHON_FALLTHROUGH; - case 50: values[49] = PyTuple_GET_ITEM(__pyx_args, 49); - CYTHON_FALLTHROUGH; - case 49: values[48] = PyTuple_GET_ITEM(__pyx_args, 48); - CYTHON_FALLTHROUGH; - case 48: values[47] = PyTuple_GET_ITEM(__pyx_args, 47); - CYTHON_FALLTHROUGH; - case 47: values[46] = PyTuple_GET_ITEM(__pyx_args, 46); - CYTHON_FALLTHROUGH; - case 46: values[45] = PyTuple_GET_ITEM(__pyx_args, 45); - CYTHON_FALLTHROUGH; - case 45: values[44] = PyTuple_GET_ITEM(__pyx_args, 44); - CYTHON_FALLTHROUGH; - case 44: values[43] = PyTuple_GET_ITEM(__pyx_args, 43); - CYTHON_FALLTHROUGH; - case 43: values[42] = PyTuple_GET_ITEM(__pyx_args, 42); - CYTHON_FALLTHROUGH; - case 42: values[41] = PyTuple_GET_ITEM(__pyx_args, 41); - CYTHON_FALLTHROUGH; - case 41: values[40] = PyTuple_GET_ITEM(__pyx_args, 40); - CYTHON_FALLTHROUGH; - case 40: values[39] = PyTuple_GET_ITEM(__pyx_args, 39); - CYTHON_FALLTHROUGH; - case 39: values[38] = PyTuple_GET_ITEM(__pyx_args, 38); - CYTHON_FALLTHROUGH; - case 38: values[37] = PyTuple_GET_ITEM(__pyx_args, 37); - CYTHON_FALLTHROUGH; - case 37: values[36] = PyTuple_GET_ITEM(__pyx_args, 36); - CYTHON_FALLTHROUGH; - case 36: values[35] = PyTuple_GET_ITEM(__pyx_args, 35); - CYTHON_FALLTHROUGH; - case 35: values[34] = PyTuple_GET_ITEM(__pyx_args, 34); - CYTHON_FALLTHROUGH; - case 34: values[33] = PyTuple_GET_ITEM(__pyx_args, 33); + switch (__pyx_nargs) { + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); CYTHON_FALLTHROUGH; - case 33: values[32] = PyTuple_GET_ITEM(__pyx_args, 32); + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 32: values[31] = PyTuple_GET_ITEM(__pyx_args, 31); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 31: values[30] = PyTuple_GET_ITEM(__pyx_args, 30); - CYTHON_FALLTHROUGH; - case 30: values[29] = PyTuple_GET_ITEM(__pyx_args, 29); - CYTHON_FALLTHROUGH; - case 29: values[28] = PyTuple_GET_ITEM(__pyx_args, 28); - CYTHON_FALLTHROUGH; - case 28: values[27] = PyTuple_GET_ITEM(__pyx_args, 27); - CYTHON_FALLTHROUGH; - case 27: values[26] = PyTuple_GET_ITEM(__pyx_args, 26); - CYTHON_FALLTHROUGH; - case 26: values[25] = PyTuple_GET_ITEM(__pyx_args, 25); - CYTHON_FALLTHROUGH; - case 25: values[24] = PyTuple_GET_ITEM(__pyx_args, 24); - CYTHON_FALLTHROUGH; - case 24: values[23] = PyTuple_GET_ITEM(__pyx_args, 23); - CYTHON_FALLTHROUGH; - case 23: values[22] = PyTuple_GET_ITEM(__pyx_args, 22); - CYTHON_FALLTHROUGH; - case 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - CYTHON_FALLTHROUGH; - case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - CYTHON_FALLTHROUGH; - case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - CYTHON_FALLTHROUGH; - case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - CYTHON_FALLTHROUGH; - case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - CYTHON_FALLTHROUGH; - case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - CYTHON_FALLTHROUGH; - case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - CYTHON_FALLTHROUGH; - case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - CYTHON_FALLTHROUGH; - case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - CYTHON_FALLTHROUGH; - case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - CYTHON_FALLTHROUGH; - case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - CYTHON_FALLTHROUGH; - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 290, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_uia)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data_set)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 290, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 1); __PYX_ERR(0, 485, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("_build_chrono_purchased_pairs", 1, 4, 4, 1); __PYX_ERR(0, 290, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_uao)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_user_item_aspect)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 290, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 2); __PYX_ERR(0, 485, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("_build_chrono_purchased_pairs", 1, 4, 4, 2); __PYX_ERR(0, 290, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_iao)) != 0)) kw_args--; + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 290, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 3); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_pair)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 4); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 5); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_neg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 6); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_threads)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 7); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 8); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 9: - if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 9); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 10: - if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 10); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 11: - if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 11); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 12: - if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 12); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 13: - if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 13); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 14: - if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 14); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 15: - if (likely((values[15] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_oids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 15); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 16: - if (likely((values[16] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 16); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 17: - if (likely((values[17] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 17); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 18: - if (likely((values[18] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 18); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 19: - if (likely((values[19] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_oids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 19); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 20: - if (likely((values[20] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rating_dict)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 20); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 21: - if (likely((values[21] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_user_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 21); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 22: - if (likely((values[22] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 22); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 23: - if (likely((values[23] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_neg_item_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 23); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 24: - if (likely((values[24] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_indptr)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 24); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 25: - if (likely((values[25] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_p_user_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 25); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 26: - if (likely((values[26] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_earlier_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 26); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 27: - if (likely((values[27] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_later_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 27); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 28: - if (likely((values[28] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_aspect_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 28); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 29: - if (likely((values[29] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pair_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 29); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 30: - if (likely((values[30] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 30); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 31: - if (likely((values[31] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 31); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 32: - if (likely((values[32] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 32); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 33: - if (likely((values[33] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 33); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 34: - if (likely((values[34] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 34); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 35: - if (likely((values[35] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 35); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 36: - if (likely((values[36] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_O)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 36); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 37: - if (likely((values[37] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 37); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 38: - if (likely((values[38] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 38); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 39: - if (likely((values[39] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 39); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 40: - if (likely((values[40] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_U)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 40); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 41: - if (likely((values[41] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_I)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 41); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 42: - if (likely((values[42] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 42); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 43: - if (likely((values[43] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_O)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 43); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 44: - if (likely((values[44] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 44); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 45: - if (likely((values[45] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 45); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 46: - if (likely((values[46] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 46); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 47: - if (likely((values[47] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_u)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 47); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 48: - if (likely((values[48] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_i)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 48); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 49: - if (likely((values[49] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_a)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 49); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 50: - if (likely((values[50] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_o)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 50); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 51: - if (likely((values[51] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g1_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 51); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 52: - if (likely((values[52] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g2_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 52); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 53: - if (likely((values[53] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g3_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 53); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 54: - if (likely((values[54] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_u_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 54); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 55: - if (likely((values[55] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_i_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 55); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 56: - if (likely((values[56] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_a_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 56); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 57: - if (likely((values[57] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_o_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 57); __PYX_ERR(0, 485, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("_build_chrono_purchased_pairs", 1, 4, 4, 3); __PYX_ERR(0, 290, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_fit_mter") < 0)) __PYX_ERR(0, 485, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_build_chrono_purchased_pairs") < 0)) __PYX_ERR(0, 290, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 58) { + } else if (unlikely(__pyx_nargs != 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); - values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - values[22] = PyTuple_GET_ITEM(__pyx_args, 22); - values[23] = PyTuple_GET_ITEM(__pyx_args, 23); - values[24] = PyTuple_GET_ITEM(__pyx_args, 24); - values[25] = PyTuple_GET_ITEM(__pyx_args, 25); - values[26] = PyTuple_GET_ITEM(__pyx_args, 26); - values[27] = PyTuple_GET_ITEM(__pyx_args, 27); - values[28] = PyTuple_GET_ITEM(__pyx_args, 28); - values[29] = PyTuple_GET_ITEM(__pyx_args, 29); - values[30] = PyTuple_GET_ITEM(__pyx_args, 30); - values[31] = PyTuple_GET_ITEM(__pyx_args, 31); - values[32] = PyTuple_GET_ITEM(__pyx_args, 32); - values[33] = PyTuple_GET_ITEM(__pyx_args, 33); - values[34] = PyTuple_GET_ITEM(__pyx_args, 34); - values[35] = PyTuple_GET_ITEM(__pyx_args, 35); - values[36] = PyTuple_GET_ITEM(__pyx_args, 36); - values[37] = PyTuple_GET_ITEM(__pyx_args, 37); - values[38] = PyTuple_GET_ITEM(__pyx_args, 38); - values[39] = PyTuple_GET_ITEM(__pyx_args, 39); - values[40] = PyTuple_GET_ITEM(__pyx_args, 40); - values[41] = PyTuple_GET_ITEM(__pyx_args, 41); - values[42] = PyTuple_GET_ITEM(__pyx_args, 42); - values[43] = PyTuple_GET_ITEM(__pyx_args, 43); - values[44] = PyTuple_GET_ITEM(__pyx_args, 44); - values[45] = PyTuple_GET_ITEM(__pyx_args, 45); - values[46] = PyTuple_GET_ITEM(__pyx_args, 46); - values[47] = PyTuple_GET_ITEM(__pyx_args, 47); - values[48] = PyTuple_GET_ITEM(__pyx_args, 48); - values[49] = PyTuple_GET_ITEM(__pyx_args, 49); - values[50] = PyTuple_GET_ITEM(__pyx_args, 50); - values[51] = PyTuple_GET_ITEM(__pyx_args, 51); - values[52] = PyTuple_GET_ITEM(__pyx_args, 52); - values[53] = PyTuple_GET_ITEM(__pyx_args, 53); - values[54] = PyTuple_GET_ITEM(__pyx_args, 54); - values[55] = PyTuple_GET_ITEM(__pyx_args, 55); - values[56] = PyTuple_GET_ITEM(__pyx_args, 56); - values[57] = PyTuple_GET_ITEM(__pyx_args, 57); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); } __pyx_v_self = values[0]; - __pyx_v_rng_pos_uia = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[1]); - __pyx_v_rng_pos_uao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[2]); - __pyx_v_rng_pos_iao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[3]); - __pyx_v_rng_pos_pair = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[4]); - __pyx_v_rng_pos = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[5]); - __pyx_v_rng_neg = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[6]); - __pyx_v_n_threads = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_n_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 493, __pyx_L3_error) - __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_iids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_YU = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_uids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_aids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_oids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YI = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_iids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_aids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_oids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_rating_dict = ((struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *)values[20]); - __pyx_v_user_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_user_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[22], PyBUF_WRITABLE); if (unlikely(!__pyx_v_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_neg_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[23], PyBUF_WRITABLE); if (unlikely(!__pyx_v_neg_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_indptr = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[24], PyBUF_WRITABLE); if (unlikely(!__pyx_v_indptr.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_p_user_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[25], PyBUF_WRITABLE); if (unlikely(!__pyx_v_p_user_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_earlier_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[26], PyBUF_WRITABLE); if (unlikely(!__pyx_v_earlier_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_later_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[27], PyBUF_WRITABLE); if (unlikely(!__pyx_v_later_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_aspect_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[28], PyBUF_WRITABLE); if (unlikely(!__pyx_v_aspect_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_pair_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[29], PyBUF_WRITABLE); if (unlikely(!__pyx_v_pair_counts.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[30], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G1.memview)) __PYX_ERR(0, 500, __pyx_L3_error) - __pyx_v_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[31], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G2.memview)) __PYX_ERR(0, 501, __pyx_L3_error) - __pyx_v_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[32], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G3.memview)) __PYX_ERR(0, 502, __pyx_L3_error) - __pyx_v_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[33], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U.memview)) __PYX_ERR(0, 503, __pyx_L3_error) - __pyx_v_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[34], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I.memview)) __PYX_ERR(0, 504, __pyx_L3_error) - __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[35], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 505, __pyx_L3_error) - __pyx_v_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[36], PyBUF_WRITABLE); if (unlikely(!__pyx_v_O.memview)) __PYX_ERR(0, 506, __pyx_L3_error) - __pyx_v_sgrad_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[37], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G1.memview)) __PYX_ERR(0, 507, __pyx_L3_error) - __pyx_v_sgrad_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[38], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G2.memview)) __PYX_ERR(0, 508, __pyx_L3_error) - __pyx_v_sgrad_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[39], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G3.memview)) __PYX_ERR(0, 509, __pyx_L3_error) - __pyx_v_sgrad_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[40], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_U.memview)) __PYX_ERR(0, 510, __pyx_L3_error) - __pyx_v_sgrad_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[41], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_I.memview)) __PYX_ERR(0, 511, __pyx_L3_error) - __pyx_v_sgrad_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[42], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_A.memview)) __PYX_ERR(0, 512, __pyx_L3_error) - __pyx_v_sgrad_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[43], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_O.memview)) __PYX_ERR(0, 513, __pyx_L3_error) - __pyx_v_del_g1 = ((PyArrayObject *)values[44]); - __pyx_v_del_g2 = ((PyArrayObject *)values[45]); - __pyx_v_del_g3 = ((PyArrayObject *)values[46]); - __pyx_v_del_u = ((PyArrayObject *)values[47]); - __pyx_v_del_i = ((PyArrayObject *)values[48]); - __pyx_v_del_a = ((PyArrayObject *)values[49]); - __pyx_v_del_o = ((PyArrayObject *)values[50]); - __pyx_v_del_g1_reg = ((PyArrayObject *)values[51]); - __pyx_v_del_g2_reg = ((PyArrayObject *)values[52]); - __pyx_v_del_g3_reg = ((PyArrayObject *)values[53]); - __pyx_v_del_u_reg = ((PyArrayObject *)values[54]); - __pyx_v_del_i_reg = ((PyArrayObject *)values[55]); - __pyx_v_del_a_reg = ((PyArrayObject *)values[56]); - __pyx_v_del_o_reg = ((PyArrayObject *)values[57]); + __pyx_v_data_set = values[1]; + __pyx_v_user_item_aspect = values[2]; + __pyx_v_Y = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 485, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("_build_chrono_purchased_pairs", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 290, __pyx_L3_error) __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._build_chrono_purchased_pairs", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uia), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uia", 0))) __PYX_ERR(0, 487, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uao", 0))) __PYX_ERR(0, 488, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_iao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_iao", 0))) __PYX_ERR(0, 489, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_pair), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_pair", 0))) __PYX_ERR(0, 490, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos", 0))) __PYX_ERR(0, 491, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_neg), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_neg", 0))) __PYX_ERR(0, 492, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rating_dict), __pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict, 1, "rating_dict", 0))) __PYX_ERR(0, 497, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1), __pyx_ptype_5numpy_ndarray, 1, "del_g1", 0))) __PYX_ERR(0, 514, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2), __pyx_ptype_5numpy_ndarray, 1, "del_g2", 0))) __PYX_ERR(0, 515, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3), __pyx_ptype_5numpy_ndarray, 1, "del_g3", 0))) __PYX_ERR(0, 516, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u), __pyx_ptype_5numpy_ndarray, 1, "del_u", 0))) __PYX_ERR(0, 517, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i), __pyx_ptype_5numpy_ndarray, 1, "del_i", 0))) __PYX_ERR(0, 518, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a), __pyx_ptype_5numpy_ndarray, 1, "del_a", 0))) __PYX_ERR(0, 519, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o), __pyx_ptype_5numpy_ndarray, 1, "del_o", 0))) __PYX_ERR(0, 520, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g1_reg", 0))) __PYX_ERR(0, 521, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g2_reg", 0))) __PYX_ERR(0, 522, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g3_reg", 0))) __PYX_ERR(0, 523, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u_reg), __pyx_ptype_5numpy_ndarray, 1, "del_u_reg", 0))) __PYX_ERR(0, 524, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i_reg), __pyx_ptype_5numpy_ndarray, 1, "del_i_reg", 0))) __PYX_ERR(0, 525, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a_reg), __pyx_ptype_5numpy_ndarray, 1, "del_a_reg", 0))) __PYX_ERR(0, 526, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o_reg), __pyx_ptype_5numpy_ndarray, 1, "del_o_reg", 0))) __PYX_ERR(0, 527, __pyx_L1_error) - __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_22_fit_mter(__pyx_self, __pyx_v_self, __pyx_v_rng_pos_uia, __pyx_v_rng_pos_uao, __pyx_v_rng_pos_iao, __pyx_v_rng_pos_pair, __pyx_v_rng_pos, __pyx_v_rng_neg, __pyx_v_n_threads, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_iids, __pyx_v_X_aids, __pyx_v_YU, __pyx_v_YU_uids, __pyx_v_YU_aids, __pyx_v_YU_oids, __pyx_v_YI, __pyx_v_YI_iids, __pyx_v_YI_aids, __pyx_v_YI_oids, __pyx_v_rating_dict, __pyx_v_user_ids, __pyx_v_item_ids, __pyx_v_neg_item_ids, __pyx_v_indptr, __pyx_v_p_user_indices, __pyx_v_earlier_indices, __pyx_v_later_indices, __pyx_v_aspect_indices, __pyx_v_pair_counts, __pyx_v_G1, __pyx_v_G2, __pyx_v_G3, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_sgrad_G1, __pyx_v_sgrad_G2, __pyx_v_sgrad_G3, __pyx_v_sgrad_U, __pyx_v_sgrad_I, __pyx_v_sgrad_A, __pyx_v_sgrad_O, __pyx_v_del_g1, __pyx_v_del_g2, __pyx_v_del_g3, __pyx_v_del_u, __pyx_v_del_i, __pyx_v_del_a, __pyx_v_del_o, __pyx_v_del_g1_reg, __pyx_v_del_g2_reg, __pyx_v_del_g3_reg, __pyx_v_del_u_reg, __pyx_v_del_i_reg, __pyx_v_del_a_reg, __pyx_v_del_o_reg); + __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_6_build_chrono_purchased_pairs(__pyx_self, __pyx_v_self, __pyx_v_data_set, __pyx_v_user_item_aspect, __pyx_v_Y); /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_22_fit_mter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg, int __pyx_v_n_threads, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_iids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_YU, __Pyx_memviewslice __pyx_v_YU_uids, __Pyx_memviewslice __pyx_v_YU_aids, __Pyx_memviewslice __pyx_v_YU_oids, __Pyx_memviewslice __pyx_v_YI, __Pyx_memviewslice __pyx_v_YI_iids, __Pyx_memviewslice __pyx_v_YI_aids, __Pyx_memviewslice __pyx_v_YI_oids, struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict, __Pyx_memviewslice __pyx_v_user_ids, __Pyx_memviewslice __pyx_v_item_ids, __Pyx_memviewslice __pyx_v_neg_item_ids, __Pyx_memviewslice __pyx_v_indptr, __Pyx_memviewslice __pyx_v_p_user_indices, __Pyx_memviewslice __pyx_v_earlier_indices, __Pyx_memviewslice __pyx_v_later_indices, __Pyx_memviewslice __pyx_v_aspect_indices, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts, __Pyx_memviewslice __pyx_v_G1, __Pyx_memviewslice __pyx_v_G2, __Pyx_memviewslice __pyx_v_G3, __Pyx_memviewslice __pyx_v_U, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_O, __Pyx_memviewslice __pyx_v_sgrad_G1, __Pyx_memviewslice __pyx_v_sgrad_G2, __Pyx_memviewslice __pyx_v_sgrad_G3, __Pyx_memviewslice __pyx_v_sgrad_U, __Pyx_memviewslice __pyx_v_sgrad_I, __Pyx_memviewslice __pyx_v_sgrad_A, __Pyx_memviewslice __pyx_v_sgrad_O, PyArrayObject *__pyx_v_del_g1, PyArrayObject *__pyx_v_del_g2, PyArrayObject *__pyx_v_del_g3, PyArrayObject *__pyx_v_del_u, PyArrayObject *__pyx_v_del_i, PyArrayObject *__pyx_v_del_a, PyArrayObject *__pyx_v_del_o, PyArrayObject *__pyx_v_del_g1_reg, PyArrayObject *__pyx_v_del_g2_reg, PyArrayObject *__pyx_v_del_g3_reg, PyArrayObject *__pyx_v_del_u_reg, PyArrayObject *__pyx_v_del_i_reg, PyArrayObject *__pyx_v_del_a_reg, PyArrayObject *__pyx_v_del_o_reg) { - long __pyx_v_s; - long __pyx_v_correct; - long __pyx_v_skipped; - long __pyx_v_aspect_correct; - long __pyx_v_n_users; - long __pyx_v_n_items; - long __pyx_v_n_aspects; - CYTHON_UNUSED long __pyx_v_n_opinions; - long __pyx_v_n_user_factors; - long __pyx_v_n_item_factors; - long __pyx_v_n_aspect_factors; - long __pyx_v_n_opinion_factors; - CYTHON_UNUSED int __pyx_v_num_samples; - CYTHON_UNUSED int __pyx_v_num_bpr_samples; - CYTHON_UNUSED int __pyx_v_num_pair_samples; - CYTHON_UNUSED int __pyx_v__; - int __pyx_v_i; - int __pyx_v_j; - int __pyx_v_k; - int __pyx_v_idx; - int __pyx_v_jdx; - int __pyx_v_u_idx; - int __pyx_v_i_idx; - int __pyx_v_a_idx; - int __pyx_v_o_idx; - int __pyx_v_j_idx; - int __pyx_v_thread_id; - double __pyx_v_z; - double __pyx_v_score; - double __pyx_v_i_score; - double __pyx_v_j_score; - double __pyx_v_pred; - double __pyx_v_i_ij; - double __pyx_v_a_ji; - double __pyx_v_loss; - double __pyx_v_bpr_loss; - double __pyx_v_aspect_bpr_loss; - double __pyx_v_del_sqerror; - double __pyx_v_del_bpr; - double __pyx_v_del_aspect_bpr; - double __pyx_v_eps; - double __pyx_v_lr; - double __pyx_v_ld_reg; - double __pyx_v_ld_bpr; - double __pyx_v_lambda_d; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a; - __Pyx_Buffer __pyx_pybuffer_del_a; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a_reg; - __Pyx_Buffer __pyx_pybuffer_del_a_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1; - __Pyx_Buffer __pyx_pybuffer_del_g1; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1_reg; - __Pyx_Buffer __pyx_pybuffer_del_g1_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2; - __Pyx_Buffer __pyx_pybuffer_del_g2; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2_reg; - __Pyx_Buffer __pyx_pybuffer_del_g2_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3; - __Pyx_Buffer __pyx_pybuffer_del_g3; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3_reg; - __Pyx_Buffer __pyx_pybuffer_del_g3_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i; - __Pyx_Buffer __pyx_pybuffer_del_i; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i_reg; - __Pyx_Buffer __pyx_pybuffer_del_i_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o; - __Pyx_Buffer __pyx_pybuffer_del_o; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o_reg; - __Pyx_Buffer __pyx_pybuffer_del_o_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u; - __Pyx_Buffer __pyx_pybuffer_del_u; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u_reg; - __Pyx_Buffer __pyx_pybuffer_del_u_reg; +static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_6_build_chrono_purchased_pairs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_data_set, PyObject *__pyx_v_user_item_aspect, PyObject *__pyx_v_Y) { + PyObject *__pyx_v_start_time = NULL; + PyObject *__pyx_v_tqdm = NULL; + PyObject *__pyx_v_chrono_purchased_pairs = NULL; + PyObject *__pyx_v_user_idx = NULL; + PyObject *__pyx_v_item_ids = NULL; + CYTHON_UNUSED PyObject *__pyx_v__ = NULL; + PyObject *__pyx_v_window = NULL; + PyObject *__pyx_v_sub_item_ids = NULL; + PyObject *__pyx_v_earlier_item_idx = NULL; + PyObject *__pyx_v_later_item_idx = NULL; + PyObject *__pyx_v_pair_counts = NULL; + PyObject *__pyx_v_common_aspect_counts = NULL; + PyObject *__pyx_v_counted_pairs = NULL; + PyObject *__pyx_v_not_dominated_pairs = NULL; + PyObject *__pyx_v_count = NULL; + PyObject *__pyx_v_k = NULL; + PyObject *__pyx_v_user_indices = NULL; + PyObject *__pyx_v_earlier_indices = NULL; + PyObject *__pyx_v_later_indices = NULL; + PyObject *__pyx_v_aspect_indices = NULL; + PyObject *__pyx_v_pair_freq = NULL; + PyObject *__pyx_v_aspect_idx = NULL; + PyObject *__pyx_8genexpr2__pyx_v_i = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; - long __pyx_t_3; + PyObject *__pyx_t_3 = NULL; int __pyx_t_4; - double __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - int __pyx_t_8; - Py_ssize_t __pyx_t_9; - long __pyx_t_10; - int __pyx_t_11; - long __pyx_t_12; - long __pyx_t_13; + int __pyx_t_5; + Py_ssize_t __pyx_t_6; + PyObject *(*__pyx_t_7)(PyObject *); + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *(*__pyx_t_10)(PyObject *); + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + Py_ssize_t __pyx_t_13; int __pyx_t_14; - long __pyx_t_15; - long __pyx_t_16; - int __pyx_t_17; - Py_ssize_t __pyx_t_18; - Py_ssize_t __pyx_t_19; - Py_ssize_t __pyx_t_20; - Py_ssize_t __pyx_t_21; - Py_ssize_t __pyx_t_22; - Py_ssize_t __pyx_t_23; - Py_ssize_t __pyx_t_24; - Py_ssize_t __pyx_t_25; - int __pyx_t_26; - long __pyx_t_27; - PyObject *__pyx_t_28 = NULL; - PyObject *__pyx_t_29 = NULL; + PyObject *(*__pyx_t_15)(PyObject *); + Py_ssize_t __pyx_t_16; + PyObject *__pyx_t_17 = NULL; + int __pyx_t_18; + PyObject *__pyx_t_19 = NULL; + Py_UCS4 __pyx_t_20; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_fuse_1_1_fit_mter", 0); - __pyx_pybuffer_del_g1.pybuffer.buf = NULL; - __pyx_pybuffer_del_g1.refcount = 0; - __pyx_pybuffernd_del_g1.data = NULL; - __pyx_pybuffernd_del_g1.rcbuffer = &__pyx_pybuffer_del_g1; - __pyx_pybuffer_del_g2.pybuffer.buf = NULL; - __pyx_pybuffer_del_g2.refcount = 0; - __pyx_pybuffernd_del_g2.data = NULL; - __pyx_pybuffernd_del_g2.rcbuffer = &__pyx_pybuffer_del_g2; - __pyx_pybuffer_del_g3.pybuffer.buf = NULL; - __pyx_pybuffer_del_g3.refcount = 0; - __pyx_pybuffernd_del_g3.data = NULL; - __pyx_pybuffernd_del_g3.rcbuffer = &__pyx_pybuffer_del_g3; - __pyx_pybuffer_del_u.pybuffer.buf = NULL; - __pyx_pybuffer_del_u.refcount = 0; - __pyx_pybuffernd_del_u.data = NULL; - __pyx_pybuffernd_del_u.rcbuffer = &__pyx_pybuffer_del_u; - __pyx_pybuffer_del_i.pybuffer.buf = NULL; - __pyx_pybuffer_del_i.refcount = 0; - __pyx_pybuffernd_del_i.data = NULL; - __pyx_pybuffernd_del_i.rcbuffer = &__pyx_pybuffer_del_i; - __pyx_pybuffer_del_a.pybuffer.buf = NULL; - __pyx_pybuffer_del_a.refcount = 0; - __pyx_pybuffernd_del_a.data = NULL; - __pyx_pybuffernd_del_a.rcbuffer = &__pyx_pybuffer_del_a; - __pyx_pybuffer_del_o.pybuffer.buf = NULL; - __pyx_pybuffer_del_o.refcount = 0; - __pyx_pybuffernd_del_o.data = NULL; - __pyx_pybuffernd_del_o.rcbuffer = &__pyx_pybuffer_del_o; - __pyx_pybuffer_del_g1_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g1_reg.refcount = 0; - __pyx_pybuffernd_del_g1_reg.data = NULL; - __pyx_pybuffernd_del_g1_reg.rcbuffer = &__pyx_pybuffer_del_g1_reg; - __pyx_pybuffer_del_g2_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g2_reg.refcount = 0; - __pyx_pybuffernd_del_g2_reg.data = NULL; - __pyx_pybuffernd_del_g2_reg.rcbuffer = &__pyx_pybuffer_del_g2_reg; - __pyx_pybuffer_del_g3_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g3_reg.refcount = 0; - __pyx_pybuffernd_del_g3_reg.data = NULL; - __pyx_pybuffernd_del_g3_reg.rcbuffer = &__pyx_pybuffer_del_g3_reg; - __pyx_pybuffer_del_u_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_u_reg.refcount = 0; - __pyx_pybuffernd_del_u_reg.data = NULL; - __pyx_pybuffernd_del_u_reg.rcbuffer = &__pyx_pybuffer_del_u_reg; - __pyx_pybuffer_del_i_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_i_reg.refcount = 0; - __pyx_pybuffernd_del_i_reg.data = NULL; - __pyx_pybuffernd_del_i_reg.rcbuffer = &__pyx_pybuffer_del_i_reg; - __pyx_pybuffer_del_a_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_a_reg.refcount = 0; - __pyx_pybuffernd_del_a_reg.data = NULL; - __pyx_pybuffernd_del_a_reg.rcbuffer = &__pyx_pybuffer_del_a_reg; - __pyx_pybuffer_del_o_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_o_reg.refcount = 0; - __pyx_pybuffernd_del_o_reg.data = NULL; - __pyx_pybuffernd_del_o_reg.rcbuffer = &__pyx_pybuffer_del_o_reg; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g1.diminfo[0].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1.diminfo[0].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1.diminfo[1].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1.diminfo[1].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1.diminfo[2].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1.diminfo[2].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g2.diminfo[0].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2.diminfo[0].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2.diminfo[1].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2.diminfo[1].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2.diminfo[2].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2.diminfo[2].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g3.diminfo[0].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3.diminfo[0].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3.diminfo[1].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3.diminfo[1].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3.diminfo[2].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3.diminfo[2].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_u.diminfo[0].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u.diminfo[0].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u.diminfo[1].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u.diminfo[1].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_i.diminfo[0].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i.diminfo[0].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i.diminfo[1].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i.diminfo[1].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_a.diminfo[0].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a.diminfo[0].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a.diminfo[1].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a.diminfo[1].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_o.diminfo[0].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o.diminfo[0].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o.diminfo[1].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o.diminfo[1].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g1_reg.diminfo[0].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1_reg.diminfo[0].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1_reg.diminfo[1].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1_reg.diminfo[1].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1_reg.diminfo[2].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1_reg.diminfo[2].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g2_reg.diminfo[0].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2_reg.diminfo[0].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2_reg.diminfo[1].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2_reg.diminfo[1].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2_reg.diminfo[2].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2_reg.diminfo[2].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g3_reg.diminfo[0].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3_reg.diminfo[0].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3_reg.diminfo[1].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3_reg.diminfo[1].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3_reg.diminfo[2].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3_reg.diminfo[2].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_u_reg.diminfo[0].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u_reg.diminfo[0].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u_reg.diminfo[1].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u_reg.diminfo[1].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_i_reg.diminfo[0].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i_reg.diminfo[0].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i_reg.diminfo[1].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i_reg.diminfo[1].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_a_reg.diminfo[0].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a_reg.diminfo[0].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a_reg.diminfo[1].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a_reg.diminfo[1].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_o_reg.diminfo[0].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o_reg.diminfo[0].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o_reg.diminfo[1].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o_reg.diminfo[1].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[1]; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":531 - * """ - * cdef: - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 # <<<<<<<<<<<<<< - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items - */ - __pyx_v_correct = 0; - __pyx_v_skipped = 0; - __pyx_v_aspect_correct = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":532 - * cdef: - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 - * long n_users = self.train_set.num_users # <<<<<<<<<<<<<< - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_n_users = __pyx_t_3; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":533 - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items # <<<<<<<<<<<<<< - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_items = __pyx_t_3; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":534 - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_aspects = __pyx_t_3; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":535 - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions # <<<<<<<<<<<<<< - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_opinions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_opinions = __pyx_t_3; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":536 - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors # <<<<<<<<<<<<<< - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_user_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 536, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 536, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_user_factors = __pyx_t_3; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":537 - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors # <<<<<<<<<<<<<< - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_item_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 537, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_item_factors = __pyx_t_3; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":538 - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors # <<<<<<<<<<<<<< - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_aspect_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 538, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_aspect_factors = __pyx_t_3; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":539 - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors # <<<<<<<<<<<<<< - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_opinion_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 539, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_opinion_factors = __pyx_t_3; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":540 - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples # <<<<<<<<<<<<<< - * int num_bpr_samples = self.n_bpr_samples - * int num_pair_samples = self.n_pair_samples - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_element_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 540, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_samples = __pyx_t_4; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":541 - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples # <<<<<<<<<<<<<< - * int num_pair_samples = self.n_pair_samples - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 541, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_bpr_samples = __pyx_t_4; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":542 - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples - * int num_pair_samples = self.n_pair_samples # <<<<<<<<<<<<<< - * - * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_pair_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 542, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_pair_samples = __pyx_t_4; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":546 - * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id - * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji - * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr # <<<<<<<<<<<<<< - * floating eps = 1e-9 - * - */ - __pyx_v_loss = 0.; - __pyx_v_bpr_loss = 0.; - __pyx_v_aspect_bpr_loss = 0.; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":547 - * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji - * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr - * floating eps = 1e-9 # <<<<<<<<<<<<<< - * - * floating lr = self.lr - */ - __pyx_v_eps = 1e-9; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":549 - * floating eps = 1e-9 - * - * floating lr = self.lr # <<<<<<<<<<<<<< - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 549, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 549, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lr = __pyx_t_5; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":550 - * - * floating lr = self.lr - * floating ld_reg = self.lambda_reg # <<<<<<<<<<<<<< - * floating ld_bpr = self.lambda_bpr - * floating lambda_d = self.lambda_d - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_reg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 550, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 550, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_ld_reg = __pyx_t_5; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":551 - * floating lr = self.lr - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr # <<<<<<<<<<<<<< - * floating lambda_d = self.lambda_d - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_bpr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 551, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_ld_bpr = __pyx_t_5; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":552 - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr - * floating lambda_d = self.lambda_d # <<<<<<<<<<<<<< - * - * del_g1.fill(0) - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 552, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_d = __pyx_t_5; + __Pyx_RefNannySetupContext("_build_chrono_purchased_pairs", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":554 - * floating lambda_d = self.lambda_d + /* "cornac/models/comparer/recom_comparer_sub.pyx":291 * - * del_g1.fill(0) # <<<<<<<<<<<<<< - * del_g2.fill(0) - * del_g3.fill(0) + * def _build_chrono_purchased_pairs(self, data_set, user_item_aspect, Y): + * start_time = time() # <<<<<<<<<<<<<< + * from tqdm import tqdm + * chrono_purchased_pairs = Counter() */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 291, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; } } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + { + PyObject *__pyx_callargs[1] = {__pyx_t_3, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_start_time = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":555 - * - * del_g1.fill(0) - * del_g2.fill(0) # <<<<<<<<<<<<<< - * del_g3.fill(0) - * del_u.fill(0) + /* "cornac/models/comparer/recom_comparer_sub.pyx":292 + * def _build_chrono_purchased_pairs(self, data_set, user_item_aspect, Y): + * start_time = time() + * from tqdm import tqdm # <<<<<<<<<<<<<< + * chrono_purchased_pairs = Counter() + * for user_idx, (item_ids, *_) in tqdm(data_set.chrono_user_data.items(), disable=not self.verbose, desc='Get purchased pairs'): */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error) + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 292, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_tqdm); + __Pyx_GIVEREF(__pyx_n_s_tqdm); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_tqdm); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_tqdm, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 292, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_tqdm); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 292, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_t_1); + __pyx_v_tqdm = __pyx_t_1; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":556 - * del_g1.fill(0) - * del_g2.fill(0) - * del_g3.fill(0) # <<<<<<<<<<<<<< - * del_u.fill(0) - * del_i.fill(0) + /* "cornac/models/comparer/recom_comparer_sub.pyx":293 + * start_time = time() + * from tqdm import tqdm + * chrono_purchased_pairs = Counter() # <<<<<<<<<<<<<< + * for user_idx, (item_ids, *_) in tqdm(data_set.chrono_user_data.items(), disable=not self.verbose, desc='Get purchased pairs'): + * if len(item_ids) >= self.min_user_freq: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Counter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 293, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; } } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + { + PyObject *__pyx_callargs[1] = {__pyx_t_3, }; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 293, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_chrono_purchased_pairs = __pyx_t_2; + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":557 - * del_g2.fill(0) - * del_g3.fill(0) - * del_u.fill(0) # <<<<<<<<<<<<<< - * del_i.fill(0) - * del_a.fill(0) + /* "cornac/models/comparer/recom_comparer_sub.pyx":294 + * from tqdm import tqdm + * chrono_purchased_pairs = Counter() + * for user_idx, (item_ids, *_) in tqdm(data_set.chrono_user_data.items(), disable=not self.verbose, desc='Get purchased pairs'): # <<<<<<<<<<<<<< + * if len(item_ids) >= self.min_user_freq: + * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 557, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_data_set, __pyx_n_s_chrono_user_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 294, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":558 - * del_g3.fill(0) - * del_u.fill(0) - * del_i.fill(0) # <<<<<<<<<<<<<< - * del_a.fill(0) - * del_o.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 558, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; } } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 558, __pyx_L1_error) + { + PyObject *__pyx_callargs[1] = {__pyx_t_1, }; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 294, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 294, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 294, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":559 - * del_u.fill(0) - * del_i.fill(0) - * del_a.fill(0) # <<<<<<<<<<<<<< - * del_o.fill(0) - * del_g1_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 559, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 559, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyBool_FromLong((!__pyx_t_5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_disable, __pyx_t_1) < 0) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":560 - * del_i.fill(0) - * del_a.fill(0) - * del_o.fill(0) # <<<<<<<<<<<<<< - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_desc, __pyx_kp_u_Get_purchased_pairs) < 0) __PYX_ERR(0, 294, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_tqdm, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":561 - * del_a.fill(0) - * del_o.fill(0) - * del_g1_reg.fill(0) # <<<<<<<<<<<<<< - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } + if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { + __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0; + __pyx_t_7 = NULL; + } else { + __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 294, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 294, __pyx_L1_error) } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":562 - * del_o.fill(0) - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) # <<<<<<<<<<<<<< - * del_g3_reg.fill(0) - * del_u_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 562, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + for (;;) { + if (likely(!__pyx_t_7)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 294, __pyx_L1_error) + #else + __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + } else { + if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 294, __pyx_L1_error) + #else + __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + } + } else { + __pyx_t_1 = __pyx_t_7(__pyx_t_2); + if (unlikely(!__pyx_t_1)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 294, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_1); } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":563 - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) # <<<<<<<<<<<<<< - * del_u_reg.fill(0) - * del_i_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 563, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 294, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_3 = PyList_GET_ITEM(sequence, 0); + __pyx_t_8 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_8); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 294, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 294, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_9 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 294, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); + index = 0; __pyx_t_3 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L5_unpacking_failed; + __Pyx_GOTREF(__pyx_t_8); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(0, 294, __pyx_L1_error) + __pyx_t_10 = NULL; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L6_unpacking_done; + __pyx_L5_unpacking_failed:; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_10 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 294, __pyx_L1_error) + __pyx_L6_unpacking_done:; } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 563, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":564 - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) - * del_u_reg.fill(0) # <<<<<<<<<<<<<< - * del_i_reg.fill(0) - * del_a_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 564, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __Pyx_XDECREF_SET(__pyx_v_user_idx, __pyx_t_3); + __pyx_t_3 = 0; + { + Py_ssize_t index = -1; + PyObject** temps[2] = {&__pyx_t_9}; + __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 294, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_11); + for (index=0; index < 1; index++) { + PyObject* item = __pyx_t_10(__pyx_t_11); if (unlikely(!item)) goto __pyx_L7_unpacking_failed; + __Pyx_GOTREF(item); + *(temps[index]) = item; + } + goto __pyx_L8_unpacking_done; + __pyx_L7_unpacking_failed:; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_10 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 294, __pyx_L1_error) + __pyx_L8_unpacking_done:; } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_12 = PySequence_List(__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 294, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF_SET(__pyx_v_item_ids, __pyx_t_9); + __pyx_t_9 = 0; + __Pyx_XDECREF_SET(__pyx_v__, ((PyObject*)__pyx_t_12)); + __pyx_t_12 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":565 - * del_g3_reg.fill(0) - * del_u_reg.fill(0) - * del_i_reg.fill(0) # <<<<<<<<<<<<<< - * del_a_reg.fill(0) - * del_o_reg.fill(0) + /* "cornac/models/comparer/recom_comparer_sub.pyx":295 + * chrono_purchased_pairs = Counter() + * for user_idx, (item_ids, *_) in tqdm(data_set.chrono_user_data.items(), disable=not self.verbose, desc='Get purchased pairs'): + * if len(item_ids) >= self.min_user_freq: # <<<<<<<<<<<<<< + * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) + * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 565, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_13 = PyObject_Length(__pyx_v_item_ids); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 295, __pyx_L1_error) + __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 295, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_min_user_freq); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 295, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_8, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 295, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 295, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_5) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":566 - * del_u_reg.fill(0) - * del_i_reg.fill(0) - * del_a_reg.fill(0) # <<<<<<<<<<<<<< - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): + /* "cornac/models/comparer/recom_comparer_sub.pyx":296 + * for user_idx, (item_ids, *_) in tqdm(data_set.chrono_user_data.items(), disable=not self.verbose, desc='Get purchased pairs'): + * if len(item_ids) >= self.min_user_freq: + * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) # <<<<<<<<<<<<<< + * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: + * for earlier_item_idx, later_item_idx in combinations(sub_item_ids, 2): */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 566, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_enum_window); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 296, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_5 = (__pyx_t_8 == Py_None); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_5) { + __pyx_t_13 = PyObject_Length(__pyx_v_item_ids); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 296, __pyx_L1_error) + __pyx_t_8 = PyInt_FromSsize_t(__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 296, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_3 = __pyx_t_8; + __pyx_t_8 = 0; + } else { + __pyx_t_13 = PyObject_Length(__pyx_v_item_ids); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 296, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_enum_window); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 296, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_12 = PyInt_FromSsize_t(__pyx_t_13); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 296, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_9 = PyObject_RichCompare(__pyx_t_12, __pyx_t_8, Py_LT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 296, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 296, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (__pyx_t_14) { + __pyx_t_9 = PyInt_FromSsize_t(__pyx_t_13); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 296, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __pyx_t_9; + __pyx_t_9 = 0; + } else { + __Pyx_INCREF(__pyx_t_8); + __pyx_t_1 = __pyx_t_8; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_INCREF(__pyx_t_1); + __pyx_t_3 = __pyx_t_1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_window, __pyx_t_3); + __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":567 - * del_i_reg.fill(0) - * del_a_reg.fill(0) - * del_o_reg.fill(0) # <<<<<<<<<<<<<< - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() + /* "cornac/models/comparer/recom_comparer_sub.pyx":297 + * if len(item_ids) >= self.min_user_freq: + * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) + * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: # <<<<<<<<<<<<<< + * for earlier_item_idx, later_item_idx in combinations(sub_item_ids, 2): + * if self.train_set.is_unk_item(earlier_item_idx) or self.train_set.is_unk_item(later_item_idx): */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 567, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + { /* enter inner scope */ + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 297, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_13 = PyObject_Length(__pyx_v_item_ids); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 297, __pyx_L14_error) + __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 297, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = PyNumber_Subtract(__pyx_t_1, __pyx_v_window); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 297, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_8, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 297, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 297, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_t_8)) || PyTuple_CheckExact(__pyx_t_8)) { + __pyx_t_1 = __pyx_t_8; __Pyx_INCREF(__pyx_t_1); __pyx_t_13 = 0; + __pyx_t_15 = NULL; + } else { + __pyx_t_13 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 297, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 297, __pyx_L14_error) + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + for (;;) { + if (likely(!__pyx_t_15)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_8 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_8); __pyx_t_13++; if (unlikely((0 < 0))) __PYX_ERR(0, 297, __pyx_L14_error) + #else + __pyx_t_8 = PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 297, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_8); + #endif + } else { + if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_8); __pyx_t_13++; if (unlikely((0 < 0))) __PYX_ERR(0, 297, __pyx_L14_error) + #else + __pyx_t_8 = PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 297, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_8); + #endif + } + } else { + __pyx_t_8 = __pyx_t_15(__pyx_t_1); + if (unlikely(!__pyx_t_8)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 297, __pyx_L14_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_8); + } + __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v_i, __pyx_t_8); + __pyx_t_8 = 0; + __pyx_t_8 = PyNumber_Add(__pyx_8genexpr2__pyx_v_i, __pyx_v_window); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 297, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = __Pyx_PyObject_GetSlice(__pyx_v_item_ids, 0, 0, &__pyx_8genexpr2__pyx_v_i, &__pyx_t_8, NULL, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 297, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_9))) __PYX_ERR(0, 297, __pyx_L14_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_i); __pyx_8genexpr2__pyx_v_i = 0; + goto __pyx_L18_exit_scope; + __pyx_L14_error:; + __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_i); __pyx_8genexpr2__pyx_v_i = 0; + goto __pyx_L1_error; + __pyx_L18_exit_scope:; + } /* exit inner scope */ + __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + for (;;) { + if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_3); __pyx_t_13++; if (unlikely((0 < 0))) __PYX_ERR(0, 297, __pyx_L1_error) + #else + __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 297, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_XDECREF_SET(__pyx_v_sub_item_ids, __pyx_t_3); + __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":568 - * del_a_reg.fill(0) - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): + /* "cornac/models/comparer/recom_comparer_sub.pyx":298 + * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) + * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: + * for earlier_item_idx, later_item_idx in combinations(sub_item_ids, 2): # <<<<<<<<<<<<<< + * if self.train_set.is_unk_item(earlier_item_idx) or self.train_set.is_unk_item(later_item_idx): + * continue */ - { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); - #endif - /*try:*/ { + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_combinations); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 298, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_8 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_4 = 1; + } + } { - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) + PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_v_sub_item_ids, __pyx_int_2}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { + __pyx_t_9 = __pyx_t_3; __Pyx_INCREF(__pyx_t_9); __pyx_t_16 = 0; + __pyx_t_15 = NULL; + } else { + __pyx_t_16 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 298, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 298, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + for (;;) { + if (likely(!__pyx_t_15)) { + if (likely(PyList_CheckExact(__pyx_t_9))) { + if (__pyx_t_16 >= PyList_GET_SIZE(__pyx_t_9)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_16); __Pyx_INCREF(__pyx_t_3); __pyx_t_16++; if (unlikely((0 < 0))) __PYX_ERR(0, 298, __pyx_L1_error) + #else + __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } else { + if (__pyx_t_16 >= PyTuple_GET_SIZE(__pyx_t_9)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_16); __Pyx_INCREF(__pyx_t_3); __pyx_t_16++; if (unlikely((0 < 0))) __PYX_ERR(0, 298, __pyx_L1_error) + #else + __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } + } else { + __pyx_t_3 = __pyx_t_15(__pyx_t_9); + if (unlikely(!__pyx_t_3)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 298, __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; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 298, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_12 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_8 = PyList_GET_ITEM(sequence, 0); + __pyx_t_12 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_12); + #else + __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 298, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_12 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 298, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); #endif - #ifdef _OPENMP - #pragma omp parallel private(__pyx_v_thread_id) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_bpr_loss) reduction(+:__pyx_v_correct) reduction(+:__pyx_v_skipped) reduction(+:__pyx_v_aspect_bpr_loss) reduction(+:__pyx_v_aspect_correct) private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_3, __pyx_t_4, __pyx_t_7, __pyx_t_8, __pyx_t_9) num_threads(__pyx_v_n_threads) - #endif /* _OPENMP */ - { - /* Initialize private variables to invalid values */ - __pyx_v_thread_id = ((int)0xbad0bad0); + __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, 298, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_11); + index = 0; __pyx_t_8 = __pyx_t_10(__pyx_t_11); if (unlikely(!__pyx_t_8)) goto __pyx_L21_unpacking_failed; + __Pyx_GOTREF(__pyx_t_8); + index = 1; __pyx_t_12 = __pyx_t_10(__pyx_t_11); if (unlikely(!__pyx_t_12)) goto __pyx_L21_unpacking_failed; + __Pyx_GOTREF(__pyx_t_12); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_11), 2) < 0) __PYX_ERR(0, 298, __pyx_L1_error) + __pyx_t_10 = NULL; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + goto __pyx_L22_unpacking_done; + __pyx_L21_unpacking_failed:; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_10 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 298, __pyx_L1_error) + __pyx_L22_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_earlier_item_idx, __pyx_t_8); + __pyx_t_8 = 0; + __Pyx_XDECREF_SET(__pyx_v_later_item_idx, __pyx_t_12); + __pyx_t_12 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":569 - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() # <<<<<<<<<<<<<< - * for _ in prange(num_samples, schedule='guided'): - * # get user item aspect element + /* "cornac/models/comparer/recom_comparer_sub.pyx":299 + * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: + * for earlier_item_idx, later_item_idx in combinations(sub_item_ids, 2): + * if self.train_set.is_unk_item(earlier_item_idx) or self.train_set.is_unk_item(later_item_idx): # <<<<<<<<<<<<<< + * continue + * chrono_purchased_pairs[(user_idx, earlier_item_idx, later_item_idx)] += 1 */ - __pyx_v_thread_id = recom_bpr::get_thread_num(); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_is_unk_item); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_v_earlier_item_idx}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!__pyx_t_14) { + } else { + __pyx_t_5 = __pyx_t_14; + goto __pyx_L24_bool_binop_done; + } + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_is_unk_item); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_12); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_12, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_later_item_idx}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + } + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_5 = __pyx_t_14; + __pyx_L24_bool_binop_done:; + if (__pyx_t_5) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":570 - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): # <<<<<<<<<<<<<< - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) + /* "cornac/models/comparer/recom_comparer_sub.pyx":300 + * for earlier_item_idx, later_item_idx in combinations(sub_item_ids, 2): + * if self.train_set.is_unk_item(earlier_item_idx) or self.train_set.is_unk_item(later_item_idx): + * continue # <<<<<<<<<<<<<< + * chrono_purchased_pairs[(user_idx, earlier_item_idx, later_item_idx)] += 1 + * */ - __pyx_t_4 = __pyx_v_num_samples; - if ((1 == 0)) abort(); - { - __pyx_t_8 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_8 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_del_sqerror) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_o_idx) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_score) lastprivate(__pyx_v_u_idx) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){ - { - __pyx_v__ = (int)(0 + 1 * __pyx_t_7); - /* Initialize private variables to invalid values */ - __pyx_v_a_idx = ((int)0xbad0bad0); - __pyx_v_del_sqerror = ((double)__PYX_NAN()); - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_i_idx = ((int)0xbad0bad0); - __pyx_v_idx = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_o_idx = ((int)0xbad0bad0); - __pyx_v_pred = ((double)__PYX_NAN()); - __pyx_v_score = ((double)__PYX_NAN()); - __pyx_v_u_idx = ((int)0xbad0bad0); + goto __pyx_L19_continue; - /* "cornac/models/comparer/recom_comparer_sub.pyx":572 - * for _ in prange(num_samples, schedule='guided'): - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":299 + * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: + * for earlier_item_idx, later_item_idx in combinations(sub_item_ids, 2): + * if self.train_set.is_unk_item(earlier_item_idx) or self.train_set.is_unk_item(later_item_idx): # <<<<<<<<<<<<<< + * continue + * chrono_purchased_pairs[(user_idx, earlier_item_idx, later_item_idx)] += 1 */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uia->__pyx_vtab)->generate(__pyx_v_rng_pos_uia, __pyx_v_thread_id); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":573 - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) - * u_idx = X_uids[idx] # <<<<<<<<<<<<<< - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":301 + * if self.train_set.is_unk_item(earlier_item_idx) or self.train_set.is_unk_item(later_item_idx): + * continue + * chrono_purchased_pairs[(user_idx, earlier_item_idx, later_item_idx)] += 1 # <<<<<<<<<<<<<< + * + * pair_counts = Counter() */ - __pyx_t_9 = __pyx_v_idx; - __pyx_v_u_idx = (*((int *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_9 * __pyx_v_X_uids.strides[0]) ))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":574 - * idx = rng_pos_uia.generate(thread_id) - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] # <<<<<<<<<<<<<< - * a_idx = X_aids[idx] - * score = X[idx] - */ - __pyx_t_9 = __pyx_v_idx; - __pyx_v_i_idx = (*((int *) ( /* dim=0 */ (__pyx_v_X_iids.data + __pyx_t_9 * __pyx_v_X_iids.strides[0]) ))); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 301, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_user_idx); + __Pyx_GIVEREF(__pyx_v_user_idx); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_user_idx); + __Pyx_INCREF(__pyx_v_earlier_item_idx); + __Pyx_GIVEREF(__pyx_v_earlier_item_idx); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_earlier_item_idx); + __Pyx_INCREF(__pyx_v_later_item_idx); + __Pyx_GIVEREF(__pyx_v_later_item_idx); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_later_item_idx); + __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_v_chrono_purchased_pairs, __pyx_t_3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 301, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_t_12, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 301, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely((PyObject_SetItem(__pyx_v_chrono_purchased_pairs, __pyx_t_3, __pyx_t_8) < 0))) __PYX_ERR(0, 301, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":575 - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] # <<<<<<<<<<<<<< - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + /* "cornac/models/comparer/recom_comparer_sub.pyx":298 + * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) + * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: + * for earlier_item_idx, later_item_idx in combinations(sub_item_ids, 2): # <<<<<<<<<<<<<< + * if self.train_set.is_unk_item(earlier_item_idx) or self.train_set.is_unk_item(later_item_idx): + * continue */ - __pyx_t_9 = __pyx_v_idx; - __pyx_v_a_idx = (*((int *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_9 * __pyx_v_X_aids.strides[0]) ))); + __pyx_L19_continue:; + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":576 - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] - * score = X[idx] # <<<<<<<<<<<<<< - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) - * loss += (pred - score) * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":297 + * if len(item_ids) >= self.min_user_freq: + * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) + * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: # <<<<<<<<<<<<<< + * for earlier_item_idx, later_item_idx in combinations(sub_item_ids, 2): + * if self.train_set.is_unk_item(earlier_item_idx) or self.train_set.is_unk_item(later_item_idx): */ - __pyx_t_9 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_9 * __pyx_v_X.strides[0]) ))); + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":577 - * a_idx = X_aids[idx] - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":295 + * chrono_purchased_pairs = Counter() + * for user_idx, (item_ids, *_) in tqdm(data_set.chrono_user_data.items(), disable=not self.verbose, desc='Get purchased pairs'): + * if len(item_ids) >= self.min_user_freq: # <<<<<<<<<<<<<< + * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) + * for sub_item_ids in [item_ids[i:i+window] for i in range(len(item_ids) - window + 1)]: */ - __pyx_v_pred = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":578 - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< - * - * del_sqerror = 2 * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":294 + * from tqdm import tqdm + * chrono_purchased_pairs = Counter() + * for user_idx, (item_ids, *_) in tqdm(data_set.chrono_user_data.items(), disable=not self.verbose, desc='Get purchased pairs'): # <<<<<<<<<<<<<< + * if len(item_ids) >= self.min_user_freq: + * window = len(item_ids) if self.enum_window is None else min(self.enum_window, len(item_ids)) */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":580 - * loss += (pred - score) * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":303 + * chrono_purchased_pairs[(user_idx, earlier_item_idx, later_item_idx)] += 1 * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< - * for i in range(n_user_factors): - * for j in range(n_item_factors): + * pair_counts = Counter() # <<<<<<<<<<<<<< + * common_aspect_counts = Counter() + * counted_pairs = set() */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Counter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 303, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_9, }; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 303, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_pair_counts = __pyx_t_2; + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":581 + /* "cornac/models/comparer/recom_comparer_sub.pyx":304 * - * del_sqerror = 2 * (pred - score) - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): + * pair_counts = Counter() + * common_aspect_counts = Counter() # <<<<<<<<<<<<<< + * counted_pairs = set() + * not_dominated_pairs = set() */ - __pyx_t_3 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Counter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 304, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_9, }; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 304, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_common_aspect_counts = __pyx_t_2; + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":582 - * del_sqerror = 2 * (pred - score) - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":305 + * pair_counts = Counter() + * common_aspect_counts = Counter() + * counted_pairs = set() # <<<<<<<<<<<<<< + * not_dominated_pairs = set() + * for (user_idx, earlier_item_idx, later_item_idx), count in tqdm(chrono_purchased_pairs.most_common(), disable=not self.verbose, desc='Get skyline aspects'): */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 305, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_counted_pairs = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":583 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":306 + * common_aspect_counts = Counter() + * counted_pairs = set() + * not_dominated_pairs = set() # <<<<<<<<<<<<<< + * for (user_idx, earlier_item_idx, later_item_idx), count in tqdm(chrono_purchased_pairs.most_common(), disable=not self.verbose, desc='Get skyline aspects'): + * for k in range(self.train_set.sentiment.num_aspects - 1): # ignore rating at the last index */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 306, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_not_dominated_pairs = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":584 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":307 + * counted_pairs = set() + * not_dominated_pairs = set() + * for (user_idx, earlier_item_idx, later_item_idx), count in tqdm(chrono_purchased_pairs.most_common(), disable=not self.verbose, desc='Get skyline aspects'): # <<<<<<<<<<<<<< + * for k in range(self.train_set.sentiment.num_aspects - 1): # ignore rating at the last index + * if user_item_aspect.get((user_idx, later_item_idx, k), 0) > user_item_aspect.get((user_idx, earlier_item_idx, k), 0): */ - __pyx_t_9 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_i_idx; - __pyx_t_20 = __pyx_v_j; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_k; - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_20 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_chrono_purchased_pairs, __pyx_n_s_most_common); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_9, }; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 307, __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_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = __Pyx_PyBool_FromLong((!__pyx_t_5)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_disable, __pyx_t_9) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_desc, __pyx_kp_u_Get_skyline_aspects) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_v_tqdm, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (likely(PyList_CheckExact(__pyx_t_9)) || PyTuple_CheckExact(__pyx_t_9)) { + __pyx_t_2 = __pyx_t_9; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0; + __pyx_t_7 = NULL; + } else { + __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 307, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + for (;;) { + if (likely(!__pyx_t_7)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 307, __pyx_L1_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } else { + if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 307, __pyx_L1_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } + } else { + __pyx_t_9 = __pyx_t_7(__pyx_t_2); + if (unlikely(!__pyx_t_9)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 307, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_9); + } + if ((likely(PyTuple_CheckExact(__pyx_t_9))) || (PyList_CheckExact(__pyx_t_9))) { + PyObject* sequence = __pyx_t_9; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 307, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_1 = PyList_GET_ITEM(sequence, 0); + __pyx_t_3 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + #else + __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_8 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); + index = 0; __pyx_t_1 = __pyx_t_10(__pyx_t_8); if (unlikely(!__pyx_t_1)) goto __pyx_L31_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + index = 1; __pyx_t_3 = __pyx_t_10(__pyx_t_8); if (unlikely(!__pyx_t_3)) goto __pyx_L31_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_8), 2) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + __pyx_t_10 = NULL; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L32_unpacking_done; + __pyx_L31_unpacking_failed:; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_10 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 307, __pyx_L1_error) + __pyx_L32_unpacking_done:; + } + if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 307, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_12 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_11 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_8 = PyList_GET_ITEM(sequence, 0); + __pyx_t_12 = PyList_GET_ITEM(sequence, 1); + __pyx_t_11 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(__pyx_t_11); + #else + __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_12 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_11 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_17 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_17); + index = 0; __pyx_t_8 = __pyx_t_10(__pyx_t_17); if (unlikely(!__pyx_t_8)) goto __pyx_L33_unpacking_failed; + __Pyx_GOTREF(__pyx_t_8); + index = 1; __pyx_t_12 = __pyx_t_10(__pyx_t_17); if (unlikely(!__pyx_t_12)) goto __pyx_L33_unpacking_failed; + __Pyx_GOTREF(__pyx_t_12); + index = 2; __pyx_t_11 = __pyx_t_10(__pyx_t_17); if (unlikely(!__pyx_t_11)) goto __pyx_L33_unpacking_failed; + __Pyx_GOTREF(__pyx_t_11); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_17), 3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + __pyx_t_10 = 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_10 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 307, __pyx_L1_error) + __pyx_L34_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_user_idx, __pyx_t_8); + __pyx_t_8 = 0; + __Pyx_XDECREF_SET(__pyx_v_earlier_item_idx, __pyx_t_12); + __pyx_t_12 = 0; + __Pyx_XDECREF_SET(__pyx_v_later_item_idx, __pyx_t_11); + __pyx_t_11 = 0; + __Pyx_XDECREF_SET(__pyx_v_count, __pyx_t_3); + __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":585 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":308 + * not_dominated_pairs = set() + * for (user_idx, earlier_item_idx, later_item_idx), count in tqdm(chrono_purchased_pairs.most_common(), disable=not self.verbose, desc='Get skyline aspects'): + * for k in range(self.train_set.sentiment.num_aspects - 1): # ignore rating at the last index # <<<<<<<<<<<<<< + * if user_item_aspect.get((user_idx, later_item_idx, k), 0) > user_item_aspect.get((user_idx, earlier_item_idx, k), 0): + * pair_counts[(user_idx, earlier_item_idx, later_item_idx, k)] += count */ - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_i_idx; - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 308, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 308, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 308, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyInt_SubtractObjC(__pyx_t_9, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 308, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 308, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (likely(PyList_CheckExact(__pyx_t_9)) || PyTuple_CheckExact(__pyx_t_9)) { + __pyx_t_3 = __pyx_t_9; __Pyx_INCREF(__pyx_t_3); __pyx_t_13 = 0; + __pyx_t_15 = NULL; + } else { + __pyx_t_13 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 308, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 308, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + for (;;) { + if (likely(!__pyx_t_15)) { + if (likely(PyList_CheckExact(__pyx_t_3))) { + if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_9); __pyx_t_13++; if (unlikely((0 < 0))) __PYX_ERR(0, 308, __pyx_L1_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 308, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } else { + if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_9); __pyx_t_13++; if (unlikely((0 < 0))) __PYX_ERR(0, 308, __pyx_L1_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 308, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } + } else { + __pyx_t_9 = __pyx_t_15(__pyx_t_3); + if (unlikely(!__pyx_t_9)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 308, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_9); + } + __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_9); + __pyx_t_9 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":586 - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":309 + * for (user_idx, earlier_item_idx, later_item_idx), count in tqdm(chrono_purchased_pairs.most_common(), disable=not self.verbose, desc='Get skyline aspects'): + * for k in range(self.train_set.sentiment.num_aspects - 1): # ignore rating at the last index + * if user_item_aspect.get((user_idx, later_item_idx, k), 0) > user_item_aspect.get((user_idx, earlier_item_idx, k), 0): # <<<<<<<<<<<<<< + * pair_counts[(user_idx, earlier_item_idx, later_item_idx, k)] += count + * not_dominated_pairs.add((user_idx, earlier_item_idx, later_item_idx)) */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_k; - __pyx_t_23 = __pyx_v_i_idx; - __pyx_t_24 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_25 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_20 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_user_item_aspect, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 309, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_v_user_idx); + __Pyx_GIVEREF(__pyx_v_user_idx); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_user_idx); + __Pyx_INCREF(__pyx_v_later_item_idx); + __Pyx_GIVEREF(__pyx_v_later_item_idx); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_later_item_idx); + __Pyx_INCREF(__pyx_v_k); + __Pyx_GIVEREF(__pyx_v_k); + PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_v_k); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_11, __pyx_int_0}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 309, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_user_item_aspect, __pyx_n_s_get); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 309, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 309, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_INCREF(__pyx_v_user_idx); + __Pyx_GIVEREF(__pyx_v_user_idx); + PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_user_idx); + __Pyx_INCREF(__pyx_v_earlier_item_idx); + __Pyx_GIVEREF(__pyx_v_earlier_item_idx); + PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_earlier_item_idx); + __Pyx_INCREF(__pyx_v_k); + __Pyx_GIVEREF(__pyx_v_k); + PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_v_k); + __pyx_t_8 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_12, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __pyx_t_11 = PyObject_RichCompare(__pyx_t_9, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 309, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 309, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (__pyx_t_5) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":587 - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] # <<<<<<<<<<<<<< - * - * # get user aspect opinion element + /* "cornac/models/comparer/recom_comparer_sub.pyx":310 + * for k in range(self.train_set.sentiment.num_aspects - 1): # ignore rating at the last index + * if user_item_aspect.get((user_idx, later_item_idx, k), 0) > user_item_aspect.get((user_idx, earlier_item_idx, k), 0): + * pair_counts[(user_idx, earlier_item_idx, later_item_idx, k)] += count # <<<<<<<<<<<<<< + * not_dominated_pairs.add((user_idx, earlier_item_idx, later_item_idx)) + * if Y[earlier_item_idx, k] > 0 and Y[later_item_idx, k] > 0 and (earlier_item_idx, later_item_idx) not in counted_pairs: */ - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_j; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))); - } - } - } + __pyx_t_11 = PyTuple_New(4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 310, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_v_user_idx); + __Pyx_GIVEREF(__pyx_v_user_idx); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_user_idx); + __Pyx_INCREF(__pyx_v_earlier_item_idx); + __Pyx_GIVEREF(__pyx_v_earlier_item_idx); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_earlier_item_idx); + __Pyx_INCREF(__pyx_v_later_item_idx); + __Pyx_GIVEREF(__pyx_v_later_item_idx); + PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_v_later_item_idx); + __Pyx_INCREF(__pyx_v_k); + __Pyx_GIVEREF(__pyx_v_k); + PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_v_k); + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_pair_counts, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 310, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = PyNumber_InPlaceAdd(__pyx_t_1, __pyx_v_count); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 310, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely((PyObject_SetItem(__pyx_v_pair_counts, __pyx_t_11, __pyx_t_9) < 0))) __PYX_ERR(0, 310, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":590 - * - * # get user aspect opinion element - * idx = rng_pos_uao.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":311 + * if user_item_aspect.get((user_idx, later_item_idx, k), 0) > user_item_aspect.get((user_idx, earlier_item_idx, k), 0): + * pair_counts[(user_idx, earlier_item_idx, later_item_idx, k)] += count + * not_dominated_pairs.add((user_idx, earlier_item_idx, later_item_idx)) # <<<<<<<<<<<<<< + * if Y[earlier_item_idx, k] > 0 and Y[later_item_idx, k] > 0 and (earlier_item_idx, later_item_idx) not in counted_pairs: + * common_aspect_counts[(earlier_item_idx, later_item_idx)] += 1 */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uao->__pyx_vtab)->generate(__pyx_v_rng_pos_uao, __pyx_v_thread_id); + __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 311, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_v_user_idx); + __Pyx_GIVEREF(__pyx_v_user_idx); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_user_idx); + __Pyx_INCREF(__pyx_v_earlier_item_idx); + __Pyx_GIVEREF(__pyx_v_earlier_item_idx); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_earlier_item_idx); + __Pyx_INCREF(__pyx_v_later_item_idx); + __Pyx_GIVEREF(__pyx_v_later_item_idx); + PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_v_later_item_idx); + __pyx_t_18 = PySet_Add(__pyx_v_not_dominated_pairs, __pyx_t_11); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 311, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":591 - * # get user aspect opinion element - * idx = rng_pos_uao.generate(thread_id) - * u_idx = YU_uids[idx] # <<<<<<<<<<<<<< - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":309 + * for (user_idx, earlier_item_idx, later_item_idx), count in tqdm(chrono_purchased_pairs.most_common(), disable=not self.verbose, desc='Get skyline aspects'): + * for k in range(self.train_set.sentiment.num_aspects - 1): # ignore rating at the last index + * if user_item_aspect.get((user_idx, later_item_idx, k), 0) > user_item_aspect.get((user_idx, earlier_item_idx, k), 0): # <<<<<<<<<<<<<< + * pair_counts[(user_idx, earlier_item_idx, later_item_idx, k)] += count + * not_dominated_pairs.add((user_idx, earlier_item_idx, later_item_idx)) */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_u_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YU_uids.data + __pyx_t_25 * __pyx_v_YU_uids.strides[0]) ))); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":592 - * idx = rng_pos_uao.generate(thread_id) - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] # <<<<<<<<<<<<<< - * o_idx = YU_oids[idx] - * score = YU[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":312 + * pair_counts[(user_idx, earlier_item_idx, later_item_idx, k)] += count + * not_dominated_pairs.add((user_idx, earlier_item_idx, later_item_idx)) + * if Y[earlier_item_idx, k] > 0 and Y[later_item_idx, k] > 0 and (earlier_item_idx, later_item_idx) not in counted_pairs: # <<<<<<<<<<<<<< + * common_aspect_counts[(earlier_item_idx, later_item_idx)] += 1 + * if (earlier_item_idx, later_item_idx) not in counted_pairs: */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_a_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YU_aids.data + __pyx_t_25 * __pyx_v_YU_aids.strides[0]) ))); + __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_v_earlier_item_idx); + __Pyx_GIVEREF(__pyx_v_earlier_item_idx); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_earlier_item_idx); + __Pyx_INCREF(__pyx_v_k); + __Pyx_GIVEREF(__pyx_v_k); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_k); + __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_Y, __pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = PyObject_RichCompare(__pyx_t_9, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (__pyx_t_14) { + } else { + __pyx_t_5 = __pyx_t_14; + goto __pyx_L39_bool_binop_done; + } + __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_v_later_item_idx); + __Pyx_GIVEREF(__pyx_v_later_item_idx); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_later_item_idx); + __Pyx_INCREF(__pyx_v_k); + __Pyx_GIVEREF(__pyx_v_k); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_k); + __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_Y, __pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = PyObject_RichCompare(__pyx_t_9, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (__pyx_t_14) { + } else { + __pyx_t_5 = __pyx_t_14; + goto __pyx_L39_bool_binop_done; + } + __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_v_earlier_item_idx); + __Pyx_GIVEREF(__pyx_v_earlier_item_idx); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_earlier_item_idx); + __Pyx_INCREF(__pyx_v_later_item_idx); + __Pyx_GIVEREF(__pyx_v_later_item_idx); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_later_item_idx); + __pyx_t_14 = (__Pyx_PySet_ContainsTF(__pyx_t_11, __pyx_v_counted_pairs, Py_NE)); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_5 = __pyx_t_14; + __pyx_L39_bool_binop_done:; + if (__pyx_t_5) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":593 - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] # <<<<<<<<<<<<<< - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + /* "cornac/models/comparer/recom_comparer_sub.pyx":313 + * not_dominated_pairs.add((user_idx, earlier_item_idx, later_item_idx)) + * if Y[earlier_item_idx, k] > 0 and Y[later_item_idx, k] > 0 and (earlier_item_idx, later_item_idx) not in counted_pairs: + * common_aspect_counts[(earlier_item_idx, later_item_idx)] += 1 # <<<<<<<<<<<<<< + * if (earlier_item_idx, later_item_idx) not in counted_pairs: + * counted_pairs.add((earlier_item_idx, later_item_idx)) */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_o_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YU_oids.data + __pyx_t_25 * __pyx_v_YU_oids.strides[0]) ))); + __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_v_earlier_item_idx); + __Pyx_GIVEREF(__pyx_v_earlier_item_idx); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_earlier_item_idx); + __Pyx_INCREF(__pyx_v_later_item_idx); + __Pyx_GIVEREF(__pyx_v_later_item_idx); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_later_item_idx); + __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_common_aspect_counts, __pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_9, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely((PyObject_SetItem(__pyx_v_common_aspect_counts, __pyx_t_11, __pyx_t_1) < 0))) __PYX_ERR(0, 313, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":594 - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] - * score = YU[idx] # <<<<<<<<<<<<<< - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":312 + * pair_counts[(user_idx, earlier_item_idx, later_item_idx, k)] += count + * not_dominated_pairs.add((user_idx, earlier_item_idx, later_item_idx)) + * if Y[earlier_item_idx, k] > 0 and Y[later_item_idx, k] > 0 and (earlier_item_idx, later_item_idx) not in counted_pairs: # <<<<<<<<<<<<<< + * common_aspect_counts[(earlier_item_idx, later_item_idx)] += 1 + * if (earlier_item_idx, later_item_idx) not in counted_pairs: */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_YU.data + __pyx_t_25 * __pyx_v_YU.strides[0]) ))); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":595 - * o_idx = YU_oids[idx] - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":308 + * not_dominated_pairs = set() + * for (user_idx, earlier_item_idx, later_item_idx), count in tqdm(chrono_purchased_pairs.most_common(), disable=not self.verbose, desc='Get skyline aspects'): + * for k in range(self.train_set.sentiment.num_aspects - 1): # ignore rating at the last index # <<<<<<<<<<<<<< + * if user_item_aspect.get((user_idx, later_item_idx, k), 0) > user_item_aspect.get((user_idx, earlier_item_idx, k), 0): + * pair_counts[(user_idx, earlier_item_idx, later_item_idx, k)] += count */ - __pyx_v_pred = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G2, __pyx_v_n_user_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_U, __pyx_v_A, __pyx_v_O, __pyx_v_u_idx, __pyx_v_a_idx, __pyx_v_o_idx); + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":596 - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":314 + * if Y[earlier_item_idx, k] > 0 and Y[later_item_idx, k] > 0 and (earlier_item_idx, later_item_idx) not in counted_pairs: + * common_aspect_counts[(earlier_item_idx, later_item_idx)] += 1 + * if (earlier_item_idx, later_item_idx) not in counted_pairs: # <<<<<<<<<<<<<< + * counted_pairs.add((earlier_item_idx, later_item_idx)) * - * del_sqerror = 2 * (pred - score) */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 314, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_earlier_item_idx); + __Pyx_GIVEREF(__pyx_v_earlier_item_idx); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_earlier_item_idx); + __Pyx_INCREF(__pyx_v_later_item_idx); + __Pyx_GIVEREF(__pyx_v_later_item_idx); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_later_item_idx); + __pyx_t_5 = (__Pyx_PySet_ContainsTF(__pyx_t_3, __pyx_v_counted_pairs, Py_NE)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 314, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_5) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":598 - * loss += (pred - score) * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":315 + * common_aspect_counts[(earlier_item_idx, later_item_idx)] += 1 + * if (earlier_item_idx, later_item_idx) not in counted_pairs: + * counted_pairs.add((earlier_item_idx, later_item_idx)) # <<<<<<<<<<<<<< * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = [], [], [], [], [] + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 315, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_earlier_item_idx); + __Pyx_GIVEREF(__pyx_v_earlier_item_idx); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_earlier_item_idx); + __Pyx_INCREF(__pyx_v_later_item_idx); + __Pyx_GIVEREF(__pyx_v_later_item_idx); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_later_item_idx); + __pyx_t_18 = PySet_Add(__pyx_v_counted_pairs, __pyx_t_3); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 315, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":314 + * if Y[earlier_item_idx, k] > 0 and Y[later_item_idx, k] > 0 and (earlier_item_idx, later_item_idx) not in counted_pairs: + * common_aspect_counts[(earlier_item_idx, later_item_idx)] += 1 + * if (earlier_item_idx, later_item_idx) not in counted_pairs: # <<<<<<<<<<<<<< + * counted_pairs.add((earlier_item_idx, later_item_idx)) * - * for i in range(n_user_factors): */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":600 - * del_sqerror = 2 * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":307 + * counted_pairs = set() + * not_dominated_pairs = set() + * for (user_idx, earlier_item_idx, later_item_idx), count in tqdm(chrono_purchased_pairs.most_common(), disable=not self.verbose, desc='Get skyline aspects'): # <<<<<<<<<<<<<< + * for k in range(self.train_set.sentiment.num_aspects - 1): # ignore rating at the last index + * if user_item_aspect.get((user_idx, later_item_idx, k), 0) > user_item_aspect.get((user_idx, earlier_item_idx, k), 0): + */ + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":317 + * counted_pairs.add((earlier_item_idx, later_item_idx)) * - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): + * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = [], [], [], [], [] # <<<<<<<<<<<<<< + * for (user_idx, earlier_item_idx, later_item_idx, aspect_idx), count in tqdm(pair_counts.most_common(), disable=not self.verbose, desc='Enumerate index'): + * if common_aspect_counts[(earlier_item_idx, later_item_idx)] < self.min_common_freq: */ - __pyx_t_3 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 317, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 317, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_11 = PyList_New(0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 317, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 317, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = PyList_New(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 317, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_v_user_indices = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_earlier_indices = __pyx_t_3; + __pyx_t_3 = 0; + __pyx_v_later_indices = __pyx_t_11; + __pyx_t_11 = 0; + __pyx_v_aspect_indices = __pyx_t_1; + __pyx_t_1 = 0; + __pyx_v_pair_freq = __pyx_t_9; + __pyx_t_9 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":601 + /* "cornac/models/comparer/recom_comparer_sub.pyx":318 * - * for i in range(n_user_factors): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = [], [], [], [], [] + * for (user_idx, earlier_item_idx, later_item_idx, aspect_idx), count in tqdm(pair_counts.most_common(), disable=not self.verbose, desc='Enumerate index'): # <<<<<<<<<<<<<< + * if common_aspect_counts[(earlier_item_idx, later_item_idx)] < self.min_common_freq: + * continue */ - __pyx_t_12 = __pyx_v_n_aspect_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_pair_counts, __pyx_n_s_most_common); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_11, }; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_9); + __pyx_t_9 = 0; + __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyBool_FromLong((!__pyx_t_5)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_disable, __pyx_t_11) < 0) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_desc, __pyx_kp_u_Enumerate_index) < 0) __PYX_ERR(0, 318, __pyx_L1_error) + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_v_tqdm, __pyx_t_1, __pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (likely(PyList_CheckExact(__pyx_t_11)) || PyTuple_CheckExact(__pyx_t_11)) { + __pyx_t_9 = __pyx_t_11; __Pyx_INCREF(__pyx_t_9); __pyx_t_6 = 0; + __pyx_t_7 = NULL; + } else { + __pyx_t_6 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 318, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + for (;;) { + if (likely(!__pyx_t_7)) { + if (likely(PyList_CheckExact(__pyx_t_9))) { + if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_9)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_11 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_6); __Pyx_INCREF(__pyx_t_11); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 318, __pyx_L1_error) + #else + __pyx_t_11 = PySequence_ITEM(__pyx_t_9, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + #endif + } else { + if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_9)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_6); __Pyx_INCREF(__pyx_t_11); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 318, __pyx_L1_error) + #else + __pyx_t_11 = PySequence_ITEM(__pyx_t_9, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + #endif + } + } else { + __pyx_t_11 = __pyx_t_7(__pyx_t_9); + if (unlikely(!__pyx_t_11)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 318, __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; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 318, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_1 = PyList_GET_ITEM(sequence, 0); + __pyx_t_3 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + #else + __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_2 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); + index = 0; __pyx_t_1 = __pyx_t_10(__pyx_t_2); if (unlikely(!__pyx_t_1)) goto __pyx_L47_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + index = 1; __pyx_t_3 = __pyx_t_10(__pyx_t_2); if (unlikely(!__pyx_t_3)) goto __pyx_L47_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_2), 2) < 0) __PYX_ERR(0, 318, __pyx_L1_error) + __pyx_t_10 = NULL; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L48_unpacking_done; + __pyx_L47_unpacking_failed:; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_10 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 318, __pyx_L1_error) + __pyx_L48_unpacking_done:; + } + if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 4)) { + if (size > 4) __Pyx_RaiseTooManyValuesError(4); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 318, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_12 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_17 = PyTuple_GET_ITEM(sequence, 3); + } else { + __pyx_t_2 = PyList_GET_ITEM(sequence, 0); + __pyx_t_12 = PyList_GET_ITEM(sequence, 1); + __pyx_t_8 = PyList_GET_ITEM(sequence, 2); + __pyx_t_17 = PyList_GET_ITEM(sequence, 3); + } + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_17); + #else + { + Py_ssize_t i; + PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_12,&__pyx_t_8,&__pyx_t_17}; + for (i=0; i < 4; i++) { + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(item); + *(temps[i]) = item; + } + } + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + Py_ssize_t index = -1; + PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_12,&__pyx_t_8,&__pyx_t_17}; + __pyx_t_19 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_19); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_19); + for (index=0; index < 4; index++) { + PyObject* item = __pyx_t_10(__pyx_t_19); if (unlikely(!item)) goto __pyx_L49_unpacking_failed; + __Pyx_GOTREF(item); + *(temps[index]) = item; + } + if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_19), 4) < 0) __PYX_ERR(0, 318, __pyx_L1_error) + __pyx_t_10 = NULL; + __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; + goto __pyx_L50_unpacking_done; + __pyx_L49_unpacking_failed:; + __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; + __pyx_t_10 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 318, __pyx_L1_error) + __pyx_L50_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_user_idx, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_XDECREF_SET(__pyx_v_earlier_item_idx, __pyx_t_12); + __pyx_t_12 = 0; + __Pyx_XDECREF_SET(__pyx_v_later_item_idx, __pyx_t_8); + __pyx_t_8 = 0; + __Pyx_XDECREF_SET(__pyx_v_aspect_idx, __pyx_t_17); + __pyx_t_17 = 0; + __Pyx_XDECREF_SET(__pyx_v_count, __pyx_t_3); + __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":602 - * for i in range(n_user_factors): - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":319 + * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = [], [], [], [], [] + * for (user_idx, earlier_item_idx, later_item_idx, aspect_idx), count in tqdm(pair_counts.most_common(), disable=not self.verbose, desc='Enumerate index'): + * if common_aspect_counts[(earlier_item_idx, later_item_idx)] < self.min_common_freq: # <<<<<<<<<<<<<< + * continue + * user_indices.append(user_idx) */ - __pyx_t_15 = __pyx_v_n_opinion_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 319, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_v_earlier_item_idx); + __Pyx_GIVEREF(__pyx_v_earlier_item_idx); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_earlier_item_idx); + __Pyx_INCREF(__pyx_v_later_item_idx); + __Pyx_GIVEREF(__pyx_v_later_item_idx); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_later_item_idx); + __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_common_aspect_counts, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 319, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_min_common_freq); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 319, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_11, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 319, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 319, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_5) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":603 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":320 + * for (user_idx, earlier_item_idx, later_item_idx, aspect_idx), count in tqdm(pair_counts.most_common(), disable=not self.verbose, desc='Enumerate index'): + * if common_aspect_counts[(earlier_item_idx, later_item_idx)] < self.min_common_freq: + * continue # <<<<<<<<<<<<<< + * user_indices.append(user_idx) + * earlier_indices.append(earlier_item_idx) */ - __pyx_t_25 = __pyx_v_u_idx; - __pyx_t_9 = __pyx_v_i; - __pyx_t_18 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_j; - __pyx_t_20 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); + goto __pyx_L45_continue; - /* "cornac/models/comparer/recom_comparer_sub.pyx":604 - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":319 + * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = [], [], [], [], [] + * for (user_idx, earlier_item_idx, later_item_idx, aspect_idx), count in tqdm(pair_counts.most_common(), disable=not self.verbose, desc='Enumerate index'): + * if common_aspect_counts[(earlier_item_idx, later_item_idx)] < self.min_common_freq: # <<<<<<<<<<<<<< + * continue + * user_indices.append(user_idx) */ - __pyx_t_21 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_18 = __pyx_v_a_idx; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_o_idx; - __pyx_t_24 = __pyx_v_k; - __pyx_t_23 = __pyx_v_u_idx; - __pyx_t_22 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_9 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_25 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )))); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":605 - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":321 + * if common_aspect_counts[(earlier_item_idx, later_item_idx)] < self.min_common_freq: + * continue + * user_indices.append(user_idx) # <<<<<<<<<<<<<< + * earlier_indices.append(earlier_item_idx) + * later_indices.append(later_item_idx) */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_18 = __pyx_v_u_idx; - __pyx_t_19 = __pyx_v_i; - __pyx_t_20 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - __pyx_t_22 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_24 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); + __pyx_t_18 = __Pyx_PyObject_Append(__pyx_v_user_indices, __pyx_v_user_idx); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 321, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":606 - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< - * - * # get item aspect opinion element + /* "cornac/models/comparer/recom_comparer_sub.pyx":322 + * continue + * user_indices.append(user_idx) + * earlier_indices.append(earlier_item_idx) # <<<<<<<<<<<<<< + * later_indices.append(later_item_idx) + * aspect_indices.append(aspect_idx) */ - __pyx_t_21 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_18 = __pyx_v_u_idx; - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_a_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_o_idx; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_24 * __pyx_v_A.strides[1]) )))); - } - } - } + __pyx_t_18 = __Pyx_PyObject_Append(__pyx_v_earlier_indices, __pyx_v_earlier_item_idx); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 322, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":609 - * - * # get item aspect opinion element - * idx = rng_pos_iao.generate(thread_id) # <<<<<<<<<<<<<< - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":323 + * user_indices.append(user_idx) + * earlier_indices.append(earlier_item_idx) + * later_indices.append(later_item_idx) # <<<<<<<<<<<<<< + * aspect_indices.append(aspect_idx) + * pair_freq.append(count) */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_iao->__pyx_vtab)->generate(__pyx_v_rng_pos_iao, __pyx_v_thread_id); + __pyx_t_18 = __Pyx_PyObject_Append(__pyx_v_later_indices, __pyx_v_later_item_idx); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 323, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":610 - * # get item aspect opinion element - * idx = rng_pos_iao.generate(thread_id) - * i_idx = YI_iids[idx] # <<<<<<<<<<<<<< - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":324 + * earlier_indices.append(earlier_item_idx) + * later_indices.append(later_item_idx) + * aspect_indices.append(aspect_idx) # <<<<<<<<<<<<<< + * pair_freq.append(count) + * */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_i_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YI_iids.data + __pyx_t_24 * __pyx_v_YI_iids.strides[0]) ))); + __pyx_t_18 = __Pyx_PyObject_Append(__pyx_v_aspect_indices, __pyx_v_aspect_idx); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 324, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":611 - * idx = rng_pos_iao.generate(thread_id) - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] # <<<<<<<<<<<<<< - * o_idx = YI_oids[idx] - * score = YI[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":325 + * later_indices.append(later_item_idx) + * aspect_indices.append(aspect_idx) + * pair_freq.append(count) # <<<<<<<<<<<<<< + * + * user_indices = np.asarray(user_indices, dtype=np.int32).flatten() */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_a_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YI_aids.data + __pyx_t_24 * __pyx_v_YI_aids.strides[0]) ))); + __pyx_t_18 = __Pyx_PyObject_Append(__pyx_v_pair_freq, __pyx_v_count); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 325, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":612 - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] # <<<<<<<<<<<<<< - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + /* "cornac/models/comparer/recom_comparer_sub.pyx":318 + * + * user_indices, earlier_indices, later_indices, aspect_indices, pair_freq = [], [], [], [], [] + * for (user_idx, earlier_item_idx, later_item_idx, aspect_idx), count in tqdm(pair_counts.most_common(), disable=not self.verbose, desc='Enumerate index'): # <<<<<<<<<<<<<< + * if common_aspect_counts[(earlier_item_idx, later_item_idx)] < self.min_common_freq: + * continue */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_o_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YI_oids.data + __pyx_t_24 * __pyx_v_YI_oids.strides[0]) ))); + __pyx_L45_continue:; + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":613 - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] - * score = YI[idx] # <<<<<<<<<<<<<< - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":327 + * pair_freq.append(count) + * + * user_indices = np.asarray(user_indices, dtype=np.int32).flatten() # <<<<<<<<<<<<<< + * earlier_indices = np.asarray(earlier_indices, dtype=np.int32).flatten() + * later_indices = np.asarray(later_indices, dtype=np.int32).flatten() */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_YI.data + __pyx_t_24 * __pyx_v_YI.strides[0]) ))); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 327, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 327, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 327, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_user_indices); + __Pyx_GIVEREF(__pyx_v_user_indices); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_user_indices); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 327, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_n_s_np); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 327, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_int32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 327, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 327, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 327, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_flatten); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 327, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_8, }; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 327, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF_SET(__pyx_v_user_indices, __pyx_t_9); + __pyx_t_9 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":614 - * o_idx = YI_oids[idx] - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":328 * + * user_indices = np.asarray(user_indices, dtype=np.int32).flatten() + * earlier_indices = np.asarray(earlier_indices, dtype=np.int32).flatten() # <<<<<<<<<<<<<< + * later_indices = np.asarray(later_indices, dtype=np.int32).flatten() + * aspect_indices = np.asarray(aspect_indices, dtype=np.int32).flatten() */ - __pyx_v_pred = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G3, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_i_idx, __pyx_v_a_idx, __pyx_v_o_idx); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_earlier_indices); + __Pyx_GIVEREF(__pyx_v_earlier_indices); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_earlier_indices); + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_int32); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_17) < 0) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_flatten); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_17 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_17)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_17); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_17, }; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF_SET(__pyx_v_earlier_indices, __pyx_t_9); + __pyx_t_9 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":615 - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< - * - * del_sqerror = 2 * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":329 + * user_indices = np.asarray(user_indices, dtype=np.int32).flatten() + * earlier_indices = np.asarray(earlier_indices, dtype=np.int32).flatten() + * later_indices = np.asarray(later_indices, dtype=np.int32).flatten() # <<<<<<<<<<<<<< + * aspect_indices = np.asarray(aspect_indices, dtype=np.int32).flatten() + * pair_freq = np.asarray(pair_freq, dtype=np.int32).flatten() */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_later_indices); + __Pyx_GIVEREF(__pyx_v_later_indices); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_later_indices); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_int32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_11) < 0) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_flatten); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_11, }; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF_SET(__pyx_v_later_indices, __pyx_t_9); + __pyx_t_9 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":617 - * loss += (pred - score) * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":330 + * earlier_indices = np.asarray(earlier_indices, dtype=np.int32).flatten() + * later_indices = np.asarray(later_indices, dtype=np.int32).flatten() + * aspect_indices = np.asarray(aspect_indices, dtype=np.int32).flatten() # <<<<<<<<<<<<<< + * pair_freq = np.asarray(pair_freq, dtype=np.int32).flatten() * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 330, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 330, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 330, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_aspect_indices); + __Pyx_GIVEREF(__pyx_v_aspect_indices); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_aspect_indices); + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 330, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_n_s_np); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 330, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_int32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 330, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 330, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 330, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_flatten); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 330, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_8, }; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 330, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF_SET(__pyx_v_aspect_indices, __pyx_t_9); + __pyx_t_9 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":618 + /* "cornac/models/comparer/recom_comparer_sub.pyx":331 + * later_indices = np.asarray(later_indices, dtype=np.int32).flatten() + * aspect_indices = np.asarray(aspect_indices, dtype=np.int32).flatten() + * pair_freq = np.asarray(pair_freq, dtype=np.int32).flatten() # <<<<<<<<<<<<<< * - * del_sqerror = 2 * (pred - score) - * for i in range(n_item_factors): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): + * if self.verbose: */ - __pyx_t_3 = __pyx_v_n_item_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 331, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 331, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 331, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_pair_freq); + __Pyx_GIVEREF(__pyx_v_pair_freq); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_pair_freq); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 331, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 331, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_int32); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 331, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_17) < 0) __PYX_ERR(0, 331, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 331, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_flatten); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 331, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_17 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_17)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_17); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_17, }; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 331, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF_SET(__pyx_v_pair_freq, __pyx_t_9); + __pyx_t_9 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":619 - * del_sqerror = 2 * (pred - score) - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":333 + * pair_freq = np.asarray(pair_freq, dtype=np.int32).flatten() + * + * if self.verbose: # <<<<<<<<<<<<<< + * print('Building chrono purchared items pairs completed in %d s' % (time() - start_time)) + * print('Statistics: # aspect pairs >= %d = %d, min(%.2f), max(%.2f), avg(%.2f)' % ( */ - __pyx_t_12 = __pyx_v_n_aspect_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 333, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 333, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (__pyx_t_5) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":620 - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":334 + * + * if self.verbose: + * print('Building chrono purchared items pairs completed in %d s' % (time() - start_time)) # <<<<<<<<<<<<<< + * print('Statistics: # aspect pairs >= %d = %d, min(%.2f), max(%.2f), avg(%.2f)' % ( + * self.min_pair_freq, */ - __pyx_t_15 = __pyx_v_n_opinion_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 334, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_17 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_17)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_17); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_17, }; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 334, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_3 = PyNumber_Subtract(__pyx_t_9, __pyx_v_start_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 334, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_Building_chrono_purchared_items, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 334, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 334, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":621 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":335 + * if self.verbose: + * print('Building chrono purchared items pairs completed in %d s' % (time() - start_time)) + * print('Statistics: # aspect pairs >= %d = %d, min(%.2f), max(%.2f), avg(%.2f)' % ( # <<<<<<<<<<<<<< + * self.min_pair_freq, + * pair_freq[pair_freq>=self.min_pair_freq].shape[0], */ - __pyx_t_24 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_o_idx; - __pyx_t_20 = __pyx_v_k; - __pyx_t_21 = __pyx_v_i; - __pyx_t_22 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_24 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); + __pyx_t_3 = PyTuple_New(11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 335, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = 0; + __pyx_t_20 = 127; + __Pyx_INCREF(__pyx_kp_u_Statistics_aspect_pairs); + __pyx_t_6 += 30; + __Pyx_GIVEREF(__pyx_kp_u_Statistics_aspect_pairs); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Statistics_aspect_pairs); - /* "cornac/models/comparer/recom_comparer_sub.pyx":622 - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":336 + * print('Building chrono purchared items pairs completed in %d s' % (time() - start_time)) + * print('Statistics: # aspect pairs >= %d = %d, min(%.2f), max(%.2f), avg(%.2f)' % ( + * self.min_pair_freq, # <<<<<<<<<<<<<< + * pair_freq[pair_freq>=self.min_pair_freq].shape[0], + * pair_freq.min(), */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_25 = __pyx_v_j; - __pyx_t_24 = __pyx_v_o_idx; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i_idx; - __pyx_t_21 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_23 * __pyx_v_O.strides[1]) )))); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_min_pair_freq); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 336, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_17 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_t_9), __pyx_n_u_d); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 336, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_20 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_20) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_20; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17); + __Pyx_GIVEREF(__pyx_t_17); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_17); + __pyx_t_17 = 0; + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_t_6 += 3; + __Pyx_GIVEREF(__pyx_kp_u__12); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__12); - /* "cornac/models/comparer/recom_comparer_sub.pyx":623 - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":337 + * print('Statistics: # aspect pairs >= %d = %d, min(%.2f), max(%.2f), avg(%.2f)' % ( + * self.min_pair_freq, + * pair_freq[pair_freq>=self.min_pair_freq].shape[0], # <<<<<<<<<<<<<< + * pair_freq.min(), + * pair_freq.max(), */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_o_idx; - __pyx_t_20 = __pyx_v_k; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_23 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_min_pair_freq); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 337, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_9 = PyObject_RichCompare(__pyx_v_pair_freq, __pyx_t_17, Py_GE); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 337, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_17 = __Pyx_PyObject_GetItem(__pyx_v_pair_freq, __pyx_t_9); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 337, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_shape); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 337, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_17 = __Pyx_GetItemInt(__pyx_t_9, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 337, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_t_17), __pyx_n_u_d); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 337, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_20 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_20) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_20; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_9); + __pyx_t_9 = 0; + __Pyx_INCREF(__pyx_kp_u_min); + __pyx_t_6 += 6; + __Pyx_GIVEREF(__pyx_kp_u_min); + PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_u_min); - /* "cornac/models/comparer/recom_comparer_sub.pyx":624 - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< - * - * for _ in prange(num_bpr_samples, schedule='guided'): + /* "cornac/models/comparer/recom_comparer_sub.pyx":338 + * self.min_pair_freq, + * pair_freq[pair_freq>=self.min_pair_freq].shape[0], + * pair_freq.min(), # <<<<<<<<<<<<<< + * pair_freq.max(), + * pair_freq.mean())) */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_j; - __pyx_t_22 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); - } - } - } - } - } - } - } + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_pair_freq, __pyx_n_s_min_2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 338, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_17); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_17, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_1, }; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_17, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 338, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + } + __pyx_t_17 = __Pyx_PyObject_Format(__pyx_t_9, __pyx_kp_u_2f); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 338, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_20 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_20) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_20; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17); + __Pyx_GIVEREF(__pyx_t_17); + PyTuple_SET_ITEM(__pyx_t_3, 5, __pyx_t_17); + __pyx_t_17 = 0; + __Pyx_INCREF(__pyx_kp_u_max); + __pyx_t_6 += 7; + __Pyx_GIVEREF(__pyx_kp_u_max); + PyTuple_SET_ITEM(__pyx_t_3, 6, __pyx_kp_u_max); - /* "cornac/models/comparer/recom_comparer_sub.pyx":626 - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] - * - * for _ in prange(num_bpr_samples, schedule='guided'): # <<<<<<<<<<<<<< - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] - */ - __pyx_t_8 = __pyx_v_num_bpr_samples; - if ((1 == 0)) abort(); - { - __pyx_t_4 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_4 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_del_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_i_ij) lastprivate(__pyx_v_i_score) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_j_score) lastprivate(__pyx_v_jdx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_s) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_4; __pyx_t_7++){ - { - __pyx_v__ = (int)(0 + 1 * __pyx_t_7); - /* Initialize private variables to invalid values */ - __pyx_v_del_bpr = ((double)__PYX_NAN()); - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_i_idx = ((int)0xbad0bad0); - __pyx_v_i_ij = ((double)__PYX_NAN()); - __pyx_v_i_score = ((double)__PYX_NAN()); - __pyx_v_idx = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_j_idx = ((int)0xbad0bad0); - __pyx_v_j_score = ((double)__PYX_NAN()); - __pyx_v_jdx = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_pred = ((double)__PYX_NAN()); - __pyx_v_s = ((long)0xbad0bad0); - __pyx_v_u_idx = ((int)0xbad0bad0); - __pyx_v_z = ((double)__PYX_NAN()); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":627 - * - * for _ in prange(num_bpr_samples, schedule='guided'): - * idx = rng_pos.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] - */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos->__pyx_vtab)->generate(__pyx_v_rng_pos, __pyx_v_thread_id); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":628 - * for _ in prange(num_bpr_samples, schedule='guided'): - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] # <<<<<<<<<<<<<< - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) - */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_u_idx = (*((int *) ( /* dim=0 */ (__pyx_v_user_ids.data + __pyx_t_23 * __pyx_v_user_ids.strides[0]) ))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":629 - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] # <<<<<<<<<<<<<< - * jdx = rng_neg.generate(thread_id) - * j_idx = neg_item_ids[jdx] - */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_i_idx = (*((int *) ( /* dim=0 */ (__pyx_v_item_ids.data + __pyx_t_23 * __pyx_v_item_ids.strides[0]) ))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":630 - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) # <<<<<<<<<<<<<< - * j_idx = neg_item_ids[jdx] - * - */ - __pyx_v_jdx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_neg->__pyx_vtab)->generate(__pyx_v_rng_neg, __pyx_v_thread_id); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":631 - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) - * j_idx = neg_item_ids[jdx] # <<<<<<<<<<<<<< - * - * s = 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":339 + * pair_freq[pair_freq>=self.min_pair_freq].shape[0], + * pair_freq.min(), + * pair_freq.max(), # <<<<<<<<<<<<<< + * pair_freq.mean())) + * print('# earlier-later pairs: %d, # unique earlier-later pairs: %d, not dominated pairs %d, # comparable pairs %d' % ( */ - __pyx_t_23 = __pyx_v_jdx; - __pyx_v_j_idx = (*((int *) ( /* dim=0 */ (__pyx_v_neg_item_ids.data + __pyx_t_23 * __pyx_v_neg_item_ids.strides[0]) ))); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_pair_freq, __pyx_n_s_max_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 339, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_1, }; + __pyx_t_17 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 339, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_t_9 = __Pyx_PyObject_Format(__pyx_t_17, __pyx_kp_u_2f); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 339, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_20 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_20) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_20; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_3, 7, __pyx_t_9); + __pyx_t_9 = 0; + __Pyx_INCREF(__pyx_kp_u_avg); + __pyx_t_6 += 7; + __Pyx_GIVEREF(__pyx_kp_u_avg); + PyTuple_SET_ITEM(__pyx_t_3, 8, __pyx_kp_u_avg); - /* "cornac/models/comparer/recom_comparer_sub.pyx":633 - * j_idx = neg_item_ids[jdx] - * - * s = 1 # <<<<<<<<<<<<<< - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): + /* "cornac/models/comparer/recom_comparer_sub.pyx":340 + * pair_freq.min(), + * pair_freq.max(), + * pair_freq.mean())) # <<<<<<<<<<<<<< + * print('# earlier-later pairs: %d, # unique earlier-later pairs: %d, not dominated pairs %d, # comparable pairs %d' % ( + * sum(chrono_purchased_pairs.values()), */ - __pyx_v_s = 1; + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_pair_freq, __pyx_n_s_mean); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 340, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_17); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_17, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_1, }; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_17, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 340, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + } + __pyx_t_17 = __Pyx_PyObject_Format(__pyx_t_9, __pyx_kp_u_2f); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 340, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_20 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_20) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_20; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17); + __Pyx_GIVEREF(__pyx_t_17); + PyTuple_SET_ITEM(__pyx_t_3, 9, __pyx_t_17); + __pyx_t_17 = 0; + __Pyx_INCREF(__pyx_kp_u__7); + __pyx_t_6 += 1; + __Pyx_GIVEREF(__pyx_kp_u__7); + PyTuple_SET_ITEM(__pyx_t_3, 10, __pyx_kp_u__7); - /* "cornac/models/comparer/recom_comparer_sub.pyx":635 - * s = 1 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + /* "cornac/models/comparer/recom_comparer_sub.pyx":335 + * if self.verbose: + * print('Building chrono purchared items pairs completed in %d s' % (time() - start_time)) + * print('Statistics: # aspect pairs >= %d = %d, min(%.2f), max(%.2f), avg(%.2f)' % ( # <<<<<<<<<<<<<< + * self.min_pair_freq, + * pair_freq[pair_freq>=self.min_pair_freq].shape[0], */ - __pyx_t_26 = (__pyx_fuse_1__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero(__pyx_v_indptr, __pyx_v_item_ids, __pyx_v_u_idx, __pyx_v_j_idx) != 0); - if (__pyx_t_26) { + __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_3, 11, __pyx_t_6, __pyx_t_20); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 335, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_17); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 335, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":636 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] # <<<<<<<<<<<<<< - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: + /* "cornac/models/comparer/recom_comparer_sub.pyx":341 + * pair_freq.max(), + * pair_freq.mean())) + * print('# earlier-later pairs: %d, # unique earlier-later pairs: %d, not dominated pairs %d, # comparable pairs %d' % ( # <<<<<<<<<<<<<< + * sum(chrono_purchased_pairs.values()), + * len(chrono_purchased_pairs), */ - __pyx_v_i_score = (__pyx_v_rating_dict->my_map[__pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_i_idx)]); + __pyx_t_3 = PyTuple_New(8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 341, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = 0; + __pyx_t_20 = 127; + __Pyx_INCREF(__pyx_kp_u_earlier_later_pairs); + __pyx_t_6 += 23; + __Pyx_GIVEREF(__pyx_kp_u_earlier_later_pairs); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_earlier_later_pairs); - /* "cornac/models/comparer/recom_comparer_sub.pyx":637 - * if has_non_zero(indptr, item_ids, u_idx, j_idx): - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] # <<<<<<<<<<<<<< - * if i_score == j_score: - * skipped += 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":342 + * pair_freq.mean())) + * print('# earlier-later pairs: %d, # unique earlier-later pairs: %d, not dominated pairs %d, # comparable pairs %d' % ( + * sum(chrono_purchased_pairs.values()), # <<<<<<<<<<<<<< + * len(chrono_purchased_pairs), + * len(not_dominated_pairs), */ - __pyx_v_j_score = (__pyx_v_rating_dict->my_map[__pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_j_idx)]); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_chrono_purchased_pairs, __pyx_n_s_values); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 342, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_1, }; + __pyx_t_17 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 342, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_17); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 342, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_17 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_t_9), __pyx_n_u_d); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 342, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_20 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_20) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_20; + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17); + __Pyx_GIVEREF(__pyx_t_17); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_17); + __pyx_t_17 = 0; + __Pyx_INCREF(__pyx_kp_u_unique_earlier_later_pairs); + __pyx_t_6 += 32; + __Pyx_GIVEREF(__pyx_kp_u_unique_earlier_later_pairs); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_unique_earlier_later_pairs); - /* "cornac/models/comparer/recom_comparer_sub.pyx":638 - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: # <<<<<<<<<<<<<< - * skipped += 1 - * continue + /* "cornac/models/comparer/recom_comparer_sub.pyx":343 + * print('# earlier-later pairs: %d, # unique earlier-later pairs: %d, not dominated pairs %d, # comparable pairs %d' % ( + * sum(chrono_purchased_pairs.values()), + * len(chrono_purchased_pairs), # <<<<<<<<<<<<<< + * len(not_dominated_pairs), + * len(pair_freq) */ - __pyx_t_26 = ((__pyx_v_i_score == __pyx_v_j_score) != 0); - if (__pyx_t_26) { + __pyx_t_13 = PyObject_Length(__pyx_v_chrono_purchased_pairs); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 343, __pyx_L1_error) + __pyx_t_17 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_13, 0, ' ', 'd'); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 343, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17); + __Pyx_GIVEREF(__pyx_t_17); + PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_17); + __pyx_t_17 = 0; + __Pyx_INCREF(__pyx_kp_u_not_dominated_pairs); + __pyx_t_6 += 22; + __Pyx_GIVEREF(__pyx_kp_u_not_dominated_pairs); + PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_u_not_dominated_pairs); - /* "cornac/models/comparer/recom_comparer_sub.pyx":639 - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: - * skipped += 1 # <<<<<<<<<<<<<< - * continue - * elif i_score < j_score: + /* "cornac/models/comparer/recom_comparer_sub.pyx":344 + * sum(chrono_purchased_pairs.values()), + * len(chrono_purchased_pairs), + * len(not_dominated_pairs), # <<<<<<<<<<<<<< + * len(pair_freq) + * )) */ - __pyx_v_skipped = (__pyx_v_skipped + 1); + __pyx_t_13 = PySet_GET_SIZE(__pyx_v_not_dominated_pairs); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 344, __pyx_L1_error) + __pyx_t_17 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_13, 0, ' ', 'd'); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 344, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17); + __Pyx_GIVEREF(__pyx_t_17); + PyTuple_SET_ITEM(__pyx_t_3, 5, __pyx_t_17); + __pyx_t_17 = 0; + __Pyx_INCREF(__pyx_kp_u_comparable_pairs); + __pyx_t_6 += 21; + __Pyx_GIVEREF(__pyx_kp_u_comparable_pairs); + PyTuple_SET_ITEM(__pyx_t_3, 6, __pyx_kp_u_comparable_pairs); - /* "cornac/models/comparer/recom_comparer_sub.pyx":640 - * if i_score == j_score: - * skipped += 1 - * continue # <<<<<<<<<<<<<< - * elif i_score < j_score: - * s = -1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":345 + * len(chrono_purchased_pairs), + * len(not_dominated_pairs), + * len(pair_freq) # <<<<<<<<<<<<<< + * )) + * */ - goto __pyx_L34_continue; + __pyx_t_13 = PyObject_Length(__pyx_v_pair_freq); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 345, __pyx_L1_error) + __pyx_t_17 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_13, 0, ' ', 'd'); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 345, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17); + __Pyx_GIVEREF(__pyx_t_17); + PyTuple_SET_ITEM(__pyx_t_3, 7, __pyx_t_17); + __pyx_t_17 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":638 - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: # <<<<<<<<<<<<<< - * skipped += 1 - * continue + /* "cornac/models/comparer/recom_comparer_sub.pyx":341 + * pair_freq.max(), + * pair_freq.mean())) + * print('# earlier-later pairs: %d, # unique earlier-later pairs: %d, not dominated pairs %d, # comparable pairs %d' % ( # <<<<<<<<<<<<<< + * sum(chrono_purchased_pairs.values()), + * len(chrono_purchased_pairs), */ - } + __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_3, 8, __pyx_t_6, __pyx_t_20); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 341, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_17); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 341, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":641 - * skipped += 1 - * continue - * elif i_score < j_score: # <<<<<<<<<<<<<< - * s = -1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":333 + * pair_freq = np.asarray(pair_freq, dtype=np.int32).flatten() * + * if self.verbose: # <<<<<<<<<<<<<< + * print('Building chrono purchared items pairs completed in %d s' % (time() - start_time)) + * print('Statistics: # aspect pairs >= %d = %d, min(%.2f), max(%.2f), avg(%.2f)' % ( */ - __pyx_t_26 = ((__pyx_v_i_score < __pyx_v_j_score) != 0); - if (__pyx_t_26) { + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":642 - * continue - * elif i_score < j_score: - * s = -1 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":348 + * )) * - * pred = ( - */ - __pyx_v_s = -1L; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":641 - * skipped += 1 - * continue - * elif i_score < j_score: # <<<<<<<<<<<<<< - * s = -1 + * return user_indices, earlier_indices, later_indices, aspect_indices, pair_freq # <<<<<<<<<<<<<< * - */ - } - - /* "cornac/models/comparer/recom_comparer_sub.pyx":635 - * s = 1 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - */ - } - - /* "cornac/models/comparer/recom_comparer_sub.pyx":647 - * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) - * ) * s # <<<<<<<<<<<<<< - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: - */ - __pyx_v_pred = ((__pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_n_aspects) - __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_n_aspects)) * __pyx_v_s); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":648 - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) - * ) * s - * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< - * if z < .5: - * correct += 1 - */ - __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":649 - * ) * s - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * correct += 1 - * del_bpr = ld_bpr * z * s - */ - __pyx_t_26 = ((__pyx_v_z < .5) != 0); - if (__pyx_t_26) { - - /* "cornac/models/comparer/recom_comparer_sub.pyx":650 - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: - * correct += 1 # <<<<<<<<<<<<<< - * del_bpr = ld_bpr * z * s * */ - __pyx_v_correct = (__pyx_v_correct + 1); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":649 - * ) * s - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * correct += 1 - * del_bpr = ld_bpr * z * s - */ - } + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 348, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_user_indices); + __Pyx_GIVEREF(__pyx_v_user_indices); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_user_indices); + __Pyx_INCREF(__pyx_v_earlier_indices); + __Pyx_GIVEREF(__pyx_v_earlier_indices); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_earlier_indices); + __Pyx_INCREF(__pyx_v_later_indices); + __Pyx_GIVEREF(__pyx_v_later_indices); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_later_indices); + __Pyx_INCREF(__pyx_v_aspect_indices); + __Pyx_GIVEREF(__pyx_v_aspect_indices); + PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_aspect_indices); + __Pyx_INCREF(__pyx_v_pair_freq); + __Pyx_GIVEREF(__pyx_v_pair_freq); + PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_v_pair_freq); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":651 - * if z < .5: - * correct += 1 - * del_bpr = ld_bpr * z * s # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":290 + * ) * - * bpr_loss += log(1 / (1 + exp(-pred))) + * def _build_chrono_purchased_pairs(self, data_set, user_item_aspect, Y): # <<<<<<<<<<<<<< + * start_time = time() + * from tqdm import tqdm */ - __pyx_v_del_bpr = ((__pyx_v_ld_bpr * __pyx_v_z) * __pyx_v_s); - /* "cornac/models/comparer/recom_comparer_sub.pyx":653 - * del_bpr = ld_bpr * z * s + /* 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_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_17); + __Pyx_XDECREF(__pyx_t_19); + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._build_chrono_purchased_pairs", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_start_time); + __Pyx_XDECREF(__pyx_v_tqdm); + __Pyx_XDECREF(__pyx_v_chrono_purchased_pairs); + __Pyx_XDECREF(__pyx_v_user_idx); + __Pyx_XDECREF(__pyx_v_item_ids); + __Pyx_XDECREF(__pyx_v__); + __Pyx_XDECREF(__pyx_v_window); + __Pyx_XDECREF(__pyx_v_sub_item_ids); + __Pyx_XDECREF(__pyx_v_earlier_item_idx); + __Pyx_XDECREF(__pyx_v_later_item_idx); + __Pyx_XDECREF(__pyx_v_pair_counts); + __Pyx_XDECREF(__pyx_v_common_aspect_counts); + __Pyx_XDECREF(__pyx_v_counted_pairs); + __Pyx_XDECREF(__pyx_v_not_dominated_pairs); + __Pyx_XDECREF(__pyx_v_count); + __Pyx_XDECREF(__pyx_v_k); + __Pyx_XDECREF(__pyx_v_user_indices); + __Pyx_XDECREF(__pyx_v_earlier_indices); + __Pyx_XDECREF(__pyx_v_later_indices); + __Pyx_XDECREF(__pyx_v_aspect_indices); + __Pyx_XDECREF(__pyx_v_pair_freq); + __Pyx_XDECREF(__pyx_v_aspect_idx); + __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_i); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cornac/models/comparer/recom_comparer_sub.pyx":352 * - * bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< * - * for i in range(n_user_factors): - */ - __pyx_v_bpr_loss = (__pyx_v_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":655 - * bpr_loss += log(1 / (1 + exp(-pred))) + * def fit(self, train_set, val_set=None): # <<<<<<<<<<<<<< + * """Fit the model to observations. * - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] */ - __pyx_t_3 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; - /* "cornac/models/comparer/recom_comparer_sub.pyx":656 - * - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): - */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; +/* Python wrapper */ +static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_9fit(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_8fit, "Fit the model to observations.\n\n Parameters\n ----------\n train_set: :obj:`cornac.data.Dataset`, required\n User-Item preference data as well as additional modalities.\n\n val_set: :obj:`cornac.data.Dataset`, optional, default: None\n User-Item preference data for model selection purposes (e.g., early stopping).\n\n Returns\n -------\n self : object\n "); +static PyMethodDef __pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_9fit = {"fit", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_9fit, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_8fit}; +static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_9fit(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_train_set = 0; + PyObject *__pyx_v_val_set = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("fit (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_train_set,&__pyx_n_s_val_set,0}; + PyObject* values[3] = {0,0,0}; + values[2] = ((PyObject *)((PyObject *)Py_None)); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 352, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_train_set)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 352, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("fit", 0, 2, 3, 1); __PYX_ERR(0, 352, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_val_set); + if (value) { values[2] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 352, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "fit") < 0)) __PYX_ERR(0, 352, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_self = values[0]; + __pyx_v_train_set = values[1]; + __pyx_v_val_set = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("fit", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 352, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_8fit(__pyx_self, __pyx_v_self, __pyx_v_train_set, __pyx_v_val_set); - /* "cornac/models/comparer/recom_comparer_sub.pyx":657 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - */ - __pyx_t_23 = __pyx_v_i_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_j_idx; - __pyx_t_9 = __pyx_v_j; - __pyx_v_i_ij = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":658 - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":659 - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - */ - __pyx_t_9 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_n_aspects; - __pyx_t_23 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":660 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_9 = __pyx_v_n_aspects; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_i_ij) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":661 - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij - */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_18 = __pyx_v_n_aspects; - __pyx_t_19 = __pyx_v_k; - __pyx_t_21 = __pyx_v_i_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); +static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_8fit(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_train_set, PyObject *__pyx_v_val_set) { + PyObject *__pyx_v_rating_matrix = NULL; + PyObject *__pyx_v_rating_dict = NULL; + PyObject *__pyx_v_user_item_aspect = NULL; + PyObject *__pyx_v_user_aspect_opinion = NULL; + PyObject *__pyx_v_item_aspect_opinion = NULL; + PyObject *__pyx_v_p_user_indices = NULL; + PyObject *__pyx_v_earlier_indices = NULL; + PyObject *__pyx_v_later_indices = NULL; + PyObject *__pyx_v_aspect_indices = NULL; + PyObject *__pyx_v_pair_freq = NULL; + PyObject *__pyx_v_X = NULL; + PyObject *__pyx_v_X_uids = NULL; + PyObject *__pyx_v_X_iids = NULL; + PyObject *__pyx_v_X_aids = NULL; + PyObject *__pyx_v_YU = NULL; + PyObject *__pyx_v_YU_uids = NULL; + PyObject *__pyx_v_YU_aids = NULL; + PyObject *__pyx_v_YU_oids = NULL; + PyObject *__pyx_v_YI = NULL; + PyObject *__pyx_v_YI_iids = NULL; + PyObject *__pyx_v_YI_aids = NULL; + PyObject *__pyx_v_YI_oids = NULL; + PyObject *__pyx_v_uid = NULL; + PyObject *__pyx_v_iid = NULL; + PyObject *__pyx_v_aid = NULL; + PyObject *__pyx_v_score = NULL; + PyObject *__pyx_v_oid = NULL; + PyObject *__pyx_v_user_counts = NULL; + PyObject *__pyx_v_user_ids = NULL; + PyObject *__pyx_v_neg_item_ids = NULL; + int __pyx_v_n_threads; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg = 0; + PyObject *__pyx_v_sgrad_G1 = NULL; + PyObject *__pyx_v_sgrad_G2 = NULL; + PyObject *__pyx_v_sgrad_G3 = NULL; + PyObject *__pyx_v_sgrad_U = NULL; + PyObject *__pyx_v_sgrad_I = NULL; + PyObject *__pyx_v_sgrad_A = NULL; + PyObject *__pyx_v_sgrad_O = NULL; + PyObject *__pyx_v_del_g1 = NULL; + PyObject *__pyx_v_del_g2 = NULL; + PyObject *__pyx_v_del_g3 = NULL; + PyObject *__pyx_v_del_u = NULL; + PyObject *__pyx_v_del_i = NULL; + PyObject *__pyx_v_del_a = NULL; + PyObject *__pyx_v_del_o = NULL; + PyObject *__pyx_v_del_g1_reg = NULL; + PyObject *__pyx_v_del_g2_reg = NULL; + PyObject *__pyx_v_del_g3_reg = NULL; + PyObject *__pyx_v_del_u_reg = NULL; + PyObject *__pyx_v_del_i_reg = NULL; + PyObject *__pyx_v_del_a_reg = NULL; + PyObject *__pyx_v_del_o_reg = NULL; + PyObject *__pyx_v_progress = NULL; + CYTHON_UNUSED PyObject *__pyx_v_epoch = NULL; + PyObject *__pyx_v_correct = NULL; + PyObject *__pyx_v_skipped = NULL; + PyObject *__pyx_v_loss = NULL; + PyObject *__pyx_v_bpr_loss = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + PyObject *__pyx_t_15 = NULL; + PyObject *(*__pyx_t_16)(PyObject *); + Py_ssize_t __pyx_t_17; + Py_ssize_t __pyx_t_18; + int __pyx_t_19; + int __pyx_t_20; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + PyObject *(*__pyx_t_25)(PyObject *); + PyObject *__pyx_t_26 = NULL; + PyObject *__pyx_t_27 = NULL; + PyObject *__pyx_t_28 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("fit", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":662 - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij + /* "cornac/models/comparer/recom_comparer_sub.pyx":367 + * self : object + * """ + * Recommender.fit(self, train_set, val_set) # <<<<<<<<<<<<<< * + * self._init() */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_9 = __pyx_v_n_aspects; - __pyx_t_20 = __pyx_v_k; - __pyx_t_22 = __pyx_v_j_idx; - __pyx_t_21 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_18 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Recommender); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 367, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_fit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 367, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_v_self, __pyx_v_train_set, __pyx_v_val_set}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 3+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 367, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":663 - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":369 + * Recommender.fit(self, train_set, val_set) * - * for _ in prange(num_pair_samples, schedule='guided'): - */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_18 = __pyx_v_n_aspects; - __pyx_t_19 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij); - } - } - } - goto __pyx_L48; - __pyx_L34_continue:; - goto __pyx_L48; - __pyx_L48:; - } - } - } - } - - /* "cornac/models/comparer/recom_comparer_sub.pyx":665 - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij + * self._init() # <<<<<<<<<<<<<< * - * for _ in prange(num_pair_samples, schedule='guided'): # <<<<<<<<<<<<<< - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] + * if not self.trainable: */ - __pyx_t_4 = __pyx_v_num_pair_samples; - if ((1 == 0)) abort(); - { - __pyx_t_8 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_8 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_a_ji) lastprivate(__pyx_v_del_aspect_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){ - { - __pyx_v__ = (int)(0 + 1 * __pyx_t_7); - /* Initialize private variables to invalid values */ - __pyx_v_a_idx = ((int)0xbad0bad0); - __pyx_v_a_ji = ((double)__PYX_NAN()); - __pyx_v_del_aspect_bpr = ((double)__PYX_NAN()); - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_i_idx = ((int)0xbad0bad0); - __pyx_v_idx = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_j_idx = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_pred = ((double)__PYX_NAN()); - __pyx_v_u_idx = ((int)0xbad0bad0); - __pyx_v_z = ((double)__PYX_NAN()); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_init_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 369, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_2, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 369, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":666 + /* "cornac/models/comparer/recom_comparer_sub.pyx":371 + * self._init() * - * for _ in prange(num_pair_samples, schedule='guided'): - * idx = rng_pos_pair.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] - */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_pair->__pyx_vtab)->generate(__pyx_v_rng_pos_pair, __pyx_v_thread_id); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":667 - * for _ in prange(num_pair_samples, schedule='guided'): - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] # <<<<<<<<<<<<<< - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] - */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_u_idx = (*((int *) ( /* dim=0 */ (__pyx_v_p_user_indices.data + __pyx_t_23 * __pyx_v_p_user_indices.strides[0]) ))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":668 - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] # <<<<<<<<<<<<<< - * j_idx = later_indices[idx] - * a_idx = aspect_indices[idx] - */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_i_idx = (*((int *) ( /* dim=0 */ (__pyx_v_earlier_indices.data + __pyx_t_23 * __pyx_v_earlier_indices.strides[0]) ))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":669 - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] # <<<<<<<<<<<<<< - * a_idx = aspect_indices[idx] + * if not self.trainable: # <<<<<<<<<<<<<< + * return self * */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_j_idx = (*((int *) ( /* dim=0 */ (__pyx_v_later_indices.data + __pyx_t_23 * __pyx_v_later_indices.strides[0]) ))); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_trainable); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 371, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 371, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_6 = (!__pyx_t_5); + if (__pyx_t_6) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":670 - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] - * a_idx = aspect_indices[idx] # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":372 * - * pred = ( + * if not self.trainable: + * return self # <<<<<<<<<<<<<< + * + * ( */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_a_idx = (*((int *) ( /* dim=0 */ (__pyx_v_aspect_indices.data + __pyx_t_23 * __pyx_v_aspect_indices.strides[0]) ))); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self); + __pyx_r = __pyx_v_self; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":674 - * pred = ( - * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< - * ) + /* "cornac/models/comparer/recom_comparer_sub.pyx":371 + * self._init() + * + * if not self.trainable: # <<<<<<<<<<<<<< + * return self * */ - __pyx_v_pred = (__pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_a_idx) - __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx)); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":677 - * ) + /* "cornac/models/comparer/recom_comparer_sub.pyx":381 + * item_aspect_opinion, + * p_user_indices, earlier_indices, later_indices, aspect_indices, pair_freq + * ) = self._build_data(train_set) # <<<<<<<<<<<<<< * - * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< - * if z < .5: - * aspect_correct += 1 + * X, X_uids, X_iids, X_aids = [], [], [], [] */ - __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_build_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 381, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_train_set}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 381, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 10)) { + if (size > 10) __Pyx_RaiseTooManyValuesError(10); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 375, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 3); + __pyx_t_9 = PyTuple_GET_ITEM(sequence, 4); + __pyx_t_10 = PyTuple_GET_ITEM(sequence, 5); + __pyx_t_11 = PyTuple_GET_ITEM(sequence, 6); + __pyx_t_12 = PyTuple_GET_ITEM(sequence, 7); + __pyx_t_13 = PyTuple_GET_ITEM(sequence, 8); + __pyx_t_14 = PyTuple_GET_ITEM(sequence, 9); + } else { + __pyx_t_3 = PyList_GET_ITEM(sequence, 0); + __pyx_t_2 = PyList_GET_ITEM(sequence, 1); + __pyx_t_7 = PyList_GET_ITEM(sequence, 2); + __pyx_t_8 = PyList_GET_ITEM(sequence, 3); + __pyx_t_9 = PyList_GET_ITEM(sequence, 4); + __pyx_t_10 = PyList_GET_ITEM(sequence, 5); + __pyx_t_11 = PyList_GET_ITEM(sequence, 6); + __pyx_t_12 = PyList_GET_ITEM(sequence, 7); + __pyx_t_13 = PyList_GET_ITEM(sequence, 8); + __pyx_t_14 = PyList_GET_ITEM(sequence, 9); + } + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(__pyx_t_14); + #else + { + Py_ssize_t i; + PyObject** temps[10] = {&__pyx_t_3,&__pyx_t_2,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13,&__pyx_t_14}; + for (i=0; i < 10; i++) { + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 375, __pyx_L1_error) + __Pyx_GOTREF(item); + *(temps[i]) = item; + } + } + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + Py_ssize_t index = -1; + PyObject** temps[10] = {&__pyx_t_3,&__pyx_t_2,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13,&__pyx_t_14}; + __pyx_t_15 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 375, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_16 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_15); + for (index=0; index < 10; index++) { + PyObject* item = __pyx_t_16(__pyx_t_15); if (unlikely(!item)) goto __pyx_L4_unpacking_failed; + __Pyx_GOTREF(item); + *(temps[index]) = item; + } + if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_15), 10) < 0) __PYX_ERR(0, 375, __pyx_L1_error) + __pyx_t_16 = NULL; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + goto __pyx_L5_unpacking_done; + __pyx_L4_unpacking_failed:; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __pyx_t_16 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 375, __pyx_L1_error) + __pyx_L5_unpacking_done:; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":678 - * - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * aspect_correct += 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":375 * + * ( + * rating_matrix, # <<<<<<<<<<<<<< + * rating_dict, + * user_item_aspect, */ - __pyx_t_26 = ((__pyx_v_z < .5) != 0); - if (__pyx_t_26) { + __pyx_v_rating_matrix = __pyx_t_3; + __pyx_t_3 = 0; + __pyx_v_rating_dict = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_user_item_aspect = __pyx_t_7; + __pyx_t_7 = 0; + __pyx_v_user_aspect_opinion = __pyx_t_8; + __pyx_t_8 = 0; + __pyx_v_item_aspect_opinion = __pyx_t_9; + __pyx_t_9 = 0; + __pyx_v_p_user_indices = __pyx_t_10; + __pyx_t_10 = 0; + __pyx_v_earlier_indices = __pyx_t_11; + __pyx_t_11 = 0; + __pyx_v_later_indices = __pyx_t_12; + __pyx_t_12 = 0; + __pyx_v_aspect_indices = __pyx_t_13; + __pyx_t_13 = 0; + __pyx_v_pair_freq = __pyx_t_14; + __pyx_t_14 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":679 - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: - * aspect_correct += 1 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":383 + * ) = self._build_data(train_set) * - * del_aspect_bpr = lambda_d * z + * X, X_uids, X_iids, X_aids = [], [], [], [] # <<<<<<<<<<<<<< + * YU, YU_uids, YU_aids, YU_oids = [], [], [], [] + * YI, YI_iids, YI_aids, YI_oids = [], [], [], [] */ - __pyx_v_aspect_correct = (__pyx_v_aspect_correct + 1); + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 383, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_14 = PyList_New(0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 383, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 383, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_12 = PyList_New(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 383, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_v_X = __pyx_t_1; + __pyx_t_1 = 0; + __pyx_v_X_uids = __pyx_t_14; + __pyx_t_14 = 0; + __pyx_v_X_iids = __pyx_t_13; + __pyx_t_13 = 0; + __pyx_v_X_aids = __pyx_t_12; + __pyx_t_12 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":678 + /* "cornac/models/comparer/recom_comparer_sub.pyx":384 * - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * aspect_correct += 1 + * X, X_uids, X_iids, X_aids = [], [], [], [] + * YU, YU_uids, YU_aids, YU_oids = [], [], [], [] # <<<<<<<<<<<<<< + * YI, YI_iids, YI_aids, YI_oids = [], [], [], [] * */ - } - - /* "cornac/models/comparer/recom_comparer_sub.pyx":681 - * aspect_correct += 1 - * - * del_aspect_bpr = lambda_d * z # <<<<<<<<<<<<<< - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): - */ - __pyx_v_del_aspect_bpr = (__pyx_v_lambda_d * __pyx_v_z); + __pyx_t_12 = PyList_New(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 384, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 384, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = PyList_New(0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 384, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 384, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_YU = __pyx_t_12; + __pyx_t_12 = 0; + __pyx_v_YU_uids = __pyx_t_13; + __pyx_t_13 = 0; + __pyx_v_YU_aids = __pyx_t_14; + __pyx_t_14 = 0; + __pyx_v_YU_oids = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":682 + /* "cornac/models/comparer/recom_comparer_sub.pyx":385 + * X, X_uids, X_iids, X_aids = [], [], [], [] + * YU, YU_uids, YU_aids, YU_oids = [], [], [], [] + * YI, YI_iids, YI_aids, YI_oids = [], [], [], [] # <<<<<<<<<<<<<< * - * del_aspect_bpr = lambda_d * z - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< - * for i in range(n_user_factors): - * for j in range(n_item_factors): - */ - __pyx_v_aspect_bpr_loss = (__pyx_v_aspect_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":683 - * del_aspect_bpr = lambda_d * z - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] - */ - __pyx_t_3 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_3; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":684 - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): - */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":685 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - */ - __pyx_t_23 = __pyx_v_j_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i_idx; - __pyx_t_9 = __pyx_v_j; - __pyx_v_a_ji = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":686 - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * for (uid, iid, aid), score in user_item_aspect.items(): */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_14 = PyList_New(0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 385, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 385, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_12 = PyList_New(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 385, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_v_YI = __pyx_t_1; + __pyx_t_1 = 0; + __pyx_v_YI_iids = __pyx_t_14; + __pyx_t_14 = 0; + __pyx_v_YI_aids = __pyx_t_13; + __pyx_t_13 = 0; + __pyx_v_YI_oids = __pyx_t_12; + __pyx_t_12 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":687 - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":387 + * YI, YI_iids, YI_aids, YI_oids = [], [], [], [] + * + * for (uid, iid, aid), score in user_item_aspect.items(): # <<<<<<<<<<<<<< + * X.append(score) + * X_uids.append(uid) */ - __pyx_t_9 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); + __pyx_t_17 = 0; + if (unlikely(__pyx_v_user_item_aspect == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 387, __pyx_L1_error) + } + __pyx_t_13 = __Pyx_dict_iterator(__pyx_v_user_item_aspect, 0, __pyx_n_s_items, (&__pyx_t_18), (&__pyx_t_4)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 387, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_12); + __pyx_t_12 = __pyx_t_13; + __pyx_t_13 = 0; + while (1) { + __pyx_t_19 = __Pyx_dict_iter_next(__pyx_t_12, __pyx_t_18, &__pyx_t_17, &__pyx_t_13, &__pyx_t_14, NULL, __pyx_t_4); + if (unlikely(__pyx_t_19 == 0)) break; + if (unlikely(__pyx_t_19 == -1)) __PYX_ERR(0, 387, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_GOTREF(__pyx_t_14); + if ((likely(PyTuple_CheckExact(__pyx_t_13))) || (PyList_CheckExact(__pyx_t_13))) { + PyObject* sequence = __pyx_t_13; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 387, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_10 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_1 = PyList_GET_ITEM(sequence, 0); + __pyx_t_11 = PyList_GET_ITEM(sequence, 1); + __pyx_t_10 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(__pyx_t_10); + #else + __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 387, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 387, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_10 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 387, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + #endif + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_9 = PyObject_GetIter(__pyx_t_13); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 387, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_16 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); + index = 0; __pyx_t_1 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + index = 1; __pyx_t_11 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_11)) goto __pyx_L8_unpacking_failed; + __Pyx_GOTREF(__pyx_t_11); + index = 2; __pyx_t_10 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_10)) goto __pyx_L8_unpacking_failed; + __Pyx_GOTREF(__pyx_t_10); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_9), 3) < 0) __PYX_ERR(0, 387, __pyx_L1_error) + __pyx_t_16 = NULL; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L9_unpacking_done; + __pyx_L8_unpacking_failed:; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_16 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 387, __pyx_L1_error) + __pyx_L9_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_uid, __pyx_t_1); + __pyx_t_1 = 0; + __Pyx_XDECREF_SET(__pyx_v_iid, __pyx_t_11); + __pyx_t_11 = 0; + __Pyx_XDECREF_SET(__pyx_v_aid, __pyx_t_10); + __pyx_t_10 = 0; + __Pyx_XDECREF_SET(__pyx_v_score, __pyx_t_14); + __pyx_t_14 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":688 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":388 + * + * for (uid, iid, aid), score in user_item_aspect.items(): + * X.append(score) # <<<<<<<<<<<<<< + * X_uids.append(uid) + * X_iids.append(iid) */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_20 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_a_ji) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_X, __pyx_v_score); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 388, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":689 - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji + /* "cornac/models/comparer/recom_comparer_sub.pyx":389 + * for (uid, iid, aid), score in user_item_aspect.items(): + * X.append(score) + * X_uids.append(uid) # <<<<<<<<<<<<<< + * X_iids.append(iid) + * X_aids.append(aid) */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_20 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_k; - __pyx_t_21 = __pyx_v_j_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_20 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_X_uids, __pyx_v_uid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 389, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":690 - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji + /* "cornac/models/comparer/recom_comparer_sub.pyx":390 + * X.append(score) + * X_uids.append(uid) + * X_iids.append(iid) # <<<<<<<<<<<<<< + * X_aids.append(aid) * */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_9 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i_idx; - __pyx_t_21 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_20 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_X_iids, __pyx_v_iid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 390, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":691 - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":391 + * X_uids.append(uid) + * X_iids.append(iid) + * X_aids.append(aid) # <<<<<<<<<<<<<< * - * # update params with AdaGrad - */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_20 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji); - } - } - } - } - } - } - } - } - } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } - - /* "cornac/models/comparer/recom_comparer_sub.pyx":568 - * del_a_reg.fill(0) - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): + * for (uid, aid, oid), score in user_aspect_opinion.items(): */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L5; - } - __pyx_L5:; - } + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_X_aids, __pyx_v_aid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 391, __pyx_L1_error) } + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":694 + /* "cornac/models/comparer/recom_comparer_sub.pyx":393 + * X_aids.append(aid) * - * # update params with AdaGrad - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): + * for (uid, aid, oid), score in user_aspect_opinion.items(): # <<<<<<<<<<<<<< + * YU.append(score) + * YU_uids.append(uid) */ - { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); + __pyx_t_18 = 0; + if (unlikely(__pyx_v_user_aspect_opinion == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 393, __pyx_L1_error) + } + __pyx_t_14 = __Pyx_dict_iterator(__pyx_v_user_aspect_opinion, 0, __pyx_n_s_items, (&__pyx_t_17), (&__pyx_t_4)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_12); + __pyx_t_12 = __pyx_t_14; + __pyx_t_14 = 0; + while (1) { + __pyx_t_19 = __Pyx_dict_iter_next(__pyx_t_12, __pyx_t_17, &__pyx_t_18, &__pyx_t_14, &__pyx_t_13, NULL, __pyx_t_4); + if (unlikely(__pyx_t_19 == 0)) break; + if (unlikely(__pyx_t_19 == -1)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_GOTREF(__pyx_t_13); + if ((likely(PyTuple_CheckExact(__pyx_t_14))) || (PyList_CheckExact(__pyx_t_14))) { + PyObject* sequence = __pyx_t_14; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 393, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_10 = PyList_GET_ITEM(sequence, 0); + __pyx_t_11 = PyList_GET_ITEM(sequence, 1); + __pyx_t_1 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(__pyx_t_1); + #else + __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); #endif - /*try:*/ { - { - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) - #endif - #ifdef _OPENMP - #pragma omp parallel private(__pyx_t_10, __pyx_t_12, __pyx_t_13, __pyx_t_15, __pyx_t_16, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_3, __pyx_t_7, __pyx_t_8, __pyx_t_9) num_threads(__pyx_v_n_threads) - #endif /* _OPENMP */ - { + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_9 = PyObject_GetIter(__pyx_t_14); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_16 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); + index = 0; __pyx_t_10 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_10)) goto __pyx_L12_unpacking_failed; + __Pyx_GOTREF(__pyx_t_10); + index = 1; __pyx_t_11 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_11)) goto __pyx_L12_unpacking_failed; + __Pyx_GOTREF(__pyx_t_11); + index = 2; __pyx_t_1 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_1)) goto __pyx_L12_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_9), 3) < 0) __PYX_ERR(0, 393, __pyx_L1_error) + __pyx_t_16 = NULL; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L13_unpacking_done; + __pyx_L12_unpacking_failed:; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_16 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 393, __pyx_L1_error) + __pyx_L13_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_uid, __pyx_t_10); + __pyx_t_10 = 0; + __Pyx_XDECREF_SET(__pyx_v_aid, __pyx_t_11); + __pyx_t_11 = 0; + __Pyx_XDECREF_SET(__pyx_v_oid, __pyx_t_1); + __pyx_t_1 = 0; + __Pyx_XDECREF_SET(__pyx_v_score, __pyx_t_13); + __pyx_t_13 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":695 - * # update params with AdaGrad - * with nogil, parallel(num_threads=n_threads): - * for i in prange(n_user_factors, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_users): - * if del_u[j, i] != 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":394 + * + * for (uid, aid, oid), score in user_aspect_opinion.items(): + * YU.append(score) # <<<<<<<<<<<<<< + * YU_uids.append(uid) + * YU_aids.append(aid) */ - __pyx_t_3 = __pyx_v_n_user_factors; - if ((1 == 0)) abort(); - { - __pyx_t_12 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_12 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_12; __pyx_t_10++){ - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_10); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_YU, __pyx_v_score); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 394, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":696 - * with nogil, parallel(num_threads=n_threads): - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): # <<<<<<<<<<<<<< - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":395 + * for (uid, aid, oid), score in user_aspect_opinion.items(): + * YU.append(score) + * YU_uids.append(uid) # <<<<<<<<<<<<<< + * YU_aids.append(aid) + * YU_oids.append(oid) */ - __pyx_t_13 = __pyx_v_n_users; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { - __pyx_v_j = __pyx_t_8; + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_YU_uids, __pyx_v_uid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 395, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":697 - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): - * if del_u[j, i] != 0: # <<<<<<<<<<<<<< - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":396 + * YU.append(score) + * YU_uids.append(uid) + * YU_aids.append(aid) # <<<<<<<<<<<<<< + * YU_oids.append(oid) + * */ - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_YU_aids, __pyx_v_aid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 396, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":698 - * for j in range(n_users): - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] # <<<<<<<<<<<<<< - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":397 + * YU_uids.append(uid) + * YU_aids.append(aid) + * YU_oids.append(oid) # <<<<<<<<<<<<<< + * + * for (iid, aid, oid), score in item_aspect_opinion.items(): */ - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_u_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) ))))); + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_YU_oids, __pyx_v_oid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 397, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":697 - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): - * if del_u[j, i] != 0: # <<<<<<<<<<<<<< - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":399 + * YU_oids.append(oid) + * + * for (iid, aid, oid), score in item_aspect_opinion.items(): # <<<<<<<<<<<<<< + * YI.append(score) + * YI_iids.append(iid) */ - } - - /* "cornac/models/comparer/recom_comparer_sub.pyx":699 - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] # <<<<<<<<<<<<<< - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: - */ - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_19 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_U.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)))); + __pyx_t_17 = 0; + if (unlikely(__pyx_v_item_aspect_opinion == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 399, __pyx_L1_error) + } + __pyx_t_13 = __Pyx_dict_iterator(__pyx_v_item_aspect_opinion, 0, __pyx_n_s_items, (&__pyx_t_18), (&__pyx_t_4)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 399, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_12); + __pyx_t_12 = __pyx_t_13; + __pyx_t_13 = 0; + while (1) { + __pyx_t_19 = __Pyx_dict_iter_next(__pyx_t_12, __pyx_t_18, &__pyx_t_17, &__pyx_t_13, &__pyx_t_14, NULL, __pyx_t_4); + if (unlikely(__pyx_t_19 == 0)) break; + if (unlikely(__pyx_t_19 == -1)) __PYX_ERR(0, 399, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_GOTREF(__pyx_t_14); + if ((likely(PyTuple_CheckExact(__pyx_t_13))) || (PyList_CheckExact(__pyx_t_13))) { + PyObject* sequence = __pyx_t_13; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 399, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_10 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_1 = PyList_GET_ITEM(sequence, 0); + __pyx_t_11 = PyList_GET_ITEM(sequence, 1); + __pyx_t_10 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(__pyx_t_10); + #else + __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 399, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 399, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_10 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 399, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + #endif + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_9 = PyObject_GetIter(__pyx_t_13); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 399, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_16 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); + index = 0; __pyx_t_1 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_1)) goto __pyx_L16_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + index = 1; __pyx_t_11 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_11)) goto __pyx_L16_unpacking_failed; + __Pyx_GOTREF(__pyx_t_11); + index = 2; __pyx_t_10 = __pyx_t_16(__pyx_t_9); if (unlikely(!__pyx_t_10)) goto __pyx_L16_unpacking_failed; + __Pyx_GOTREF(__pyx_t_10); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_9), 3) < 0) __PYX_ERR(0, 399, __pyx_L1_error) + __pyx_t_16 = NULL; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L17_unpacking_done; + __pyx_L16_unpacking_failed:; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_16 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 399, __pyx_L1_error) + __pyx_L17_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_iid, __pyx_t_1); + __pyx_t_1 = 0; + __Pyx_XDECREF_SET(__pyx_v_aid, __pyx_t_11); + __pyx_t_11 = 0; + __Pyx_XDECREF_SET(__pyx_v_oid, __pyx_t_10); + __pyx_t_10 = 0; + __Pyx_XDECREF_SET(__pyx_v_score, __pyx_t_14); + __pyx_t_14 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":700 - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] # <<<<<<<<<<<<<< - * if U[j, i] < 0: - * U[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":400 + * + * for (iid, aid, oid), score in item_aspect_opinion.items(): + * YI.append(score) # <<<<<<<<<<<<<< + * YI_iids.append(iid) + * YI_aids.append(aid) */ - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_24 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_U.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[1].strides))); + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_YI, __pyx_v_score); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 400, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":701 - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: # <<<<<<<<<<<<<< - * U[j, i] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":401 + * for (iid, aid, oid), score in item_aspect_opinion.items(): + * YI.append(score) + * YI_iids.append(iid) # <<<<<<<<<<<<<< + * YI_aids.append(aid) + * YI_oids.append(oid) */ - __pyx_t_9 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_26 = (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_YI_iids, __pyx_v_iid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 401, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":702 - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: - * U[j, i] = 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":402 + * YI.append(score) + * YI_iids.append(iid) + * YI_aids.append(aid) # <<<<<<<<<<<<<< + * YI_oids.append(oid) * - * for j in range(n_item_factors): */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )) = 0.0; + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_YI_aids, __pyx_v_aid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 402, __pyx_L1_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":701 - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: # <<<<<<<<<<<<<< - * U[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":403 + * YI_iids.append(iid) + * YI_aids.append(aid) + * YI_oids.append(oid) # <<<<<<<<<<<<<< * + * X = np.array(X, dtype=np.float32) */ - } - } + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_v_YI_oids, __pyx_v_oid); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 403, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":704 - * U[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":405 + * YI_oids.append(oid) * - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: + * X = np.array(X, dtype=np.float32) # <<<<<<<<<<<<<< + * X_uids = np.array(X_uids, dtype=np.int32) + * X_iids = np.array(X_iids, dtype=np.int32) */ - __pyx_t_13 = __pyx_v_n_item_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { - __pyx_v_j = __pyx_t_8; + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_array); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_INCREF(__pyx_v_X); + __Pyx_GIVEREF(__pyx_v_X); + PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_X); + __pyx_t_13 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_dtype, __pyx_t_11) < 0) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF_SET(__pyx_v_X, __pyx_t_11); + __pyx_t_11 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":705 + /* "cornac/models/comparer/recom_comparer_sub.pyx":406 * - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * X = np.array(X, dtype=np.float32) + * X_uids = np.array(X_uids, dtype=np.int32) # <<<<<<<<<<<<<< + * X_iids = np.array(X_iids, dtype=np.int32) + * X_aids = np.array(X_aids, dtype=np.int32) */ - __pyx_t_16 = __pyx_v_n_aspect_factors; - __pyx_t_27 = __pyx_t_16; - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_27; __pyx_t_7+=1) { - __pyx_v_k = __pyx_t_7; + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_array); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_v_X_uids); + __Pyx_GIVEREF(__pyx_v_X_uids); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_X_uids); + __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_int32); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_dtype, __pyx_t_10) < 0) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF_SET(__pyx_v_X_uids, __pyx_t_10); + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":706 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":407 + * X = np.array(X, dtype=np.float32) + * X_uids = np.array(X_uids, dtype=np.int32) + * X_iids = np.array(X_iids, dtype=np.int32) # <<<<<<<<<<<<<< + * X_aids = np.array(X_aids, dtype=np.int32) + * YU = np.array(YU, dtype=np.float32) */ - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_array); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_INCREF(__pyx_v_X_iids); + __Pyx_GIVEREF(__pyx_v_X_iids); + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_X_iids); + __pyx_t_11 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_int32); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_dtype, __pyx_t_14) < 0) __PYX_ERR(0, 407, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF_SET(__pyx_v_X_iids, __pyx_t_14); + __pyx_t_14 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":707 - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":408 + * X_uids = np.array(X_uids, dtype=np.int32) + * X_iids = np.array(X_iids, dtype=np.int32) + * X_aids = np.array(X_aids, dtype=np.int32) # <<<<<<<<<<<<<< + * YU = np.array(YU, dtype=np.float32) + * YU_uids = np.array(YU_uids, dtype=np.int32) */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) ))))); + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_array); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_INCREF(__pyx_v_X_aids); + __Pyx_GIVEREF(__pyx_v_X_aids); + PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_v_X_aids); + __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_int32); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_dtype, __pyx_t_13) < 0) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_14, __pyx_t_10); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF_SET(__pyx_v_X_aids, __pyx_t_13); + __pyx_t_13 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":706 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":409 + * X_iids = np.array(X_iids, dtype=np.int32) + * X_aids = np.array(X_aids, dtype=np.int32) + * YU = np.array(YU, dtype=np.float32) # <<<<<<<<<<<<<< + * YU_uids = np.array(YU_uids, dtype=np.int32) + * YU_aids = np.array(YU_aids, dtype=np.int32) */ - } + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_array); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_INCREF(__pyx_v_YU); + __Pyx_GIVEREF(__pyx_v_YU); + PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_YU); + __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_float32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_12) < 0) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF_SET(__pyx_v_YU, __pyx_t_12); + __pyx_t_12 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":708 - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":410 + * X_aids = np.array(X_aids, dtype=np.int32) + * YU = np.array(YU, dtype=np.float32) + * YU_uids = np.array(YU_uids, dtype=np.int32) # <<<<<<<<<<<<<< + * YU_aids = np.array(YU_aids, dtype=np.int32) + * YU_oids = np.array(YU_oids, dtype=np.int32) */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_22 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G1.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)))); + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_array); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_INCREF(__pyx_v_YU_uids); + __Pyx_GIVEREF(__pyx_v_YU_uids); + PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_YU_uids); + __pyx_t_13 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_int32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_dtype, __pyx_t_11) < 0) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF_SET(__pyx_v_YU_uids, __pyx_t_11); + __pyx_t_11 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":709 - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< - * if G1[i, j, k] < 0: - * G1[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":411 + * YU = np.array(YU, dtype=np.float32) + * YU_uids = np.array(YU_uids, dtype=np.int32) + * YU_aids = np.array(YU_aids, dtype=np.int32) # <<<<<<<<<<<<<< + * YU_oids = np.array(YU_oids, dtype=np.int32) + * YI = np.array(YI, dtype=np.float32) */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_22 * __pyx_v_G1.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_23 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_25 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_9 * __pyx_v_sgrad_G1.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides))); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_array); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_v_YU_aids); + __Pyx_GIVEREF(__pyx_v_YU_aids); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_YU_aids); + __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_int32); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_dtype, __pyx_t_10) < 0) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF_SET(__pyx_v_YU_aids, __pyx_t_10); + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":710 - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< - * G1[i, j, k] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":412 + * YU_uids = np.array(YU_uids, dtype=np.int32) + * YU_aids = np.array(YU_aids, dtype=np.int32) + * YU_oids = np.array(YU_oids, dtype=np.int32) # <<<<<<<<<<<<<< + * YI = np.array(YI, dtype=np.float32) + * YI_iids = np.array(YI_iids, dtype=np.int32) */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_26 = (((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_24 * __pyx_v_G1.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 412, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_array); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 412, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 412, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_INCREF(__pyx_v_YU_oids); + __Pyx_GIVEREF(__pyx_v_YU_oids); + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_YU_oids); + __pyx_t_11 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 412, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 412, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_int32); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 412, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_dtype, __pyx_t_14) < 0) __PYX_ERR(0, 412, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 412, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF_SET(__pyx_v_YU_oids, __pyx_t_14); + __pyx_t_14 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":711 - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: - * G1[i, j, k] = 0 # <<<<<<<<<<<<<< - * - * for j in range(n_aspect_factors): + /* "cornac/models/comparer/recom_comparer_sub.pyx":413 + * YU_aids = np.array(YU_aids, dtype=np.int32) + * YU_oids = np.array(YU_oids, dtype=np.int32) + * YI = np.array(YI, dtype=np.float32) # <<<<<<<<<<<<<< + * YI_iids = np.array(YI_iids, dtype=np.int32) + * YI_aids = np.array(YI_aids, dtype=np.int32) */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )) = 0.0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":710 - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< - * G1[i, j, k] = 0 - * - */ - } - } - } + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_array); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_INCREF(__pyx_v_YI); + __Pyx_GIVEREF(__pyx_v_YI); + PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_v_YI); + __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_float32); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_dtype, __pyx_t_13) < 0) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_14, __pyx_t_10); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF_SET(__pyx_v_YI, __pyx_t_13); + __pyx_t_13 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":713 - * G1[i, j, k] = 0 - * - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":414 + * YU_oids = np.array(YU_oids, dtype=np.int32) + * YI = np.array(YI, dtype=np.float32) + * YI_iids = np.array(YI_iids, dtype=np.int32) # <<<<<<<<<<<<<< + * YI_aids = np.array(YI_aids, dtype=np.int32) + * YI_oids = np.array(YI_oids, dtype=np.int32) */ - __pyx_t_13 = __pyx_v_n_aspect_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { - __pyx_v_j = __pyx_t_8; + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_array); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_INCREF(__pyx_v_YI_iids); + __Pyx_GIVEREF(__pyx_v_YI_iids); + PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_YI_iids); + __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_int32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_12) < 0) __PYX_ERR(0, 414, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF_SET(__pyx_v_YI_iids, __pyx_t_12); + __pyx_t_12 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":714 + /* "cornac/models/comparer/recom_comparer_sub.pyx":415 + * YI = np.array(YI, dtype=np.float32) + * YI_iids = np.array(YI_iids, dtype=np.int32) + * YI_aids = np.array(YI_aids, dtype=np.int32) # <<<<<<<<<<<<<< + * YI_oids = np.array(YI_oids, dtype=np.int32) * - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - */ - __pyx_t_16 = __pyx_v_n_opinion_factors; - __pyx_t_27 = __pyx_t_16; - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_27; __pyx_t_7+=1) { - __pyx_v_k = __pyx_t_7; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":715 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { - - /* "cornac/models/comparer/recom_comparer_sub.pyx":716 - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) ))))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":715 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - */ - } - - /* "cornac/models/comparer/recom_comparer_sub.pyx":717 - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: - */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_20 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_22 * __pyx_v_sgrad_G2.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":718 - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< - * if G2[i, j, k] < 0: - * G2[i, j, k] = 0 */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_22 * __pyx_v_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_G2.strides[1]) ) + __pyx_t_20 * __pyx_v_G2.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_24 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G2.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides))); + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_array); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_INCREF(__pyx_v_YI_aids); + __Pyx_GIVEREF(__pyx_v_YI_aids); + PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_YI_aids); + __pyx_t_13 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_int32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_dtype, __pyx_t_11) < 0) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF_SET(__pyx_v_YI_aids, __pyx_t_11); + __pyx_t_11 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":719 - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< - * G2[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":416 + * YI_iids = np.array(YI_iids, dtype=np.int32) + * YI_aids = np.array(YI_aids, dtype=np.int32) + * YI_oids = np.array(YI_oids, dtype=np.int32) # <<<<<<<<<<<<<< * + * user_counts = np.ediff1d(rating_matrix.indptr).astype(np.int32) */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_k; - __pyx_t_26 = (((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_23 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_array); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_v_YI_oids); + __Pyx_GIVEREF(__pyx_v_YI_oids); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_YI_oids); + __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_int32); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_dtype, __pyx_t_10) < 0) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF_SET(__pyx_v_YI_oids, __pyx_t_10); + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":720 - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: - * G2[i, j, k] = 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":418 + * YI_oids = np.array(YI_oids, dtype=np.int32) * - * for i in prange(n_item_factors, schedule='guided'): + * user_counts = np.ediff1d(rating_matrix.indptr).astype(np.int32) # <<<<<<<<<<<<<< + * user_ids = np.repeat(np.arange(self.train_set.num_users), user_counts).astype(np.int32) + * neg_item_ids = np.arange(train_set.num_items, dtype=np.int32) */ - __pyx_t_9 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) )) = 0.0; + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_ediff1d); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_rating_matrix, __pyx_n_s_indptr); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_14 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_14)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_t_11}; + __pyx_t_12 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_int32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_v_user_counts = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":719 - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< - * G2[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":419 + * + * user_counts = np.ediff1d(rating_matrix.indptr).astype(np.int32) + * user_ids = np.repeat(np.arange(self.train_set.num_users), user_counts).astype(np.int32) # <<<<<<<<<<<<<< + * neg_item_ids = np.arange(train_set.num_items, dtype=np.int32) * */ - } - } - } - } - } - } - } + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_repeat); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_arange); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_num_users); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_14)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_t_9}; + __pyx_t_11 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_12); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_12, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_11, __pyx_v_user_counts}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + } + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_int32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_12, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + } + __pyx_v_user_ids = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":722 - * G2[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":420 + * user_counts = np.ediff1d(rating_matrix.indptr).astype(np.int32) + * user_ids = np.repeat(np.arange(self.train_set.num_users), user_counts).astype(np.int32) + * neg_item_ids = np.arange(train_set.num_items, dtype=np.int32) # <<<<<<<<<<<<<< * - * for i in prange(n_item_factors, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_items): - * if del_i[j, i] != 0: + * cdef: */ - __pyx_t_12 = __pyx_v_n_item_factors; - if ((1 == 0)) abort(); - { - __pyx_t_3 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_3 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_3; __pyx_t_10++){ - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_10); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_arange); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_train_set, __pyx_n_s_num_items); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 420, __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 = 0; + __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_int32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 420, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_11, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_v_neg_item_ids = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":723 + /* "cornac/models/comparer/recom_comparer_sub.pyx":423 * - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): # <<<<<<<<<<<<<< - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * cdef: + * int n_threads = self.n_threads # <<<<<<<<<<<<<< + * RNGVector rng_pos_uia = RNGVector(n_threads, len(user_item_aspect) - 1, self.rng.randint(2 ** 31)) + * RNGVector rng_pos_uao = RNGVector(n_threads, len(user_aspect_opinion) - 1, self.rng.randint(2 ** 31)) */ - __pyx_t_13 = __pyx_v_n_items; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { - __pyx_v_j = __pyx_t_8; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_threads = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":724 - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): - * if del_i[j, i] != 0: # <<<<<<<<<<<<<< - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":424 + * cdef: + * int n_threads = self.n_threads + * RNGVector rng_pos_uia = RNGVector(n_threads, len(user_item_aspect) - 1, self.rng.randint(2 ** 31)) # <<<<<<<<<<<<<< + * RNGVector rng_pos_uao = RNGVector(n_threads, len(user_aspect_opinion) - 1, self.rng.randint(2 ** 31)) + * RNGVector rng_pos_iao = RNGVector(n_threads, len(item_aspect_opinion) - 1, self.rng.randint(2 ** 31)) */ - __pyx_t_23 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_n_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_18 = PyObject_Length(__pyx_v_user_item_aspect); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(0, 424, __pyx_L1_error) + __pyx_t_10 = PyInt_FromSsize_t((__pyx_t_18 - 1)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rng); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_randint); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_int_2147483648}; + __pyx_t_11 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_10); + PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_10); + __Pyx_GIVEREF(__pyx_t_11); + PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_t_11); + __pyx_t_1 = 0; + __pyx_t_10 = 0; + __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector), __pyx_t_13, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_v_rng_pos_uia = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_t_11); + __pyx_t_11 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":725 - * for j in range(n_items): - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] # <<<<<<<<<<<<<< - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) ))))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":724 - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): - * if del_i[j, i] != 0: # <<<<<<<<<<<<<< - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":425 + * int n_threads = self.n_threads + * RNGVector rng_pos_uia = RNGVector(n_threads, len(user_item_aspect) - 1, self.rng.randint(2 ** 31)) + * RNGVector rng_pos_uao = RNGVector(n_threads, len(user_aspect_opinion) - 1, self.rng.randint(2 ** 31)) # <<<<<<<<<<<<<< + * RNGVector rng_pos_iao = RNGVector(n_threads, len(item_aspect_opinion) - 1, self.rng.randint(2 ** 31)) + * RNGVector rng_pos_pair = RNGVector(n_threads, len(p_user_indices) - 1, self.rng.randint(2 ** 31)) */ - } + __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_n_threads); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_18 = PyObject_Length(__pyx_v_user_aspect_opinion); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(0, 425, __pyx_L1_error) + __pyx_t_13 = PyInt_FromSsize_t((__pyx_t_18 - 1)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rng); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_randint); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_12); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_12, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_int_2147483648}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + } + __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_GIVEREF(__pyx_t_11); + PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11); + __Pyx_GIVEREF(__pyx_t_13); + PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_13); + __Pyx_GIVEREF(__pyx_t_10); + PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_10); + __pyx_t_11 = 0; + __pyx_t_13 = 0; + __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector), __pyx_t_12, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_v_rng_pos_uao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_t_10); + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":726 - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] # <<<<<<<<<<<<<< - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":426 + * RNGVector rng_pos_uia = RNGVector(n_threads, len(user_item_aspect) - 1, self.rng.randint(2 ** 31)) + * RNGVector rng_pos_uao = RNGVector(n_threads, len(user_aspect_opinion) - 1, self.rng.randint(2 ** 31)) + * RNGVector rng_pos_iao = RNGVector(n_threads, len(item_aspect_opinion) - 1, self.rng.randint(2 ** 31)) # <<<<<<<<<<<<<< + * RNGVector rng_pos_pair = RNGVector(n_threads, len(p_user_indices) - 1, self.rng.randint(2 ** 31)) + * RNGVector rng_pos = RNGVector(n_threads, len(user_ids) - 1, self.rng.randint(2 ** 31)) */ - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_24 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_I.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)))); + __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_n_threads); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_18 = PyObject_Length(__pyx_v_item_aspect_opinion); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(0, 426, __pyx_L1_error) + __pyx_t_12 = PyInt_FromSsize_t((__pyx_t_18 - 1)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rng); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_randint); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_int_2147483648}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_10); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_10); + __Pyx_GIVEREF(__pyx_t_12); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_12); + __Pyx_GIVEREF(__pyx_t_13); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_13); + __pyx_t_10 = 0; + __pyx_t_12 = 0; + __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector), __pyx_t_1, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_rng_pos_iao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_t_13); + __pyx_t_13 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":727 - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] # <<<<<<<<<<<<<< - * if I[j, i] < 0: - * I[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":427 + * RNGVector rng_pos_uao = RNGVector(n_threads, len(user_aspect_opinion) - 1, self.rng.randint(2 ** 31)) + * RNGVector rng_pos_iao = RNGVector(n_threads, len(item_aspect_opinion) - 1, self.rng.randint(2 ** 31)) + * RNGVector rng_pos_pair = RNGVector(n_threads, len(p_user_indices) - 1, self.rng.randint(2 ** 31)) # <<<<<<<<<<<<<< + * RNGVector rng_pos = RNGVector(n_threads, len(user_ids) - 1, self.rng.randint(2 ** 31)) + * RNGVector rng_neg = RNGVector(n_threads, train_set.num_items - 1, self.rng.randint(2 ** 31)) */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_25 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_I.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[1].strides))); + __pyx_t_13 = __Pyx_PyInt_From_int(__pyx_v_n_threads); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_18 = PyObject_Length(__pyx_v_p_user_indices); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(0, 427, __pyx_L1_error) + __pyx_t_1 = PyInt_FromSsize_t((__pyx_t_18 - 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rng); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_randint); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_int_2147483648}; + __pyx_t_12 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_13); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_13); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_12); + PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_12); + __pyx_t_13 = 0; + __pyx_t_1 = 0; + __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector), __pyx_t_11, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_v_rng_pos_pair = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_t_12); + __pyx_t_12 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":728 - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: # <<<<<<<<<<<<<< - * I[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":428 + * RNGVector rng_pos_iao = RNGVector(n_threads, len(item_aspect_opinion) - 1, self.rng.randint(2 ** 31)) + * RNGVector rng_pos_pair = RNGVector(n_threads, len(p_user_indices) - 1, self.rng.randint(2 ** 31)) + * RNGVector rng_pos = RNGVector(n_threads, len(user_ids) - 1, self.rng.randint(2 ** 31)) # <<<<<<<<<<<<<< + * RNGVector rng_neg = RNGVector(n_threads, train_set.num_items - 1, self.rng.randint(2 ** 31)) * */ - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_26 = (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_18 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_12 = __Pyx_PyInt_From_int(__pyx_v_n_threads); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 428, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_18 = PyObject_Length(__pyx_v_user_ids); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(0, 428, __pyx_L1_error) + __pyx_t_11 = PyInt_FromSsize_t((__pyx_t_18 - 1)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 428, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rng); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 428, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_randint); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 428, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_10); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_10, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_int_2147483648}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_10, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 428, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + } + __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 428, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GIVEREF(__pyx_t_12); + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_12); + __Pyx_GIVEREF(__pyx_t_11); + PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_11); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_t_1); + __pyx_t_12 = 0; + __pyx_t_11 = 0; + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector), __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 428, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_v_rng_pos = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_t_1); + __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":729 - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: - * I[j, i] = 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":429 + * RNGVector rng_pos_pair = RNGVector(n_threads, len(p_user_indices) - 1, self.rng.randint(2 ** 31)) + * RNGVector rng_pos = RNGVector(n_threads, len(user_ids) - 1, self.rng.randint(2 ** 31)) + * RNGVector rng_neg = RNGVector(n_threads, train_set.num_items - 1, self.rng.randint(2 ** 31)) # <<<<<<<<<<<<<< * - * for j in range(n_aspect_factors): + * sgrad_G1 = np.zeros_like(self.G1).astype(np.float32) */ - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )) = 0.0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_n_threads); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_train_set, __pyx_n_s_num_items); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyInt_SubtractObjC(__pyx_t_10, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rng); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_randint); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_int_2147483648}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_11); + PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_11); + __Pyx_GIVEREF(__pyx_t_10); + PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_t_10); + __pyx_t_1 = 0; + __pyx_t_11 = 0; + __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector), __pyx_t_13, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_v_rng_neg = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_t_10); + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":728 - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: # <<<<<<<<<<<<<< - * I[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":431 + * RNGVector rng_neg = RNGVector(n_threads, train_set.num_items - 1, self.rng.randint(2 ** 31)) * + * sgrad_G1 = np.zeros_like(self.G1).astype(np.float32) # <<<<<<<<<<<<<< + * sgrad_G2 = np.zeros_like(self.G2).astype(np.float32) + * sgrad_G3 = np.zeros_like(self.G3).astype(np.float32) */ - } - } + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_sgrad_G1 = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":731 - * I[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":432 * - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: + * sgrad_G1 = np.zeros_like(self.G1).astype(np.float32) + * sgrad_G2 = np.zeros_like(self.G2).astype(np.float32) # <<<<<<<<<<<<<< + * sgrad_G3 = np.zeros_like(self.G3).astype(np.float32) + * sgrad_U = np.zeros_like(self.U).astype(np.float32) */ - __pyx_t_13 = __pyx_v_n_aspect_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { - __pyx_v_j = __pyx_t_8; + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 432, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 432, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 432, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 432, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 432, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 432, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 432, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 432, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_v_sgrad_G2 = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":732 - * - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":433 + * sgrad_G1 = np.zeros_like(self.G1).astype(np.float32) + * sgrad_G2 = np.zeros_like(self.G2).astype(np.float32) + * sgrad_G3 = np.zeros_like(self.G3).astype(np.float32) # <<<<<<<<<<<<<< + * sgrad_U = np.zeros_like(self.U).astype(np.float32) + * sgrad_I = np.zeros_like(self.I).astype(np.float32) */ - __pyx_t_16 = __pyx_v_n_opinion_factors; - __pyx_t_27 = __pyx_t_16; - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_27; __pyx_t_7+=1) { - __pyx_v_k = __pyx_t_7; + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_sgrad_G3 = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":733 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":434 + * sgrad_G2 = np.zeros_like(self.G2).astype(np.float32) + * sgrad_G3 = np.zeros_like(self.G3).astype(np.float32) + * sgrad_U = np.zeros_like(self.U).astype(np.float32) # <<<<<<<<<<<<<< + * sgrad_I = np.zeros_like(self.I).astype(np.float32) + * sgrad_A = np.zeros_like(self.A).astype(np.float32) */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_v_sgrad_U = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":734 - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) ))))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":733 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - */ - } - - /* "cornac/models/comparer/recom_comparer_sub.pyx":735 - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: - */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_22 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G3.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":736 - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< - * if G3[i, j, k] < 0: - * G3[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":435 + * sgrad_G3 = np.zeros_like(self.G3).astype(np.float32) + * sgrad_U = np.zeros_like(self.U).astype(np.float32) + * sgrad_I = np.zeros_like(self.I).astype(np.float32) # <<<<<<<<<<<<<< + * sgrad_A = np.zeros_like(self.A).astype(np.float32) + * sgrad_O = np.zeros_like(self.O).astype(np.float32) */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_G3.strides[1]) ) + __pyx_t_22 * __pyx_v_G3.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_23 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G3.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides))); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 435, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 435, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_I); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 435, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 435, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 435, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 435, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 435, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 435, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_sgrad_I = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":737 - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< - * G3[i, j, k] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":436 + * sgrad_U = np.zeros_like(self.U).astype(np.float32) + * sgrad_I = np.zeros_like(self.I).astype(np.float32) + * sgrad_A = np.zeros_like(self.A).astype(np.float32) # <<<<<<<<<<<<<< + * sgrad_O = np.zeros_like(self.O).astype(np.float32) + * del_g1 = np.zeros_like(self.G1).astype(np.float32) */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_26 = (((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_19 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 436, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 436, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_A); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 436, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 436, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 436, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 436, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 436, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 436, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_v_sgrad_A = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":738 - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: - * G3[i, j, k] = 0 # <<<<<<<<<<<<<< - * - * for i in prange(n_aspects + 1, schedule='guided'): + /* "cornac/models/comparer/recom_comparer_sub.pyx":437 + * sgrad_I = np.zeros_like(self.I).astype(np.float32) + * sgrad_A = np.zeros_like(self.A).astype(np.float32) + * sgrad_O = np.zeros_like(self.O).astype(np.float32) # <<<<<<<<<<<<<< + * del_g1 = np.zeros_like(self.G1).astype(np.float32) + * del_g2 = np.zeros_like(self.G2).astype(np.float32) */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) )) = 0.0; + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_O); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_sgrad_O = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":737 - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< - * G3[i, j, k] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":438 + * sgrad_A = np.zeros_like(self.A).astype(np.float32) + * sgrad_O = np.zeros_like(self.O).astype(np.float32) + * del_g1 = np.zeros_like(self.G1).astype(np.float32) # <<<<<<<<<<<<<< + * del_g2 = np.zeros_like(self.G2).astype(np.float32) + * del_g3 = np.zeros_like(self.G3).astype(np.float32) */ - } - } - } - } - } - } - } + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 438, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 438, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 438, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 438, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 438, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 438, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 438, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 438, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_v_del_g1 = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":740 - * G3[i, j, k] = 0 - * - * for i in prange(n_aspects + 1, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":439 + * sgrad_O = np.zeros_like(self.O).astype(np.float32) + * del_g1 = np.zeros_like(self.G1).astype(np.float32) + * del_g2 = np.zeros_like(self.G2).astype(np.float32) # <<<<<<<<<<<<<< + * del_g3 = np.zeros_like(self.G3).astype(np.float32) + * del_u = np.zeros_like(self.U).astype(np.float32) */ - __pyx_t_3 = (__pyx_v_n_aspects + 1); - if ((1 == 0)) abort(); - { - __pyx_t_12 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_12 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_12; __pyx_t_10++){ - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_10); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_del_g2 = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":741 - * - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":440 + * del_g1 = np.zeros_like(self.G1).astype(np.float32) + * del_g2 = np.zeros_like(self.G2).astype(np.float32) + * del_g3 = np.zeros_like(self.G3).astype(np.float32) # <<<<<<<<<<<<<< + * del_u = np.zeros_like(self.U).astype(np.float32) + * del_i = np.zeros_like(self.I).astype(np.float32) */ - __pyx_t_13 = __pyx_v_n_aspect_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { - __pyx_v_j = __pyx_t_8; + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_v_del_g3 = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":742 - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: # <<<<<<<<<<<<<< - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":441 + * del_g2 = np.zeros_like(self.G2).astype(np.float32) + * del_g3 = np.zeros_like(self.G3).astype(np.float32) + * del_u = np.zeros_like(self.U).astype(np.float32) # <<<<<<<<<<<<<< + * del_i = np.zeros_like(self.I).astype(np.float32) + * del_a = np.zeros_like(self.A).astype(np.float32) */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 441, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 441, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 441, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 441, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 441, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 441, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 441, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 441, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_del_u = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":743 - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] # <<<<<<<<<<<<<< - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":442 + * del_g3 = np.zeros_like(self.G3).astype(np.float32) + * del_u = np.zeros_like(self.U).astype(np.float32) + * del_i = np.zeros_like(self.I).astype(np.float32) # <<<<<<<<<<<<<< + * del_a = np.zeros_like(self.A).astype(np.float32) + * del_o = np.zeros_like(self.O).astype(np.float32) */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) ))))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":742 - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: # <<<<<<<<<<<<<< - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 442, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 442, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_I); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 442, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 442, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 442, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 442, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 442, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 442, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_v_del_i = __pyx_t_10; + __pyx_t_10 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":443 + * del_u = np.zeros_like(self.U).astype(np.float32) + * del_i = np.zeros_like(self.I).astype(np.float32) + * del_a = np.zeros_like(self.A).astype(np.float32) # <<<<<<<<<<<<<< + * del_o = np.zeros_like(self.O).astype(np.float32) + * del_g1_reg = np.zeros_like(self.G1).astype(np.float32) */ - } + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 443, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 443, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_A); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 443, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 443, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 443, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 443, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 443, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 443, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_del_a = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":744 - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] # <<<<<<<<<<<<<< - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":444 + * del_i = np.zeros_like(self.I).astype(np.float32) + * del_a = np.zeros_like(self.A).astype(np.float32) + * del_o = np.zeros_like(self.O).astype(np.float32) # <<<<<<<<<<<<<< + * del_g1_reg = np.zeros_like(self.G1).astype(np.float32) + * del_g2_reg = np.zeros_like(self.G2).astype(np.float32) */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_23 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_A.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)))); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 444, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 444, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_O); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 444, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 444, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 444, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 444, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 444, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 444, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_v_del_o = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":745 - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] # <<<<<<<<<<<<<< - * if A[i, j] < 0: - * A[i, j] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":445 + * del_a = np.zeros_like(self.A).astype(np.float32) + * del_o = np.zeros_like(self.O).astype(np.float32) + * del_g1_reg = np.zeros_like(self.G1).astype(np.float32) # <<<<<<<<<<<<<< + * del_g2_reg = np.zeros_like(self.G2).astype(np.float32) + * del_g3_reg = np.zeros_like(self.G3).astype(np.float32) */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_24 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_A.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[1].strides))); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 445, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 445, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 445, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 445, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 445, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 445, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 445, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 445, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_del_g1_reg = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":746 - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: # <<<<<<<<<<<<<< - * A[i, j] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":446 + * del_o = np.zeros_like(self.O).astype(np.float32) + * del_g1_reg = np.zeros_like(self.G1).astype(np.float32) + * del_g2_reg = np.zeros_like(self.G2).astype(np.float32) # <<<<<<<<<<<<<< + * del_g3_reg = np.zeros_like(self.G3).astype(np.float32) + * del_u_reg = np.zeros_like(self.U).astype(np.float32) */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_26 = (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 446, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 446, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 446, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 446, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 446, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 446, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 446, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 446, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_v_del_g2_reg = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":747 - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: - * A[i, j] = 0 # <<<<<<<<<<<<<< - * - * for i in prange(n_opinions, schedule='guided'): + /* "cornac/models/comparer/recom_comparer_sub.pyx":447 + * del_g1_reg = np.zeros_like(self.G1).astype(np.float32) + * del_g2_reg = np.zeros_like(self.G2).astype(np.float32) + * del_g3_reg = np.zeros_like(self.G3).astype(np.float32) # <<<<<<<<<<<<<< + * del_u_reg = np.zeros_like(self.U).astype(np.float32) + * del_i_reg = np.zeros_like(self.I).astype(np.float32) */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )) = 0.0; + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_del_g3_reg = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":746 - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: # <<<<<<<<<<<<<< - * A[i, j] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":448 + * del_g2_reg = np.zeros_like(self.G2).astype(np.float32) + * del_g3_reg = np.zeros_like(self.G3).astype(np.float32) + * del_u_reg = np.zeros_like(self.U).astype(np.float32) # <<<<<<<<<<<<<< + * del_i_reg = np.zeros_like(self.I).astype(np.float32) + * del_a_reg = np.zeros_like(self.A).astype(np.float32) */ - } - } - } - } - } - } + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_v_del_u_reg = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":749 - * A[i, j] = 0 - * - * for i in prange(n_opinions, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":449 + * del_g3_reg = np.zeros_like(self.G3).astype(np.float32) + * del_u_reg = np.zeros_like(self.U).astype(np.float32) + * del_i_reg = np.zeros_like(self.I).astype(np.float32) # <<<<<<<<<<<<<< + * del_a_reg = np.zeros_like(self.A).astype(np.float32) + * del_o_reg = np.zeros_like(self.O).astype(np.float32) */ - __pyx_t_12 = __pyx_v_n_opinions; - if ((1 == 0)) abort(); - { - __pyx_t_3 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_3 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_3; __pyx_t_10++){ - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_10); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_I); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_del_i_reg = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":750 + /* "cornac/models/comparer/recom_comparer_sub.pyx":450 + * del_u_reg = np.zeros_like(self.U).astype(np.float32) + * del_i_reg = np.zeros_like(self.I).astype(np.float32) + * del_a_reg = np.zeros_like(self.A).astype(np.float32) # <<<<<<<<<<<<<< + * del_o_reg = np.zeros_like(self.O).astype(np.float32) * - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] */ - __pyx_t_13 = __pyx_v_n_opinion_factors; - __pyx_t_15 = __pyx_t_13; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { - __pyx_v_j = __pyx_t_8; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":751 - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: # <<<<<<<<<<<<<< - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_A); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_v_del_a_reg = __pyx_t_10; + __pyx_t_10 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":451 + * del_i_reg = np.zeros_like(self.I).astype(np.float32) + * del_a_reg = np.zeros_like(self.A).astype(np.float32) + * del_o_reg = np.zeros_like(self.O).astype(np.float32) # <<<<<<<<<<<<<< + * + * with trange(self.max_iter, disable=not self.verbose) as progress: */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 451, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 451, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_O); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 451, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 451, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 451, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 451, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_float32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 451, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 451, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_del_o_reg = __pyx_t_10; + __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":752 - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] # <<<<<<<<<<<<<< - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":453 + * del_o_reg = np.zeros_like(self.O).astype(np.float32) + * + * with trange(self.max_iter, disable=not self.verbose) as progress: # <<<<<<<<<<<<<< + * for epoch in progress: + * correct, skipped, loss, bpr_loss = self._fit_mter( */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_o_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) ))))); + /*with:*/ { + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_trange); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_max_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyBool_FromLong((!__pyx_t_6)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_disable, __pyx_t_13) < 0) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_11, __pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_21 = __Pyx_PyObject_LookupSpecial(__pyx_t_13, __pyx_n_s_exit); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_21); + __pyx_t_11 = __Pyx_PyObject_LookupSpecial(__pyx_t_13, __pyx_n_s_enter); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 453, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_10 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_10, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 453, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __pyx_t_11 = __pyx_t_1; + __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + /*try:*/ { + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_24); + /*try:*/ { + __pyx_v_progress = __pyx_t_11; + __pyx_t_11 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":751 - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: # <<<<<<<<<<<<<< - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":454 + * + * with trange(self.max_iter, disable=not self.verbose) as progress: + * for epoch in progress: # <<<<<<<<<<<<<< + * correct, skipped, loss, bpr_loss = self._fit_mter( + * rng_pos_uia, rng_pos_uao, rng_pos_iao, rng_pos_pair, rng_pos, rng_neg, */ - } + if (likely(PyList_CheckExact(__pyx_v_progress)) || PyTuple_CheckExact(__pyx_v_progress)) { + __pyx_t_11 = __pyx_v_progress; __Pyx_INCREF(__pyx_t_11); __pyx_t_18 = 0; + __pyx_t_25 = NULL; + } else { + __pyx_t_18 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_v_progress); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 454, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_25 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_11); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 454, __pyx_L22_error) + } + for (;;) { + if (likely(!__pyx_t_25)) { + if (likely(PyList_CheckExact(__pyx_t_11))) { + if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_11)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_13 = PyList_GET_ITEM(__pyx_t_11, __pyx_t_18); __Pyx_INCREF(__pyx_t_13); __pyx_t_18++; if (unlikely((0 < 0))) __PYX_ERR(0, 454, __pyx_L22_error) + #else + __pyx_t_13 = PySequence_ITEM(__pyx_t_11, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 454, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_13); + #endif + } else { + if (__pyx_t_18 >= PyTuple_GET_SIZE(__pyx_t_11)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_13 = PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_18); __Pyx_INCREF(__pyx_t_13); __pyx_t_18++; if (unlikely((0 < 0))) __PYX_ERR(0, 454, __pyx_L22_error) + #else + __pyx_t_13 = PySequence_ITEM(__pyx_t_11, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 454, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_13); + #endif + } + } else { + __pyx_t_13 = __pyx_t_25(__pyx_t_11); + if (unlikely(!__pyx_t_13)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 454, __pyx_L22_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_13); + } + __Pyx_XDECREF_SET(__pyx_v_epoch, __pyx_t_13); + __pyx_t_13 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":753 - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] # <<<<<<<<<<<<<< - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":455 + * with trange(self.max_iter, disable=not self.verbose) as progress: + * for epoch in progress: + * correct, skipped, loss, bpr_loss = self._fit_mter( # <<<<<<<<<<<<<< + * rng_pos_uia, rng_pos_uao, rng_pos_iao, rng_pos_pair, rng_pos, rng_neg, + * n_threads, */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_9 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_9 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_O.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)))); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_fit_mter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 455, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":754 - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] # <<<<<<<<<<<<<< - * if O[i, j] < 0: - * O[i, j] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":457 + * correct, skipped, loss, bpr_loss = self._fit_mter( + * rng_pos_uia, rng_pos_uao, rng_pos_iao, rng_pos_pair, rng_pos, rng_neg, + * n_threads, # <<<<<<<<<<<<<< + * X, X_uids, X_iids, X_aids, + * YU, YU_uids, YU_aids, YU_oids, */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_9 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_23 * __pyx_v_O.strides[0]) ) + __pyx_t_9 * __pyx_v_O.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_25 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_O.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[1].strides))); + __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_n_threads); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 457, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_10); - /* "cornac/models/comparer/recom_comparer_sub.pyx":755 - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: # <<<<<<<<<<<<<< - * O[i, j] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":462 + * YI, YI_iids, YI_aids, YI_oids, + * rating_dict, + * user_ids, rating_matrix.indices, neg_item_ids, rating_matrix.indptr, # <<<<<<<<<<<<<< + * p_user_indices, earlier_indices, later_indices, aspect_indices, pair_freq, + * self.G1, self.G2, self.G3, self.U, self.I, self.A, self.O, */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_26 = (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_19 * __pyx_v_O.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_rating_matrix, __pyx_n_s_indices); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 462, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_rating_matrix, __pyx_n_s_indptr); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 462, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_9); - /* "cornac/models/comparer/recom_comparer_sub.pyx":756 - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: - * O[i, j] = 0 # <<<<<<<<<<<<<< - * - * return correct, skipped, loss, bpr_loss + /* "cornac/models/comparer/recom_comparer_sub.pyx":464 + * user_ids, rating_matrix.indices, neg_item_ids, rating_matrix.indptr, + * p_user_indices, earlier_indices, later_indices, aspect_indices, pair_freq, + * self.G1, self.G2, self.G3, self.U, self.I, self.A, self.O, # <<<<<<<<<<<<<< + * sgrad_G1, sgrad_G2, sgrad_G3, sgrad_U, sgrad_I, sgrad_A, sgrad_O, + * del_g1, del_g2, del_g3, del_u, del_i, del_a, del_o, */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )) = 0.0; + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 464, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 464, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 464, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 464, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_I); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 464, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_A); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 464, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_15); + __pyx_t_26 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_O); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 464, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_26); - /* "cornac/models/comparer/recom_comparer_sub.pyx":755 - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: # <<<<<<<<<<<<<< - * O[i, j] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":467 + * sgrad_G1, sgrad_G2, sgrad_G3, sgrad_U, sgrad_I, sgrad_A, sgrad_O, + * del_g1, del_g2, del_g3, del_u, del_i, del_a, del_o, + * del_g1_reg, del_g2_reg, del_g3_reg, del_u_reg, del_i_reg, del_a_reg, del_o_reg # <<<<<<<<<<<<<< + * ) * */ - } - } - } - } - } + __pyx_t_27 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_27 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_27)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_27); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[58] = {__pyx_t_27, ((PyObject *)__pyx_v_rng_pos_uia), ((PyObject *)__pyx_v_rng_pos_uao), ((PyObject *)__pyx_v_rng_pos_iao), ((PyObject *)__pyx_v_rng_pos_pair), ((PyObject *)__pyx_v_rng_pos), ((PyObject *)__pyx_v_rng_neg), __pyx_t_10, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_iids, __pyx_v_X_aids, __pyx_v_YU, __pyx_v_YU_uids, __pyx_v_YU_aids, __pyx_v_YU_oids, __pyx_v_YI, __pyx_v_YI_iids, __pyx_v_YI_aids, __pyx_v_YI_oids, __pyx_v_rating_dict, __pyx_v_user_ids, __pyx_t_12, __pyx_v_neg_item_ids, __pyx_t_9, __pyx_v_p_user_indices, __pyx_v_earlier_indices, __pyx_v_later_indices, __pyx_v_aspect_indices, __pyx_v_pair_freq, __pyx_t_14, __pyx_t_8, __pyx_t_7, __pyx_t_2, __pyx_t_3, __pyx_t_15, __pyx_t_26, __pyx_v_sgrad_G1, __pyx_v_sgrad_G2, __pyx_v_sgrad_G3, __pyx_v_sgrad_U, __pyx_v_sgrad_I, __pyx_v_sgrad_A, __pyx_v_sgrad_O, __pyx_v_del_g1, __pyx_v_del_g2, __pyx_v_del_g3, __pyx_v_del_u, __pyx_v_del_i, __pyx_v_del_a, __pyx_v_del_o, __pyx_v_del_g1_reg, __pyx_v_del_g2_reg, __pyx_v_del_g3_reg, __pyx_v_del_u_reg, __pyx_v_del_i_reg, __pyx_v_del_a_reg, __pyx_v_del_o_reg}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 57+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 455, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + if ((likely(PyTuple_CheckExact(__pyx_t_13))) || (PyList_CheckExact(__pyx_t_13))) { + PyObject* sequence = __pyx_t_13; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 4)) { + if (size > 4) __Pyx_RaiseTooManyValuesError(4); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 455, __pyx_L22_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_26 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_15 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 3); + } else { + __pyx_t_1 = PyList_GET_ITEM(sequence, 0); + __pyx_t_26 = PyList_GET_ITEM(sequence, 1); + __pyx_t_15 = PyList_GET_ITEM(sequence, 2); + __pyx_t_3 = PyList_GET_ITEM(sequence, 3); + } + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_26); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(__pyx_t_3); + #else + { + Py_ssize_t i; + PyObject** temps[4] = {&__pyx_t_1,&__pyx_t_26,&__pyx_t_15,&__pyx_t_3}; + for (i=0; i < 4; i++) { + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 455, __pyx_L22_error) + __Pyx_GOTREF(item); + *(temps[i]) = item; } + } + #endif + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } else { + Py_ssize_t index = -1; + PyObject** temps[4] = {&__pyx_t_1,&__pyx_t_26,&__pyx_t_15,&__pyx_t_3}; + __pyx_t_2 = PyObject_GetIter(__pyx_t_13); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 455, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_16 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); + for (index=0; index < 4; index++) { + PyObject* item = __pyx_t_16(__pyx_t_2); if (unlikely(!item)) goto __pyx_L30_unpacking_failed; + __Pyx_GOTREF(item); + *(temps[index]) = item; + } + if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_2), 4) < 0) __PYX_ERR(0, 455, __pyx_L22_error) + __pyx_t_16 = NULL; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L31_unpacking_done; + __pyx_L30_unpacking_failed:; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_16 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 455, __pyx_L22_error) + __pyx_L31_unpacking_done:; } - } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":694 - * - * # update params with AdaGrad - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): + /* "cornac/models/comparer/recom_comparer_sub.pyx":455 + * with trange(self.max_iter, disable=not self.verbose) as progress: + * for epoch in progress: + * correct, skipped, loss, bpr_loss = self._fit_mter( # <<<<<<<<<<<<<< + * rng_pos_uia, rng_pos_uao, rng_pos_iao, rng_pos_pair, rng_pos, rng_neg, + * n_threads, */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L66; - } - __pyx_L66:; - } - } + __Pyx_XDECREF_SET(__pyx_v_correct, __pyx_t_1); + __pyx_t_1 = 0; + __Pyx_XDECREF_SET(__pyx_v_skipped, __pyx_t_26); + __pyx_t_26 = 0; + __Pyx_XDECREF_SET(__pyx_v_loss, __pyx_t_15); + __pyx_t_15 = 0; + __Pyx_XDECREF_SET(__pyx_v_bpr_loss, __pyx_t_3); + __pyx_t_3 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":758 - * O[i, j] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":470 + * ) * - * return correct, skipped, loss, bpr_loss # <<<<<<<<<<<<<< + * progress.set_postfix({ # <<<<<<<<<<<<<< + * "loss": "%.2f" % (loss / 3 / self.n_element_samples), + * "bpr_loss": "%.2f" % (bpr_loss / self.n_bpr_samples), + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_progress, __pyx_n_s_set_postfix); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 470, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":471 * - * def rank(self, user_id, item_ids=None): + * progress.set_postfix({ + * "loss": "%.2f" % (loss / 3 / self.n_element_samples), # <<<<<<<<<<<<<< + * "bpr_loss": "%.2f" % (bpr_loss / self.n_bpr_samples), + * "correct": "%.2f%%" % (100.0 * correct / (self.n_bpr_samples - skipped)), */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_correct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v_skipped); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_28 = PyFloat_FromDouble(__pyx_v_bpr_loss); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_28); - __pyx_t_29 = PyTuple_New(4); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_29); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_29, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_29, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_29, 2, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_28); - PyTuple_SET_ITEM(__pyx_t_29, 3, __pyx_t_28); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_6 = 0; - __pyx_t_28 = 0; - __pyx_r = __pyx_t_29; - __pyx_t_29 = 0; - goto __pyx_L0; + __pyx_t_15 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 471, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_15); + __pyx_t_26 = __Pyx_PyInt_TrueDivideObjC(__pyx_v_loss, __pyx_int_3, 3, 0, 0); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 471, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_26); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_element_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 471, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_26, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 471, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_2f_2, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 471, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_15, __pyx_n_u_loss, __pyx_t_1) < 0) __PYX_ERR(0, 471, __pyx_L22_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":485 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def _fit_mter( # <<<<<<<<<<<<<< - * self, - * RNGVector rng_pos_uia, + /* "cornac/models/comparer/recom_comparer_sub.pyx":472 + * progress.set_postfix({ + * "loss": "%.2f" % (loss / 3 / self.n_element_samples), + * "bpr_loss": "%.2f" % (bpr_loss / self.n_bpr_samples), # <<<<<<<<<<<<<< + * "correct": "%.2f%%" % (100.0 * correct / (self.n_bpr_samples - skipped)), + * "skipped": "%.2f%%" % (100.0 * skipped / self.n_bpr_samples) */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 472, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_bpr_loss, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 472, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_2f_2, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 472, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_15, __pyx_n_u_bpr_loss, __pyx_t_1) < 0) __PYX_ERR(0, 471, __pyx_L22_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_28); - __Pyx_XDECREF(__pyx_t_29); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); - __pyx_L2:; - __PYX_XDEC_MEMVIEW(&__pyx_v_X, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_oids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_oids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_user_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_item_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_neg_item_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_indptr, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_p_user_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_earlier_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_later_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_aspect_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_pair_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G3, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_O, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G3, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_U, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_I, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_O, 1); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":473 + * "loss": "%.2f" % (loss / 3 / self.n_element_samples), + * "bpr_loss": "%.2f" % (bpr_loss / self.n_bpr_samples), + * "correct": "%.2f%%" % (100.0 * correct / (self.n_bpr_samples - skipped)), # <<<<<<<<<<<<<< + * "skipped": "%.2f%%" % (100.0 * skipped / self.n_bpr_samples) + * }) + */ + __pyx_t_1 = PyNumber_Multiply(__pyx_float_100_0, __pyx_v_correct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 473, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 473, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_26 = PyNumber_Subtract(__pyx_t_2, __pyx_v_skipped); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 473, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_26); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_26); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 473, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0; + __pyx_t_26 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_2f_3, __pyx_t_2); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 473, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_26); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_15, __pyx_n_u_correct, __pyx_t_26) < 0) __PYX_ERR(0, 471, __pyx_L22_error) + __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0; -/* Python wrapper */ -static PyObject *__pyx_fuse_1_2__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_25_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_fuse_1_2__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_25_fit_mter = {"__pyx_fuse_1_2_fit_mter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1_2__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_25_fit_mter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter}; -static PyObject *__pyx_fuse_1_2__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_25_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos = 0; - struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg = 0; - int __pyx_v_n_threads; - __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YU_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_YI_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; - struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict = 0; - __Pyx_memviewslice __pyx_v_user_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_neg_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_indptr = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_p_user_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_earlier_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_later_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_aspect_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; - CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_O = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_U = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_I = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_sgrad_O = { 0, 0, { 0 }, { 0 }, { 0 } }; - PyArrayObject *__pyx_v_del_g1 = 0; - PyArrayObject *__pyx_v_del_g2 = 0; - PyArrayObject *__pyx_v_del_g3 = 0; - PyArrayObject *__pyx_v_del_u = 0; - PyArrayObject *__pyx_v_del_i = 0; - PyArrayObject *__pyx_v_del_a = 0; - PyArrayObject *__pyx_v_del_o = 0; - PyArrayObject *__pyx_v_del_g1_reg = 0; - PyArrayObject *__pyx_v_del_g2_reg = 0; - PyArrayObject *__pyx_v_del_g3_reg = 0; - PyArrayObject *__pyx_v_del_u_reg = 0; - PyArrayObject *__pyx_v_del_i_reg = 0; - PyArrayObject *__pyx_v_del_a_reg = 0; - PyArrayObject *__pyx_v_del_o_reg = 0; + /* "cornac/models/comparer/recom_comparer_sub.pyx":474 + * "bpr_loss": "%.2f" % (bpr_loss / self.n_bpr_samples), + * "correct": "%.2f%%" % (100.0 * correct / (self.n_bpr_samples - skipped)), + * "skipped": "%.2f%%" % (100.0 * skipped / self.n_bpr_samples) # <<<<<<<<<<<<<< + * }) + * + */ + __pyx_t_26 = PyNumber_Multiply(__pyx_float_100_0, __pyx_v_skipped); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 474, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_26); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 474, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_26, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 474, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_2f_3, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 474, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_15, __pyx_n_u_skipped, __pyx_t_2) < 0) __PYX_ERR(0, 471, __pyx_L22_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_15}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 470, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":454 + * + * with trange(self.max_iter, disable=not self.verbose) as progress: + * for epoch in progress: # <<<<<<<<<<<<<< + * correct, skipped, loss, bpr_loss = self._fit_mter( + * rng_pos_uia, rng_pos_uao, rng_pos_iao, rng_pos_pair, rng_pos, rng_neg, + */ + } + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":453 + * del_o_reg = np.zeros_like(self.O).astype(np.float32) + * + * with trange(self.max_iter, disable=not self.verbose) as progress: # <<<<<<<<<<<<<< + * for epoch in progress: + * correct, skipped, loss, bpr_loss = self._fit_mter( + */ + } + __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; + __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0; + __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0; + goto __pyx_L27_try_end; + __pyx_L22_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0; + __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + /*except:*/ { + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_13, &__pyx_t_3) < 0) __PYX_ERR(0, 453, __pyx_L24_except_error) + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_3); + __pyx_t_15 = PyTuple_Pack(3, __pyx_t_11, __pyx_t_13, __pyx_t_3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 453, __pyx_L24_except_error) + __Pyx_GOTREF(__pyx_t_15); + __pyx_t_28 = __Pyx_PyObject_Call(__pyx_t_21, __pyx_t_15, NULL); + __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 453, __pyx_L24_except_error) + __Pyx_GOTREF(__pyx_t_28); + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_28); + __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0; + if (__pyx_t_6 < 0) __PYX_ERR(0, 453, __pyx_L24_except_error) + __pyx_t_5 = (!__pyx_t_6); + if (unlikely(__pyx_t_5)) { + __Pyx_GIVEREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ErrRestoreWithState(__pyx_t_11, __pyx_t_13, __pyx_t_3); + __pyx_t_11 = 0; __pyx_t_13 = 0; __pyx_t_3 = 0; + __PYX_ERR(0, 453, __pyx_L24_except_error) + } + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L23_exception_handled; + } + __pyx_L24_except_error:; + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24); + goto __pyx_L1_error; + __pyx_L23_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24); + __pyx_L27_try_end:; + } + } + /*finally:*/ { + /*normal exit:*/{ + if (__pyx_t_21) { + __pyx_t_24 = __Pyx_PyObject_Call(__pyx_t_21, __pyx_tuple__13, NULL); + __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; + if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_24); + __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0; + } + goto __pyx_L21; + } + __pyx_L21:; + } + goto __pyx_L36; + __pyx_L18_error:; + __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; + goto __pyx_L1_error; + __pyx_L36:; + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":477 + * }) + * + * if self.verbose: # <<<<<<<<<<<<<< + * print('Optimization finished!') + * + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_5) { + + /* "cornac/models/comparer/recom_comparer_sub.pyx":478 + * + * if self.verbose: + * print('Optimization finished!') # <<<<<<<<<<<<<< + * + * return self + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 478, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":477 + * }) + * + * if self.verbose: # <<<<<<<<<<<<<< + * print('Optimization finished!') + * + */ + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":480 + * print('Optimization finished!') + * + * return self # <<<<<<<<<<<<<< + * + * @cython.cdivision(True) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self); + __pyx_r = __pyx_v_self; + goto __pyx_L0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":352 + * + * + * def fit(self, train_set, val_set=None): # <<<<<<<<<<<<<< + * """Fit the model to observations. + * + */ + + /* 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_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_XDECREF(__pyx_t_26); + __Pyx_XDECREF(__pyx_t_27); + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_rating_matrix); + __Pyx_XDECREF(__pyx_v_rating_dict); + __Pyx_XDECREF(__pyx_v_user_item_aspect); + __Pyx_XDECREF(__pyx_v_user_aspect_opinion); + __Pyx_XDECREF(__pyx_v_item_aspect_opinion); + __Pyx_XDECREF(__pyx_v_p_user_indices); + __Pyx_XDECREF(__pyx_v_earlier_indices); + __Pyx_XDECREF(__pyx_v_later_indices); + __Pyx_XDECREF(__pyx_v_aspect_indices); + __Pyx_XDECREF(__pyx_v_pair_freq); + __Pyx_XDECREF(__pyx_v_X); + __Pyx_XDECREF(__pyx_v_X_uids); + __Pyx_XDECREF(__pyx_v_X_iids); + __Pyx_XDECREF(__pyx_v_X_aids); + __Pyx_XDECREF(__pyx_v_YU); + __Pyx_XDECREF(__pyx_v_YU_uids); + __Pyx_XDECREF(__pyx_v_YU_aids); + __Pyx_XDECREF(__pyx_v_YU_oids); + __Pyx_XDECREF(__pyx_v_YI); + __Pyx_XDECREF(__pyx_v_YI_iids); + __Pyx_XDECREF(__pyx_v_YI_aids); + __Pyx_XDECREF(__pyx_v_YI_oids); + __Pyx_XDECREF(__pyx_v_uid); + __Pyx_XDECREF(__pyx_v_iid); + __Pyx_XDECREF(__pyx_v_aid); + __Pyx_XDECREF(__pyx_v_score); + __Pyx_XDECREF(__pyx_v_oid); + __Pyx_XDECREF(__pyx_v_user_counts); + __Pyx_XDECREF(__pyx_v_user_ids); + __Pyx_XDECREF(__pyx_v_neg_item_ids); + __Pyx_XDECREF((PyObject *)__pyx_v_rng_pos_uia); + __Pyx_XDECREF((PyObject *)__pyx_v_rng_pos_uao); + __Pyx_XDECREF((PyObject *)__pyx_v_rng_pos_iao); + __Pyx_XDECREF((PyObject *)__pyx_v_rng_pos_pair); + __Pyx_XDECREF((PyObject *)__pyx_v_rng_pos); + __Pyx_XDECREF((PyObject *)__pyx_v_rng_neg); + __Pyx_XDECREF(__pyx_v_sgrad_G1); + __Pyx_XDECREF(__pyx_v_sgrad_G2); + __Pyx_XDECREF(__pyx_v_sgrad_G3); + __Pyx_XDECREF(__pyx_v_sgrad_U); + __Pyx_XDECREF(__pyx_v_sgrad_I); + __Pyx_XDECREF(__pyx_v_sgrad_A); + __Pyx_XDECREF(__pyx_v_sgrad_O); + __Pyx_XDECREF(__pyx_v_del_g1); + __Pyx_XDECREF(__pyx_v_del_g2); + __Pyx_XDECREF(__pyx_v_del_g3); + __Pyx_XDECREF(__pyx_v_del_u); + __Pyx_XDECREF(__pyx_v_del_i); + __Pyx_XDECREF(__pyx_v_del_a); + __Pyx_XDECREF(__pyx_v_del_o); + __Pyx_XDECREF(__pyx_v_del_g1_reg); + __Pyx_XDECREF(__pyx_v_del_g2_reg); + __Pyx_XDECREF(__pyx_v_del_g3_reg); + __Pyx_XDECREF(__pyx_v_del_u_reg); + __Pyx_XDECREF(__pyx_v_del_i_reg); + __Pyx_XDECREF(__pyx_v_del_a_reg); + __Pyx_XDECREF(__pyx_v_del_o_reg); + __Pyx_XDECREF(__pyx_v_progress); + __Pyx_XDECREF(__pyx_v_epoch); + __Pyx_XDECREF(__pyx_v_correct); + __Pyx_XDECREF(__pyx_v_skipped); + __Pyx_XDECREF(__pyx_v_loss); + __Pyx_XDECREF(__pyx_v_bpr_loss); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cornac/models/comparer/recom_comparer_sub.pyx":482 + * return self + * + * @cython.cdivision(True) # <<<<<<<<<<<<<< + * @cython.boundscheck(False) + * @cython.wraparound(False) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_11_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +PyDoc_STRVAR(__pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter, "Fit the model parameters (G1, G2, G3, U, I, A, O)\n "); +static PyMethodDef __pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_11_fit_mter = {"_fit_mter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_11_fit_mter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter}; +static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_11_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_signatures = 0; + PyObject *__pyx_v_args = 0; + PyObject *__pyx_v_kwargs = 0; + CYTHON_UNUSED PyObject *__pyx_v_defaults = 0; + PyObject *__pyx_v__fused_sigindex = 0; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_fit_mter (wrapper)", 0); + __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_rng_pos_uia,&__pyx_n_s_rng_pos_uao,&__pyx_n_s_rng_pos_iao,&__pyx_n_s_rng_pos_pair,&__pyx_n_s_rng_pos,&__pyx_n_s_rng_neg,&__pyx_n_s_n_threads,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_iids,&__pyx_n_s_X_aids,&__pyx_n_s_YU,&__pyx_n_s_YU_uids,&__pyx_n_s_YU_aids,&__pyx_n_s_YU_oids,&__pyx_n_s_YI,&__pyx_n_s_YI_iids,&__pyx_n_s_YI_aids,&__pyx_n_s_YI_oids,&__pyx_n_s_rating_dict,&__pyx_n_s_user_ids,&__pyx_n_s_item_ids,&__pyx_n_s_neg_item_ids,&__pyx_n_s_indptr,&__pyx_n_s_p_user_indices,&__pyx_n_s_earlier_indices,&__pyx_n_s_later_indices,&__pyx_n_s_aspect_indices,&__pyx_n_s_pair_counts,&__pyx_n_s_G1,&__pyx_n_s_G2,&__pyx_n_s_G3,&__pyx_n_s_U,&__pyx_n_s_I,&__pyx_n_s_A,&__pyx_n_s_O,&__pyx_n_s_sgrad_G1,&__pyx_n_s_sgrad_G2,&__pyx_n_s_sgrad_G3,&__pyx_n_s_sgrad_U,&__pyx_n_s_sgrad_I,&__pyx_n_s_sgrad_A,&__pyx_n_s_sgrad_O,&__pyx_n_s_del_g1,&__pyx_n_s_del_g2,&__pyx_n_s_del_g3,&__pyx_n_s_del_u,&__pyx_n_s_del_i,&__pyx_n_s_del_a,&__pyx_n_s_del_o,&__pyx_n_s_del_g1_reg,&__pyx_n_s_del_g2_reg,&__pyx_n_s_del_g3_reg,&__pyx_n_s_del_u_reg,&__pyx_n_s_del_i_reg,&__pyx_n_s_del_a_reg,&__pyx_n_s_del_o_reg,0}; - PyObject* values[58] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,&__pyx_n_s_fused_sigindex,0}; + PyObject* values[5] = {0,0,0,0,0}; + __pyx_defaults *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self); + values[4] = __pyx_dynamic_args->__pyx_arg__fused_sigindex; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 58: values[57] = PyTuple_GET_ITEM(__pyx_args, 57); - CYTHON_FALLTHROUGH; - case 57: values[56] = PyTuple_GET_ITEM(__pyx_args, 56); - CYTHON_FALLTHROUGH; - case 56: values[55] = PyTuple_GET_ITEM(__pyx_args, 55); - CYTHON_FALLTHROUGH; - case 55: values[54] = PyTuple_GET_ITEM(__pyx_args, 54); - CYTHON_FALLTHROUGH; - case 54: values[53] = PyTuple_GET_ITEM(__pyx_args, 53); + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); CYTHON_FALLTHROUGH; - case 53: values[52] = PyTuple_GET_ITEM(__pyx_args, 52); + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); CYTHON_FALLTHROUGH; - case 52: values[51] = PyTuple_GET_ITEM(__pyx_args, 51); + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 51: values[50] = PyTuple_GET_ITEM(__pyx_args, 50); + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 50: values[49] = PyTuple_GET_ITEM(__pyx_args, 49); - CYTHON_FALLTHROUGH; - case 49: values[48] = PyTuple_GET_ITEM(__pyx_args, 48); - CYTHON_FALLTHROUGH; - case 48: values[47] = PyTuple_GET_ITEM(__pyx_args, 47); - CYTHON_FALLTHROUGH; - case 47: values[46] = PyTuple_GET_ITEM(__pyx_args, 46); - CYTHON_FALLTHROUGH; - case 46: values[45] = PyTuple_GET_ITEM(__pyx_args, 45); - CYTHON_FALLTHROUGH; - case 45: values[44] = PyTuple_GET_ITEM(__pyx_args, 44); - CYTHON_FALLTHROUGH; - case 44: values[43] = PyTuple_GET_ITEM(__pyx_args, 43); - CYTHON_FALLTHROUGH; - case 43: values[42] = PyTuple_GET_ITEM(__pyx_args, 42); - CYTHON_FALLTHROUGH; - case 42: values[41] = PyTuple_GET_ITEM(__pyx_args, 41); - CYTHON_FALLTHROUGH; - case 41: values[40] = PyTuple_GET_ITEM(__pyx_args, 40); - CYTHON_FALLTHROUGH; - case 40: values[39] = PyTuple_GET_ITEM(__pyx_args, 39); - CYTHON_FALLTHROUGH; - case 39: values[38] = PyTuple_GET_ITEM(__pyx_args, 38); - CYTHON_FALLTHROUGH; - case 38: values[37] = PyTuple_GET_ITEM(__pyx_args, 37); - CYTHON_FALLTHROUGH; - case 37: values[36] = PyTuple_GET_ITEM(__pyx_args, 36); - CYTHON_FALLTHROUGH; - case 36: values[35] = PyTuple_GET_ITEM(__pyx_args, 35); - CYTHON_FALLTHROUGH; - case 35: values[34] = PyTuple_GET_ITEM(__pyx_args, 34); - CYTHON_FALLTHROUGH; - case 34: values[33] = PyTuple_GET_ITEM(__pyx_args, 33); - CYTHON_FALLTHROUGH; - case 33: values[32] = PyTuple_GET_ITEM(__pyx_args, 32); - CYTHON_FALLTHROUGH; - case 32: values[31] = PyTuple_GET_ITEM(__pyx_args, 31); - CYTHON_FALLTHROUGH; - case 31: values[30] = PyTuple_GET_ITEM(__pyx_args, 30); - CYTHON_FALLTHROUGH; - case 30: values[29] = PyTuple_GET_ITEM(__pyx_args, 29); - CYTHON_FALLTHROUGH; - case 29: values[28] = PyTuple_GET_ITEM(__pyx_args, 28); - CYTHON_FALLTHROUGH; - case 28: values[27] = PyTuple_GET_ITEM(__pyx_args, 27); - CYTHON_FALLTHROUGH; - case 27: values[26] = PyTuple_GET_ITEM(__pyx_args, 26); - CYTHON_FALLTHROUGH; - case 26: values[25] = PyTuple_GET_ITEM(__pyx_args, 25); - CYTHON_FALLTHROUGH; - case 25: values[24] = PyTuple_GET_ITEM(__pyx_args, 24); - CYTHON_FALLTHROUGH; - case 24: values[23] = PyTuple_GET_ITEM(__pyx_args, 23); - CYTHON_FALLTHROUGH; - case 23: values[22] = PyTuple_GET_ITEM(__pyx_args, 22); - CYTHON_FALLTHROUGH; - case 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - CYTHON_FALLTHROUGH; - case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - CYTHON_FALLTHROUGH; - case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - CYTHON_FALLTHROUGH; - case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - CYTHON_FALLTHROUGH; - case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - CYTHON_FALLTHROUGH; - case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - CYTHON_FALLTHROUGH; - case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - CYTHON_FALLTHROUGH; - case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - CYTHON_FALLTHROUGH; - case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - CYTHON_FALLTHROUGH; - case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - CYTHON_FALLTHROUGH; - case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - CYTHON_FALLTHROUGH; - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_signatures)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_uia)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 1); __PYX_ERR(0, 485, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 0, 4, 5, 1); __PYX_ERR(0, 482, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_uao)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_kwargs)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 2); __PYX_ERR(0, 485, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 0, 4, 5, 2); __PYX_ERR(0, 482, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_iao)) != 0)) kw_args--; + if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_defaults)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 3); __PYX_ERR(0, 485, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 0, 4, 5, 3); __PYX_ERR(0, 482, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: - if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos_pair)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 4); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_pos)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 5); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rng_neg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 6); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_threads)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 7); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 8); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 9: - if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 9); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 10: - if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 10); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 11: - if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 11); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 12: - if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 12); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 13: - if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 13); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 14: - if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 14); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 15: - if (likely((values[15] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YU_oids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 15); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 16: - if (likely((values[16] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 16); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 17: - if (likely((values[17] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 17); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 18: - if (likely((values[18] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 18); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 19: - if (likely((values[19] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YI_oids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 19); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 20: - if (likely((values[20] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rating_dict)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 20); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 21: - if (likely((values[21] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_user_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 21); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 22: - if (likely((values[22] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 22); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 23: - if (likely((values[23] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_neg_item_ids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 23); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 24: - if (likely((values[24] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_indptr)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 24); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 25: - if (likely((values[25] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_p_user_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 25); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 26: - if (likely((values[26] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_earlier_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 26); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 27: - if (likely((values[27] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_later_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 27); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 28: - if (likely((values[28] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_aspect_indices)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 28); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 29: - if (likely((values[29] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pair_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 29); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 30: - if (likely((values[30] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 30); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 31: - if (likely((values[31] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 31); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 32: - if (likely((values[32] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_G3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 32); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 33: - if (likely((values[33] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 33); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 34: - if (likely((values[34] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_I)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 34); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 35: - if (likely((values[35] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 35); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 36: - if (likely((values[36] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_O)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 36); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 37: - if (likely((values[37] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 37); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 38: - if (likely((values[38] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 38); __PYX_ERR(0, 485, __pyx_L3_error) + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fused_sigindex); + if (value) { values[4] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 482, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); CYTHON_FALLTHROUGH; - case 39: - if (likely((values[39] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_G3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 39); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 40: - if (likely((values[40] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_U)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 40); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 41: - if (likely((values[41] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_I)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 41); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 42: - if (likely((values[42] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 42); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 43: - if (likely((values[43] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sgrad_O)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 43); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 44: - if (likely((values[44] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 44); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 45: - if (likely((values[45] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 45); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 46: - if (likely((values[46] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g3)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 46); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 47: - if (likely((values[47] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_u)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 47); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 48: - if (likely((values[48] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_i)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 48); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 49: - if (likely((values[49] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_a)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 49); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 50: - if (likely((values[50] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_o)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 50); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 51: - if (likely((values[51] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g1_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 51); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 52: - if (likely((values[52] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g2_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 52); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 53: - if (likely((values[53] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_g3_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 53); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 54: - if (likely((values[54] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_u_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 54); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 55: - if (likely((values[55] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_i_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 55); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 56: - if (likely((values[56] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_a_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 56); __PYX_ERR(0, 485, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 57: - if (likely((values[57] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_del_o_reg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 57); __PYX_ERR(0, 485, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_fit_mter") < 0)) __PYX_ERR(0, 485, __pyx_L3_error) + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; } - } else if (PyTuple_GET_SIZE(__pyx_args) != 58) { - 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); - values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - values[22] = PyTuple_GET_ITEM(__pyx_args, 22); - values[23] = PyTuple_GET_ITEM(__pyx_args, 23); - values[24] = PyTuple_GET_ITEM(__pyx_args, 24); - values[25] = PyTuple_GET_ITEM(__pyx_args, 25); - values[26] = PyTuple_GET_ITEM(__pyx_args, 26); - values[27] = PyTuple_GET_ITEM(__pyx_args, 27); - values[28] = PyTuple_GET_ITEM(__pyx_args, 28); - values[29] = PyTuple_GET_ITEM(__pyx_args, 29); - values[30] = PyTuple_GET_ITEM(__pyx_args, 30); - values[31] = PyTuple_GET_ITEM(__pyx_args, 31); - values[32] = PyTuple_GET_ITEM(__pyx_args, 32); - values[33] = PyTuple_GET_ITEM(__pyx_args, 33); - values[34] = PyTuple_GET_ITEM(__pyx_args, 34); - values[35] = PyTuple_GET_ITEM(__pyx_args, 35); - values[36] = PyTuple_GET_ITEM(__pyx_args, 36); - values[37] = PyTuple_GET_ITEM(__pyx_args, 37); - values[38] = PyTuple_GET_ITEM(__pyx_args, 38); - values[39] = PyTuple_GET_ITEM(__pyx_args, 39); - values[40] = PyTuple_GET_ITEM(__pyx_args, 40); - values[41] = PyTuple_GET_ITEM(__pyx_args, 41); - values[42] = PyTuple_GET_ITEM(__pyx_args, 42); - values[43] = PyTuple_GET_ITEM(__pyx_args, 43); - values[44] = PyTuple_GET_ITEM(__pyx_args, 44); - values[45] = PyTuple_GET_ITEM(__pyx_args, 45); - values[46] = PyTuple_GET_ITEM(__pyx_args, 46); - values[47] = PyTuple_GET_ITEM(__pyx_args, 47); - values[48] = PyTuple_GET_ITEM(__pyx_args, 48); - values[49] = PyTuple_GET_ITEM(__pyx_args, 49); - values[50] = PyTuple_GET_ITEM(__pyx_args, 50); - values[51] = PyTuple_GET_ITEM(__pyx_args, 51); - values[52] = PyTuple_GET_ITEM(__pyx_args, 52); - values[53] = PyTuple_GET_ITEM(__pyx_args, 53); - values[54] = PyTuple_GET_ITEM(__pyx_args, 54); - values[55] = PyTuple_GET_ITEM(__pyx_args, 55); - values[56] = PyTuple_GET_ITEM(__pyx_args, 56); - values[57] = PyTuple_GET_ITEM(__pyx_args, 57); } - __pyx_v_self = values[0]; - __pyx_v_rng_pos_uia = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[1]); - __pyx_v_rng_pos_uao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[2]); - __pyx_v_rng_pos_iao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[3]); - __pyx_v_rng_pos_pair = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[4]); - __pyx_v_rng_pos = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[5]); - __pyx_v_rng_neg = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[6]); - __pyx_v_n_threads = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_n_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 493, __pyx_L3_error) - __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_iids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) - __pyx_v_YU = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_uids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_aids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YU_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_oids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) - __pyx_v_YI = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_iids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_aids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_YI_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_oids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) - __pyx_v_rating_dict = ((struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *)values[20]); - __pyx_v_user_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_user_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[22], PyBUF_WRITABLE); if (unlikely(!__pyx_v_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_neg_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[23], PyBUF_WRITABLE); if (unlikely(!__pyx_v_neg_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_indptr = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[24], PyBUF_WRITABLE); if (unlikely(!__pyx_v_indptr.memview)) __PYX_ERR(0, 498, __pyx_L3_error) - __pyx_v_p_user_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[25], PyBUF_WRITABLE); if (unlikely(!__pyx_v_p_user_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_earlier_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[26], PyBUF_WRITABLE); if (unlikely(!__pyx_v_earlier_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_later_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[27], PyBUF_WRITABLE); if (unlikely(!__pyx_v_later_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_aspect_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[28], PyBUF_WRITABLE); if (unlikely(!__pyx_v_aspect_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_pair_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[29], PyBUF_WRITABLE); if (unlikely(!__pyx_v_pair_counts.memview)) __PYX_ERR(0, 499, __pyx_L3_error) - __pyx_v_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[30], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G1.memview)) __PYX_ERR(0, 500, __pyx_L3_error) - __pyx_v_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[31], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G2.memview)) __PYX_ERR(0, 501, __pyx_L3_error) - __pyx_v_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[32], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G3.memview)) __PYX_ERR(0, 502, __pyx_L3_error) - __pyx_v_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[33], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U.memview)) __PYX_ERR(0, 503, __pyx_L3_error) - __pyx_v_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[34], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I.memview)) __PYX_ERR(0, 504, __pyx_L3_error) - __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[35], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 505, __pyx_L3_error) - __pyx_v_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[36], PyBUF_WRITABLE); if (unlikely(!__pyx_v_O.memview)) __PYX_ERR(0, 506, __pyx_L3_error) - __pyx_v_sgrad_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[37], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G1.memview)) __PYX_ERR(0, 507, __pyx_L3_error) - __pyx_v_sgrad_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[38], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G2.memview)) __PYX_ERR(0, 508, __pyx_L3_error) - __pyx_v_sgrad_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[39], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G3.memview)) __PYX_ERR(0, 509, __pyx_L3_error) - __pyx_v_sgrad_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[40], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_U.memview)) __PYX_ERR(0, 510, __pyx_L3_error) - __pyx_v_sgrad_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[41], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_I.memview)) __PYX_ERR(0, 511, __pyx_L3_error) - __pyx_v_sgrad_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[42], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_A.memview)) __PYX_ERR(0, 512, __pyx_L3_error) - __pyx_v_sgrad_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[43], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_O.memview)) __PYX_ERR(0, 513, __pyx_L3_error) - __pyx_v_del_g1 = ((PyArrayObject *)values[44]); - __pyx_v_del_g2 = ((PyArrayObject *)values[45]); - __pyx_v_del_g3 = ((PyArrayObject *)values[46]); - __pyx_v_del_u = ((PyArrayObject *)values[47]); - __pyx_v_del_i = ((PyArrayObject *)values[48]); - __pyx_v_del_a = ((PyArrayObject *)values[49]); - __pyx_v_del_o = ((PyArrayObject *)values[50]); - __pyx_v_del_g1_reg = ((PyArrayObject *)values[51]); - __pyx_v_del_g2_reg = ((PyArrayObject *)values[52]); - __pyx_v_del_g3_reg = ((PyArrayObject *)values[53]); - __pyx_v_del_u_reg = ((PyArrayObject *)values[54]); - __pyx_v_del_i_reg = ((PyArrayObject *)values[55]); - __pyx_v_del_a_reg = ((PyArrayObject *)values[56]); - __pyx_v_del_o_reg = ((PyArrayObject *)values[57]); + __pyx_v_signatures = values[0]; + __pyx_v_args = values[1]; + __pyx_v_kwargs = values[2]; + __pyx_v_defaults = values[3]; + __pyx_v__fused_sigindex = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 485, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 0, 4, 5, __pyx_nargs); __PYX_ERR(0, 482, __pyx_L3_error) __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uia), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uia", 0))) __PYX_ERR(0, 487, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uao", 0))) __PYX_ERR(0, 488, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_iao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_iao", 0))) __PYX_ERR(0, 489, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_pair), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_pair", 0))) __PYX_ERR(0, 490, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos", 0))) __PYX_ERR(0, 491, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_neg), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_neg", 0))) __PYX_ERR(0, 492, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rating_dict), __pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict, 1, "rating_dict", 0))) __PYX_ERR(0, 497, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1), __pyx_ptype_5numpy_ndarray, 1, "del_g1", 0))) __PYX_ERR(0, 514, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2), __pyx_ptype_5numpy_ndarray, 1, "del_g2", 0))) __PYX_ERR(0, 515, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3), __pyx_ptype_5numpy_ndarray, 1, "del_g3", 0))) __PYX_ERR(0, 516, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u), __pyx_ptype_5numpy_ndarray, 1, "del_u", 0))) __PYX_ERR(0, 517, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i), __pyx_ptype_5numpy_ndarray, 1, "del_i", 0))) __PYX_ERR(0, 518, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a), __pyx_ptype_5numpy_ndarray, 1, "del_a", 0))) __PYX_ERR(0, 519, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o), __pyx_ptype_5numpy_ndarray, 1, "del_o", 0))) __PYX_ERR(0, 520, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g1_reg", 0))) __PYX_ERR(0, 521, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g2_reg", 0))) __PYX_ERR(0, 522, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g3_reg", 0))) __PYX_ERR(0, 523, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u_reg), __pyx_ptype_5numpy_ndarray, 1, "del_u_reg", 0))) __PYX_ERR(0, 524, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i_reg), __pyx_ptype_5numpy_ndarray, 1, "del_i_reg", 0))) __PYX_ERR(0, 525, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a_reg), __pyx_ptype_5numpy_ndarray, 1, "del_a_reg", 0))) __PYX_ERR(0, 526, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o_reg), __pyx_ptype_5numpy_ndarray, 1, "del_o_reg", 0))) __PYX_ERR(0, 527, __pyx_L1_error) - __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_24_fit_mter(__pyx_self, __pyx_v_self, __pyx_v_rng_pos_uia, __pyx_v_rng_pos_uao, __pyx_v_rng_pos_iao, __pyx_v_rng_pos_pair, __pyx_v_rng_pos, __pyx_v_rng_neg, __pyx_v_n_threads, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_iids, __pyx_v_X_aids, __pyx_v_YU, __pyx_v_YU_uids, __pyx_v_YU_aids, __pyx_v_YU_oids, __pyx_v_YI, __pyx_v_YI_iids, __pyx_v_YI_aids, __pyx_v_YI_oids, __pyx_v_rating_dict, __pyx_v_user_ids, __pyx_v_item_ids, __pyx_v_neg_item_ids, __pyx_v_indptr, __pyx_v_p_user_indices, __pyx_v_earlier_indices, __pyx_v_later_indices, __pyx_v_aspect_indices, __pyx_v_pair_counts, __pyx_v_G1, __pyx_v_G2, __pyx_v_G3, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_sgrad_G1, __pyx_v_sgrad_G2, __pyx_v_sgrad_G3, __pyx_v_sgrad_U, __pyx_v_sgrad_I, __pyx_v_sgrad_A, __pyx_v_sgrad_O, __pyx_v_del_g1, __pyx_v_del_g2, __pyx_v_del_g3, __pyx_v_del_u, __pyx_v_del_i, __pyx_v_del_a, __pyx_v_del_o, __pyx_v_del_g1_reg, __pyx_v_del_g2_reg, __pyx_v_del_g3_reg, __pyx_v_del_u_reg, __pyx_v_del_i_reg, __pyx_v_del_a_reg, __pyx_v_del_o_reg); + __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults, __pyx_v__fused_sigindex); /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_24_fit_mter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg, int __pyx_v_n_threads, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_iids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_YU, __Pyx_memviewslice __pyx_v_YU_uids, __Pyx_memviewslice __pyx_v_YU_aids, __Pyx_memviewslice __pyx_v_YU_oids, __Pyx_memviewslice __pyx_v_YI, __Pyx_memviewslice __pyx_v_YI_iids, __Pyx_memviewslice __pyx_v_YI_aids, __Pyx_memviewslice __pyx_v_YI_oids, struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict, __Pyx_memviewslice __pyx_v_user_ids, __Pyx_memviewslice __pyx_v_item_ids, __Pyx_memviewslice __pyx_v_neg_item_ids, __Pyx_memviewslice __pyx_v_indptr, __Pyx_memviewslice __pyx_v_p_user_indices, __Pyx_memviewslice __pyx_v_earlier_indices, __Pyx_memviewslice __pyx_v_later_indices, __Pyx_memviewslice __pyx_v_aspect_indices, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts, __Pyx_memviewslice __pyx_v_G1, __Pyx_memviewslice __pyx_v_G2, __Pyx_memviewslice __pyx_v_G3, __Pyx_memviewslice __pyx_v_U, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_O, __Pyx_memviewslice __pyx_v_sgrad_G1, __Pyx_memviewslice __pyx_v_sgrad_G2, __Pyx_memviewslice __pyx_v_sgrad_G3, __Pyx_memviewslice __pyx_v_sgrad_U, __Pyx_memviewslice __pyx_v_sgrad_I, __Pyx_memviewslice __pyx_v_sgrad_A, __Pyx_memviewslice __pyx_v_sgrad_O, PyArrayObject *__pyx_v_del_g1, PyArrayObject *__pyx_v_del_g2, PyArrayObject *__pyx_v_del_g3, PyArrayObject *__pyx_v_del_u, PyArrayObject *__pyx_v_del_i, PyArrayObject *__pyx_v_del_a, PyArrayObject *__pyx_v_del_o, PyArrayObject *__pyx_v_del_g1_reg, PyArrayObject *__pyx_v_del_g2_reg, PyArrayObject *__pyx_v_del_g3_reg, PyArrayObject *__pyx_v_del_u_reg, PyArrayObject *__pyx_v_del_i_reg, PyArrayObject *__pyx_v_del_a_reg, PyArrayObject *__pyx_v_del_o_reg) { - long __pyx_v_s; - long __pyx_v_correct; - long __pyx_v_skipped; - long __pyx_v_aspect_correct; - long __pyx_v_n_users; - long __pyx_v_n_items; - long __pyx_v_n_aspects; - CYTHON_UNUSED long __pyx_v_n_opinions; - long __pyx_v_n_user_factors; - long __pyx_v_n_item_factors; - long __pyx_v_n_aspect_factors; - long __pyx_v_n_opinion_factors; - CYTHON_UNUSED int __pyx_v_num_samples; - CYTHON_UNUSED int __pyx_v_num_bpr_samples; - CYTHON_UNUSED int __pyx_v_num_pair_samples; - CYTHON_UNUSED long __pyx_v__; - long __pyx_v_i; - long __pyx_v_j; - long __pyx_v_k; - long __pyx_v_idx; - long __pyx_v_jdx; - long __pyx_v_u_idx; - long __pyx_v_i_idx; - long __pyx_v_a_idx; - long __pyx_v_o_idx; - long __pyx_v_j_idx; - long __pyx_v_thread_id; - double __pyx_v_z; - double __pyx_v_score; - double __pyx_v_i_score; - double __pyx_v_j_score; - double __pyx_v_pred; - double __pyx_v_i_ij; - double __pyx_v_a_ji; - double __pyx_v_loss; - double __pyx_v_bpr_loss; - double __pyx_v_aspect_bpr_loss; - double __pyx_v_del_sqerror; - double __pyx_v_del_bpr; - double __pyx_v_del_aspect_bpr; - double __pyx_v_eps; - double __pyx_v_lr; - double __pyx_v_ld_reg; - double __pyx_v_ld_bpr; - double __pyx_v_lambda_d; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a; - __Pyx_Buffer __pyx_pybuffer_del_a; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a_reg; - __Pyx_Buffer __pyx_pybuffer_del_a_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1; - __Pyx_Buffer __pyx_pybuffer_del_g1; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1_reg; - __Pyx_Buffer __pyx_pybuffer_del_g1_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2; - __Pyx_Buffer __pyx_pybuffer_del_g2; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2_reg; - __Pyx_Buffer __pyx_pybuffer_del_g2_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3; - __Pyx_Buffer __pyx_pybuffer_del_g3; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3_reg; - __Pyx_Buffer __pyx_pybuffer_del_g3_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i; - __Pyx_Buffer __pyx_pybuffer_del_i; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i_reg; - __Pyx_Buffer __pyx_pybuffer_del_i_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o; - __Pyx_Buffer __pyx_pybuffer_del_o; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o_reg; - __Pyx_Buffer __pyx_pybuffer_del_o_reg; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u; - __Pyx_Buffer __pyx_pybuffer_del_u; - __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u_reg; - __Pyx_Buffer __pyx_pybuffer_del_u_reg; +static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults, PyObject *__pyx_v__fused_sigindex) { + PyObject *__pyx_v_search_list = 0; + PyObject *__pyx_v_sn = 0; + PyObject *__pyx_v_sigindex_node = 0; + PyObject *__pyx_v_dest_sig = NULL; + PyTypeObject *__pyx_v_ndarray = 0; + PyObject *__pyx_v_arg_as_memoryview = 0; + __Pyx_memviewslice __pyx_v_memslice; + Py_ssize_t __pyx_v_itemsize; + int __pyx_v_dtype_signed; + char __pyx_v_kind; + int __pyx_v_short_is_signed; + int __pyx_v_int_is_signed; + int __pyx_v_long_is_signed; + PyObject *__pyx_v_arg = NULL; + PyObject *__pyx_v_dtype = NULL; + PyObject *__pyx_v_arg_base = NULL; + PyObject *__pyx_v_sig = NULL; + PyObject *__pyx_v_sig_series = NULL; + PyObject *__pyx_v_last_type = NULL; + PyObject *__pyx_v_sig_type = NULL; + PyObject *__pyx_v_sigindex_matches = NULL; + PyObject *__pyx_v_sigindex_candidates = NULL; + PyObject *__pyx_v_dst_type = NULL; + PyObject *__pyx_v_found_matches = NULL; + PyObject *__pyx_v_found_candidates = NULL; + PyObject *__pyx_v_candidates = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - long __pyx_t_3; + int __pyx_t_2; + int __pyx_t_3; int __pyx_t_4; - double __pyx_t_5; + Py_ssize_t __pyx_t_5; PyObject *__pyx_t_6 = NULL; long __pyx_t_7; - Py_ssize_t __pyx_t_8; - long __pyx_t_9; - long __pyx_t_10; - long __pyx_t_11; - long __pyx_t_12; - long __pyx_t_13; - long __pyx_t_14; - long __pyx_t_15; - long __pyx_t_16; - long __pyx_t_17; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + int __pyx_t_11; + __Pyx_memviewslice __pyx_t_12; + PyObject *__pyx_t_13 = NULL; + Py_ssize_t __pyx_t_14; + int __pyx_t_15; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; Py_ssize_t __pyx_t_18; - Py_ssize_t __pyx_t_19; - Py_ssize_t __pyx_t_20; - Py_ssize_t __pyx_t_21; - Py_ssize_t __pyx_t_22; - Py_ssize_t __pyx_t_23; - Py_ssize_t __pyx_t_24; - Py_ssize_t __pyx_t_25; - int __pyx_t_26; - PyObject *__pyx_t_27 = NULL; - PyObject *__pyx_t_28 = NULL; + int __pyx_t_19; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_fuse_1_2_fit_mter", 0); - __pyx_pybuffer_del_g1.pybuffer.buf = NULL; - __pyx_pybuffer_del_g1.refcount = 0; - __pyx_pybuffernd_del_g1.data = NULL; - __pyx_pybuffernd_del_g1.rcbuffer = &__pyx_pybuffer_del_g1; - __pyx_pybuffer_del_g2.pybuffer.buf = NULL; - __pyx_pybuffer_del_g2.refcount = 0; - __pyx_pybuffernd_del_g2.data = NULL; - __pyx_pybuffernd_del_g2.rcbuffer = &__pyx_pybuffer_del_g2; - __pyx_pybuffer_del_g3.pybuffer.buf = NULL; - __pyx_pybuffer_del_g3.refcount = 0; - __pyx_pybuffernd_del_g3.data = NULL; - __pyx_pybuffernd_del_g3.rcbuffer = &__pyx_pybuffer_del_g3; - __pyx_pybuffer_del_u.pybuffer.buf = NULL; - __pyx_pybuffer_del_u.refcount = 0; - __pyx_pybuffernd_del_u.data = NULL; - __pyx_pybuffernd_del_u.rcbuffer = &__pyx_pybuffer_del_u; - __pyx_pybuffer_del_i.pybuffer.buf = NULL; - __pyx_pybuffer_del_i.refcount = 0; - __pyx_pybuffernd_del_i.data = NULL; - __pyx_pybuffernd_del_i.rcbuffer = &__pyx_pybuffer_del_i; - __pyx_pybuffer_del_a.pybuffer.buf = NULL; - __pyx_pybuffer_del_a.refcount = 0; - __pyx_pybuffernd_del_a.data = NULL; - __pyx_pybuffernd_del_a.rcbuffer = &__pyx_pybuffer_del_a; - __pyx_pybuffer_del_o.pybuffer.buf = NULL; - __pyx_pybuffer_del_o.refcount = 0; - __pyx_pybuffernd_del_o.data = NULL; - __pyx_pybuffernd_del_o.rcbuffer = &__pyx_pybuffer_del_o; - __pyx_pybuffer_del_g1_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g1_reg.refcount = 0; - __pyx_pybuffernd_del_g1_reg.data = NULL; - __pyx_pybuffernd_del_g1_reg.rcbuffer = &__pyx_pybuffer_del_g1_reg; - __pyx_pybuffer_del_g2_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g2_reg.refcount = 0; - __pyx_pybuffernd_del_g2_reg.data = NULL; - __pyx_pybuffernd_del_g2_reg.rcbuffer = &__pyx_pybuffer_del_g2_reg; - __pyx_pybuffer_del_g3_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_g3_reg.refcount = 0; - __pyx_pybuffernd_del_g3_reg.data = NULL; - __pyx_pybuffernd_del_g3_reg.rcbuffer = &__pyx_pybuffer_del_g3_reg; - __pyx_pybuffer_del_u_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_u_reg.refcount = 0; - __pyx_pybuffernd_del_u_reg.data = NULL; - __pyx_pybuffernd_del_u_reg.rcbuffer = &__pyx_pybuffer_del_u_reg; - __pyx_pybuffer_del_i_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_i_reg.refcount = 0; - __pyx_pybuffernd_del_i_reg.data = NULL; - __pyx_pybuffernd_del_i_reg.rcbuffer = &__pyx_pybuffer_del_i_reg; - __pyx_pybuffer_del_a_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_a_reg.refcount = 0; - __pyx_pybuffernd_del_a_reg.data = NULL; - __pyx_pybuffernd_del_a_reg.rcbuffer = &__pyx_pybuffer_del_a_reg; - __pyx_pybuffer_del_o_reg.pybuffer.buf = NULL; - __pyx_pybuffer_del_o_reg.refcount = 0; - __pyx_pybuffernd_del_o_reg.data = NULL; - __pyx_pybuffernd_del_o_reg.rcbuffer = &__pyx_pybuffer_del_o_reg; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g1.diminfo[0].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1.diminfo[0].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1.diminfo[1].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1.diminfo[1].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1.diminfo[2].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1.diminfo[2].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g2.diminfo[0].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2.diminfo[0].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2.diminfo[1].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2.diminfo[1].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2.diminfo[2].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2.diminfo[2].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_g3.diminfo[0].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3.diminfo[0].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3.diminfo[1].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3.diminfo[1].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3.diminfo[2].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3.diminfo[2].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_u.diminfo[0].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u.diminfo[0].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u.diminfo[1].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u.diminfo[1].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) - } - __pyx_pybuffernd_del_i.diminfo[0].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i.diminfo[0].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i.diminfo[1].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i.diminfo[1].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) + __Pyx_RefNannySetupContext("_fit_mter", 0); + __Pyx_INCREF(__pyx_v_kwargs); + __pyx_t_1 = PyList_New(1 * 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + { Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < 2; __pyx_temp++) { + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyList_SET_ITEM(__pyx_t_1, __pyx_temp, Py_None); + } } - __pyx_pybuffernd_del_a.diminfo[0].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a.diminfo[0].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a.diminfo[1].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a.diminfo[1].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) + __pyx_v_dest_sig = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_3 = (__pyx_v_kwargs != Py_None); + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; } - __pyx_pybuffernd_del_o.diminfo[0].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o.diminfo[0].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o.diminfo[1].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o.diminfo[1].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + __pyx_t_4 = (!__pyx_t_3); + __pyx_t_2 = __pyx_t_4; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None); } - __pyx_pybuffernd_del_g1_reg.diminfo[0].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1_reg.diminfo[0].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1_reg.diminfo[1].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1_reg.diminfo[1].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1_reg.diminfo[2].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1_reg.diminfo[2].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) + __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1); + __pyx_t_1 = 0; + __pyx_v_itemsize = -1L; + __pyx_v_short_is_signed = (!(((short)-1L) > 0)); + __pyx_v_int_is_signed = (!(((int)-1L) > 0)); + __pyx_v_long_is_signed = (!(((long)-1L) > 0)); + if (unlikely(__pyx_v_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 482, __pyx_L1_error) } - __pyx_pybuffernd_del_g2_reg.diminfo[0].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2_reg.diminfo[0].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2_reg.diminfo[1].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2_reg.diminfo[1].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2_reg.diminfo[2].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2_reg.diminfo[2].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) + __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 482, __pyx_L1_error) + __pyx_t_2 = (8 < __pyx_t_5); + if (__pyx_t_2) { + if (unlikely(__pyx_v_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 8); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_arg = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L6; } - __pyx_pybuffernd_del_g3_reg.diminfo[0].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3_reg.diminfo[0].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3_reg.diminfo[1].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3_reg.diminfo[1].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3_reg.diminfo[2].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3_reg.diminfo[2].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[2]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) + __pyx_t_4 = (__pyx_v_kwargs != Py_None); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L7_bool_binop_done; } - __pyx_pybuffernd_del_u_reg.diminfo[0].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u_reg.diminfo[0].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u_reg.diminfo[1].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u_reg.diminfo[1].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) + if (unlikely(__pyx_v_kwargs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 482, __pyx_L1_error) } - __pyx_pybuffernd_del_i_reg.diminfo[0].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i_reg.diminfo[0].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i_reg.diminfo[1].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i_reg.diminfo[1].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) + __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_X, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + __pyx_t_2 = __pyx_t_4; + __pyx_L7_bool_binop_done:; + if (likely(__pyx_t_2)) { + if (unlikely(__pyx_v_kwargs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_X); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_arg = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L6; } - __pyx_pybuffernd_del_a_reg.diminfo[0].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a_reg.diminfo[0].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a_reg.diminfo[1].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a_reg.diminfo[1].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 485, __pyx_L1_error) + /*else*/ { + if (unlikely(__pyx_v_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 482, __pyx_L1_error) + __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_INCREF(__pyx_int_58); + __Pyx_GIVEREF(__pyx_int_58); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_58); + __Pyx_INCREF(__pyx_n_s_s); + __Pyx_GIVEREF(__pyx_n_s_s); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_Raise(__pyx_t_6, 0, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(0, 482, __pyx_L1_error) } - __pyx_pybuffernd_del_o_reg.diminfo[0].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o_reg.diminfo[0].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o_reg.diminfo[1].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o_reg.diminfo[1].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[1]; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":531 - * """ - * cdef: - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 # <<<<<<<<<<<<<< - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items - */ - __pyx_v_correct = 0; - __pyx_v_skipped = 0; - __pyx_v_aspect_correct = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":532 - * cdef: - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 - * long n_users = self.train_set.num_users # <<<<<<<<<<<<<< - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_n_users = __pyx_t_3; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":533 - * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items # <<<<<<<<<<<<<< - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 533, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_items = __pyx_t_3; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":534 - * long n_users = self.train_set.num_users - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 534, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_aspects = __pyx_t_3; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":535 - * long n_items = self.train_set.num_items - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions # <<<<<<<<<<<<<< - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_opinions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 535, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_opinions = __pyx_t_3; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":536 - * long n_aspects = self.train_set.sentiment.num_aspects - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors # <<<<<<<<<<<<<< - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_user_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 536, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 536, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_user_factors = __pyx_t_3; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":537 - * long n_opinions = self.train_set.sentiment.num_opinions - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors # <<<<<<<<<<<<<< - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_item_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 537, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_item_factors = __pyx_t_3; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":538 - * long n_user_factors = self.n_user_factors - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors # <<<<<<<<<<<<<< - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_aspect_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 538, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_aspect_factors = __pyx_t_3; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":539 - * long n_item_factors = self.n_item_factors - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors # <<<<<<<<<<<<<< - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_opinion_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 539, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_opinion_factors = __pyx_t_3; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":540 - * long n_aspect_factors = self.n_aspect_factors - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples # <<<<<<<<<<<<<< - * int num_bpr_samples = self.n_bpr_samples - * int num_pair_samples = self.n_pair_samples - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_element_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 540, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_samples = __pyx_t_4; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":541 - * long n_opinion_factors = self.n_opinion_factors - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples # <<<<<<<<<<<<<< - * int num_pair_samples = self.n_pair_samples - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 541, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_bpr_samples = __pyx_t_4; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":542 - * int num_samples = self.n_element_samples - * int num_bpr_samples = self.n_bpr_samples - * int num_pair_samples = self.n_pair_samples # <<<<<<<<<<<<<< - * - * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_pair_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 542, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_pair_samples = __pyx_t_4; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":546 - * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id - * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji - * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr # <<<<<<<<<<<<<< - * floating eps = 1e-9 - * - */ - __pyx_v_loss = 0.; - __pyx_v_bpr_loss = 0.; - __pyx_v_aspect_bpr_loss = 0.; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":547 - * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji - * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr - * floating eps = 1e-9 # <<<<<<<<<<<<<< - * - * floating lr = self.lr - */ - __pyx_v_eps = 1e-9; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":549 - * floating eps = 1e-9 - * - * floating lr = self.lr # <<<<<<<<<<<<<< - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 549, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 549, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lr = __pyx_t_5; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":550 - * - * floating lr = self.lr - * floating ld_reg = self.lambda_reg # <<<<<<<<<<<<<< - * floating ld_bpr = self.lambda_bpr - * floating lambda_d = self.lambda_d - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_reg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 550, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 550, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_ld_reg = __pyx_t_5; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":551 - * floating lr = self.lr - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr # <<<<<<<<<<<<<< - * floating lambda_d = self.lambda_d - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_bpr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 551, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_ld_bpr = __pyx_t_5; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":552 - * floating ld_reg = self.lambda_reg - * floating ld_bpr = self.lambda_bpr - * floating lambda_d = self.lambda_d # <<<<<<<<<<<<<< - * - * del_g1.fill(0) - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 552, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_d = __pyx_t_5; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":554 - * floating lambda_d = self.lambda_d - * - * del_g1.fill(0) # <<<<<<<<<<<<<< - * del_g2.fill(0) - * del_g3.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_L6:; + while (1) { + __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None)); + if (__pyx_t_2) { + __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); + if (__pyx_t_2) { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_dtype = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L12; + } + __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); + if (__pyx_t_2) { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_arg_base = __pyx_t_6; + __pyx_t_6 = 0; + __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); + if (__pyx_t_2) { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_dtype = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L13; + } + /*else*/ { + __Pyx_INCREF(Py_None); + __pyx_v_dtype = Py_None; + } + __pyx_L13:; + goto __pyx_L12; + } + /*else*/ { + __Pyx_INCREF(Py_None); + __pyx_v_dtype = Py_None; + } + __pyx_L12:; + __pyx_v_itemsize = -1L; + __pyx_t_2 = (__pyx_v_dtype != Py_None); + if (__pyx_t_2) { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_itemsize = __pyx_t_5; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_kind = __pyx_t_7; + __pyx_v_dtype_signed = (__pyx_v_kind == 'i'); + switch (__pyx_v_kind) { + case 'i': + case 'u': + break; + case 'f': + __pyx_t_4 = ((sizeof(float)) == __pyx_v_itemsize); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L16_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_4 = (((Py_ssize_t)__pyx_t_5) == 1); + __pyx_t_2 = __pyx_t_4; + __pyx_L16_bool_binop_done:; + if (__pyx_t_2) { + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + goto __pyx_L10_break; + } + __pyx_t_4 = ((sizeof(double)) == __pyx_v_itemsize); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L19_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_4 = (((Py_ssize_t)__pyx_t_5) == 1); + __pyx_t_2 = __pyx_t_4; + __pyx_L19_bool_binop_done:; + if (__pyx_t_2) { + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + goto __pyx_L10_break; + } + break; + case 'c': + break; + case 'O': + break; + default: break; + } + } } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":555 - * - * del_g1.fill(0) - * del_g2.fill(0) # <<<<<<<<<<<<<< - * del_g3.fill(0) - * del_u.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_2 = (__pyx_v_arg == Py_None); + if (__pyx_t_2) { + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + goto __pyx_L10_break; } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 555, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":556 - * del_g1.fill(0) - * del_g2.fill(0) - * del_g3.fill(0) # <<<<<<<<<<<<<< - * del_u.fill(0) - * del_i.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + /*try:*/ { + __pyx_t_6 = PyMemoryView_FromObject(__pyx_v_arg); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_arg_as_memoryview = ((PyObject*)__pyx_t_6); + __pyx_t_6 = 0; + } + /*else:*/ { + __pyx_t_4 = (__pyx_v_itemsize == -1L); + if (!__pyx_t_4) { + goto __pyx_L33_next_or; + } else { + } + __pyx_t_5 = __Pyx_PyMemoryView_Get_itemsize(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L24_except_error) + __pyx_t_4 = (__pyx_t_5 == (sizeof(float))); + if (!__pyx_t_4) { + } else { + goto __pyx_L32_next_and; + } + __pyx_L33_next_or:; + __pyx_t_4 = (__pyx_v_itemsize == (sizeof(float))); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L31_bool_binop_done; + } + __pyx_L32_next_and:; + __pyx_t_11 = __Pyx_PyMemoryView_Get_ndim(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L24_except_error) + __pyx_t_4 = (__pyx_t_11 == 1); + __pyx_t_2 = __pyx_t_4; + __pyx_L31_bool_binop_done:; + if (__pyx_t_2) { + __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_v_arg_as_memoryview, 0); + __pyx_v_memslice = __pyx_t_12; + __pyx_t_2 = (__pyx_v_memslice.memview != 0); + if (__pyx_t_2) { + __PYX_XCLEAR_MEMVIEW((&__pyx_v_memslice), 1); + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 482, __pyx_L24_except_error) + goto __pyx_L27_try_break; + } + /*else*/ { + PyErr_Clear(); + } + } + __pyx_t_4 = (__pyx_v_itemsize == -1L); + if (!__pyx_t_4) { + goto __pyx_L39_next_or; + } else { + } + __pyx_t_5 = __Pyx_PyMemoryView_Get_itemsize(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L24_except_error) + __pyx_t_4 = (__pyx_t_5 == (sizeof(double))); + if (!__pyx_t_4) { + } else { + goto __pyx_L38_next_and; + } + __pyx_L39_next_or:; + __pyx_t_4 = (__pyx_v_itemsize == (sizeof(double))); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L37_bool_binop_done; + } + __pyx_L38_next_and:; + __pyx_t_11 = __Pyx_PyMemoryView_Get_ndim(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L24_except_error) + __pyx_t_4 = (__pyx_t_11 == 1); + __pyx_t_2 = __pyx_t_4; + __pyx_L37_bool_binop_done:; + if (__pyx_t_2) { + __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_arg_as_memoryview, 0); + __pyx_v_memslice = __pyx_t_12; + __pyx_t_2 = (__pyx_v_memslice.memview != 0); + if (__pyx_t_2) { + __PYX_XCLEAR_MEMVIEW((&__pyx_v_memslice), 1); + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 482, __pyx_L24_except_error) + goto __pyx_L27_try_break; + } + /*else*/ { + PyErr_Clear(); + } + } + } + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + goto __pyx_L29_try_end; + __pyx_L22_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_11 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_ValueError, __pyx_builtin_TypeError); + if (__pyx_t_11) { + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_1, &__pyx_t_13) < 0) __PYX_ERR(0, 482, __pyx_L24_except_error) + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + goto __pyx_L23_exception_handled; + } + goto __pyx_L24_except_error; + __pyx_L24_except_error:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + goto __pyx_L1_error; + __pyx_L27_try_break:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + goto __pyx_L10_break; + __pyx_L23_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + __pyx_L29_try_end:; } + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + goto __pyx_L10_break; } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":557 - * del_g2.fill(0) - * del_g3.fill(0) - * del_u.fill(0) # <<<<<<<<<<<<<< - * del_i.fill(0) - * del_a.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 557, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } + __pyx_L10_break:; + if (unlikely(__pyx_v_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 482, __pyx_L1_error) } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":558 - * del_g3.fill(0) - * del_u.fill(0) - * del_i.fill(0) # <<<<<<<<<<<<<< - * del_a.fill(0) - * del_o.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 558, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 482, __pyx_L1_error) + __pyx_t_2 = (9 < __pyx_t_5); + if (__pyx_t_2) { + if (unlikely(__pyx_v_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 482, __pyx_L1_error) } + __pyx_t_13 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 9); + __Pyx_INCREF(__pyx_t_13); + __Pyx_DECREF_SET(__pyx_v_arg, __pyx_t_13); + __pyx_t_13 = 0; + goto __pyx_L44; } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 558, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":559 - * del_u.fill(0) - * del_i.fill(0) - * del_a.fill(0) # <<<<<<<<<<<<<< - * del_o.fill(0) - * del_g1_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 559, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } + __pyx_t_4 = (__pyx_v_kwargs != Py_None); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L45_bool_binop_done; } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 559, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":560 - * del_i.fill(0) - * del_a.fill(0) - * del_o.fill(0) # <<<<<<<<<<<<<< - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } + if (unlikely(__pyx_v_kwargs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 482, __pyx_L1_error) } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":561 - * del_a.fill(0) - * del_o.fill(0) - * del_g1_reg.fill(0) # <<<<<<<<<<<<<< - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_X_uids, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + __pyx_t_2 = __pyx_t_4; + __pyx_L45_bool_binop_done:; + if (likely(__pyx_t_2)) { + if (unlikely(__pyx_v_kwargs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 482, __pyx_L1_error) } + __pyx_t_13 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_X_uids); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF_SET(__pyx_v_arg, __pyx_t_13); + __pyx_t_13 = 0; + goto __pyx_L44; } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":562 - * del_o.fill(0) - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) # <<<<<<<<<<<<<< - * del_g3_reg.fill(0) - * del_u_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 562, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + /*else*/ { + if (unlikely(__pyx_v_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 482, __pyx_L1_error) } + __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 482, __pyx_L1_error) + __pyx_t_13 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_int_58); + __Pyx_GIVEREF(__pyx_int_58); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_58); + __Pyx_INCREF(__pyx_n_s_s); + __Pyx_GIVEREF(__pyx_n_s_s); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_s); + __Pyx_GIVEREF(__pyx_t_13); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_13); + __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 482, __pyx_L1_error) } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":563 - * del_g1_reg.fill(0) - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) # <<<<<<<<<<<<<< - * del_u_reg.fill(0) - * del_i_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 563, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_L44:; + while (1) { + __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None)); + if (__pyx_t_2) { + __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); + if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_1); + __pyx_t_1 = 0; + goto __pyx_L50; + } + __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); + if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_arg_base, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); + if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_1); + __pyx_t_1 = 0; + goto __pyx_L51; + } + /*else*/ { + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_dtype, Py_None); + } + __pyx_L51:; + goto __pyx_L50; + } + /*else*/ { + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_dtype, Py_None); + } + __pyx_L50:; + __pyx_v_itemsize = -1L; + __pyx_t_2 = (__pyx_v_dtype != Py_None); + if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_itemsize = __pyx_t_5; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_1); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_kind = __pyx_t_7; + __pyx_v_dtype_signed = (__pyx_v_kind == 'i'); + switch (__pyx_v_kind) { + case 'i': + case 'u': + __pyx_t_4 = ((sizeof(short)) == __pyx_v_itemsize); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L54_bool_binop_done; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = (((Py_ssize_t)__pyx_t_5) == 1); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L54_bool_binop_done; + } + __pyx_t_4 = (!(__pyx_v_short_is_signed ^ __pyx_v_dtype_signed)); + __pyx_t_2 = __pyx_t_4; + __pyx_L54_bool_binop_done:; + if (__pyx_t_2) { + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + goto __pyx_L48_break; + } + __pyx_t_4 = ((sizeof(int)) == __pyx_v_itemsize); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L58_bool_binop_done; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = (((Py_ssize_t)__pyx_t_5) == 1); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L58_bool_binop_done; + } + __pyx_t_4 = (!(__pyx_v_int_is_signed ^ __pyx_v_dtype_signed)); + __pyx_t_2 = __pyx_t_4; + __pyx_L58_bool_binop_done:; + if (__pyx_t_2) { + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + goto __pyx_L48_break; + } + __pyx_t_4 = ((sizeof(long)) == __pyx_v_itemsize); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L62_bool_binop_done; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = (((Py_ssize_t)__pyx_t_5) == 1); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L62_bool_binop_done; + } + __pyx_t_4 = (!(__pyx_v_long_is_signed ^ __pyx_v_dtype_signed)); + __pyx_t_2 = __pyx_t_4; + __pyx_L62_bool_binop_done:; + if (__pyx_t_2) { + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + goto __pyx_L48_break; + } + break; + case 'f': + break; + case 'c': + break; + case 'O': + break; + default: break; + } + } } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 563, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":564 - * del_g2_reg.fill(0) - * del_g3_reg.fill(0) - * del_u_reg.fill(0) # <<<<<<<<<<<<<< - * del_i_reg.fill(0) - * del_a_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 564, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_2 = (__pyx_v_arg == Py_None); + if (__pyx_t_2) { + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + goto __pyx_L48_break; + } + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_8); + /*try:*/ { + __pyx_t_1 = PyMemoryView_FromObject(__pyx_v_arg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L66_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_arg_as_memoryview, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + } + /*else:*/ { + __pyx_t_4 = (__pyx_v_itemsize == -1L); + if (!__pyx_t_4) { + goto __pyx_L77_next_or; + } else { + } + __pyx_t_5 = __Pyx_PyMemoryView_Get_itemsize(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L68_except_error) + __pyx_t_4 = (__pyx_t_5 == (sizeof(short))); + if (!__pyx_t_4) { + } else { + goto __pyx_L76_next_and; + } + __pyx_L77_next_or:; + __pyx_t_4 = (__pyx_v_itemsize == (sizeof(short))); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L75_bool_binop_done; + } + __pyx_L76_next_and:; + __pyx_t_11 = __Pyx_PyMemoryView_Get_ndim(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L68_except_error) + __pyx_t_4 = (__pyx_t_11 == 1); + __pyx_t_2 = __pyx_t_4; + __pyx_L75_bool_binop_done:; + if (__pyx_t_2) { + __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds_short(__pyx_v_arg_as_memoryview, 0); + __pyx_v_memslice = __pyx_t_12; + __pyx_t_2 = (__pyx_v_memslice.memview != 0); + if (__pyx_t_2) { + __PYX_XCLEAR_MEMVIEW((&__pyx_v_memslice), 1); + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 482, __pyx_L68_except_error) + goto __pyx_L71_try_break; + } + /*else*/ { + PyErr_Clear(); + } + } + __pyx_t_4 = (__pyx_v_itemsize == -1L); + if (!__pyx_t_4) { + goto __pyx_L83_next_or; + } else { + } + __pyx_t_5 = __Pyx_PyMemoryView_Get_itemsize(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L68_except_error) + __pyx_t_4 = (__pyx_t_5 == (sizeof(int))); + if (!__pyx_t_4) { + } else { + goto __pyx_L82_next_and; + } + __pyx_L83_next_or:; + __pyx_t_4 = (__pyx_v_itemsize == (sizeof(int))); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L81_bool_binop_done; + } + __pyx_L82_next_and:; + __pyx_t_11 = __Pyx_PyMemoryView_Get_ndim(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L68_except_error) + __pyx_t_4 = (__pyx_t_11 == 1); + __pyx_t_2 = __pyx_t_4; + __pyx_L81_bool_binop_done:; + if (__pyx_t_2) { + __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds_int(__pyx_v_arg_as_memoryview, 0); + __pyx_v_memslice = __pyx_t_12; + __pyx_t_2 = (__pyx_v_memslice.memview != 0); + if (__pyx_t_2) { + __PYX_XCLEAR_MEMVIEW((&__pyx_v_memslice), 1); + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 482, __pyx_L68_except_error) + goto __pyx_L71_try_break; + } + /*else*/ { + PyErr_Clear(); + } + } + __pyx_t_4 = (__pyx_v_itemsize == -1L); + if (!__pyx_t_4) { + goto __pyx_L89_next_or; + } else { + } + __pyx_t_5 = __Pyx_PyMemoryView_Get_itemsize(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L68_except_error) + __pyx_t_4 = (__pyx_t_5 == (sizeof(long))); + if (!__pyx_t_4) { + } else { + goto __pyx_L88_next_and; + } + __pyx_L89_next_or:; + __pyx_t_4 = (__pyx_v_itemsize == (sizeof(long))); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L87_bool_binop_done; + } + __pyx_L88_next_and:; + __pyx_t_11 = __Pyx_PyMemoryView_Get_ndim(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L68_except_error) + __pyx_t_4 = (__pyx_t_11 == 1); + __pyx_t_2 = __pyx_t_4; + __pyx_L87_bool_binop_done:; + if (__pyx_t_2) { + __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds_long(__pyx_v_arg_as_memoryview, 0); + __pyx_v_memslice = __pyx_t_12; + __pyx_t_2 = (__pyx_v_memslice.memview != 0); + if (__pyx_t_2) { + __PYX_XCLEAR_MEMVIEW((&__pyx_v_memslice), 1); + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 482, __pyx_L68_except_error) + goto __pyx_L71_try_break; + } + /*else*/ { + PyErr_Clear(); + } + } + } + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L73_try_end; + __pyx_L66_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_11 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_ValueError, __pyx_builtin_TypeError); + if (__pyx_t_11) { + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_13, &__pyx_t_6) < 0) __PYX_ERR(0, 482, __pyx_L68_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L67_exception_handled; + } + goto __pyx_L68_except_error; + __pyx_L68_except_error:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8); + goto __pyx_L1_error; + __pyx_L71_try_break:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8); + goto __pyx_L48_break; + __pyx_L67_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8); + __pyx_L73_try_end:; } + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 1, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + goto __pyx_L48_break; } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":565 - * del_g3_reg.fill(0) - * del_u_reg.fill(0) - * del_i_reg.fill(0) # <<<<<<<<<<<<<< - * del_a_reg.fill(0) - * del_o_reg.fill(0) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 565, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_L48_break:; + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v__fused_sigindex); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + __pyx_t_4 = (!__pyx_t_2); + if (__pyx_t_4) { + __pyx_t_5 = 0; + if (unlikely(__pyx_v_signatures == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_t_13 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_14), (&__pyx_t_11)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_6); + __pyx_t_6 = __pyx_t_13; + __pyx_t_13 = 0; + while (1) { + __pyx_t_15 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_14, &__pyx_t_5, &__pyx_t_13, NULL, NULL, __pyx_t_11); + if (unlikely(__pyx_t_15 == 0)) break; + if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_13); + __pyx_t_13 = 0; + if (!(likely(PyDict_CheckExact(__pyx_v__fused_sigindex))||((__pyx_v__fused_sigindex) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_v__fused_sigindex))) __PYX_ERR(0, 482, __pyx_L1_error) + __pyx_t_13 = __pyx_v__fused_sigindex; + __Pyx_INCREF(__pyx_t_13); + __Pyx_XDECREF_SET(__pyx_v_sigindex_node, ((PyObject*)__pyx_t_13)); + __pyx_t_13 = 0; + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_17 = NULL; + __pyx_t_15 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) { + __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_16); + if (likely(__pyx_t_17)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16); + __Pyx_INCREF(__pyx_t_17); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_16, function); + __pyx_t_15 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_kp_s__15}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_15, 1+__pyx_t_15); + __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + } + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_split); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_15 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_16); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_16, function); + __pyx_t_15 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_s__16}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_15, 1+__pyx_t_15); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + } + __pyx_t_16 = __Pyx_PySequence_ListKeepNew(__pyx_t_13); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_18 = PyList_GET_SIZE(__pyx_t_16); + if (unlikely(__pyx_t_18 < 1)) { + __Pyx_RaiseNeedMoreValuesError(0+__pyx_t_18); __PYX_ERR(0, 482, __pyx_L1_error) + } + #if CYTHON_COMPILING_IN_CPYTHON + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_16, __pyx_t_18-1); + ((PyVarObject*)__pyx_t_16)->ob_size--; + #else + __pyx_t_1 = PySequence_ITEM(__pyx_t_16, __pyx_t_18-1); + #endif + __Pyx_GOTREF(__pyx_t_1); + #if !CYTHON_COMPILING_IN_CPYTHON + __pyx_t_17 = PySequence_GetSlice(__pyx_t_16, 0, __pyx_t_18-1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_16); + __pyx_t_16 = __pyx_t_17; __pyx_t_17 = NULL; + #else + CYTHON_UNUSED_VAR(__pyx_t_17); + #endif + __Pyx_XDECREF_SET(__pyx_v_sig_series, ((PyObject*)__pyx_t_16)); + __pyx_t_16 = 0; + __Pyx_XDECREF_SET(__pyx_v_last_type, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_13 = __pyx_v_sig_series; __Pyx_INCREF(__pyx_t_13); __pyx_t_18 = 0; + for (;;) { + if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_13)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_13, __pyx_t_18); __Pyx_INCREF(__pyx_t_1); __pyx_t_18++; if (unlikely((0 < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + #else + __pyx_t_1 = PySequence_ITEM(__pyx_t_13, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + __Pyx_XDECREF_SET(__pyx_v_sig_type, __pyx_t_1); + __pyx_t_1 = 0; + if (unlikely(__pyx_v_sigindex_node == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_v_sig_type, __pyx_v_sigindex_node, Py_NE)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + if (__pyx_t_4) { + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(__pyx_v_sigindex_node == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 482, __pyx_L1_error) + } + if (unlikely((PyDict_SetItem(__pyx_v_sigindex_node, __pyx_v_sig_type, __pyx_t_1) < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_INCREF(__pyx_t_1); + __Pyx_DECREF_SET(__pyx_v_sigindex_node, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L99; + } + /*else*/ { + if (unlikely(__pyx_v_sigindex_node == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_sigindex_node, __pyx_v_sig_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF_SET(__pyx_v_sigindex_node, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + } + __pyx_L99:; + } + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(__pyx_v_sigindex_node == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 482, __pyx_L1_error) + } + if (unlikely((PyDict_SetItem(__pyx_v_sigindex_node, __pyx_v_last_type, __pyx_v_sig) < 0))) __PYX_ERR(0, 482, __pyx_L1_error) } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":566 - * del_u_reg.fill(0) - * del_i_reg.fill(0) - * del_a_reg.fill(0) # <<<<<<<<<<<<<< - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 566, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_sigindex_matches = ((PyObject*)__pyx_t_6); + __pyx_t_6 = 0; + __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_INCREF(__pyx_v__fused_sigindex); + __Pyx_GIVEREF(__pyx_v__fused_sigindex); + PyList_SET_ITEM(__pyx_t_6, 0, __pyx_v__fused_sigindex); + __pyx_v_sigindex_candidates = ((PyObject*)__pyx_t_6); + __pyx_t_6 = 0; + __pyx_t_6 = __pyx_v_dest_sig; __Pyx_INCREF(__pyx_t_6); __pyx_t_14 = 0; + for (;;) { + if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_6)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_13 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_14); __Pyx_INCREF(__pyx_t_13); __pyx_t_14++; if (unlikely((0 < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + #else + __pyx_t_13 = PySequence_ITEM(__pyx_t_6, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + #endif + __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_13); + __pyx_t_13 = 0; + __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_XDECREF_SET(__pyx_v_found_matches, ((PyObject*)__pyx_t_13)); + __pyx_t_13 = 0; + __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_XDECREF_SET(__pyx_v_found_candidates, ((PyObject*)__pyx_t_13)); + __pyx_t_13 = 0; + __pyx_t_4 = (__pyx_v_dst_type == Py_None); + if (__pyx_t_4) { + __pyx_t_13 = __pyx_v_sigindex_matches; __Pyx_INCREF(__pyx_t_13); __pyx_t_5 = 0; + for (;;) { + if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_13)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_13, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + #else + __pyx_t_1 = PySequence_ITEM(__pyx_t_13, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_sn, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + if (unlikely(__pyx_v_sn == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); + __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyDict_Values(__pyx_v_sn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_19 = __Pyx_PyList_Extend(__pyx_v_found_matches, __pyx_t_1); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __pyx_v_sigindex_candidates; __Pyx_INCREF(__pyx_t_13); __pyx_t_5 = 0; + for (;;) { + if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_13)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_13, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + #else + __pyx_t_1 = PySequence_ITEM(__pyx_t_13, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_sn, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + if (unlikely(__pyx_v_sn == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); + __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyDict_Values(__pyx_v_sn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_19 = __Pyx_PyList_Extend(__pyx_v_found_candidates, __pyx_t_1); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + goto __pyx_L103; + } + /*else*/ { + __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_INCREF(__pyx_v_sigindex_matches); + __Pyx_GIVEREF(__pyx_v_sigindex_matches); + PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_sigindex_matches); + __Pyx_INCREF(__pyx_v_sigindex_candidates); + __Pyx_GIVEREF(__pyx_v_sigindex_candidates); + PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_v_sigindex_candidates); + __pyx_t_1 = __pyx_t_13; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + for (;;) { + if (__pyx_t_5 >= 2) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_13 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_13); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + #else + __pyx_t_13 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + #endif + __Pyx_XDECREF_SET(__pyx_v_search_list, ((PyObject*)__pyx_t_13)); + __pyx_t_13 = 0; + if (unlikely(__pyx_v_search_list == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_t_13 = __pyx_v_search_list; __Pyx_INCREF(__pyx_t_13); __pyx_t_18 = 0; + for (;;) { + if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_13)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_16 = PyList_GET_ITEM(__pyx_t_13, __pyx_t_18); __Pyx_INCREF(__pyx_t_16); __pyx_t_18++; if (unlikely((0 < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + #else + __pyx_t_16 = PySequence_ITEM(__pyx_t_13, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + #endif + if (!(likely(PyDict_CheckExact(__pyx_t_16))||((__pyx_t_16) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_16))) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_sn, ((PyObject*)__pyx_t_16)); + __pyx_t_16 = 0; + if (unlikely(__pyx_v_sn == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_v_dst_type, __pyx_v_sn, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + if (__pyx_t_4) { + if (unlikely(__pyx_v_sn == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_t_16 = __Pyx_PyDict_GetItem(__pyx_v_sn, __pyx_v_dst_type); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_19 = __Pyx_PyList_Append(__pyx_v_found_matches, __pyx_t_16); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + } + } + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_L103:; + __Pyx_INCREF(__pyx_v_found_matches); + __Pyx_DECREF_SET(__pyx_v_sigindex_matches, __pyx_v_found_matches); + __Pyx_INCREF(__pyx_v_found_candidates); + __Pyx_DECREF_SET(__pyx_v_sigindex_candidates, __pyx_v_found_candidates); + __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_found_matches) != 0); + if (!__pyx_t_2) { + } else { + __pyx_t_4 = __pyx_t_2; + goto __pyx_L118_bool_binop_done; + } + __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_found_candidates) != 0); + __pyx_t_4 = __pyx_t_2; + __pyx_L118_bool_binop_done:; + __pyx_t_2 = (!__pyx_t_4); + if (__pyx_t_2) { + goto __pyx_L102_break; } } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":567 - * del_i_reg.fill(0) - * del_a_reg.fill(0) - * del_o_reg.fill(0) # <<<<<<<<<<<<<< - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 567, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L120_for_end; + __pyx_L102_break:; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L120_for_end; + __pyx_L120_for_end:; + __Pyx_INCREF(__pyx_v_sigindex_matches); + __pyx_v_candidates = __pyx_v_sigindex_matches; + __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0); + __pyx_t_4 = (!__pyx_t_2); + if (unlikely(__pyx_t_4)) { + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_Raise(__pyx_t_6, 0, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_t_14 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(0, 482, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_14 > 1); + if (unlikely(__pyx_t_4)) { + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_Raise(__pyx_t_6, 0, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(0, 482, __pyx_L1_error) + } + /*else*/ { + __Pyx_XDECREF(__pyx_r); + if (unlikely(__pyx_v_signatures == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 482, __pyx_L1_error) } + __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":568 - * del_a_reg.fill(0) - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): - */ - { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); - #endif - /*try:*/ { - { - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) - #endif - #ifdef _OPENMP - #pragma omp parallel private(__pyx_v_thread_id) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_bpr_loss) reduction(+:__pyx_v_correct) reduction(+:__pyx_v_skipped) reduction(+:__pyx_v_aspect_bpr_loss) reduction(+:__pyx_v_aspect_correct) private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_3, __pyx_t_4, __pyx_t_7, __pyx_t_8, __pyx_t_9) num_threads(__pyx_v_n_threads) - #endif /* _OPENMP */ - { - /* Initialize private variables to invalid values */ - __pyx_v_thread_id = ((long)0xbad0bad0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":569 - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() # <<<<<<<<<<<<<< - * for _ in prange(num_samples, schedule='guided'): - * # get user item aspect element - */ - __pyx_v_thread_id = recom_bpr::get_thread_num(); + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_16); + __Pyx_XDECREF(__pyx_t_17); + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_search_list); + __Pyx_XDECREF(__pyx_v_sn); + __Pyx_XDECREF(__pyx_v_sigindex_node); + __Pyx_XDECREF(__pyx_v_dest_sig); + __Pyx_XDECREF((PyObject *)__pyx_v_ndarray); + __Pyx_XDECREF(__pyx_v_arg_as_memoryview); + __Pyx_XDECREF(__pyx_v_arg); + __Pyx_XDECREF(__pyx_v_dtype); + __Pyx_XDECREF(__pyx_v_arg_base); + __Pyx_XDECREF(__pyx_v_sig); + __Pyx_XDECREF(__pyx_v_sig_series); + __Pyx_XDECREF(__pyx_v_last_type); + __Pyx_XDECREF(__pyx_v_sig_type); + __Pyx_XDECREF(__pyx_v_sigindex_matches); + __Pyx_XDECREF(__pyx_v_sigindex_candidates); + __Pyx_XDECREF(__pyx_v_dst_type); + __Pyx_XDECREF(__pyx_v_found_matches); + __Pyx_XDECREF(__pyx_v_found_candidates); + __Pyx_XDECREF(__pyx_v_candidates); + __Pyx_XDECREF(__pyx_v_kwargs); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":570 - * with nogil, parallel(num_threads=n_threads): - * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): # <<<<<<<<<<<<<< - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) - */ - __pyx_t_4 = __pyx_v_num_samples; - if ((1 == 0)) abort(); - { - __pyx_t_7 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_7 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_del_sqerror) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_o_idx) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_score) lastprivate(__pyx_v_u_idx) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_7; __pyx_t_3++){ - { - __pyx_v__ = (long)(0 + 1 * __pyx_t_3); - /* Initialize private variables to invalid values */ - __pyx_v_a_idx = ((long)0xbad0bad0); - __pyx_v_del_sqerror = ((double)__PYX_NAN()); - __pyx_v_i = ((long)0xbad0bad0); - __pyx_v_i_idx = ((long)0xbad0bad0); - __pyx_v_idx = ((long)0xbad0bad0); - __pyx_v_j = ((long)0xbad0bad0); - __pyx_v_k = ((long)0xbad0bad0); - __pyx_v_o_idx = ((long)0xbad0bad0); - __pyx_v_pred = ((double)__PYX_NAN()); - __pyx_v_score = ((double)__PYX_NAN()); - __pyx_v_u_idx = ((long)0xbad0bad0); +/* Python wrapper */ +static PyObject *__pyx_fuse_0_0__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_15_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_fuse_0_0__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_15_fit_mter = {"__pyx_fuse_0_0_fit_mter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0_0__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_15_fit_mter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter}; +static PyObject *__pyx_fuse_0_0__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_15_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg = 0; + int __pyx_v_n_threads; + __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; + struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict = 0; + __Pyx_memviewslice __pyx_v_user_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_neg_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_indptr = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_p_user_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_earlier_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_later_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_aspect_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_O = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_U = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_I = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_O = { 0, 0, { 0 }, { 0 }, { 0 } }; + PyArrayObject *__pyx_v_del_g1 = 0; + PyArrayObject *__pyx_v_del_g2 = 0; + PyArrayObject *__pyx_v_del_g3 = 0; + PyArrayObject *__pyx_v_del_u = 0; + PyArrayObject *__pyx_v_del_i = 0; + PyArrayObject *__pyx_v_del_a = 0; + PyArrayObject *__pyx_v_del_o = 0; + PyArrayObject *__pyx_v_del_g1_reg = 0; + PyArrayObject *__pyx_v_del_g2_reg = 0; + PyArrayObject *__pyx_v_del_g3_reg = 0; + PyArrayObject *__pyx_v_del_u_reg = 0; + PyArrayObject *__pyx_v_del_i_reg = 0; + PyArrayObject *__pyx_v_del_a_reg = 0; + PyArrayObject *__pyx_v_del_o_reg = 0; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_fit_mter (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_rng_pos_uia,&__pyx_n_s_rng_pos_uao,&__pyx_n_s_rng_pos_iao,&__pyx_n_s_rng_pos_pair,&__pyx_n_s_rng_pos,&__pyx_n_s_rng_neg,&__pyx_n_s_n_threads,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_iids,&__pyx_n_s_X_aids,&__pyx_n_s_YU,&__pyx_n_s_YU_uids,&__pyx_n_s_YU_aids,&__pyx_n_s_YU_oids,&__pyx_n_s_YI,&__pyx_n_s_YI_iids,&__pyx_n_s_YI_aids,&__pyx_n_s_YI_oids,&__pyx_n_s_rating_dict,&__pyx_n_s_user_ids,&__pyx_n_s_item_ids,&__pyx_n_s_neg_item_ids,&__pyx_n_s_indptr,&__pyx_n_s_p_user_indices,&__pyx_n_s_earlier_indices,&__pyx_n_s_later_indices,&__pyx_n_s_aspect_indices,&__pyx_n_s_pair_counts,&__pyx_n_s_G1,&__pyx_n_s_G2,&__pyx_n_s_G3,&__pyx_n_s_U,&__pyx_n_s_I,&__pyx_n_s_A,&__pyx_n_s_O,&__pyx_n_s_sgrad_G1,&__pyx_n_s_sgrad_G2,&__pyx_n_s_sgrad_G3,&__pyx_n_s_sgrad_U,&__pyx_n_s_sgrad_I,&__pyx_n_s_sgrad_A,&__pyx_n_s_sgrad_O,&__pyx_n_s_del_g1,&__pyx_n_s_del_g2,&__pyx_n_s_del_g3,&__pyx_n_s_del_u,&__pyx_n_s_del_i,&__pyx_n_s_del_a,&__pyx_n_s_del_o,&__pyx_n_s_del_g1_reg,&__pyx_n_s_del_g2_reg,&__pyx_n_s_del_g3_reg,&__pyx_n_s_del_u_reg,&__pyx_n_s_del_i_reg,&__pyx_n_s_del_a_reg,&__pyx_n_s_del_o_reg,0}; + PyObject* values[58] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 58: values[57] = __Pyx_Arg_VARARGS(__pyx_args, 57); + CYTHON_FALLTHROUGH; + case 57: values[56] = __Pyx_Arg_VARARGS(__pyx_args, 56); + CYTHON_FALLTHROUGH; + case 56: values[55] = __Pyx_Arg_VARARGS(__pyx_args, 55); + CYTHON_FALLTHROUGH; + case 55: values[54] = __Pyx_Arg_VARARGS(__pyx_args, 54); + CYTHON_FALLTHROUGH; + case 54: values[53] = __Pyx_Arg_VARARGS(__pyx_args, 53); + CYTHON_FALLTHROUGH; + case 53: values[52] = __Pyx_Arg_VARARGS(__pyx_args, 52); + CYTHON_FALLTHROUGH; + case 52: values[51] = __Pyx_Arg_VARARGS(__pyx_args, 51); + CYTHON_FALLTHROUGH; + case 51: values[50] = __Pyx_Arg_VARARGS(__pyx_args, 50); + CYTHON_FALLTHROUGH; + case 50: values[49] = __Pyx_Arg_VARARGS(__pyx_args, 49); + CYTHON_FALLTHROUGH; + case 49: values[48] = __Pyx_Arg_VARARGS(__pyx_args, 48); + CYTHON_FALLTHROUGH; + case 48: values[47] = __Pyx_Arg_VARARGS(__pyx_args, 47); + CYTHON_FALLTHROUGH; + case 47: values[46] = __Pyx_Arg_VARARGS(__pyx_args, 46); + CYTHON_FALLTHROUGH; + case 46: values[45] = __Pyx_Arg_VARARGS(__pyx_args, 45); + CYTHON_FALLTHROUGH; + case 45: values[44] = __Pyx_Arg_VARARGS(__pyx_args, 44); + CYTHON_FALLTHROUGH; + case 44: values[43] = __Pyx_Arg_VARARGS(__pyx_args, 43); + CYTHON_FALLTHROUGH; + case 43: values[42] = __Pyx_Arg_VARARGS(__pyx_args, 42); + CYTHON_FALLTHROUGH; + case 42: values[41] = __Pyx_Arg_VARARGS(__pyx_args, 41); + CYTHON_FALLTHROUGH; + case 41: values[40] = __Pyx_Arg_VARARGS(__pyx_args, 40); + CYTHON_FALLTHROUGH; + case 40: values[39] = __Pyx_Arg_VARARGS(__pyx_args, 39); + CYTHON_FALLTHROUGH; + case 39: values[38] = __Pyx_Arg_VARARGS(__pyx_args, 38); + CYTHON_FALLTHROUGH; + case 38: values[37] = __Pyx_Arg_VARARGS(__pyx_args, 37); + CYTHON_FALLTHROUGH; + case 37: values[36] = __Pyx_Arg_VARARGS(__pyx_args, 36); + CYTHON_FALLTHROUGH; + case 36: values[35] = __Pyx_Arg_VARARGS(__pyx_args, 35); + CYTHON_FALLTHROUGH; + case 35: values[34] = __Pyx_Arg_VARARGS(__pyx_args, 34); + CYTHON_FALLTHROUGH; + case 34: values[33] = __Pyx_Arg_VARARGS(__pyx_args, 33); + CYTHON_FALLTHROUGH; + case 33: values[32] = __Pyx_Arg_VARARGS(__pyx_args, 32); + CYTHON_FALLTHROUGH; + case 32: values[31] = __Pyx_Arg_VARARGS(__pyx_args, 31); + CYTHON_FALLTHROUGH; + case 31: values[30] = __Pyx_Arg_VARARGS(__pyx_args, 30); + CYTHON_FALLTHROUGH; + case 30: values[29] = __Pyx_Arg_VARARGS(__pyx_args, 29); + CYTHON_FALLTHROUGH; + case 29: values[28] = __Pyx_Arg_VARARGS(__pyx_args, 28); + CYTHON_FALLTHROUGH; + case 28: values[27] = __Pyx_Arg_VARARGS(__pyx_args, 27); + CYTHON_FALLTHROUGH; + case 27: values[26] = __Pyx_Arg_VARARGS(__pyx_args, 26); + CYTHON_FALLTHROUGH; + case 26: values[25] = __Pyx_Arg_VARARGS(__pyx_args, 25); + CYTHON_FALLTHROUGH; + case 25: values[24] = __Pyx_Arg_VARARGS(__pyx_args, 24); + CYTHON_FALLTHROUGH; + case 24: values[23] = __Pyx_Arg_VARARGS(__pyx_args, 23); + CYTHON_FALLTHROUGH; + case 23: values[22] = __Pyx_Arg_VARARGS(__pyx_args, 22); + CYTHON_FALLTHROUGH; + case 22: values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + CYTHON_FALLTHROUGH; + case 21: values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + CYTHON_FALLTHROUGH; + case 20: values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + CYTHON_FALLTHROUGH; + case 19: values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + CYTHON_FALLTHROUGH; + case 18: values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + CYTHON_FALLTHROUGH; + case 17: values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + CYTHON_FALLTHROUGH; + case 16: values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_uia)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 1); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_uao)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 2); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_iao)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 3); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_pair)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 4); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 5); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_neg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 6); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_threads)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 7); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 8); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 9); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 10); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 11); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 12); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 13); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 14); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 15: + if (likely((values[15] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_oids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 15); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 16: + if (likely((values[16] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 16); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 17: + if (likely((values[17] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 17); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 18: + if (likely((values[18] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 18); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 19: + if (likely((values[19] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_oids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 19); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 20: + if (likely((values[20] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rating_dict)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 20); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 21: + if (likely((values[21] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_user_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 21); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 22: + if (likely((values[22] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_item_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 22); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 23: + if (likely((values[23] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_neg_item_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 23); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 24: + if (likely((values[24] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_indptr)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 24); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 25: + if (likely((values[25] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_p_user_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 25); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 26: + if (likely((values[26] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_earlier_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 26); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 27: + if (likely((values[27] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_later_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 27); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 28: + if (likely((values[28] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_aspect_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 28); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 29: + if (likely((values[29] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pair_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 29); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 30: + if (likely((values[30] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 30); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 31: + if (likely((values[31] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 31); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 32: + if (likely((values[32] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 32); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 33: + if (likely((values[33] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 33); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 34: + if (likely((values[34] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_I)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 34); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 35: + if (likely((values[35] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 35); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 36: + if (likely((values[36] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_O)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 36); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 37: + if (likely((values[37] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 37); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 38: + if (likely((values[38] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 38); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 39: + if (likely((values[39] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 39); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 40: + if (likely((values[40] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_U)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 40); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 41: + if (likely((values[41] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_I)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 41); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 42: + if (likely((values[42] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 42); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 43: + if (likely((values[43] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_O)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 43); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 44: + if (likely((values[44] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 44); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 45: + if (likely((values[45] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 45); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 46: + if (likely((values[46] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 46); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 47: + if (likely((values[47] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_u)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 47); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 48: + if (likely((values[48] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_i)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 48); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 49: + if (likely((values[49] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_a)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 49); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 50: + if (likely((values[50] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_o)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 50); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 51: + if (likely((values[51] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g1_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 51); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 52: + if (likely((values[52] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g2_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 52); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 53: + if (likely((values[53] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g3_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 53); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 54: + if (likely((values[54] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_u_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 54); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 55: + if (likely((values[55] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_i_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 55); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 56: + if (likely((values[56] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_a_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 56); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 57: + if (likely((values[57] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_o_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 57); __PYX_ERR(0, 482, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_fit_mter") < 0)) __PYX_ERR(0, 482, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 58)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + values[22] = __Pyx_Arg_VARARGS(__pyx_args, 22); + values[23] = __Pyx_Arg_VARARGS(__pyx_args, 23); + values[24] = __Pyx_Arg_VARARGS(__pyx_args, 24); + values[25] = __Pyx_Arg_VARARGS(__pyx_args, 25); + values[26] = __Pyx_Arg_VARARGS(__pyx_args, 26); + values[27] = __Pyx_Arg_VARARGS(__pyx_args, 27); + values[28] = __Pyx_Arg_VARARGS(__pyx_args, 28); + values[29] = __Pyx_Arg_VARARGS(__pyx_args, 29); + values[30] = __Pyx_Arg_VARARGS(__pyx_args, 30); + values[31] = __Pyx_Arg_VARARGS(__pyx_args, 31); + values[32] = __Pyx_Arg_VARARGS(__pyx_args, 32); + values[33] = __Pyx_Arg_VARARGS(__pyx_args, 33); + values[34] = __Pyx_Arg_VARARGS(__pyx_args, 34); + values[35] = __Pyx_Arg_VARARGS(__pyx_args, 35); + values[36] = __Pyx_Arg_VARARGS(__pyx_args, 36); + values[37] = __Pyx_Arg_VARARGS(__pyx_args, 37); + values[38] = __Pyx_Arg_VARARGS(__pyx_args, 38); + values[39] = __Pyx_Arg_VARARGS(__pyx_args, 39); + values[40] = __Pyx_Arg_VARARGS(__pyx_args, 40); + values[41] = __Pyx_Arg_VARARGS(__pyx_args, 41); + values[42] = __Pyx_Arg_VARARGS(__pyx_args, 42); + values[43] = __Pyx_Arg_VARARGS(__pyx_args, 43); + values[44] = __Pyx_Arg_VARARGS(__pyx_args, 44); + values[45] = __Pyx_Arg_VARARGS(__pyx_args, 45); + values[46] = __Pyx_Arg_VARARGS(__pyx_args, 46); + values[47] = __Pyx_Arg_VARARGS(__pyx_args, 47); + values[48] = __Pyx_Arg_VARARGS(__pyx_args, 48); + values[49] = __Pyx_Arg_VARARGS(__pyx_args, 49); + values[50] = __Pyx_Arg_VARARGS(__pyx_args, 50); + values[51] = __Pyx_Arg_VARARGS(__pyx_args, 51); + values[52] = __Pyx_Arg_VARARGS(__pyx_args, 52); + values[53] = __Pyx_Arg_VARARGS(__pyx_args, 53); + values[54] = __Pyx_Arg_VARARGS(__pyx_args, 54); + values[55] = __Pyx_Arg_VARARGS(__pyx_args, 55); + values[56] = __Pyx_Arg_VARARGS(__pyx_args, 56); + values[57] = __Pyx_Arg_VARARGS(__pyx_args, 57); + } + __pyx_v_self = values[0]; + __pyx_v_rng_pos_uia = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[1]); + __pyx_v_rng_pos_uao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[2]); + __pyx_v_rng_pos_iao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[3]); + __pyx_v_rng_pos_pair = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[4]); + __pyx_v_rng_pos = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[5]); + __pyx_v_rng_neg = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[6]); + __pyx_v_n_threads = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_n_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 493, __pyx_L3_error) + __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_iids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_YU = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_uids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_aids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_oids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YI = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_iids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_aids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_oids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_rating_dict = ((struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *)values[20]); + __pyx_v_user_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_user_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[22], PyBUF_WRITABLE); if (unlikely(!__pyx_v_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_neg_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[23], PyBUF_WRITABLE); if (unlikely(!__pyx_v_neg_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_indptr = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[24], PyBUF_WRITABLE); if (unlikely(!__pyx_v_indptr.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_p_user_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[25], PyBUF_WRITABLE); if (unlikely(!__pyx_v_p_user_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_earlier_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[26], PyBUF_WRITABLE); if (unlikely(!__pyx_v_earlier_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_later_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[27], PyBUF_WRITABLE); if (unlikely(!__pyx_v_later_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_aspect_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[28], PyBUF_WRITABLE); if (unlikely(!__pyx_v_aspect_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_pair_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[29], PyBUF_WRITABLE); if (unlikely(!__pyx_v_pair_counts.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[30], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G1.memview)) __PYX_ERR(0, 500, __pyx_L3_error) + __pyx_v_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[31], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G2.memview)) __PYX_ERR(0, 501, __pyx_L3_error) + __pyx_v_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[32], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G3.memview)) __PYX_ERR(0, 502, __pyx_L3_error) + __pyx_v_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[33], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U.memview)) __PYX_ERR(0, 503, __pyx_L3_error) + __pyx_v_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[34], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I.memview)) __PYX_ERR(0, 504, __pyx_L3_error) + __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[35], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 505, __pyx_L3_error) + __pyx_v_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[36], PyBUF_WRITABLE); if (unlikely(!__pyx_v_O.memview)) __PYX_ERR(0, 506, __pyx_L3_error) + __pyx_v_sgrad_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[37], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G1.memview)) __PYX_ERR(0, 507, __pyx_L3_error) + __pyx_v_sgrad_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[38], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G2.memview)) __PYX_ERR(0, 508, __pyx_L3_error) + __pyx_v_sgrad_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[39], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G3.memview)) __PYX_ERR(0, 509, __pyx_L3_error) + __pyx_v_sgrad_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[40], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_U.memview)) __PYX_ERR(0, 510, __pyx_L3_error) + __pyx_v_sgrad_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[41], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_I.memview)) __PYX_ERR(0, 511, __pyx_L3_error) + __pyx_v_sgrad_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[42], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_A.memview)) __PYX_ERR(0, 512, __pyx_L3_error) + __pyx_v_sgrad_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[43], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_O.memview)) __PYX_ERR(0, 513, __pyx_L3_error) + __pyx_v_del_g1 = ((PyArrayObject *)values[44]); + __pyx_v_del_g2 = ((PyArrayObject *)values[45]); + __pyx_v_del_g3 = ((PyArrayObject *)values[46]); + __pyx_v_del_u = ((PyArrayObject *)values[47]); + __pyx_v_del_i = ((PyArrayObject *)values[48]); + __pyx_v_del_a = ((PyArrayObject *)values[49]); + __pyx_v_del_o = ((PyArrayObject *)values[50]); + __pyx_v_del_g1_reg = ((PyArrayObject *)values[51]); + __pyx_v_del_g2_reg = ((PyArrayObject *)values[52]); + __pyx_v_del_g3_reg = ((PyArrayObject *)values[53]); + __pyx_v_del_u_reg = ((PyArrayObject *)values[54]); + __pyx_v_del_i_reg = ((PyArrayObject *)values[55]); + __pyx_v_del_a_reg = ((PyArrayObject *)values[56]); + __pyx_v_del_o_reg = ((PyArrayObject *)values[57]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, __pyx_nargs); __PYX_ERR(0, 482, __pyx_L3_error) + __pyx_L3_error:; + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_user_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_neg_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_indptr, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_p_user_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_earlier_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_later_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_aspect_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_pair_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_O, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_O, 1); + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uia), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uia", 0))) __PYX_ERR(0, 487, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uao", 0))) __PYX_ERR(0, 488, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_iao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_iao", 0))) __PYX_ERR(0, 489, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_pair), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_pair", 0))) __PYX_ERR(0, 490, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos", 0))) __PYX_ERR(0, 491, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_neg), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_neg", 0))) __PYX_ERR(0, 492, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rating_dict), __pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict, 1, "rating_dict", 0))) __PYX_ERR(0, 497, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1), __pyx_ptype_5numpy_ndarray, 1, "del_g1", 0))) __PYX_ERR(0, 514, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2), __pyx_ptype_5numpy_ndarray, 1, "del_g2", 0))) __PYX_ERR(0, 515, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3), __pyx_ptype_5numpy_ndarray, 1, "del_g3", 0))) __PYX_ERR(0, 516, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u), __pyx_ptype_5numpy_ndarray, 1, "del_u", 0))) __PYX_ERR(0, 517, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i), __pyx_ptype_5numpy_ndarray, 1, "del_i", 0))) __PYX_ERR(0, 518, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a), __pyx_ptype_5numpy_ndarray, 1, "del_a", 0))) __PYX_ERR(0, 519, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o), __pyx_ptype_5numpy_ndarray, 1, "del_o", 0))) __PYX_ERR(0, 520, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g1_reg", 0))) __PYX_ERR(0, 521, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g2_reg", 0))) __PYX_ERR(0, 522, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g3_reg", 0))) __PYX_ERR(0, 523, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u_reg), __pyx_ptype_5numpy_ndarray, 1, "del_u_reg", 0))) __PYX_ERR(0, 524, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i_reg), __pyx_ptype_5numpy_ndarray, 1, "del_i_reg", 0))) __PYX_ERR(0, 525, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a_reg), __pyx_ptype_5numpy_ndarray, 1, "del_a_reg", 0))) __PYX_ERR(0, 526, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o_reg), __pyx_ptype_5numpy_ndarray, 1, "del_o_reg", 0))) __PYX_ERR(0, 527, __pyx_L1_error) + __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_14_fit_mter(__pyx_self, __pyx_v_self, __pyx_v_rng_pos_uia, __pyx_v_rng_pos_uao, __pyx_v_rng_pos_iao, __pyx_v_rng_pos_pair, __pyx_v_rng_pos, __pyx_v_rng_neg, __pyx_v_n_threads, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_iids, __pyx_v_X_aids, __pyx_v_YU, __pyx_v_YU_uids, __pyx_v_YU_aids, __pyx_v_YU_oids, __pyx_v_YI, __pyx_v_YI_iids, __pyx_v_YI_aids, __pyx_v_YI_oids, __pyx_v_rating_dict, __pyx_v_user_ids, __pyx_v_item_ids, __pyx_v_neg_item_ids, __pyx_v_indptr, __pyx_v_p_user_indices, __pyx_v_earlier_indices, __pyx_v_later_indices, __pyx_v_aspect_indices, __pyx_v_pair_counts, __pyx_v_G1, __pyx_v_G2, __pyx_v_G3, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_sgrad_G1, __pyx_v_sgrad_G2, __pyx_v_sgrad_G3, __pyx_v_sgrad_U, __pyx_v_sgrad_I, __pyx_v_sgrad_A, __pyx_v_sgrad_O, __pyx_v_del_g1, __pyx_v_del_g2, __pyx_v_del_g3, __pyx_v_del_u, __pyx_v_del_i, __pyx_v_del_a, __pyx_v_del_o, __pyx_v_del_g1_reg, __pyx_v_del_g2_reg, __pyx_v_del_g3_reg, __pyx_v_del_u_reg, __pyx_v_del_i_reg, __pyx_v_del_a_reg, __pyx_v_del_o_reg); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_user_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_neg_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_indptr, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_p_user_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_earlier_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_later_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_aspect_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_pair_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_O, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_O, 1); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_14_fit_mter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg, int __pyx_v_n_threads, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_iids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_YU, __Pyx_memviewslice __pyx_v_YU_uids, __Pyx_memviewslice __pyx_v_YU_aids, __Pyx_memviewslice __pyx_v_YU_oids, __Pyx_memviewslice __pyx_v_YI, __Pyx_memviewslice __pyx_v_YI_iids, __Pyx_memviewslice __pyx_v_YI_aids, __Pyx_memviewslice __pyx_v_YI_oids, struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict, __Pyx_memviewslice __pyx_v_user_ids, __Pyx_memviewslice __pyx_v_item_ids, __Pyx_memviewslice __pyx_v_neg_item_ids, __Pyx_memviewslice __pyx_v_indptr, __Pyx_memviewslice __pyx_v_p_user_indices, __Pyx_memviewslice __pyx_v_earlier_indices, __Pyx_memviewslice __pyx_v_later_indices, __Pyx_memviewslice __pyx_v_aspect_indices, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts, __Pyx_memviewslice __pyx_v_G1, __Pyx_memviewslice __pyx_v_G2, __Pyx_memviewslice __pyx_v_G3, __Pyx_memviewslice __pyx_v_U, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_O, __Pyx_memviewslice __pyx_v_sgrad_G1, __Pyx_memviewslice __pyx_v_sgrad_G2, __Pyx_memviewslice __pyx_v_sgrad_G3, __Pyx_memviewslice __pyx_v_sgrad_U, __Pyx_memviewslice __pyx_v_sgrad_I, __Pyx_memviewslice __pyx_v_sgrad_A, __Pyx_memviewslice __pyx_v_sgrad_O, PyArrayObject *__pyx_v_del_g1, PyArrayObject *__pyx_v_del_g2, PyArrayObject *__pyx_v_del_g3, PyArrayObject *__pyx_v_del_u, PyArrayObject *__pyx_v_del_i, PyArrayObject *__pyx_v_del_a, PyArrayObject *__pyx_v_del_o, PyArrayObject *__pyx_v_del_g1_reg, PyArrayObject *__pyx_v_del_g2_reg, PyArrayObject *__pyx_v_del_g3_reg, PyArrayObject *__pyx_v_del_u_reg, PyArrayObject *__pyx_v_del_i_reg, PyArrayObject *__pyx_v_del_a_reg, PyArrayObject *__pyx_v_del_o_reg) { + long __pyx_v_s; + long __pyx_v_correct; + long __pyx_v_skipped; + long __pyx_v_aspect_correct; + long __pyx_v_n_users; + long __pyx_v_n_items; + long __pyx_v_n_aspects; + CYTHON_UNUSED long __pyx_v_n_opinions; + long __pyx_v_n_user_factors; + long __pyx_v_n_item_factors; + long __pyx_v_n_aspect_factors; + long __pyx_v_n_opinion_factors; + CYTHON_UNUSED int __pyx_v_num_samples; + CYTHON_UNUSED int __pyx_v_num_bpr_samples; + CYTHON_UNUSED int __pyx_v_num_pair_samples; + CYTHON_UNUSED short __pyx_v__; + short __pyx_v_i; + short __pyx_v_j; + short __pyx_v_k; + short __pyx_v_idx; + short __pyx_v_jdx; + short __pyx_v_u_idx; + short __pyx_v_i_idx; + short __pyx_v_a_idx; + short __pyx_v_o_idx; + short __pyx_v_j_idx; + short __pyx_v_thread_id; + float __pyx_v_z; + float __pyx_v_score; + float __pyx_v_i_score; + float __pyx_v_j_score; + float __pyx_v_pred; + float __pyx_v_i_ij; + float __pyx_v_a_ji; + float __pyx_v_loss; + float __pyx_v_bpr_loss; + float __pyx_v_aspect_bpr_loss; + float __pyx_v_del_sqerror; + float __pyx_v_del_bpr; + float __pyx_v_del_aspect_bpr; + float __pyx_v_eps; + float __pyx_v_lr; + float __pyx_v_ld_reg; + float __pyx_v_ld_bpr; + float __pyx_v_lambda_d; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a; + __Pyx_Buffer __pyx_pybuffer_del_a; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a_reg; + __Pyx_Buffer __pyx_pybuffer_del_a_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1; + __Pyx_Buffer __pyx_pybuffer_del_g1; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1_reg; + __Pyx_Buffer __pyx_pybuffer_del_g1_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2; + __Pyx_Buffer __pyx_pybuffer_del_g2; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2_reg; + __Pyx_Buffer __pyx_pybuffer_del_g2_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3; + __Pyx_Buffer __pyx_pybuffer_del_g3; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3_reg; + __Pyx_Buffer __pyx_pybuffer_del_g3_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i; + __Pyx_Buffer __pyx_pybuffer_del_i; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i_reg; + __Pyx_Buffer __pyx_pybuffer_del_i_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o; + __Pyx_Buffer __pyx_pybuffer_del_o; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o_reg; + __Pyx_Buffer __pyx_pybuffer_del_o_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u; + __Pyx_Buffer __pyx_pybuffer_del_u; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u_reg; + __Pyx_Buffer __pyx_pybuffer_del_u_reg; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + long __pyx_t_3; + int __pyx_t_4; + float __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + int __pyx_t_8; + Py_ssize_t __pyx_t_9; + long __pyx_t_10; + short __pyx_t_11; + long __pyx_t_12; + long __pyx_t_13; + short __pyx_t_14; + long __pyx_t_15; + long __pyx_t_16; + short __pyx_t_17; + Py_ssize_t __pyx_t_18; + Py_ssize_t __pyx_t_19; + Py_ssize_t __pyx_t_20; + Py_ssize_t __pyx_t_21; + Py_ssize_t __pyx_t_22; + Py_ssize_t __pyx_t_23; + Py_ssize_t __pyx_t_24; + Py_ssize_t __pyx_t_25; + bool __pyx_t_26; + int __pyx_t_27; + int __pyx_t_28; + float __pyx_t_29; + long __pyx_t_30; + PyObject *__pyx_t_31 = NULL; + PyObject *__pyx_t_32 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_fuse_0_0_fit_mter", 0); + __pyx_pybuffer_del_g1.pybuffer.buf = NULL; + __pyx_pybuffer_del_g1.refcount = 0; + __pyx_pybuffernd_del_g1.data = NULL; + __pyx_pybuffernd_del_g1.rcbuffer = &__pyx_pybuffer_del_g1; + __pyx_pybuffer_del_g2.pybuffer.buf = NULL; + __pyx_pybuffer_del_g2.refcount = 0; + __pyx_pybuffernd_del_g2.data = NULL; + __pyx_pybuffernd_del_g2.rcbuffer = &__pyx_pybuffer_del_g2; + __pyx_pybuffer_del_g3.pybuffer.buf = NULL; + __pyx_pybuffer_del_g3.refcount = 0; + __pyx_pybuffernd_del_g3.data = NULL; + __pyx_pybuffernd_del_g3.rcbuffer = &__pyx_pybuffer_del_g3; + __pyx_pybuffer_del_u.pybuffer.buf = NULL; + __pyx_pybuffer_del_u.refcount = 0; + __pyx_pybuffernd_del_u.data = NULL; + __pyx_pybuffernd_del_u.rcbuffer = &__pyx_pybuffer_del_u; + __pyx_pybuffer_del_i.pybuffer.buf = NULL; + __pyx_pybuffer_del_i.refcount = 0; + __pyx_pybuffernd_del_i.data = NULL; + __pyx_pybuffernd_del_i.rcbuffer = &__pyx_pybuffer_del_i; + __pyx_pybuffer_del_a.pybuffer.buf = NULL; + __pyx_pybuffer_del_a.refcount = 0; + __pyx_pybuffernd_del_a.data = NULL; + __pyx_pybuffernd_del_a.rcbuffer = &__pyx_pybuffer_del_a; + __pyx_pybuffer_del_o.pybuffer.buf = NULL; + __pyx_pybuffer_del_o.refcount = 0; + __pyx_pybuffernd_del_o.data = NULL; + __pyx_pybuffernd_del_o.rcbuffer = &__pyx_pybuffer_del_o; + __pyx_pybuffer_del_g1_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g1_reg.refcount = 0; + __pyx_pybuffernd_del_g1_reg.data = NULL; + __pyx_pybuffernd_del_g1_reg.rcbuffer = &__pyx_pybuffer_del_g1_reg; + __pyx_pybuffer_del_g2_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g2_reg.refcount = 0; + __pyx_pybuffernd_del_g2_reg.data = NULL; + __pyx_pybuffernd_del_g2_reg.rcbuffer = &__pyx_pybuffer_del_g2_reg; + __pyx_pybuffer_del_g3_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g3_reg.refcount = 0; + __pyx_pybuffernd_del_g3_reg.data = NULL; + __pyx_pybuffernd_del_g3_reg.rcbuffer = &__pyx_pybuffer_del_g3_reg; + __pyx_pybuffer_del_u_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_u_reg.refcount = 0; + __pyx_pybuffernd_del_u_reg.data = NULL; + __pyx_pybuffernd_del_u_reg.rcbuffer = &__pyx_pybuffer_del_u_reg; + __pyx_pybuffer_del_i_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_i_reg.refcount = 0; + __pyx_pybuffernd_del_i_reg.data = NULL; + __pyx_pybuffernd_del_i_reg.rcbuffer = &__pyx_pybuffer_del_i_reg; + __pyx_pybuffer_del_a_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_a_reg.refcount = 0; + __pyx_pybuffernd_del_a_reg.data = NULL; + __pyx_pybuffernd_del_a_reg.rcbuffer = &__pyx_pybuffer_del_a_reg; + __pyx_pybuffer_del_o_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_o_reg.refcount = 0; + __pyx_pybuffernd_del_o_reg.data = NULL; + __pyx_pybuffernd_del_o_reg.rcbuffer = &__pyx_pybuffer_del_o_reg; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g1.diminfo[0].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1.diminfo[0].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1.diminfo[1].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1.diminfo[1].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1.diminfo[2].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1.diminfo[2].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g2.diminfo[0].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2.diminfo[0].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2.diminfo[1].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2.diminfo[1].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2.diminfo[2].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2.diminfo[2].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g3.diminfo[0].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3.diminfo[0].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3.diminfo[1].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3.diminfo[1].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3.diminfo[2].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3.diminfo[2].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_u.diminfo[0].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u.diminfo[0].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u.diminfo[1].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u.diminfo[1].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_i.diminfo[0].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i.diminfo[0].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i.diminfo[1].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i.diminfo[1].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_a.diminfo[0].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a.diminfo[0].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a.diminfo[1].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a.diminfo[1].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_o.diminfo[0].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o.diminfo[0].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o.diminfo[1].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o.diminfo[1].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g1_reg.diminfo[0].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1_reg.diminfo[0].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1_reg.diminfo[1].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1_reg.diminfo[1].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1_reg.diminfo[2].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1_reg.diminfo[2].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g2_reg.diminfo[0].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2_reg.diminfo[0].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2_reg.diminfo[1].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2_reg.diminfo[1].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2_reg.diminfo[2].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2_reg.diminfo[2].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g3_reg.diminfo[0].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3_reg.diminfo[0].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3_reg.diminfo[1].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3_reg.diminfo[1].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3_reg.diminfo[2].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3_reg.diminfo[2].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_u_reg.diminfo[0].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u_reg.diminfo[0].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u_reg.diminfo[1].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u_reg.diminfo[1].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_i_reg.diminfo[0].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i_reg.diminfo[0].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i_reg.diminfo[1].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i_reg.diminfo[1].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_a_reg.diminfo[0].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a_reg.diminfo[0].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a_reg.diminfo[1].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a_reg.diminfo[1].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_o_reg.diminfo[0].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o_reg.diminfo[0].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o_reg.diminfo[1].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o_reg.diminfo[1].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[1]; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":531 + * """ + * cdef: + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 # <<<<<<<<<<<<<< + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items + */ + __pyx_v_correct = 0; + __pyx_v_skipped = 0; + __pyx_v_aspect_correct = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":532 + * cdef: + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 + * long n_users = self.train_set.num_users # <<<<<<<<<<<<<< + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_n_users = __pyx_t_3; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":533 + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items # <<<<<<<<<<<<<< + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_items = __pyx_t_3; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":534 + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_aspects = __pyx_t_3; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":535 + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions # <<<<<<<<<<<<<< + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_opinions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_opinions = __pyx_t_3; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":536 + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors # <<<<<<<<<<<<<< + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_user_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 536, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 536, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_user_factors = __pyx_t_3; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":537 + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors # <<<<<<<<<<<<<< + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_item_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 537, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_item_factors = __pyx_t_3; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":538 + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors # <<<<<<<<<<<<<< + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_aspect_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 538, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_aspect_factors = __pyx_t_3; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":539 + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors # <<<<<<<<<<<<<< + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_opinion_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 539, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_opinion_factors = __pyx_t_3; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":540 + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples # <<<<<<<<<<<<<< + * int num_bpr_samples = self.n_bpr_samples + * int num_pair_samples = self.n_pair_samples + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_element_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 540, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_samples = __pyx_t_4; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":541 + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples # <<<<<<<<<<<<<< + * int num_pair_samples = self.n_pair_samples + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 541, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_bpr_samples = __pyx_t_4; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":542 + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples + * int num_pair_samples = self.n_pair_samples # <<<<<<<<<<<<<< + * + * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_pair_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 542, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_pair_samples = __pyx_t_4; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":546 + * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id + * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji + * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr # <<<<<<<<<<<<<< + * floating eps = 1e-9 + * + */ + __pyx_v_loss = 0.; + __pyx_v_bpr_loss = 0.; + __pyx_v_aspect_bpr_loss = 0.; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":547 + * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji + * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr + * floating eps = 1e-9 # <<<<<<<<<<<<<< + * + * floating lr = self.lr + */ + __pyx_v_eps = 1e-9; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":549 + * floating eps = 1e-9 + * + * floating lr = self.lr # <<<<<<<<<<<<<< + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 549, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lr = __pyx_t_5; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":550 + * + * floating lr = self.lr + * floating ld_reg = self.lambda_reg # <<<<<<<<<<<<<< + * floating ld_bpr = self.lambda_bpr + * floating lambda_d = self.lambda_d + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_reg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 550, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 550, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_ld_reg = __pyx_t_5; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":551 + * floating lr = self.lr + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr # <<<<<<<<<<<<<< + * floating lambda_d = self.lambda_d + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_bpr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_ld_bpr = __pyx_t_5; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":552 + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr + * floating lambda_d = self.lambda_d # <<<<<<<<<<<<<< + * + * del_g1.fill(0) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_d = __pyx_t_5; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":554 + * floating lambda_d = self.lambda_d + * + * del_g1.fill(0) # <<<<<<<<<<<<<< + * del_g2.fill(0) + * del_g3.fill(0) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":555 + * + * del_g1.fill(0) + * del_g2.fill(0) # <<<<<<<<<<<<<< + * del_g3.fill(0) + * del_u.fill(0) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":556 + * del_g1.fill(0) + * del_g2.fill(0) + * del_g3.fill(0) # <<<<<<<<<<<<<< + * del_u.fill(0) + * del_i.fill(0) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":557 + * del_g2.fill(0) + * del_g3.fill(0) + * del_u.fill(0) # <<<<<<<<<<<<<< + * del_i.fill(0) + * del_a.fill(0) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 557, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":558 + * del_g3.fill(0) + * del_u.fill(0) + * del_i.fill(0) # <<<<<<<<<<<<<< + * del_a.fill(0) + * del_o.fill(0) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":559 + * del_u.fill(0) + * del_i.fill(0) + * del_a.fill(0) # <<<<<<<<<<<<<< + * del_o.fill(0) + * del_g1_reg.fill(0) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 559, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 559, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":560 + * del_i.fill(0) + * del_a.fill(0) + * del_o.fill(0) # <<<<<<<<<<<<<< + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":561 + * del_a.fill(0) + * del_o.fill(0) + * del_g1_reg.fill(0) # <<<<<<<<<<<<<< + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":562 + * del_o.fill(0) + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) # <<<<<<<<<<<<<< + * del_g3_reg.fill(0) + * del_u_reg.fill(0) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 562, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":563 + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) # <<<<<<<<<<<<<< + * del_u_reg.fill(0) + * del_i_reg.fill(0) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 563, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 563, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":564 + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) + * del_u_reg.fill(0) # <<<<<<<<<<<<<< + * del_i_reg.fill(0) + * del_a_reg.fill(0) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":565 + * del_g3_reg.fill(0) + * del_u_reg.fill(0) + * del_i_reg.fill(0) # <<<<<<<<<<<<<< + * del_a_reg.fill(0) + * del_o_reg.fill(0) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":566 + * del_u_reg.fill(0) + * del_i_reg.fill(0) + * del_a_reg.fill(0) # <<<<<<<<<<<<<< + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 566, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":567 + * del_i_reg.fill(0) + * del_a_reg.fill(0) + * del_o_reg.fill(0) # <<<<<<<<<<<<<< + * with nogil, parallel(num_threads=n_threads): + * thread_id = get_thread_num() + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":568 + * del_a_reg.fill(0) + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): + */ + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel private(__pyx_v_thread_id) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_bpr_loss) reduction(+:__pyx_v_correct) reduction(+:__pyx_v_skipped) reduction(+:__pyx_v_aspect_bpr_loss) reduction(+:__pyx_v_aspect_correct) private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_7, __pyx_t_8, __pyx_t_9) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_n_threads) + #endif /* _OPENMP */ + { + #ifdef _OPENMP + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + Py_BEGIN_ALLOW_THREADS + #endif /* _OPENMP */ + /* Initialize private variables to invalid values */ + __pyx_v_thread_id = ((short)0xbad0bad0); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":569 + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): + * thread_id = get_thread_num() # <<<<<<<<<<<<<< + * for _ in prange(num_samples, schedule='guided'): + * # get user item aspect element + */ + __pyx_v_thread_id = recom_bpr::get_thread_num(); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":570 + * with nogil, parallel(num_threads=n_threads): + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): # <<<<<<<<<<<<<< + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) + */ + __pyx_t_4 = __pyx_v_num_samples; + { + short __pyx_parallel_temp0 = ((short)0xbad0bad0); + short __pyx_parallel_temp1 = ((short)0xbad0bad0); + float __pyx_parallel_temp2 = ((float)__PYX_NAN()); + short __pyx_parallel_temp3 = ((short)0xbad0bad0); + short __pyx_parallel_temp4 = ((short)0xbad0bad0); + short __pyx_parallel_temp5 = ((short)0xbad0bad0); + short __pyx_parallel_temp6 = ((short)0xbad0bad0); + short __pyx_parallel_temp7 = ((short)0xbad0bad0); + float __pyx_parallel_temp8 = ((float)__PYX_NAN()); + short __pyx_parallel_temp9 = ((short)0xbad0bad0); + float __pyx_parallel_temp10 = ((float)__PYX_NAN()); + float __pyx_parallel_temp11 = ((float)__PYX_NAN()); + short __pyx_parallel_temp12 = ((short)0xbad0bad0); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_8 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_8 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_del_sqerror) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_o_idx) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_score) lastprivate(__pyx_v_u_idx) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){ + if (__pyx_parallel_why < 2) + { + __pyx_v__ = (short)(0 + 1 * __pyx_t_7); + /* Initialize private variables to invalid values */ + __pyx_v_a_idx = ((short)0xbad0bad0); + __pyx_v_del_sqerror = ((float)__PYX_NAN()); + __pyx_v_i = ((short)0xbad0bad0); + __pyx_v_i_idx = ((short)0xbad0bad0); + __pyx_v_idx = ((short)0xbad0bad0); + __pyx_v_j = ((short)0xbad0bad0); + __pyx_v_k = ((short)0xbad0bad0); + __pyx_v_o_idx = ((short)0xbad0bad0); + __pyx_v_pred = ((float)__PYX_NAN()); + __pyx_v_score = ((float)__PYX_NAN()); + __pyx_v_u_idx = ((short)0xbad0bad0); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":572 + * for _ in prange(num_samples, schedule='guided'): + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] + */ + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uia->__pyx_vtab)->generate(__pyx_v_rng_pos_uia, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 572, __pyx_L12_error) + __pyx_v_idx = __pyx_t_3; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":573 + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) + * u_idx = X_uids[idx] # <<<<<<<<<<<<<< + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] + */ + __pyx_t_9 = __pyx_v_idx; + __pyx_v_u_idx = (*((short *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_9 * __pyx_v_X_uids.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":574 + * idx = rng_pos_uia.generate(thread_id) + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] # <<<<<<<<<<<<<< + * a_idx = X_aids[idx] + * score = X[idx] + */ + __pyx_t_9 = __pyx_v_idx; + __pyx_v_i_idx = (*((short *) ( /* dim=0 */ (__pyx_v_X_iids.data + __pyx_t_9 * __pyx_v_X_iids.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":575 + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] # <<<<<<<<<<<<<< + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + */ + __pyx_t_9 = __pyx_v_idx; + __pyx_v_a_idx = (*((short *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_9 * __pyx_v_X_aids.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":576 + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] + * score = X[idx] # <<<<<<<<<<<<<< + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * loss += (pred - score) * (pred - score) + */ + __pyx_t_9 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_9 * __pyx_v_X.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":577 + * a_idx = X_aids[idx] + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) + * + */ + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 577, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":578 + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< + * + * del_sqerror = 2 * (pred - score) + */ + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":580 + * loss += (pred - score) * (pred - score) + * + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * for i in range(n_user_factors): + * for j in range(n_item_factors): + */ + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":581 + * + * del_sqerror = 2 * (pred - score) + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + */ + __pyx_t_3 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":582 + * del_sqerror = 2 * (pred - score) + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + */ + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":583 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + */ + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":584 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + */ + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_i_idx; + __pyx_t_20 = __pyx_v_j; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_k; + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_20 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":585 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] + */ + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_i_idx; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":586 + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] + * + */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_k; + __pyx_t_23 = __pyx_v_i_idx; + __pyx_t_24 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_25 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_20 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":587 + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] # <<<<<<<<<<<<<< + * + * # get user aspect opinion element + */ + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))); + } + } + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":590 + * + * # get user aspect opinion element + * idx = rng_pos_uao.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] + */ + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uao->__pyx_vtab)->generate(__pyx_v_rng_pos_uao, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 590, __pyx_L12_error) + __pyx_v_idx = __pyx_t_3; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":591 + * # get user aspect opinion element + * idx = rng_pos_uao.generate(thread_id) + * u_idx = YU_uids[idx] # <<<<<<<<<<<<<< + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] + */ + __pyx_t_25 = __pyx_v_idx; + __pyx_v_u_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YU_uids.data + __pyx_t_25 * __pyx_v_YU_uids.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":592 + * idx = rng_pos_uao.generate(thread_id) + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] # <<<<<<<<<<<<<< + * o_idx = YU_oids[idx] + * score = YU[idx] + */ + __pyx_t_25 = __pyx_v_idx; + __pyx_v_a_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YU_aids.data + __pyx_t_25 * __pyx_v_YU_aids.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":593 + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] # <<<<<<<<<<<<<< + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + */ + __pyx_t_25 = __pyx_v_idx; + __pyx_v_o_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YU_oids.data + __pyx_t_25 * __pyx_v_YU_oids.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":594 + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] + * score = YU[idx] # <<<<<<<<<<<<<< + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) + */ + __pyx_t_25 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_YU.data + __pyx_t_25 * __pyx_v_YU.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":595 + * o_idx = YU_oids[idx] + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) + * + */ + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G2, __pyx_v_n_user_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_U, __pyx_v_A, __pyx_v_O, __pyx_v_u_idx, __pyx_v_a_idx, __pyx_v_o_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 595, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":596 + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< + * + * del_sqerror = 2 * (pred - score) + */ + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":598 + * loss += (pred - score) * (pred - score) + * + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * + * for i in range(n_user_factors): + */ + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":600 + * del_sqerror = 2 * (pred - score) + * + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + */ + __pyx_t_3 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":601 + * + * for i in range(n_user_factors): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + */ + __pyx_t_12 = __pyx_v_n_aspect_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":602 + * for i in range(n_user_factors): + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + */ + __pyx_t_15 = __pyx_v_n_opinion_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":603 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + */ + __pyx_t_25 = __pyx_v_u_idx; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_j; + __pyx_t_20 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":604 + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] + */ + __pyx_t_21 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_18 = __pyx_v_a_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_o_idx; + __pyx_t_24 = __pyx_v_k; + __pyx_t_23 = __pyx_v_u_idx; + __pyx_t_22 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_9 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_25 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":605 + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] + * + */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_18 = __pyx_v_u_idx; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + __pyx_t_22 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_24 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":606 + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< + * + * # get item aspect opinion element + */ + __pyx_t_21 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_18 = __pyx_v_u_idx; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_a_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_o_idx; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_24 * __pyx_v_A.strides[1]) )))); + } + } + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":609 + * + * # get item aspect opinion element + * idx = rng_pos_iao.generate(thread_id) # <<<<<<<<<<<<<< + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] + */ + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_iao->__pyx_vtab)->generate(__pyx_v_rng_pos_iao, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 609, __pyx_L12_error) + __pyx_v_idx = __pyx_t_3; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":610 + * # get item aspect opinion element + * idx = rng_pos_iao.generate(thread_id) + * i_idx = YI_iids[idx] # <<<<<<<<<<<<<< + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YI_iids.data + __pyx_t_24 * __pyx_v_YI_iids.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":611 + * idx = rng_pos_iao.generate(thread_id) + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] # <<<<<<<<<<<<<< + * o_idx = YI_oids[idx] + * score = YI[idx] + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_a_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YI_aids.data + __pyx_t_24 * __pyx_v_YI_aids.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":612 + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] # <<<<<<<<<<<<<< + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_o_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YI_oids.data + __pyx_t_24 * __pyx_v_YI_oids.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":613 + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] + * score = YI[idx] # <<<<<<<<<<<<<< + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_YI.data + __pyx_t_24 * __pyx_v_YI.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":614 + * o_idx = YI_oids[idx] + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) + * + */ + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G3, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_i_idx, __pyx_v_a_idx, __pyx_v_o_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 614, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":615 + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< + * + * del_sqerror = 2 * (pred - score) + */ + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":617 + * loss += (pred - score) * (pred - score) + * + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): + */ + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":618 + * + * del_sqerror = 2 * (pred - score) + * for i in range(n_item_factors): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + */ + __pyx_t_3 = __pyx_v_n_item_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":619 + * del_sqerror = 2 * (pred - score) + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + */ + __pyx_t_12 = __pyx_v_n_aspect_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":620 + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + */ + __pyx_t_15 = __pyx_v_n_opinion_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":621 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + */ + __pyx_t_24 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_o_idx; + __pyx_t_20 = __pyx_v_k; + __pyx_t_21 = __pyx_v_i; + __pyx_t_22 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_24 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":622 + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + */ + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_o_idx; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i_idx; + __pyx_t_21 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_23 * __pyx_v_O.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":623 + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + * + */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_o_idx; + __pyx_t_20 = __pyx_v_k; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_23 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":624 + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< + * + * for _ in prange(num_bpr_samples, schedule='guided'): + */ + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_j; + __pyx_t_22 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); + } + } + } + goto __pyx_L33; + __pyx_L12_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L32; + __pyx_L32:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates0) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_a_idx; + __pyx_parallel_temp2 = __pyx_v_del_sqerror; + __pyx_parallel_temp3 = __pyx_v_i; + __pyx_parallel_temp4 = __pyx_v_i_idx; + __pyx_parallel_temp5 = __pyx_v_idx; + __pyx_parallel_temp6 = __pyx_v_j; + __pyx_parallel_temp7 = __pyx_v_k; + __pyx_parallel_temp8 = __pyx_v_loss; + __pyx_parallel_temp9 = __pyx_v_o_idx; + __pyx_parallel_temp10 = __pyx_v_pred; + __pyx_parallel_temp11 = __pyx_v_score; + __pyx_parallel_temp12 = __pyx_v_u_idx; + } + __pyx_L33:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_a_idx = __pyx_parallel_temp1; + __pyx_v_del_sqerror = __pyx_parallel_temp2; + __pyx_v_i = __pyx_parallel_temp3; + __pyx_v_i_idx = __pyx_parallel_temp4; + __pyx_v_idx = __pyx_parallel_temp5; + __pyx_v_j = __pyx_parallel_temp6; + __pyx_v_k = __pyx_parallel_temp7; + __pyx_v_loss = __pyx_parallel_temp8; + __pyx_v_o_idx = __pyx_parallel_temp9; + __pyx_v_pred = __pyx_parallel_temp10; + __pyx_v_score = __pyx_parallel_temp11; + __pyx_v_u_idx = __pyx_parallel_temp12; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":626 + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + * + * for _ in prange(num_bpr_samples, schedule='guided'): # <<<<<<<<<<<<<< + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] + */ + __pyx_t_8 = __pyx_v_num_bpr_samples; + { + short __pyx_parallel_temp0 = ((short)0xbad0bad0); + float __pyx_parallel_temp1 = ((float)__PYX_NAN()); + long __pyx_parallel_temp2 = ((long)0xbad0bad0); + float __pyx_parallel_temp3 = ((float)__PYX_NAN()); + short __pyx_parallel_temp4 = ((short)0xbad0bad0); + short __pyx_parallel_temp5 = ((short)0xbad0bad0); + float __pyx_parallel_temp6 = ((float)__PYX_NAN()); + float __pyx_parallel_temp7 = ((float)__PYX_NAN()); + short __pyx_parallel_temp8 = ((short)0xbad0bad0); + short __pyx_parallel_temp9 = ((short)0xbad0bad0); + short __pyx_parallel_temp10 = ((short)0xbad0bad0); + float __pyx_parallel_temp11 = ((float)__PYX_NAN()); + short __pyx_parallel_temp12 = ((short)0xbad0bad0); + short __pyx_parallel_temp13 = ((short)0xbad0bad0); + float __pyx_parallel_temp14 = ((float)__PYX_NAN()); + long __pyx_parallel_temp15 = ((long)0xbad0bad0); + long __pyx_parallel_temp16 = ((long)0xbad0bad0); + short __pyx_parallel_temp17 = ((short)0xbad0bad0); + float __pyx_parallel_temp18 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_4 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_4 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_del_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_i_ij) lastprivate(__pyx_v_i_score) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_j_score) lastprivate(__pyx_v_jdx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_s) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_4; __pyx_t_7++){ + if (__pyx_parallel_why < 2) + { + __pyx_v__ = (short)(0 + 1 * __pyx_t_7); + /* Initialize private variables to invalid values */ + __pyx_v_del_bpr = ((float)__PYX_NAN()); + __pyx_v_i = ((short)0xbad0bad0); + __pyx_v_i_idx = ((short)0xbad0bad0); + __pyx_v_i_ij = ((float)__PYX_NAN()); + __pyx_v_i_score = ((float)__PYX_NAN()); + __pyx_v_idx = ((short)0xbad0bad0); + __pyx_v_j = ((short)0xbad0bad0); + __pyx_v_j_idx = ((short)0xbad0bad0); + __pyx_v_j_score = ((float)__PYX_NAN()); + __pyx_v_jdx = ((short)0xbad0bad0); + __pyx_v_k = ((short)0xbad0bad0); + __pyx_v_pred = ((float)__PYX_NAN()); + __pyx_v_s = ((long)0xbad0bad0); + __pyx_v_u_idx = ((short)0xbad0bad0); + __pyx_v_z = ((float)__PYX_NAN()); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":627 + * + * for _ in prange(num_bpr_samples, schedule='guided'): + * idx = rng_pos.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] + */ + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos->__pyx_vtab)->generate(__pyx_v_rng_pos, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 627, __pyx_L36_error) + __pyx_v_idx = __pyx_t_3; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":628 + * for _ in prange(num_bpr_samples, schedule='guided'): + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] # <<<<<<<<<<<<<< + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) + */ + __pyx_t_23 = __pyx_v_idx; + __pyx_v_u_idx = (*((short *) ( /* dim=0 */ (__pyx_v_user_ids.data + __pyx_t_23 * __pyx_v_user_ids.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":629 + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] # <<<<<<<<<<<<<< + * jdx = rng_neg.generate(thread_id) + * j_idx = neg_item_ids[jdx] + */ + __pyx_t_23 = __pyx_v_idx; + __pyx_v_i_idx = (*((short *) ( /* dim=0 */ (__pyx_v_item_ids.data + __pyx_t_23 * __pyx_v_item_ids.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":630 + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) # <<<<<<<<<<<<<< + * j_idx = neg_item_ids[jdx] + * + */ + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_neg->__pyx_vtab)->generate(__pyx_v_rng_neg, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 630, __pyx_L36_error) + __pyx_v_jdx = __pyx_t_3; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":631 + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) + * j_idx = neg_item_ids[jdx] # <<<<<<<<<<<<<< + * + * s = 1 + */ + __pyx_t_23 = __pyx_v_jdx; + __pyx_v_j_idx = (*((short *) ( /* dim=0 */ (__pyx_v_neg_item_ids.data + __pyx_t_23 * __pyx_v_neg_item_ids.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":633 + * j_idx = neg_item_ids[jdx] + * + * s = 1 # <<<<<<<<<<<<<< + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): + */ + __pyx_v_s = 1; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":635 + * s = 1 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + */ + __pyx_t_26 = __pyx_fuse_0__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero(__pyx_v_indptr, __pyx_v_item_ids, __pyx_v_u_idx, __pyx_v_j_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 635, __pyx_L36_error) + __pyx_t_27 = (__pyx_t_26 != 0); + if (__pyx_t_27) { + + /* "cornac/models/comparer/recom_comparer_sub.pyx":636 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] # <<<<<<<<<<<<<< + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: + */ + __pyx_t_28 = __pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_i_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 636, __pyx_L36_error) + __pyx_v_i_score = (__pyx_v_rating_dict->my_map[__pyx_t_28]); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":637 + * if has_non_zero(indptr, item_ids, u_idx, j_idx): + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] # <<<<<<<<<<<<<< + * if i_score == j_score: + * skipped += 1 + */ + __pyx_t_28 = __pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_j_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 637, __pyx_L36_error) + __pyx_v_j_score = (__pyx_v_rating_dict->my_map[__pyx_t_28]); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":638 + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: # <<<<<<<<<<<<<< + * skipped += 1 + * continue + */ + __pyx_t_27 = (__pyx_v_i_score == __pyx_v_j_score); + if (__pyx_t_27) { + + /* "cornac/models/comparer/recom_comparer_sub.pyx":639 + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: + * skipped += 1 # <<<<<<<<<<<<<< + * continue + * elif i_score < j_score: + */ + __pyx_v_skipped = (__pyx_v_skipped + 1); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":640 + * if i_score == j_score: + * skipped += 1 + * continue # <<<<<<<<<<<<<< + * elif i_score < j_score: + * s = -1 + */ + goto __pyx_L34_continue; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":638 + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: # <<<<<<<<<<<<<< + * skipped += 1 + * continue + */ + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":641 + * skipped += 1 + * continue + * elif i_score < j_score: # <<<<<<<<<<<<<< + * s = -1 + * + */ + __pyx_t_27 = (__pyx_v_i_score < __pyx_v_j_score); + if (__pyx_t_27) { + + /* "cornac/models/comparer/recom_comparer_sub.pyx":642 + * continue + * elif i_score < j_score: + * s = -1 # <<<<<<<<<<<<<< + * + * pred = ( + */ + __pyx_v_s = -1L; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":641 + * skipped += 1 + * continue + * elif i_score < j_score: # <<<<<<<<<<<<<< + * s = -1 + * + */ + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":635 + * s = 1 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + */ + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":645 + * + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) # <<<<<<<<<<<<<< + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s + */ + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_n_aspects); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 645, __pyx_L36_error) + + /* "cornac/models/comparer/recom_comparer_sub.pyx":646 + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) # <<<<<<<<<<<<<< + * ) * s + * z = (1.0 / (1.0 + exp(pred))) + */ + __pyx_t_29 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_n_aspects); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 646, __pyx_L36_error) + + /* "cornac/models/comparer/recom_comparer_sub.pyx":647 + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s # <<<<<<<<<<<<<< + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: + */ + __pyx_v_pred = ((__pyx_t_5 - __pyx_t_29) * __pyx_v_s); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":648 + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s + * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< + * if z < .5: + * correct += 1 + */ + __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":649 + * ) * s + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * correct += 1 + * del_bpr = ld_bpr * z * s + */ + __pyx_t_27 = (__pyx_v_z < .5); + if (__pyx_t_27) { + + /* "cornac/models/comparer/recom_comparer_sub.pyx":650 + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: + * correct += 1 # <<<<<<<<<<<<<< + * del_bpr = ld_bpr * z * s + * + */ + __pyx_v_correct = (__pyx_v_correct + 1); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":649 + * ) * s + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * correct += 1 + * del_bpr = ld_bpr * z * s + */ + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":651 + * if z < .5: + * correct += 1 + * del_bpr = ld_bpr * z * s # <<<<<<<<<<<<<< + * + * bpr_loss += log(1 / (1 + exp(-pred))) + */ + __pyx_v_del_bpr = ((__pyx_v_ld_bpr * __pyx_v_z) * __pyx_v_s); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":653 + * del_bpr = ld_bpr * z * s + * + * bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< + * + * for i in range(n_user_factors): + */ + __pyx_v_bpr_loss = (__pyx_v_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":655 + * bpr_loss += log(1 / (1 + exp(-pred))) + * + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] + */ + __pyx_t_3 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":656 + * + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): + */ + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":657 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + */ + __pyx_t_23 = __pyx_v_i_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_j_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_v_i_ij = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":658 + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + */ + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":659 + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + */ + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_n_aspects; + __pyx_t_23 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":660 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_n_aspects; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_i_ij) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":661 + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij + */ + __pyx_t_20 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_18 = __pyx_v_n_aspects; + __pyx_t_19 = __pyx_v_k; + __pyx_t_21 = __pyx_v_i_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":662 + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij + * + */ + __pyx_t_19 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_n_aspects; + __pyx_t_20 = __pyx_v_k; + __pyx_t_22 = __pyx_v_j_idx; + __pyx_t_21 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_18 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":663 + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij # <<<<<<<<<<<<<< + * + * for _ in prange(num_pair_samples, schedule='guided'): + */ + __pyx_t_20 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_18 = __pyx_v_n_aspects; + __pyx_t_19 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij); + } + } + } + goto __pyx_L48; + __pyx_L34_continue:; + goto __pyx_L48; + __pyx_L36_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L47; + __pyx_L47:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates1) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_bpr_loss; + __pyx_parallel_temp2 = __pyx_v_correct; + __pyx_parallel_temp3 = __pyx_v_del_bpr; + __pyx_parallel_temp4 = __pyx_v_i; + __pyx_parallel_temp5 = __pyx_v_i_idx; + __pyx_parallel_temp6 = __pyx_v_i_ij; + __pyx_parallel_temp7 = __pyx_v_i_score; + __pyx_parallel_temp8 = __pyx_v_idx; + __pyx_parallel_temp9 = __pyx_v_j; + __pyx_parallel_temp10 = __pyx_v_j_idx; + __pyx_parallel_temp11 = __pyx_v_j_score; + __pyx_parallel_temp12 = __pyx_v_jdx; + __pyx_parallel_temp13 = __pyx_v_k; + __pyx_parallel_temp14 = __pyx_v_pred; + __pyx_parallel_temp15 = __pyx_v_s; + __pyx_parallel_temp16 = __pyx_v_skipped; + __pyx_parallel_temp17 = __pyx_v_u_idx; + __pyx_parallel_temp18 = __pyx_v_z; + } + __pyx_L48:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_bpr_loss = __pyx_parallel_temp1; + __pyx_v_correct = __pyx_parallel_temp2; + __pyx_v_del_bpr = __pyx_parallel_temp3; + __pyx_v_i = __pyx_parallel_temp4; + __pyx_v_i_idx = __pyx_parallel_temp5; + __pyx_v_i_ij = __pyx_parallel_temp6; + __pyx_v_i_score = __pyx_parallel_temp7; + __pyx_v_idx = __pyx_parallel_temp8; + __pyx_v_j = __pyx_parallel_temp9; + __pyx_v_j_idx = __pyx_parallel_temp10; + __pyx_v_j_score = __pyx_parallel_temp11; + __pyx_v_jdx = __pyx_parallel_temp12; + __pyx_v_k = __pyx_parallel_temp13; + __pyx_v_pred = __pyx_parallel_temp14; + __pyx_v_s = __pyx_parallel_temp15; + __pyx_v_skipped = __pyx_parallel_temp16; + __pyx_v_u_idx = __pyx_parallel_temp17; + __pyx_v_z = __pyx_parallel_temp18; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":665 + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij + * + * for _ in prange(num_pair_samples, schedule='guided'): # <<<<<<<<<<<<<< + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] + */ + __pyx_t_4 = __pyx_v_num_pair_samples; + { + short __pyx_parallel_temp0 = ((short)0xbad0bad0); + short __pyx_parallel_temp1 = ((short)0xbad0bad0); + float __pyx_parallel_temp2 = ((float)__PYX_NAN()); + float __pyx_parallel_temp3 = ((float)__PYX_NAN()); + long __pyx_parallel_temp4 = ((long)0xbad0bad0); + float __pyx_parallel_temp5 = ((float)__PYX_NAN()); + short __pyx_parallel_temp6 = ((short)0xbad0bad0); + short __pyx_parallel_temp7 = ((short)0xbad0bad0); + short __pyx_parallel_temp8 = ((short)0xbad0bad0); + short __pyx_parallel_temp9 = ((short)0xbad0bad0); + short __pyx_parallel_temp10 = ((short)0xbad0bad0); + short __pyx_parallel_temp11 = ((short)0xbad0bad0); + float __pyx_parallel_temp12 = ((float)__PYX_NAN()); + short __pyx_parallel_temp13 = ((short)0xbad0bad0); + float __pyx_parallel_temp14 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_8 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_8 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_a_ji) lastprivate(__pyx_v_del_aspect_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){ + if (__pyx_parallel_why < 2) + { + __pyx_v__ = (short)(0 + 1 * __pyx_t_7); + /* Initialize private variables to invalid values */ + __pyx_v_a_idx = ((short)0xbad0bad0); + __pyx_v_a_ji = ((float)__PYX_NAN()); + __pyx_v_del_aspect_bpr = ((float)__PYX_NAN()); + __pyx_v_i = ((short)0xbad0bad0); + __pyx_v_i_idx = ((short)0xbad0bad0); + __pyx_v_idx = ((short)0xbad0bad0); + __pyx_v_j = ((short)0xbad0bad0); + __pyx_v_j_idx = ((short)0xbad0bad0); + __pyx_v_k = ((short)0xbad0bad0); + __pyx_v_pred = ((float)__PYX_NAN()); + __pyx_v_u_idx = ((short)0xbad0bad0); + __pyx_v_z = ((float)__PYX_NAN()); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":666 + * + * for _ in prange(num_pair_samples, schedule='guided'): + * idx = rng_pos_pair.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] + */ + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_pair->__pyx_vtab)->generate(__pyx_v_rng_pos_pair, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 666, __pyx_L51_error) + __pyx_v_idx = __pyx_t_3; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":667 + * for _ in prange(num_pair_samples, schedule='guided'): + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] # <<<<<<<<<<<<<< + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] + */ + __pyx_t_23 = __pyx_v_idx; + __pyx_v_u_idx = (*((short *) ( /* dim=0 */ (__pyx_v_p_user_indices.data + __pyx_t_23 * __pyx_v_p_user_indices.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":668 + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] # <<<<<<<<<<<<<< + * j_idx = later_indices[idx] + * a_idx = aspect_indices[idx] + */ + __pyx_t_23 = __pyx_v_idx; + __pyx_v_i_idx = (*((short *) ( /* dim=0 */ (__pyx_v_earlier_indices.data + __pyx_t_23 * __pyx_v_earlier_indices.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":669 + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] # <<<<<<<<<<<<<< + * a_idx = aspect_indices[idx] + * + */ + __pyx_t_23 = __pyx_v_idx; + __pyx_v_j_idx = (*((short *) ( /* dim=0 */ (__pyx_v_later_indices.data + __pyx_t_23 * __pyx_v_later_indices.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":670 + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] + * a_idx = aspect_indices[idx] # <<<<<<<<<<<<<< + * + * pred = ( + */ + __pyx_t_23 = __pyx_v_idx; + __pyx_v_a_idx = (*((short *) ( /* dim=0 */ (__pyx_v_aspect_indices.data + __pyx_t_23 * __pyx_v_aspect_indices.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":673 + * + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) # <<<<<<<<<<<<<< + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * ) + */ + __pyx_t_29 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 673, __pyx_L51_error) + + /* "cornac/models/comparer/recom_comparer_sub.pyx":674 + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 674, __pyx_L51_error) + __pyx_v_pred = (__pyx_t_29 - __pyx_t_5); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":677 + * ) + * + * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< + * if z < .5: + * aspect_correct += 1 + */ + __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":678 + * + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * aspect_correct += 1 + * + */ + __pyx_t_27 = (__pyx_v_z < .5); + if (__pyx_t_27) { + + /* "cornac/models/comparer/recom_comparer_sub.pyx":679 + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: + * aspect_correct += 1 # <<<<<<<<<<<<<< + * + * del_aspect_bpr = lambda_d * z + */ + __pyx_v_aspect_correct = (__pyx_v_aspect_correct + 1); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":678 + * + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * aspect_correct += 1 + * + */ + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":681 + * aspect_correct += 1 + * + * del_aspect_bpr = lambda_d * z # <<<<<<<<<<<<<< + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): + */ + __pyx_v_del_aspect_bpr = (__pyx_v_lambda_d * __pyx_v_z); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":682 + * + * del_aspect_bpr = lambda_d * z + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< + * for i in range(n_user_factors): + * for j in range(n_item_factors): + */ + __pyx_v_aspect_bpr_loss = (__pyx_v_aspect_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":683 + * del_aspect_bpr = lambda_d * z + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] + */ + __pyx_t_3 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":684 + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): + */ + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":685 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + */ + __pyx_t_23 = __pyx_v_j_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_v_a_ji = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":686 + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + */ + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":687 + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + */ + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":688 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_20 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_a_ji) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":689 + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji + */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_20 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_k; + __pyx_t_21 = __pyx_v_j_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_20 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":690 + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji + * + */ + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i_idx; + __pyx_t_21 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_20 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":691 + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji # <<<<<<<<<<<<<< + * + * # update params with AdaGrad + */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_20 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji); + } + } + } + goto __pyx_L61; + __pyx_L51_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L60; + __pyx_L60:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates2) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_a_idx; + __pyx_parallel_temp2 = __pyx_v_a_ji; + __pyx_parallel_temp3 = __pyx_v_aspect_bpr_loss; + __pyx_parallel_temp4 = __pyx_v_aspect_correct; + __pyx_parallel_temp5 = __pyx_v_del_aspect_bpr; + __pyx_parallel_temp6 = __pyx_v_i; + __pyx_parallel_temp7 = __pyx_v_i_idx; + __pyx_parallel_temp8 = __pyx_v_idx; + __pyx_parallel_temp9 = __pyx_v_j; + __pyx_parallel_temp10 = __pyx_v_j_idx; + __pyx_parallel_temp11 = __pyx_v_k; + __pyx_parallel_temp12 = __pyx_v_pred; + __pyx_parallel_temp13 = __pyx_v_u_idx; + __pyx_parallel_temp14 = __pyx_v_z; + } + __pyx_L61:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_a_idx = __pyx_parallel_temp1; + __pyx_v_a_ji = __pyx_parallel_temp2; + __pyx_v_aspect_bpr_loss = __pyx_parallel_temp3; + __pyx_v_aspect_correct = __pyx_parallel_temp4; + __pyx_v_del_aspect_bpr = __pyx_parallel_temp5; + __pyx_v_i = __pyx_parallel_temp6; + __pyx_v_i_idx = __pyx_parallel_temp7; + __pyx_v_idx = __pyx_parallel_temp8; + __pyx_v_j = __pyx_parallel_temp9; + __pyx_v_j_idx = __pyx_parallel_temp10; + __pyx_v_k = __pyx_parallel_temp11; + __pyx_v_pred = __pyx_parallel_temp12; + __pyx_v_u_idx = __pyx_parallel_temp13; + __pyx_v_z = __pyx_parallel_temp14; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } + goto __pyx_L63; + __pyx_L8_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L63; + __pyx_L63:; + #ifdef _OPENMP + Py_END_ALLOW_THREADS + #else +{ +#ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #endif /* _OPENMP */ + /* Clean up any temporaries */ + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + #ifndef _OPENMP +} +#endif /* _OPENMP */ + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L4_error; + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":572 + /* "cornac/models/comparer/recom_comparer_sub.pyx":568 + * del_a_reg.fill(0) + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * thread_id = get_thread_num() * for _ in prange(num_samples, schedule='guided'): - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uia->__pyx_vtab)->generate(__pyx_v_rng_pos_uia, __pyx_v_thread_id); + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L5; + } + __pyx_L4_error: { + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L1_error; + } + __pyx_L5:; + } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":573 - * # get user item aspect element - * idx = rng_pos_uia.generate(thread_id) - * u_idx = X_uids[idx] # <<<<<<<<<<<<<< - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":694 + * + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): */ - __pyx_t_8 = __pyx_v_idx; - __pyx_v_u_idx = (*((long *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_8 * __pyx_v_X_uids.strides[0]) ))); + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_27, __pyx_t_3, __pyx_t_30, __pyx_t_9) num_threads(__pyx_v_n_threads) + #endif /* _OPENMP */ + { - /* "cornac/models/comparer/recom_comparer_sub.pyx":574 - * idx = rng_pos_uia.generate(thread_id) - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] # <<<<<<<<<<<<<< - * a_idx = X_aids[idx] - * score = X[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":695 + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): + * for i in prange(n_user_factors, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_users): + * if del_u[j, i] != 0: */ - __pyx_t_8 = __pyx_v_idx; - __pyx_v_i_idx = (*((long *) ( /* dim=0 */ (__pyx_v_X_iids.data + __pyx_t_8 * __pyx_v_X_iids.strides[0]) ))); + __pyx_t_3 = __pyx_v_n_user_factors; + { + __pyx_t_12 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_12 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_12; __pyx_t_10++){ + { + __pyx_v_i = (short)(0 + 1 * __pyx_t_10); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((short)0xbad0bad0); + __pyx_v_k = ((short)0xbad0bad0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":575 - * u_idx = X_uids[idx] - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] # <<<<<<<<<<<<<< - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + /* "cornac/models/comparer/recom_comparer_sub.pyx":696 + * with nogil, parallel(num_threads=n_threads): + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): # <<<<<<<<<<<<<< + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] */ - __pyx_t_8 = __pyx_v_idx; - __pyx_v_a_idx = (*((long *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_8 * __pyx_v_X_aids.strides[0]) ))); + __pyx_t_13 = __pyx_v_n_users; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { + __pyx_v_j = __pyx_t_11; - /* "cornac/models/comparer/recom_comparer_sub.pyx":576 - * i_idx = X_iids[idx] - * a_idx = X_aids[idx] - * score = X[idx] # <<<<<<<<<<<<<< - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) - * loss += (pred - score) * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":697 + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): + * if del_u[j, i] != 0: # <<<<<<<<<<<<<< + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] */ - __pyx_t_8 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_8 * __pyx_v_X.strides[0]) ))); + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":577 - * a_idx = X_aids[idx] - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":698 + * for j in range(n_users): + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] # <<<<<<<<<<<<<< + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + */ + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_u_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) ))))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":697 + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): + * if del_u[j, i] != 0: # <<<<<<<<<<<<<< + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + */ + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":699 + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] # <<<<<<<<<<<<<< + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: + */ + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_19 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_U.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":700 + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] # <<<<<<<<<<<<<< + * if U[j, i] < 0: + * U[j, i] = 0 + */ + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_24 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_U.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[1].strides))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":701 + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: # <<<<<<<<<<<<<< + * U[j, i] = 0 * */ - __pyx_v_pred = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_27 = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":578 - * score = X[idx] - * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":702 + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: + * U[j, i] = 0 # <<<<<<<<<<<<<< * - * del_sqerror = 2 * (pred - score) + * for j in range(n_item_factors): */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )) = 0.0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":580 - * loss += (pred - score) * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":701 + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: # <<<<<<<<<<<<<< + * U[j, i] = 0 * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< - * for i in range(n_user_factors): - * for j in range(n_item_factors): */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":581 + /* "cornac/models/comparer/recom_comparer_sub.pyx":704 + * U[j, i] = 0 * - * del_sqerror = 2 * (pred - score) - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: */ - __pyx_t_9 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_9; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __pyx_t_13 = __pyx_v_n_item_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { + __pyx_v_j = __pyx_t_11; - /* "cornac/models/comparer/recom_comparer_sub.pyx":582 - * del_sqerror = 2 * (pred - score) - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":705 + * + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __pyx_t_16 = __pyx_v_n_aspect_factors; + __pyx_t_30 = __pyx_t_16; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_30; __pyx_t_14+=1) { + __pyx_v_k = __pyx_t_14; - /* "cornac/models/comparer/recom_comparer_sub.pyx":583 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":706 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":584 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":707 + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] */ - __pyx_t_8 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_i_idx; - __pyx_t_20 = __pyx_v_j; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_k; __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_8 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_20 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) ))))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":585 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":706 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] */ - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_i_idx; - __pyx_t_18 = __pyx_v_j; - __pyx_t_8 = __pyx_v_a_idx; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_8 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":586 - * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":708 + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: + */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_22 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G1.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":709 + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< + * if G1[i, j, k] < 0: + * G1[i, j, k] = 0 + */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_22 * __pyx_v_G1.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_23 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_25 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_9 * __pyx_v_sgrad_G1.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":710 + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< + * G1[i, j, k] = 0 * */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_24 * __pyx_v_G1.strides[2]) ))) < 0.0); + if (__pyx_t_27) { + + /* "cornac/models/comparer/recom_comparer_sub.pyx":711 + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: + * G1[i, j, k] = 0 # <<<<<<<<<<<<<< + * + * for j in range(n_aspect_factors): + */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; __pyx_t_18 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_k; - __pyx_t_23 = __pyx_v_i_idx; - __pyx_t_24 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_25 * __pyx_v_G1.strides[0]) ) + __pyx_t_8 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_20 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )) = 0.0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":587 - * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] - * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":710 + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< + * G1[i, j, k] = 0 * - * # get user aspect opinion element */ - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_8 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_j; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_8 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))); } } } - /* "cornac/models/comparer/recom_comparer_sub.pyx":590 + /* "cornac/models/comparer/recom_comparer_sub.pyx":713 + * G1[i, j, k] = 0 * - * # get user aspect opinion element - * idx = rng_pos_uao.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: + */ + __pyx_t_13 = __pyx_v_n_aspect_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { + __pyx_v_j = __pyx_t_11; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":714 + * + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uao->__pyx_vtab)->generate(__pyx_v_rng_pos_uao, __pyx_v_thread_id); + __pyx_t_16 = __pyx_v_n_opinion_factors; + __pyx_t_30 = __pyx_t_16; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_30; __pyx_t_14+=1) { + __pyx_v_k = __pyx_t_14; - /* "cornac/models/comparer/recom_comparer_sub.pyx":591 - * # get user aspect opinion element - * idx = rng_pos_uao.generate(thread_id) - * u_idx = YU_uids[idx] # <<<<<<<<<<<<<< - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":715 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_u_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YU_uids.data + __pyx_t_25 * __pyx_v_YU_uids.strides[0]) ))); + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":592 - * idx = rng_pos_uao.generate(thread_id) - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] # <<<<<<<<<<<<<< - * o_idx = YU_oids[idx] - * score = YU[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":716 + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_a_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YU_aids.data + __pyx_t_25 * __pyx_v_YU_aids.strides[0]) ))); + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) ))))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":593 - * u_idx = YU_uids[idx] - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] # <<<<<<<<<<<<<< - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + /* "cornac/models/comparer/recom_comparer_sub.pyx":715 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_o_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YU_oids.data + __pyx_t_25 * __pyx_v_YU_oids.strides[0]) ))); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":594 - * a_idx = YU_aids[idx] - * o_idx = YU_oids[idx] - * score = YU[idx] # <<<<<<<<<<<<<< - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":717 + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: */ - __pyx_t_25 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_YU.data + __pyx_t_25 * __pyx_v_YU.strides[0]) ))); + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_20 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_22 * __pyx_v_sgrad_G2.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":595 - * o_idx = YU_oids[idx] - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":718 + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< + * if G2[i, j, k] < 0: + * G2[i, j, k] = 0 */ - __pyx_v_pred = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G2, __pyx_v_n_user_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_U, __pyx_v_A, __pyx_v_O, __pyx_v_u_idx, __pyx_v_a_idx, __pyx_v_o_idx); + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_22 * __pyx_v_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_G2.strides[1]) ) + __pyx_t_20 * __pyx_v_G2.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_24 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G2.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":596 - * score = YU[idx] - * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":719 + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< + * G2[i, j, k] = 0 * - * del_sqerror = 2 * (pred - score) */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_27 = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_23 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) ))) < 0.0); + if (__pyx_t_27) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":598 - * loss += (pred - score) * (pred - score) - * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":720 + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: + * G2[i, j, k] = 0 # <<<<<<<<<<<<<< * - * for i in range(n_user_factors): + * for i in prange(n_item_factors, schedule='guided'): */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) )) = 0.0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":600 - * del_sqerror = 2 * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":719 + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< + * G2[i, j, k] = 0 * - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): */ - __pyx_t_9 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_9; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + } + } + } + } + } + } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":601 + /* "cornac/models/comparer/recom_comparer_sub.pyx":722 + * G2[i, j, k] = 0 * - * for i in range(n_user_factors): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - */ - __pyx_t_12 = __pyx_v_n_aspect_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":602 - * for i in range(n_user_factors): - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * for i in prange(n_item_factors, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_items): + * if del_i[j, i] != 0: */ - __pyx_t_15 = __pyx_v_n_opinion_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __pyx_t_12 = __pyx_v_n_item_factors; + { + __pyx_t_3 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_3 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_3; __pyx_t_10++){ + { + __pyx_v_i = (short)(0 + 1 * __pyx_t_10); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((short)0xbad0bad0); + __pyx_v_k = ((short)0xbad0bad0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":603 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":723 + * + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): # <<<<<<<<<<<<<< + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] */ - __pyx_t_25 = __pyx_v_u_idx; - __pyx_t_8 = __pyx_v_i; - __pyx_t_18 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_j; - __pyx_t_20 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_8 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); + __pyx_t_13 = __pyx_v_n_items; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { + __pyx_v_j = __pyx_t_11; - /* "cornac/models/comparer/recom_comparer_sub.pyx":604 - * for k in range(n_opinion_factors): - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":724 + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): + * if del_i[j, i] != 0: # <<<<<<<<<<<<<< + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] */ - __pyx_t_21 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_18 = __pyx_v_a_idx; - __pyx_t_8 = __pyx_v_j; - __pyx_t_25 = __pyx_v_o_idx; - __pyx_t_24 = __pyx_v_k; - __pyx_t_23 = __pyx_v_u_idx; - __pyx_t_22 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_8 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_25 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )))); + __pyx_t_23 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":605 - * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":725 + * for j in range(n_items): + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] # <<<<<<<<<<<<<< + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_k; - __pyx_t_18 = __pyx_v_u_idx; - __pyx_t_19 = __pyx_v_i; - __pyx_t_20 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - __pyx_t_22 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_24 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_8 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) ))))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":606 - * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< - * - * # get item aspect opinion element + /* "cornac/models/comparer/recom_comparer_sub.pyx":724 + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): + * if del_i[j, i] != 0: # <<<<<<<<<<<<<< + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] */ - __pyx_t_21 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_18 = __pyx_v_u_idx; - __pyx_t_8 = __pyx_v_i; - __pyx_t_25 = __pyx_v_a_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_o_idx; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_8 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_24 * __pyx_v_A.strides[1]) )))); - } } - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":609 - * - * # get item aspect opinion element - * idx = rng_pos_iao.generate(thread_id) # <<<<<<<<<<<<<< - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":726 + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] # <<<<<<<<<<<<<< + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_iao->__pyx_vtab)->generate(__pyx_v_rng_pos_iao, __pyx_v_thread_id); + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_24 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_I.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":610 - * # get item aspect opinion element - * idx = rng_pos_iao.generate(thread_id) - * i_idx = YI_iids[idx] # <<<<<<<<<<<<<< - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":727 + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] # <<<<<<<<<<<<<< + * if I[j, i] < 0: + * I[j, i] = 0 */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_i_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YI_iids.data + __pyx_t_24 * __pyx_v_YI_iids.strides[0]) ))); + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_25 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_I.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[1].strides))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":611 - * idx = rng_pos_iao.generate(thread_id) - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] # <<<<<<<<<<<<<< - * o_idx = YI_oids[idx] - * score = YI[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":728 + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: # <<<<<<<<<<<<<< + * I[j, i] = 0 + * */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_a_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YI_aids.data + __pyx_t_24 * __pyx_v_YI_aids.strides[0]) ))); + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_27 = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_18 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":612 - * i_idx = YI_iids[idx] - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] # <<<<<<<<<<<<<< - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + /* "cornac/models/comparer/recom_comparer_sub.pyx":729 + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: + * I[j, i] = 0 # <<<<<<<<<<<<<< + * + * for j in range(n_aspect_factors): */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_o_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YI_oids.data + __pyx_t_24 * __pyx_v_YI_oids.strides[0]) ))); + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )) = 0.0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":613 - * a_idx = YI_aids[idx] - * o_idx = YI_oids[idx] - * score = YI[idx] # <<<<<<<<<<<<<< - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":728 + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: # <<<<<<<<<<<<<< + * I[j, i] = 0 + * */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_YI.data + __pyx_t_24 * __pyx_v_YI.strides[0]) ))); + } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":614 - * o_idx = YI_oids[idx] - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) # <<<<<<<<<<<<<< - * loss += (pred - score) * (pred - score) + /* "cornac/models/comparer/recom_comparer_sub.pyx":731 + * I[j, i] = 0 * + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: */ - __pyx_v_pred = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G3, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_i_idx, __pyx_v_a_idx, __pyx_v_o_idx); + __pyx_t_13 = __pyx_v_n_aspect_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { + __pyx_v_j = __pyx_t_11; - /* "cornac/models/comparer/recom_comparer_sub.pyx":615 - * score = YI[idx] - * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) - * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":732 * - * del_sqerror = 2 * (pred - score) + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); + __pyx_t_16 = __pyx_v_n_opinion_factors; + __pyx_t_30 = __pyx_t_16; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_30; __pyx_t_14+=1) { + __pyx_v_k = __pyx_t_14; - /* "cornac/models/comparer/recom_comparer_sub.pyx":617 - * loss += (pred - score) * (pred - score) - * - * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): + /* "cornac/models/comparer/recom_comparer_sub.pyx":733 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] */ - __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":618 - * - * del_sqerror = 2 * (pred - score) - * for i in range(n_item_factors): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): + /* "cornac/models/comparer/recom_comparer_sub.pyx":734 + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] */ - __pyx_t_9 = __pyx_v_n_item_factors; - __pyx_t_10 = __pyx_t_9; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) ))))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":619 - * del_sqerror = 2 * (pred - score) - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":733 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] */ - __pyx_t_12 = __pyx_v_n_aspect_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":620 - * for i in range(n_item_factors): - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":735 + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: */ - __pyx_t_15 = __pyx_v_n_opinion_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_22 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G3.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":621 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":736 + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< + * if G3[i, j, k] < 0: + * G3[i, j, k] = 0 */ - __pyx_t_24 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_8 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_o_idx; - __pyx_t_20 = __pyx_v_k; - __pyx_t_21 = __pyx_v_i; - __pyx_t_22 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_24 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_8 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_G3.strides[1]) ) + __pyx_t_22 * __pyx_v_G3.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_23 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G3.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":622 - * for k in range(n_opinion_factors): - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":737 + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< + * G3[i, j, k] = 0 + * */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_8 = __pyx_v_a_idx; - __pyx_t_25 = __pyx_v_j; - __pyx_t_24 = __pyx_v_o_idx; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i_idx; - __pyx_t_21 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_8 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_23 * __pyx_v_O.strides[1]) )))); + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_27 = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_19 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) ))) < 0.0); + if (__pyx_t_27) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":623 - * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":738 + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: + * G3[i, j, k] = 0 # <<<<<<<<<<<<<< * + * for i in prange(n_aspects + 1, schedule='guided'): */ - __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_i; __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_8 = __pyx_v_i_idx; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_o_idx; - __pyx_t_20 = __pyx_v_k; - __pyx_t_21 = __pyx_v_a_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_23 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_8 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); + __pyx_t_19 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) )) = 0.0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":624 - * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] - * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":737 + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< + * G3[i, j, k] = 0 * - * for _ in prange(num_bpr_samples, schedule='guided'): */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_8 = __pyx_v_i_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_j; - __pyx_t_22 = __pyx_v_o_idx; - __pyx_t_21 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_8 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); } } } @@ -37324,738 +36897,2170 @@ static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11Compa } } - /* "cornac/models/comparer/recom_comparer_sub.pyx":626 - * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":740 + * G3[i, j, k] = 0 * - * for _ in prange(num_bpr_samples, schedule='guided'): # <<<<<<<<<<<<<< - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] + * for i in prange(n_aspects + 1, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: */ - __pyx_t_4 = __pyx_v_num_bpr_samples; - if ((1 == 0)) abort(); + __pyx_t_3 = (__pyx_v_n_aspects + 1); { - __pyx_t_3 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_3 > 0) + __pyx_t_12 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_12 > 0) { #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_del_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_i_ij) lastprivate(__pyx_v_i_score) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_j_score) lastprivate(__pyx_v_jdx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_s) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) #endif /* _OPENMP */ - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_3; __pyx_t_7++){ + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_12; __pyx_t_10++){ { - __pyx_v__ = (long)(0 + 1 * __pyx_t_7); + __pyx_v_i = (short)(0 + 1 * __pyx_t_10); /* Initialize private variables to invalid values */ - __pyx_v_del_bpr = ((double)__PYX_NAN()); - __pyx_v_i = ((long)0xbad0bad0); - __pyx_v_i_idx = ((long)0xbad0bad0); - __pyx_v_i_ij = ((double)__PYX_NAN()); - __pyx_v_i_score = ((double)__PYX_NAN()); - __pyx_v_idx = ((long)0xbad0bad0); - __pyx_v_j = ((long)0xbad0bad0); - __pyx_v_j_idx = ((long)0xbad0bad0); - __pyx_v_j_score = ((double)__PYX_NAN()); - __pyx_v_jdx = ((long)0xbad0bad0); - __pyx_v_k = ((long)0xbad0bad0); - __pyx_v_pred = ((double)__PYX_NAN()); - __pyx_v_s = ((long)0xbad0bad0); - __pyx_v_u_idx = ((long)0xbad0bad0); - __pyx_v_z = ((double)__PYX_NAN()); + __pyx_v_j = ((short)0xbad0bad0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":627 + /* "cornac/models/comparer/recom_comparer_sub.pyx":741 * - * for _ in prange(num_bpr_samples, schedule='guided'): - * idx = rng_pos.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos->__pyx_vtab)->generate(__pyx_v_rng_pos, __pyx_v_thread_id); + __pyx_t_13 = __pyx_v_n_aspect_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { + __pyx_v_j = __pyx_t_11; - /* "cornac/models/comparer/recom_comparer_sub.pyx":628 - * for _ in prange(num_bpr_samples, schedule='guided'): - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] # <<<<<<<<<<<<<< - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) + /* "cornac/models/comparer/recom_comparer_sub.pyx":742 + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: # <<<<<<<<<<<<<< + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_u_idx = (*((long *) ( /* dim=0 */ (__pyx_v_user_ids.data + __pyx_t_23 * __pyx_v_user_ids.strides[0]) ))); + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":629 - * idx = rng_pos.generate(thread_id) - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] # <<<<<<<<<<<<<< - * jdx = rng_neg.generate(thread_id) - * j_idx = neg_item_ids[jdx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":743 + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] # <<<<<<<<<<<<<< + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_i_idx = (*((long *) ( /* dim=0 */ (__pyx_v_item_ids.data + __pyx_t_23 * __pyx_v_item_ids.strides[0]) ))); + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) ))))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":630 - * u_idx = user_ids[idx] - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) # <<<<<<<<<<<<<< - * j_idx = neg_item_ids[jdx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":742 + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: # <<<<<<<<<<<<<< + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + */ + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":744 + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] # <<<<<<<<<<<<<< + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: + */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_23 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_A.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":745 + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] # <<<<<<<<<<<<<< + * if A[i, j] < 0: + * A[i, j] = 0 + */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_24 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_A.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[1].strides))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":746 + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: # <<<<<<<<<<<<<< + * A[i, j] = 0 * */ - __pyx_v_jdx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_neg->__pyx_vtab)->generate(__pyx_v_rng_neg, __pyx_v_thread_id); + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":631 - * i_idx = item_ids[idx] - * jdx = rng_neg.generate(thread_id) - * j_idx = neg_item_ids[jdx] # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":747 + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: + * A[i, j] = 0 # <<<<<<<<<<<<<< * - * s = 1 + * for i in prange(n_opinions, schedule='guided'): */ - __pyx_t_23 = __pyx_v_jdx; - __pyx_v_j_idx = (*((long *) ( /* dim=0 */ (__pyx_v_neg_item_ids.data + __pyx_t_23 * __pyx_v_neg_item_ids.strides[0]) ))); + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )) = 0.0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":633 - * j_idx = neg_item_ids[jdx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":746 + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: # <<<<<<<<<<<<<< + * A[i, j] = 0 * - * s = 1 # <<<<<<<<<<<<<< - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): */ - __pyx_v_s = 1; + } + } + } + } + } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":635 - * s = 1 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + /* "cornac/models/comparer/recom_comparer_sub.pyx":749 + * A[i, j] = 0 + * + * for i in prange(n_opinions, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: */ - __pyx_t_26 = (__pyx_fuse_2__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero(__pyx_v_indptr, __pyx_v_item_ids, __pyx_v_u_idx, __pyx_v_j_idx) != 0); - if (__pyx_t_26) { + __pyx_t_12 = __pyx_v_n_opinions; + { + __pyx_t_3 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_3 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_3; __pyx_t_10++){ + { + __pyx_v_i = (short)(0 + 1 * __pyx_t_10); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((short)0xbad0bad0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":636 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] # <<<<<<<<<<<<<< - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: + /* "cornac/models/comparer/recom_comparer_sub.pyx":750 + * + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] */ - __pyx_v_i_score = (__pyx_v_rating_dict->my_map[__pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_i_idx)]); + __pyx_t_13 = __pyx_v_n_opinion_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { + __pyx_v_j = __pyx_t_11; - /* "cornac/models/comparer/recom_comparer_sub.pyx":637 - * if has_non_zero(indptr, item_ids, u_idx, j_idx): - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] # <<<<<<<<<<<<<< - * if i_score == j_score: - * skipped += 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":751 + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: # <<<<<<<<<<<<<< + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] */ - __pyx_v_j_score = (__pyx_v_rating_dict->my_map[__pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_j_idx)]); + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":638 - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: # <<<<<<<<<<<<<< - * skipped += 1 - * continue + /* "cornac/models/comparer/recom_comparer_sub.pyx":752 + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] # <<<<<<<<<<<<<< + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] */ - __pyx_t_26 = ((__pyx_v_i_score == __pyx_v_j_score) != 0); - if (__pyx_t_26) { + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_o_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) ))))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":639 - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: - * skipped += 1 # <<<<<<<<<<<<<< - * continue - * elif i_score < j_score: + /* "cornac/models/comparer/recom_comparer_sub.pyx":751 + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: # <<<<<<<<<<<<<< + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] */ - __pyx_v_skipped = (__pyx_v_skipped + 1); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":640 - * if i_score == j_score: - * skipped += 1 - * continue # <<<<<<<<<<<<<< - * elif i_score < j_score: - * s = -1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":753 + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] # <<<<<<<<<<<<<< + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: */ - goto __pyx_L34_continue; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_9 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_O.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":638 - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - * if i_score == j_score: # <<<<<<<<<<<<<< - * skipped += 1 - * continue + /* "cornac/models/comparer/recom_comparer_sub.pyx":754 + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] # <<<<<<<<<<<<<< + * if O[i, j] < 0: + * O[i, j] = 0 */ - } + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_23 * __pyx_v_O.strides[0]) ) + __pyx_t_9 * __pyx_v_O.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_25 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_O.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[1].strides))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":641 - * skipped += 1 - * continue - * elif i_score < j_score: # <<<<<<<<<<<<<< - * s = -1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":755 + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: # <<<<<<<<<<<<<< + * O[i, j] = 0 * */ - __pyx_t_26 = ((__pyx_v_i_score < __pyx_v_j_score) != 0); - if (__pyx_t_26) { + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_27 = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_19 * __pyx_v_O.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":642 - * continue - * elif i_score < j_score: - * s = -1 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":756 + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: + * O[i, j] = 0 # <<<<<<<<<<<<<< * - * pred = ( + * return correct, skipped, loss, bpr_loss */ - __pyx_v_s = -1L; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )) = 0.0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":641 - * skipped += 1 - * continue - * elif i_score < j_score: # <<<<<<<<<<<<<< - * s = -1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":755 + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: # <<<<<<<<<<<<<< + * O[i, j] = 0 * */ } - - /* "cornac/models/comparer/recom_comparer_sub.pyx":635 - * s = 1 - * # if the user has rated the item j, change sign if item j > item i - * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< - * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] - * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] - */ } + } + } + } + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":647 - * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) - * ) * s # <<<<<<<<<<<<<< - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: + /* "cornac/models/comparer/recom_comparer_sub.pyx":694 + * + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): */ - __pyx_v_pred = ((__pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_n_aspects) - __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_n_aspects)) * __pyx_v_s); + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L66; + } + __pyx_L66:; + } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":648 - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) - * ) * s - * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< - * if z < .5: - * correct += 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":758 + * O[i, j] = 0 + * + * return correct, skipped, loss, bpr_loss # <<<<<<<<<<<<<< + * + * def rank(self, user_idx, item_indices=None): */ - __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_correct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v_skipped); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_31 = PyFloat_FromDouble(__pyx_v_bpr_loss); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_31); + __pyx_t_32 = PyTuple_New(4); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_32); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_32, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_32, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_32, 2, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_31); + PyTuple_SET_ITEM(__pyx_t_32, 3, __pyx_t_31); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_6 = 0; + __pyx_t_31 = 0; + __pyx_r = __pyx_t_32; + __pyx_t_32 = 0; + goto __pyx_L0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":649 - * ) * s - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * correct += 1 - * del_bpr = ld_bpr * z * s + /* "cornac/models/comparer/recom_comparer_sub.pyx":482 + * return self + * + * @cython.cdivision(True) # <<<<<<<<<<<<<< + * @cython.boundscheck(False) + * @cython.wraparound(False) */ - __pyx_t_26 = ((__pyx_v_z < .5) != 0); - if (__pyx_t_26) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":650 - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: - * correct += 1 # <<<<<<<<<<<<<< - * del_bpr = ld_bpr * z * s - * - */ - __pyx_v_correct = (__pyx_v_correct + 1); + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_31); + __Pyx_XDECREF(__pyx_t_32); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_fuse_0_1__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_17_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_fuse_0_1__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_17_fit_mter = {"__pyx_fuse_0_1_fit_mter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0_1__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_17_fit_mter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter}; +static PyObject *__pyx_fuse_0_1__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_17_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg = 0; + int __pyx_v_n_threads; + __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; + struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict = 0; + __Pyx_memviewslice __pyx_v_user_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_neg_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_indptr = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_p_user_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_earlier_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_later_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_aspect_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_O = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_U = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_I = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_O = { 0, 0, { 0 }, { 0 }, { 0 } }; + PyArrayObject *__pyx_v_del_g1 = 0; + PyArrayObject *__pyx_v_del_g2 = 0; + PyArrayObject *__pyx_v_del_g3 = 0; + PyArrayObject *__pyx_v_del_u = 0; + PyArrayObject *__pyx_v_del_i = 0; + PyArrayObject *__pyx_v_del_a = 0; + PyArrayObject *__pyx_v_del_o = 0; + PyArrayObject *__pyx_v_del_g1_reg = 0; + PyArrayObject *__pyx_v_del_g2_reg = 0; + PyArrayObject *__pyx_v_del_g3_reg = 0; + PyArrayObject *__pyx_v_del_u_reg = 0; + PyArrayObject *__pyx_v_del_i_reg = 0; + PyArrayObject *__pyx_v_del_a_reg = 0; + PyArrayObject *__pyx_v_del_o_reg = 0; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_fit_mter (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_rng_pos_uia,&__pyx_n_s_rng_pos_uao,&__pyx_n_s_rng_pos_iao,&__pyx_n_s_rng_pos_pair,&__pyx_n_s_rng_pos,&__pyx_n_s_rng_neg,&__pyx_n_s_n_threads,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_iids,&__pyx_n_s_X_aids,&__pyx_n_s_YU,&__pyx_n_s_YU_uids,&__pyx_n_s_YU_aids,&__pyx_n_s_YU_oids,&__pyx_n_s_YI,&__pyx_n_s_YI_iids,&__pyx_n_s_YI_aids,&__pyx_n_s_YI_oids,&__pyx_n_s_rating_dict,&__pyx_n_s_user_ids,&__pyx_n_s_item_ids,&__pyx_n_s_neg_item_ids,&__pyx_n_s_indptr,&__pyx_n_s_p_user_indices,&__pyx_n_s_earlier_indices,&__pyx_n_s_later_indices,&__pyx_n_s_aspect_indices,&__pyx_n_s_pair_counts,&__pyx_n_s_G1,&__pyx_n_s_G2,&__pyx_n_s_G3,&__pyx_n_s_U,&__pyx_n_s_I,&__pyx_n_s_A,&__pyx_n_s_O,&__pyx_n_s_sgrad_G1,&__pyx_n_s_sgrad_G2,&__pyx_n_s_sgrad_G3,&__pyx_n_s_sgrad_U,&__pyx_n_s_sgrad_I,&__pyx_n_s_sgrad_A,&__pyx_n_s_sgrad_O,&__pyx_n_s_del_g1,&__pyx_n_s_del_g2,&__pyx_n_s_del_g3,&__pyx_n_s_del_u,&__pyx_n_s_del_i,&__pyx_n_s_del_a,&__pyx_n_s_del_o,&__pyx_n_s_del_g1_reg,&__pyx_n_s_del_g2_reg,&__pyx_n_s_del_g3_reg,&__pyx_n_s_del_u_reg,&__pyx_n_s_del_i_reg,&__pyx_n_s_del_a_reg,&__pyx_n_s_del_o_reg,0}; + PyObject* values[58] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 58: values[57] = __Pyx_Arg_VARARGS(__pyx_args, 57); + CYTHON_FALLTHROUGH; + case 57: values[56] = __Pyx_Arg_VARARGS(__pyx_args, 56); + CYTHON_FALLTHROUGH; + case 56: values[55] = __Pyx_Arg_VARARGS(__pyx_args, 55); + CYTHON_FALLTHROUGH; + case 55: values[54] = __Pyx_Arg_VARARGS(__pyx_args, 54); + CYTHON_FALLTHROUGH; + case 54: values[53] = __Pyx_Arg_VARARGS(__pyx_args, 53); + CYTHON_FALLTHROUGH; + case 53: values[52] = __Pyx_Arg_VARARGS(__pyx_args, 52); + CYTHON_FALLTHROUGH; + case 52: values[51] = __Pyx_Arg_VARARGS(__pyx_args, 51); + CYTHON_FALLTHROUGH; + case 51: values[50] = __Pyx_Arg_VARARGS(__pyx_args, 50); + CYTHON_FALLTHROUGH; + case 50: values[49] = __Pyx_Arg_VARARGS(__pyx_args, 49); + CYTHON_FALLTHROUGH; + case 49: values[48] = __Pyx_Arg_VARARGS(__pyx_args, 48); + CYTHON_FALLTHROUGH; + case 48: values[47] = __Pyx_Arg_VARARGS(__pyx_args, 47); + CYTHON_FALLTHROUGH; + case 47: values[46] = __Pyx_Arg_VARARGS(__pyx_args, 46); + CYTHON_FALLTHROUGH; + case 46: values[45] = __Pyx_Arg_VARARGS(__pyx_args, 45); + CYTHON_FALLTHROUGH; + case 45: values[44] = __Pyx_Arg_VARARGS(__pyx_args, 44); + CYTHON_FALLTHROUGH; + case 44: values[43] = __Pyx_Arg_VARARGS(__pyx_args, 43); + CYTHON_FALLTHROUGH; + case 43: values[42] = __Pyx_Arg_VARARGS(__pyx_args, 42); + CYTHON_FALLTHROUGH; + case 42: values[41] = __Pyx_Arg_VARARGS(__pyx_args, 41); + CYTHON_FALLTHROUGH; + case 41: values[40] = __Pyx_Arg_VARARGS(__pyx_args, 40); + CYTHON_FALLTHROUGH; + case 40: values[39] = __Pyx_Arg_VARARGS(__pyx_args, 39); + CYTHON_FALLTHROUGH; + case 39: values[38] = __Pyx_Arg_VARARGS(__pyx_args, 38); + CYTHON_FALLTHROUGH; + case 38: values[37] = __Pyx_Arg_VARARGS(__pyx_args, 37); + CYTHON_FALLTHROUGH; + case 37: values[36] = __Pyx_Arg_VARARGS(__pyx_args, 36); + CYTHON_FALLTHROUGH; + case 36: values[35] = __Pyx_Arg_VARARGS(__pyx_args, 35); + CYTHON_FALLTHROUGH; + case 35: values[34] = __Pyx_Arg_VARARGS(__pyx_args, 34); + CYTHON_FALLTHROUGH; + case 34: values[33] = __Pyx_Arg_VARARGS(__pyx_args, 33); + CYTHON_FALLTHROUGH; + case 33: values[32] = __Pyx_Arg_VARARGS(__pyx_args, 32); + CYTHON_FALLTHROUGH; + case 32: values[31] = __Pyx_Arg_VARARGS(__pyx_args, 31); + CYTHON_FALLTHROUGH; + case 31: values[30] = __Pyx_Arg_VARARGS(__pyx_args, 30); + CYTHON_FALLTHROUGH; + case 30: values[29] = __Pyx_Arg_VARARGS(__pyx_args, 29); + CYTHON_FALLTHROUGH; + case 29: values[28] = __Pyx_Arg_VARARGS(__pyx_args, 28); + CYTHON_FALLTHROUGH; + case 28: values[27] = __Pyx_Arg_VARARGS(__pyx_args, 27); + CYTHON_FALLTHROUGH; + case 27: values[26] = __Pyx_Arg_VARARGS(__pyx_args, 26); + CYTHON_FALLTHROUGH; + case 26: values[25] = __Pyx_Arg_VARARGS(__pyx_args, 25); + CYTHON_FALLTHROUGH; + case 25: values[24] = __Pyx_Arg_VARARGS(__pyx_args, 24); + CYTHON_FALLTHROUGH; + case 24: values[23] = __Pyx_Arg_VARARGS(__pyx_args, 23); + CYTHON_FALLTHROUGH; + case 23: values[22] = __Pyx_Arg_VARARGS(__pyx_args, 22); + CYTHON_FALLTHROUGH; + case 22: values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + CYTHON_FALLTHROUGH; + case 21: values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + CYTHON_FALLTHROUGH; + case 20: values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + CYTHON_FALLTHROUGH; + case 19: values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + CYTHON_FALLTHROUGH; + case 18: values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + CYTHON_FALLTHROUGH; + case 17: values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + CYTHON_FALLTHROUGH; + case 16: values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_uia)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 1); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_uao)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 2); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_iao)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 3); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_pair)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 4); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 5); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_neg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 6); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_threads)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 7); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 8); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 9); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 10); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 11); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 12); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 13); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 14); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 15: + if (likely((values[15] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_oids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 15); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 16: + if (likely((values[16] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 16); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 17: + if (likely((values[17] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 17); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 18: + if (likely((values[18] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 18); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 19: + if (likely((values[19] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_oids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 19); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 20: + if (likely((values[20] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rating_dict)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 20); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 21: + if (likely((values[21] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_user_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 21); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 22: + if (likely((values[22] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_item_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 22); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 23: + if (likely((values[23] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_neg_item_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 23); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 24: + if (likely((values[24] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_indptr)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 24); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 25: + if (likely((values[25] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_p_user_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 25); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 26: + if (likely((values[26] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_earlier_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 26); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 27: + if (likely((values[27] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_later_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 27); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 28: + if (likely((values[28] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_aspect_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 28); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 29: + if (likely((values[29] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pair_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 29); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 30: + if (likely((values[30] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 30); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 31: + if (likely((values[31] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 31); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 32: + if (likely((values[32] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 32); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 33: + if (likely((values[33] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 33); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 34: + if (likely((values[34] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_I)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 34); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 35: + if (likely((values[35] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 35); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 36: + if (likely((values[36] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_O)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 36); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 37: + if (likely((values[37] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 37); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 38: + if (likely((values[38] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 38); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 39: + if (likely((values[39] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 39); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 40: + if (likely((values[40] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_U)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 40); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 41: + if (likely((values[41] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_I)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 41); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 42: + if (likely((values[42] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 42); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 43: + if (likely((values[43] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_O)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 43); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 44: + if (likely((values[44] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 44); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 45: + if (likely((values[45] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 45); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 46: + if (likely((values[46] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 46); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 47: + if (likely((values[47] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_u)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 47); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 48: + if (likely((values[48] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_i)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 48); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 49: + if (likely((values[49] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_a)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 49); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 50: + if (likely((values[50] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_o)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 50); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 51: + if (likely((values[51] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g1_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 51); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 52: + if (likely((values[52] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g2_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 52); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 53: + if (likely((values[53] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g3_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 53); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 54: + if (likely((values[54] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_u_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 54); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 55: + if (likely((values[55] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_i_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 55); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 56: + if (likely((values[56] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_a_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 56); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 57: + if (likely((values[57] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_o_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 57); __PYX_ERR(0, 482, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_fit_mter") < 0)) __PYX_ERR(0, 482, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 58)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + values[22] = __Pyx_Arg_VARARGS(__pyx_args, 22); + values[23] = __Pyx_Arg_VARARGS(__pyx_args, 23); + values[24] = __Pyx_Arg_VARARGS(__pyx_args, 24); + values[25] = __Pyx_Arg_VARARGS(__pyx_args, 25); + values[26] = __Pyx_Arg_VARARGS(__pyx_args, 26); + values[27] = __Pyx_Arg_VARARGS(__pyx_args, 27); + values[28] = __Pyx_Arg_VARARGS(__pyx_args, 28); + values[29] = __Pyx_Arg_VARARGS(__pyx_args, 29); + values[30] = __Pyx_Arg_VARARGS(__pyx_args, 30); + values[31] = __Pyx_Arg_VARARGS(__pyx_args, 31); + values[32] = __Pyx_Arg_VARARGS(__pyx_args, 32); + values[33] = __Pyx_Arg_VARARGS(__pyx_args, 33); + values[34] = __Pyx_Arg_VARARGS(__pyx_args, 34); + values[35] = __Pyx_Arg_VARARGS(__pyx_args, 35); + values[36] = __Pyx_Arg_VARARGS(__pyx_args, 36); + values[37] = __Pyx_Arg_VARARGS(__pyx_args, 37); + values[38] = __Pyx_Arg_VARARGS(__pyx_args, 38); + values[39] = __Pyx_Arg_VARARGS(__pyx_args, 39); + values[40] = __Pyx_Arg_VARARGS(__pyx_args, 40); + values[41] = __Pyx_Arg_VARARGS(__pyx_args, 41); + values[42] = __Pyx_Arg_VARARGS(__pyx_args, 42); + values[43] = __Pyx_Arg_VARARGS(__pyx_args, 43); + values[44] = __Pyx_Arg_VARARGS(__pyx_args, 44); + values[45] = __Pyx_Arg_VARARGS(__pyx_args, 45); + values[46] = __Pyx_Arg_VARARGS(__pyx_args, 46); + values[47] = __Pyx_Arg_VARARGS(__pyx_args, 47); + values[48] = __Pyx_Arg_VARARGS(__pyx_args, 48); + values[49] = __Pyx_Arg_VARARGS(__pyx_args, 49); + values[50] = __Pyx_Arg_VARARGS(__pyx_args, 50); + values[51] = __Pyx_Arg_VARARGS(__pyx_args, 51); + values[52] = __Pyx_Arg_VARARGS(__pyx_args, 52); + values[53] = __Pyx_Arg_VARARGS(__pyx_args, 53); + values[54] = __Pyx_Arg_VARARGS(__pyx_args, 54); + values[55] = __Pyx_Arg_VARARGS(__pyx_args, 55); + values[56] = __Pyx_Arg_VARARGS(__pyx_args, 56); + values[57] = __Pyx_Arg_VARARGS(__pyx_args, 57); + } + __pyx_v_self = values[0]; + __pyx_v_rng_pos_uia = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[1]); + __pyx_v_rng_pos_uao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[2]); + __pyx_v_rng_pos_iao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[3]); + __pyx_v_rng_pos_pair = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[4]); + __pyx_v_rng_pos = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[5]); + __pyx_v_rng_neg = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[6]); + __pyx_v_n_threads = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_n_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 493, __pyx_L3_error) + __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_iids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_YU = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_uids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_aids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_oids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YI = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_iids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_aids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_oids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_rating_dict = ((struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *)values[20]); + __pyx_v_user_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_user_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[22], PyBUF_WRITABLE); if (unlikely(!__pyx_v_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_neg_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[23], PyBUF_WRITABLE); if (unlikely(!__pyx_v_neg_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_indptr = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[24], PyBUF_WRITABLE); if (unlikely(!__pyx_v_indptr.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_p_user_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[25], PyBUF_WRITABLE); if (unlikely(!__pyx_v_p_user_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_earlier_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[26], PyBUF_WRITABLE); if (unlikely(!__pyx_v_earlier_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_later_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[27], PyBUF_WRITABLE); if (unlikely(!__pyx_v_later_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_aspect_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[28], PyBUF_WRITABLE); if (unlikely(!__pyx_v_aspect_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_pair_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[29], PyBUF_WRITABLE); if (unlikely(!__pyx_v_pair_counts.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[30], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G1.memview)) __PYX_ERR(0, 500, __pyx_L3_error) + __pyx_v_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[31], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G2.memview)) __PYX_ERR(0, 501, __pyx_L3_error) + __pyx_v_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[32], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G3.memview)) __PYX_ERR(0, 502, __pyx_L3_error) + __pyx_v_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[33], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U.memview)) __PYX_ERR(0, 503, __pyx_L3_error) + __pyx_v_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[34], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I.memview)) __PYX_ERR(0, 504, __pyx_L3_error) + __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[35], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 505, __pyx_L3_error) + __pyx_v_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[36], PyBUF_WRITABLE); if (unlikely(!__pyx_v_O.memview)) __PYX_ERR(0, 506, __pyx_L3_error) + __pyx_v_sgrad_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[37], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G1.memview)) __PYX_ERR(0, 507, __pyx_L3_error) + __pyx_v_sgrad_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[38], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G2.memview)) __PYX_ERR(0, 508, __pyx_L3_error) + __pyx_v_sgrad_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[39], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G3.memview)) __PYX_ERR(0, 509, __pyx_L3_error) + __pyx_v_sgrad_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[40], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_U.memview)) __PYX_ERR(0, 510, __pyx_L3_error) + __pyx_v_sgrad_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[41], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_I.memview)) __PYX_ERR(0, 511, __pyx_L3_error) + __pyx_v_sgrad_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[42], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_A.memview)) __PYX_ERR(0, 512, __pyx_L3_error) + __pyx_v_sgrad_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[43], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_O.memview)) __PYX_ERR(0, 513, __pyx_L3_error) + __pyx_v_del_g1 = ((PyArrayObject *)values[44]); + __pyx_v_del_g2 = ((PyArrayObject *)values[45]); + __pyx_v_del_g3 = ((PyArrayObject *)values[46]); + __pyx_v_del_u = ((PyArrayObject *)values[47]); + __pyx_v_del_i = ((PyArrayObject *)values[48]); + __pyx_v_del_a = ((PyArrayObject *)values[49]); + __pyx_v_del_o = ((PyArrayObject *)values[50]); + __pyx_v_del_g1_reg = ((PyArrayObject *)values[51]); + __pyx_v_del_g2_reg = ((PyArrayObject *)values[52]); + __pyx_v_del_g3_reg = ((PyArrayObject *)values[53]); + __pyx_v_del_u_reg = ((PyArrayObject *)values[54]); + __pyx_v_del_i_reg = ((PyArrayObject *)values[55]); + __pyx_v_del_a_reg = ((PyArrayObject *)values[56]); + __pyx_v_del_o_reg = ((PyArrayObject *)values[57]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, __pyx_nargs); __PYX_ERR(0, 482, __pyx_L3_error) + __pyx_L3_error:; + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_user_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_neg_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_indptr, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_p_user_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_earlier_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_later_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_aspect_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_pair_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_O, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_O, 1); + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uia), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uia", 0))) __PYX_ERR(0, 487, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uao", 0))) __PYX_ERR(0, 488, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_iao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_iao", 0))) __PYX_ERR(0, 489, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_pair), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_pair", 0))) __PYX_ERR(0, 490, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos", 0))) __PYX_ERR(0, 491, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_neg), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_neg", 0))) __PYX_ERR(0, 492, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rating_dict), __pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict, 1, "rating_dict", 0))) __PYX_ERR(0, 497, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1), __pyx_ptype_5numpy_ndarray, 1, "del_g1", 0))) __PYX_ERR(0, 514, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2), __pyx_ptype_5numpy_ndarray, 1, "del_g2", 0))) __PYX_ERR(0, 515, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3), __pyx_ptype_5numpy_ndarray, 1, "del_g3", 0))) __PYX_ERR(0, 516, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u), __pyx_ptype_5numpy_ndarray, 1, "del_u", 0))) __PYX_ERR(0, 517, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i), __pyx_ptype_5numpy_ndarray, 1, "del_i", 0))) __PYX_ERR(0, 518, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a), __pyx_ptype_5numpy_ndarray, 1, "del_a", 0))) __PYX_ERR(0, 519, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o), __pyx_ptype_5numpy_ndarray, 1, "del_o", 0))) __PYX_ERR(0, 520, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g1_reg", 0))) __PYX_ERR(0, 521, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g2_reg", 0))) __PYX_ERR(0, 522, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g3_reg", 0))) __PYX_ERR(0, 523, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u_reg), __pyx_ptype_5numpy_ndarray, 1, "del_u_reg", 0))) __PYX_ERR(0, 524, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i_reg), __pyx_ptype_5numpy_ndarray, 1, "del_i_reg", 0))) __PYX_ERR(0, 525, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a_reg), __pyx_ptype_5numpy_ndarray, 1, "del_a_reg", 0))) __PYX_ERR(0, 526, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o_reg), __pyx_ptype_5numpy_ndarray, 1, "del_o_reg", 0))) __PYX_ERR(0, 527, __pyx_L1_error) + __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_16_fit_mter(__pyx_self, __pyx_v_self, __pyx_v_rng_pos_uia, __pyx_v_rng_pos_uao, __pyx_v_rng_pos_iao, __pyx_v_rng_pos_pair, __pyx_v_rng_pos, __pyx_v_rng_neg, __pyx_v_n_threads, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_iids, __pyx_v_X_aids, __pyx_v_YU, __pyx_v_YU_uids, __pyx_v_YU_aids, __pyx_v_YU_oids, __pyx_v_YI, __pyx_v_YI_iids, __pyx_v_YI_aids, __pyx_v_YI_oids, __pyx_v_rating_dict, __pyx_v_user_ids, __pyx_v_item_ids, __pyx_v_neg_item_ids, __pyx_v_indptr, __pyx_v_p_user_indices, __pyx_v_earlier_indices, __pyx_v_later_indices, __pyx_v_aspect_indices, __pyx_v_pair_counts, __pyx_v_G1, __pyx_v_G2, __pyx_v_G3, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_sgrad_G1, __pyx_v_sgrad_G2, __pyx_v_sgrad_G3, __pyx_v_sgrad_U, __pyx_v_sgrad_I, __pyx_v_sgrad_A, __pyx_v_sgrad_O, __pyx_v_del_g1, __pyx_v_del_g2, __pyx_v_del_g3, __pyx_v_del_u, __pyx_v_del_i, __pyx_v_del_a, __pyx_v_del_o, __pyx_v_del_g1_reg, __pyx_v_del_g2_reg, __pyx_v_del_g3_reg, __pyx_v_del_u_reg, __pyx_v_del_i_reg, __pyx_v_del_a_reg, __pyx_v_del_o_reg); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_user_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_neg_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_indptr, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_p_user_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_earlier_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_later_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_aspect_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_pair_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_O, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_O, 1); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/comparer/recom_comparer_sub.pyx":649 - * ) * s - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * correct += 1 - * del_bpr = ld_bpr * z * s - */ - } +static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_16_fit_mter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg, int __pyx_v_n_threads, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_iids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_YU, __Pyx_memviewslice __pyx_v_YU_uids, __Pyx_memviewslice __pyx_v_YU_aids, __Pyx_memviewslice __pyx_v_YU_oids, __Pyx_memviewslice __pyx_v_YI, __Pyx_memviewslice __pyx_v_YI_iids, __Pyx_memviewslice __pyx_v_YI_aids, __Pyx_memviewslice __pyx_v_YI_oids, struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict, __Pyx_memviewslice __pyx_v_user_ids, __Pyx_memviewslice __pyx_v_item_ids, __Pyx_memviewslice __pyx_v_neg_item_ids, __Pyx_memviewslice __pyx_v_indptr, __Pyx_memviewslice __pyx_v_p_user_indices, __Pyx_memviewslice __pyx_v_earlier_indices, __Pyx_memviewslice __pyx_v_later_indices, __Pyx_memviewslice __pyx_v_aspect_indices, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts, __Pyx_memviewslice __pyx_v_G1, __Pyx_memviewslice __pyx_v_G2, __Pyx_memviewslice __pyx_v_G3, __Pyx_memviewslice __pyx_v_U, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_O, __Pyx_memviewslice __pyx_v_sgrad_G1, __Pyx_memviewslice __pyx_v_sgrad_G2, __Pyx_memviewslice __pyx_v_sgrad_G3, __Pyx_memviewslice __pyx_v_sgrad_U, __Pyx_memviewslice __pyx_v_sgrad_I, __Pyx_memviewslice __pyx_v_sgrad_A, __Pyx_memviewslice __pyx_v_sgrad_O, PyArrayObject *__pyx_v_del_g1, PyArrayObject *__pyx_v_del_g2, PyArrayObject *__pyx_v_del_g3, PyArrayObject *__pyx_v_del_u, PyArrayObject *__pyx_v_del_i, PyArrayObject *__pyx_v_del_a, PyArrayObject *__pyx_v_del_o, PyArrayObject *__pyx_v_del_g1_reg, PyArrayObject *__pyx_v_del_g2_reg, PyArrayObject *__pyx_v_del_g3_reg, PyArrayObject *__pyx_v_del_u_reg, PyArrayObject *__pyx_v_del_i_reg, PyArrayObject *__pyx_v_del_a_reg, PyArrayObject *__pyx_v_del_o_reg) { + long __pyx_v_s; + long __pyx_v_correct; + long __pyx_v_skipped; + long __pyx_v_aspect_correct; + long __pyx_v_n_users; + long __pyx_v_n_items; + long __pyx_v_n_aspects; + CYTHON_UNUSED long __pyx_v_n_opinions; + long __pyx_v_n_user_factors; + long __pyx_v_n_item_factors; + long __pyx_v_n_aspect_factors; + long __pyx_v_n_opinion_factors; + CYTHON_UNUSED int __pyx_v_num_samples; + CYTHON_UNUSED int __pyx_v_num_bpr_samples; + CYTHON_UNUSED int __pyx_v_num_pair_samples; + CYTHON_UNUSED int __pyx_v__; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_v_k; + int __pyx_v_idx; + int __pyx_v_jdx; + int __pyx_v_u_idx; + int __pyx_v_i_idx; + int __pyx_v_a_idx; + int __pyx_v_o_idx; + int __pyx_v_j_idx; + int __pyx_v_thread_id; + float __pyx_v_z; + float __pyx_v_score; + float __pyx_v_i_score; + float __pyx_v_j_score; + float __pyx_v_pred; + float __pyx_v_i_ij; + float __pyx_v_a_ji; + float __pyx_v_loss; + float __pyx_v_bpr_loss; + float __pyx_v_aspect_bpr_loss; + float __pyx_v_del_sqerror; + float __pyx_v_del_bpr; + float __pyx_v_del_aspect_bpr; + float __pyx_v_eps; + float __pyx_v_lr; + float __pyx_v_ld_reg; + float __pyx_v_ld_bpr; + float __pyx_v_lambda_d; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a; + __Pyx_Buffer __pyx_pybuffer_del_a; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a_reg; + __Pyx_Buffer __pyx_pybuffer_del_a_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1; + __Pyx_Buffer __pyx_pybuffer_del_g1; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1_reg; + __Pyx_Buffer __pyx_pybuffer_del_g1_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2; + __Pyx_Buffer __pyx_pybuffer_del_g2; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2_reg; + __Pyx_Buffer __pyx_pybuffer_del_g2_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3; + __Pyx_Buffer __pyx_pybuffer_del_g3; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3_reg; + __Pyx_Buffer __pyx_pybuffer_del_g3_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i; + __Pyx_Buffer __pyx_pybuffer_del_i; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i_reg; + __Pyx_Buffer __pyx_pybuffer_del_i_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o; + __Pyx_Buffer __pyx_pybuffer_del_o; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o_reg; + __Pyx_Buffer __pyx_pybuffer_del_o_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u; + __Pyx_Buffer __pyx_pybuffer_del_u; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u_reg; + __Pyx_Buffer __pyx_pybuffer_del_u_reg; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + long __pyx_t_3; + int __pyx_t_4; + float __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + int __pyx_t_8; + Py_ssize_t __pyx_t_9; + long __pyx_t_10; + int __pyx_t_11; + long __pyx_t_12; + long __pyx_t_13; + int __pyx_t_14; + long __pyx_t_15; + long __pyx_t_16; + int __pyx_t_17; + Py_ssize_t __pyx_t_18; + Py_ssize_t __pyx_t_19; + Py_ssize_t __pyx_t_20; + Py_ssize_t __pyx_t_21; + Py_ssize_t __pyx_t_22; + Py_ssize_t __pyx_t_23; + Py_ssize_t __pyx_t_24; + Py_ssize_t __pyx_t_25; + bool __pyx_t_26; + int __pyx_t_27; + float __pyx_t_28; + long __pyx_t_29; + PyObject *__pyx_t_30 = NULL; + PyObject *__pyx_t_31 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_fuse_0_1_fit_mter", 0); + __pyx_pybuffer_del_g1.pybuffer.buf = NULL; + __pyx_pybuffer_del_g1.refcount = 0; + __pyx_pybuffernd_del_g1.data = NULL; + __pyx_pybuffernd_del_g1.rcbuffer = &__pyx_pybuffer_del_g1; + __pyx_pybuffer_del_g2.pybuffer.buf = NULL; + __pyx_pybuffer_del_g2.refcount = 0; + __pyx_pybuffernd_del_g2.data = NULL; + __pyx_pybuffernd_del_g2.rcbuffer = &__pyx_pybuffer_del_g2; + __pyx_pybuffer_del_g3.pybuffer.buf = NULL; + __pyx_pybuffer_del_g3.refcount = 0; + __pyx_pybuffernd_del_g3.data = NULL; + __pyx_pybuffernd_del_g3.rcbuffer = &__pyx_pybuffer_del_g3; + __pyx_pybuffer_del_u.pybuffer.buf = NULL; + __pyx_pybuffer_del_u.refcount = 0; + __pyx_pybuffernd_del_u.data = NULL; + __pyx_pybuffernd_del_u.rcbuffer = &__pyx_pybuffer_del_u; + __pyx_pybuffer_del_i.pybuffer.buf = NULL; + __pyx_pybuffer_del_i.refcount = 0; + __pyx_pybuffernd_del_i.data = NULL; + __pyx_pybuffernd_del_i.rcbuffer = &__pyx_pybuffer_del_i; + __pyx_pybuffer_del_a.pybuffer.buf = NULL; + __pyx_pybuffer_del_a.refcount = 0; + __pyx_pybuffernd_del_a.data = NULL; + __pyx_pybuffernd_del_a.rcbuffer = &__pyx_pybuffer_del_a; + __pyx_pybuffer_del_o.pybuffer.buf = NULL; + __pyx_pybuffer_del_o.refcount = 0; + __pyx_pybuffernd_del_o.data = NULL; + __pyx_pybuffernd_del_o.rcbuffer = &__pyx_pybuffer_del_o; + __pyx_pybuffer_del_g1_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g1_reg.refcount = 0; + __pyx_pybuffernd_del_g1_reg.data = NULL; + __pyx_pybuffernd_del_g1_reg.rcbuffer = &__pyx_pybuffer_del_g1_reg; + __pyx_pybuffer_del_g2_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g2_reg.refcount = 0; + __pyx_pybuffernd_del_g2_reg.data = NULL; + __pyx_pybuffernd_del_g2_reg.rcbuffer = &__pyx_pybuffer_del_g2_reg; + __pyx_pybuffer_del_g3_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g3_reg.refcount = 0; + __pyx_pybuffernd_del_g3_reg.data = NULL; + __pyx_pybuffernd_del_g3_reg.rcbuffer = &__pyx_pybuffer_del_g3_reg; + __pyx_pybuffer_del_u_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_u_reg.refcount = 0; + __pyx_pybuffernd_del_u_reg.data = NULL; + __pyx_pybuffernd_del_u_reg.rcbuffer = &__pyx_pybuffer_del_u_reg; + __pyx_pybuffer_del_i_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_i_reg.refcount = 0; + __pyx_pybuffernd_del_i_reg.data = NULL; + __pyx_pybuffernd_del_i_reg.rcbuffer = &__pyx_pybuffer_del_i_reg; + __pyx_pybuffer_del_a_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_a_reg.refcount = 0; + __pyx_pybuffernd_del_a_reg.data = NULL; + __pyx_pybuffernd_del_a_reg.rcbuffer = &__pyx_pybuffer_del_a_reg; + __pyx_pybuffer_del_o_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_o_reg.refcount = 0; + __pyx_pybuffernd_del_o_reg.data = NULL; + __pyx_pybuffernd_del_o_reg.rcbuffer = &__pyx_pybuffer_del_o_reg; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g1.diminfo[0].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1.diminfo[0].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1.diminfo[1].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1.diminfo[1].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1.diminfo[2].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1.diminfo[2].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g2.diminfo[0].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2.diminfo[0].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2.diminfo[1].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2.diminfo[1].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2.diminfo[2].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2.diminfo[2].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g3.diminfo[0].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3.diminfo[0].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3.diminfo[1].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3.diminfo[1].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3.diminfo[2].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3.diminfo[2].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_u.diminfo[0].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u.diminfo[0].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u.diminfo[1].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u.diminfo[1].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_i.diminfo[0].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i.diminfo[0].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i.diminfo[1].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i.diminfo[1].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_a.diminfo[0].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a.diminfo[0].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a.diminfo[1].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a.diminfo[1].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_o.diminfo[0].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o.diminfo[0].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o.diminfo[1].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o.diminfo[1].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g1_reg.diminfo[0].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1_reg.diminfo[0].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1_reg.diminfo[1].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1_reg.diminfo[1].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1_reg.diminfo[2].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1_reg.diminfo[2].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g2_reg.diminfo[0].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2_reg.diminfo[0].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2_reg.diminfo[1].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2_reg.diminfo[1].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2_reg.diminfo[2].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2_reg.diminfo[2].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g3_reg.diminfo[0].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3_reg.diminfo[0].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3_reg.diminfo[1].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3_reg.diminfo[1].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3_reg.diminfo[2].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3_reg.diminfo[2].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_u_reg.diminfo[0].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u_reg.diminfo[0].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u_reg.diminfo[1].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u_reg.diminfo[1].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_i_reg.diminfo[0].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i_reg.diminfo[0].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i_reg.diminfo[1].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i_reg.diminfo[1].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_a_reg.diminfo[0].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a_reg.diminfo[0].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a_reg.diminfo[1].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a_reg.diminfo[1].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_o_reg.diminfo[0].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o_reg.diminfo[0].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o_reg.diminfo[1].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o_reg.diminfo[1].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[1]; - /* "cornac/models/comparer/recom_comparer_sub.pyx":651 - * if z < .5: - * correct += 1 - * del_bpr = ld_bpr * z * s # <<<<<<<<<<<<<< - * - * bpr_loss += log(1 / (1 + exp(-pred))) + /* "cornac/models/comparer/recom_comparer_sub.pyx":531 + * """ + * cdef: + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 # <<<<<<<<<<<<<< + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items */ - __pyx_v_del_bpr = ((__pyx_v_ld_bpr * __pyx_v_z) * __pyx_v_s); + __pyx_v_correct = 0; + __pyx_v_skipped = 0; + __pyx_v_aspect_correct = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":653 - * del_bpr = ld_bpr * z * s - * - * bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< - * - * for i in range(n_user_factors): + /* "cornac/models/comparer/recom_comparer_sub.pyx":532 + * cdef: + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 + * long n_users = self.train_set.num_users # <<<<<<<<<<<<<< + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects */ - __pyx_v_bpr_loss = (__pyx_v_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_n_users = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":655 - * bpr_loss += log(1 / (1 + exp(-pred))) - * - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":533 + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items # <<<<<<<<<<<<<< + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions */ - __pyx_t_9 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_9; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_items = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":656 - * - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): + /* "cornac/models/comparer/recom_comparer_sub.pyx":534 + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_aspects = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":657 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":535 + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions # <<<<<<<<<<<<<< + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors */ - __pyx_t_23 = __pyx_v_i_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_j_idx; - __pyx_t_8 = __pyx_v_j; - __pyx_v_i_ij = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_8 * __pyx_v_I.strides[1]) )))); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_opinions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_opinions = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":658 - * for j in range(n_item_factors): - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":536 + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors # <<<<<<<<<<<<<< + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_user_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 536, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 536, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_user_factors = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":659 - * i_ij = I[i_idx, j] - I[j_idx, j] - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":537 + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors # <<<<<<<<<<<<<< + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors */ - __pyx_t_8 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_n_aspects; - __pyx_t_23 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_8 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_item_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 537, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_item_factors = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":660 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":538 + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors # <<<<<<<<<<<<<< + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_8 = __pyx_v_n_aspects; - __pyx_t_20 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_18 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_i_ij) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_8 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_aspect_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 538, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_aspect_factors = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":661 - * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij + /* "cornac/models/comparer/recom_comparer_sub.pyx":539 + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors # <<<<<<<<<<<<<< + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_18 = __pyx_v_n_aspects; - __pyx_t_19 = __pyx_v_k; - __pyx_t_21 = __pyx_v_i_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_8 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_opinion_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 539, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_opinion_factors = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":662 - * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":540 + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples # <<<<<<<<<<<<<< + * int num_bpr_samples = self.n_bpr_samples + * int num_pair_samples = self.n_pair_samples */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_8 = __pyx_v_n_aspects; - __pyx_t_20 = __pyx_v_k; - __pyx_t_22 = __pyx_v_j_idx; - __pyx_t_21 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_18 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_8 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_element_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 540, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_samples = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":663 - * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":541 + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples # <<<<<<<<<<<<<< + * int num_pair_samples = self.n_pair_samples * - * for _ in prange(num_pair_samples, schedule='guided'): */ - __pyx_t_20 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_18 = __pyx_v_n_aspects; - __pyx_t_19 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_8 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij); - } - } - } - goto __pyx_L48; - __pyx_L34_continue:; - goto __pyx_L48; - __pyx_L48:; - } - } - } - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 541, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_bpr_samples = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":665 - * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij + /* "cornac/models/comparer/recom_comparer_sub.pyx":542 + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples + * int num_pair_samples = self.n_pair_samples # <<<<<<<<<<<<<< * - * for _ in prange(num_pair_samples, schedule='guided'): # <<<<<<<<<<<<<< - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] + * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id */ - __pyx_t_4 = __pyx_v_num_pair_samples; - if ((1 == 0)) abort(); - { - __pyx_t_7 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_7 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_a_ji) lastprivate(__pyx_v_del_aspect_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_7; __pyx_t_3++){ - { - __pyx_v__ = (long)(0 + 1 * __pyx_t_3); - /* Initialize private variables to invalid values */ - __pyx_v_a_idx = ((long)0xbad0bad0); - __pyx_v_a_ji = ((double)__PYX_NAN()); - __pyx_v_del_aspect_bpr = ((double)__PYX_NAN()); - __pyx_v_i = ((long)0xbad0bad0); - __pyx_v_i_idx = ((long)0xbad0bad0); - __pyx_v_idx = ((long)0xbad0bad0); - __pyx_v_j = ((long)0xbad0bad0); - __pyx_v_j_idx = ((long)0xbad0bad0); - __pyx_v_k = ((long)0xbad0bad0); - __pyx_v_pred = ((double)__PYX_NAN()); - __pyx_v_u_idx = ((long)0xbad0bad0); - __pyx_v_z = ((double)__PYX_NAN()); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_pair_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 542, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_pair_samples = __pyx_t_4; - /* "cornac/models/comparer/recom_comparer_sub.pyx":666 + /* "cornac/models/comparer/recom_comparer_sub.pyx":546 + * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id + * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji + * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr # <<<<<<<<<<<<<< + * floating eps = 1e-9 * - * for _ in prange(num_pair_samples, schedule='guided'): - * idx = rng_pos_pair.generate(thread_id) # <<<<<<<<<<<<<< - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] - */ - __pyx_v_idx = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_pair->__pyx_vtab)->generate(__pyx_v_rng_pos_pair, __pyx_v_thread_id); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":667 - * for _ in prange(num_pair_samples, schedule='guided'): - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] # <<<<<<<<<<<<<< - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] - */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_u_idx = (*((long *) ( /* dim=0 */ (__pyx_v_p_user_indices.data + __pyx_t_23 * __pyx_v_p_user_indices.strides[0]) ))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":668 - * idx = rng_pos_pair.generate(thread_id) - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] # <<<<<<<<<<<<<< - * j_idx = later_indices[idx] - * a_idx = aspect_indices[idx] */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_i_idx = (*((long *) ( /* dim=0 */ (__pyx_v_earlier_indices.data + __pyx_t_23 * __pyx_v_earlier_indices.strides[0]) ))); + __pyx_v_loss = 0.; + __pyx_v_bpr_loss = 0.; + __pyx_v_aspect_bpr_loss = 0.; - /* "cornac/models/comparer/recom_comparer_sub.pyx":669 - * u_idx = p_user_indices[idx] - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] # <<<<<<<<<<<<<< - * a_idx = aspect_indices[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":547 + * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji + * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr + * floating eps = 1e-9 # <<<<<<<<<<<<<< * + * floating lr = self.lr */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_j_idx = (*((long *) ( /* dim=0 */ (__pyx_v_later_indices.data + __pyx_t_23 * __pyx_v_later_indices.strides[0]) ))); + __pyx_v_eps = 1e-9; - /* "cornac/models/comparer/recom_comparer_sub.pyx":670 - * i_idx = earlier_indices[idx] - * j_idx = later_indices[idx] - * a_idx = aspect_indices[idx] # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":549 + * floating eps = 1e-9 * - * pred = ( + * floating lr = self.lr # <<<<<<<<<<<<<< + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr */ - __pyx_t_23 = __pyx_v_idx; - __pyx_v_a_idx = (*((long *) ( /* dim=0 */ (__pyx_v_aspect_indices.data + __pyx_t_23 * __pyx_v_aspect_indices.strides[0]) ))); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 549, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lr = __pyx_t_5; - /* "cornac/models/comparer/recom_comparer_sub.pyx":674 - * pred = ( - * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) - * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< - * ) + /* "cornac/models/comparer/recom_comparer_sub.pyx":550 * + * floating lr = self.lr + * floating ld_reg = self.lambda_reg # <<<<<<<<<<<<<< + * floating ld_bpr = self.lambda_bpr + * floating lambda_d = self.lambda_d */ - __pyx_v_pred = (__pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_a_idx) - __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx)); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_reg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 550, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 550, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_ld_reg = __pyx_t_5; - /* "cornac/models/comparer/recom_comparer_sub.pyx":677 - * ) + /* "cornac/models/comparer/recom_comparer_sub.pyx":551 + * floating lr = self.lr + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr # <<<<<<<<<<<<<< + * floating lambda_d = self.lambda_d * - * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< - * if z < .5: - * aspect_correct += 1 */ - __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_bpr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_ld_bpr = __pyx_t_5; - /* "cornac/models/comparer/recom_comparer_sub.pyx":678 - * - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * aspect_correct += 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":552 + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr + * floating lambda_d = self.lambda_d # <<<<<<<<<<<<<< * + * del_g1.fill(0) */ - __pyx_t_26 = ((__pyx_v_z < .5) != 0); - if (__pyx_t_26) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_d = __pyx_t_5; - /* "cornac/models/comparer/recom_comparer_sub.pyx":679 - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: - * aspect_correct += 1 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":554 + * floating lambda_d = self.lambda_d * - * del_aspect_bpr = lambda_d * z + * del_g1.fill(0) # <<<<<<<<<<<<<< + * del_g2.fill(0) + * del_g3.fill(0) */ - __pyx_v_aspect_correct = (__pyx_v_aspect_correct + 1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":678 - * - * z = (1.0 / (1.0 + exp(pred))) - * if z < .5: # <<<<<<<<<<<<<< - * aspect_correct += 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":555 * + * del_g1.fill(0) + * del_g2.fill(0) # <<<<<<<<<<<<<< + * del_g3.fill(0) + * del_u.fill(0) */ - } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":681 - * aspect_correct += 1 - * - * del_aspect_bpr = lambda_d * z # <<<<<<<<<<<<<< - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): + /* "cornac/models/comparer/recom_comparer_sub.pyx":556 + * del_g1.fill(0) + * del_g2.fill(0) + * del_g3.fill(0) # <<<<<<<<<<<<<< + * del_u.fill(0) + * del_i.fill(0) */ - __pyx_v_del_aspect_bpr = (__pyx_v_lambda_d * __pyx_v_z); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":682 - * - * del_aspect_bpr = lambda_d * z - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< - * for i in range(n_user_factors): - * for j in range(n_item_factors): + /* "cornac/models/comparer/recom_comparer_sub.pyx":557 + * del_g2.fill(0) + * del_g3.fill(0) + * del_u.fill(0) # <<<<<<<<<<<<<< + * del_i.fill(0) + * del_a.fill(0) */ - __pyx_v_aspect_bpr_loss = (__pyx_v_aspect_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 557, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":683 - * del_aspect_bpr = lambda_d * z - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): # <<<<<<<<<<<<<< - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":558 + * del_g3.fill(0) + * del_u.fill(0) + * del_i.fill(0) # <<<<<<<<<<<<<< + * del_a.fill(0) + * del_o.fill(0) */ - __pyx_t_9 = __pyx_v_n_user_factors; - __pyx_t_10 = __pyx_t_9; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":684 - * aspect_bpr_loss += log(1 / (1 + exp(-pred))) - * for i in range(n_user_factors): - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): + /* "cornac/models/comparer/recom_comparer_sub.pyx":559 + * del_u.fill(0) + * del_i.fill(0) + * del_a.fill(0) # <<<<<<<<<<<<<< + * del_o.fill(0) + * del_g1_reg.fill(0) */ - __pyx_t_12 = __pyx_v_n_item_factors; - __pyx_t_13 = __pyx_t_12; - for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { - __pyx_v_j = __pyx_t_14; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 559, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 559, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":685 - * for i in range(n_user_factors): - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":560 + * del_i.fill(0) + * del_a.fill(0) + * del_o.fill(0) # <<<<<<<<<<<<<< + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) */ - __pyx_t_23 = __pyx_v_j_idx; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i_idx; - __pyx_t_8 = __pyx_v_j; - __pyx_v_a_ji = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_8 * __pyx_v_I.strides[1]) )))); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":686 - * for j in range(n_item_factors): - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":561 + * del_a.fill(0) + * del_o.fill(0) + * del_g1_reg.fill(0) # <<<<<<<<<<<<<< + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) */ - __pyx_t_15 = __pyx_v_n_aspect_factors; - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_k = __pyx_t_17; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":687 - * a_ji = I[j_idx, j] - I[i_idx, j] - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":562 + * del_o.fill(0) + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) # <<<<<<<<<<<<<< + * del_g3_reg.fill(0) + * del_u_reg.fill(0) */ - __pyx_t_8 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_a_idx; - __pyx_t_23 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_8 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 562, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":688 - * for k in range(n_aspect_factors): - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":563 + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) # <<<<<<<<<<<<<< + * del_u_reg.fill(0) + * del_i_reg.fill(0) */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_8 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_k; - __pyx_t_19 = __pyx_v_u_idx; - __pyx_t_20 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_a_ji) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_8 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 563, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 563, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":689 - * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji + /* "cornac/models/comparer/recom_comparer_sub.pyx":564 + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) + * del_u_reg.fill(0) # <<<<<<<<<<<<<< + * del_i_reg.fill(0) + * del_a_reg.fill(0) */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_20 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_k; - __pyx_t_21 = __pyx_v_j_idx; - __pyx_t_22 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_8 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_20 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":690 - * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":565 + * del_g3_reg.fill(0) + * del_u_reg.fill(0) + * del_i_reg.fill(0) # <<<<<<<<<<<<<< + * del_a_reg.fill(0) + * del_o_reg.fill(0) */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_20 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_25 = __pyx_v_i; - __pyx_t_8 = __pyx_v_a_idx; - __pyx_t_18 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i_idx; - __pyx_t_21 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_20 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_8 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":691 - * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] - * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji # <<<<<<<<<<<<<< - * - * # update params with AdaGrad + /* "cornac/models/comparer/recom_comparer_sub.pyx":566 + * del_u_reg.fill(0) + * del_i_reg.fill(0) + * del_a_reg.fill(0) # <<<<<<<<<<<<<< + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_24 = __pyx_v_u_idx; - __pyx_t_23 = __pyx_v_i; - __pyx_t_20 = __pyx_v_a_idx; - __pyx_t_19 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_8 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji); - } - } - } - } - } - } - } - } - } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 566, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":568 + /* "cornac/models/comparer/recom_comparer_sub.pyx":567 + * del_i_reg.fill(0) * del_a_reg.fill(0) - * del_o_reg.fill(0) - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * del_o_reg.fill(0) # <<<<<<<<<<<<<< + * with nogil, parallel(num_threads=n_threads): * thread_id = get_thread_num() - * for _ in prange(num_samples, schedule='guided'): */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L5; - } - __pyx_L5:; - } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":694 - * - * # update params with AdaGrad + /* "cornac/models/comparer/recom_comparer_sub.pyx":568 + * del_a_reg.fill(0) + * del_o_reg.fill(0) * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): */ { #ifdef WITH_THREAD PyThreadState *_save; + _save = NULL; Py_UNBLOCK_THREADS __Pyx_FastGIL_Remember(); #endif /*try:*/ { { + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) #undef likely #undef unlikely @@ -38063,16011 +39068,22241 @@ static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11Compa #define unlikely(x) (x) #endif #ifdef _OPENMP - #pragma omp parallel private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_3, __pyx_t_7, __pyx_t_8, __pyx_t_9) num_threads(__pyx_v_n_threads) + #pragma omp parallel private(__pyx_v_thread_id) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_bpr_loss) reduction(+:__pyx_v_correct) reduction(+:__pyx_v_skipped) reduction(+:__pyx_v_aspect_bpr_loss) reduction(+:__pyx_v_aspect_correct) private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_7, __pyx_t_8, __pyx_t_9) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_n_threads) #endif /* _OPENMP */ { + #ifdef _OPENMP + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + Py_BEGIN_ALLOW_THREADS + #endif /* _OPENMP */ + /* Initialize private variables to invalid values */ + __pyx_v_thread_id = ((int)0xbad0bad0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":695 - * # update params with AdaGrad + /* "cornac/models/comparer/recom_comparer_sub.pyx":569 + * del_o_reg.fill(0) * with nogil, parallel(num_threads=n_threads): - * for i in prange(n_user_factors, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_users): - * if del_u[j, i] != 0: + * thread_id = get_thread_num() # <<<<<<<<<<<<<< + * for _ in prange(num_samples, schedule='guided'): + * # get user item aspect element */ - __pyx_t_7 = __pyx_v_n_user_factors; - if ((1 == 0)) abort(); + __pyx_v_thread_id = recom_bpr::get_thread_num(); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":570 + * with nogil, parallel(num_threads=n_threads): + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): # <<<<<<<<<<<<<< + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) + */ + __pyx_t_4 = __pyx_v_num_samples; { - __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_9 > 0) + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + float __pyx_parallel_temp2 = ((float)__PYX_NAN()); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + int __pyx_parallel_temp4 = ((int)0xbad0bad0); + int __pyx_parallel_temp5 = ((int)0xbad0bad0); + int __pyx_parallel_temp6 = ((int)0xbad0bad0); + int __pyx_parallel_temp7 = ((int)0xbad0bad0); + float __pyx_parallel_temp8 = ((float)__PYX_NAN()); + int __pyx_parallel_temp9 = ((int)0xbad0bad0); + float __pyx_parallel_temp10 = ((float)__PYX_NAN()); + float __pyx_parallel_temp11 = ((float)__PYX_NAN()); + int __pyx_parallel_temp12 = ((int)0xbad0bad0); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_8 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_8 > 0) { #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_del_sqerror) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_o_idx) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_score) lastprivate(__pyx_v_u_idx) schedule(guided) #endif /* _OPENMP */ - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_9; __pyx_t_3++){ + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){ + if (__pyx_parallel_why < 2) { - __pyx_v_i = (long)(0 + 1 * __pyx_t_3); + __pyx_v__ = (int)(0 + 1 * __pyx_t_7); /* Initialize private variables to invalid values */ - __pyx_v_j = ((long)0xbad0bad0); - __pyx_v_k = ((long)0xbad0bad0); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":696 - * with nogil, parallel(num_threads=n_threads): - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): # <<<<<<<<<<<<<< - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - */ - __pyx_t_10 = __pyx_v_n_users; - __pyx_t_11 = __pyx_t_10; - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { - __pyx_v_j = __pyx_t_12; + __pyx_v_a_idx = ((int)0xbad0bad0); + __pyx_v_del_sqerror = ((float)__PYX_NAN()); + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_i_idx = ((int)0xbad0bad0); + __pyx_v_idx = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_o_idx = ((int)0xbad0bad0); + __pyx_v_pred = ((float)__PYX_NAN()); + __pyx_v_score = ((float)__PYX_NAN()); + __pyx_v_u_idx = ((int)0xbad0bad0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":697 - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): - * if del_u[j, i] != 0: # <<<<<<<<<<<<<< - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":572 + * for _ in prange(num_samples, schedule='guided'): + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] */ - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uia->__pyx_vtab)->generate(__pyx_v_rng_pos_uia, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 572, __pyx_L12_error) + __pyx_v_idx = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":698 - * for j in range(n_users): - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] # <<<<<<<<<<<<<< - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":573 + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) + * u_idx = X_uids[idx] # <<<<<<<<<<<<<< + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] */ - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_u_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_8 * __pyx_v_U.strides[1]) ))))); + __pyx_t_9 = __pyx_v_idx; + __pyx_v_u_idx = (*((int *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_9 * __pyx_v_X_uids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":697 - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): - * if del_u[j, i] != 0: # <<<<<<<<<<<<<< - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":574 + * idx = rng_pos_uia.generate(thread_id) + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] # <<<<<<<<<<<<<< + * a_idx = X_aids[idx] + * score = X[idx] */ - } + __pyx_t_9 = __pyx_v_idx; + __pyx_v_i_idx = (*((int *) ( /* dim=0 */ (__pyx_v_X_iids.data + __pyx_t_9 * __pyx_v_X_iids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":699 - * if del_u[j, i] != 0: - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] # <<<<<<<<<<<<<< - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":575 + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] # <<<<<<<<<<<<<< + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) */ - __pyx_t_8 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_19 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_U.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)))); + __pyx_t_9 = __pyx_v_idx; + __pyx_v_a_idx = (*((int *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_9 * __pyx_v_X_aids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":700 - * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] # <<<<<<<<<<<<<< - * if U[j, i] < 0: - * U[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":576 + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] + * score = X[idx] # <<<<<<<<<<<<<< + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * loss += (pred - score) * (pred - score) */ - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_24 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_U.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_8, __pyx_pybuffernd_del_u_reg.diminfo[1].strides))); + __pyx_t_9 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_9 * __pyx_v_X.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":701 - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: # <<<<<<<<<<<<<< - * U[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":577 + * a_idx = X_aids[idx] + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) * */ - __pyx_t_8 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_26 = (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_8 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 577, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; - /* "cornac/models/comparer/recom_comparer_sub.pyx":702 - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: - * U[j, i] = 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":578 + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< * - * for j in range(n_item_factors): + * del_sqerror = 2 * (pred - score) */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_8 * __pyx_v_U.strides[1]) )) = 0.0; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":701 - * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] - * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] - * if U[j, i] < 0: # <<<<<<<<<<<<<< - * U[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":580 + * loss += (pred - score) * (pred - score) * + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * for i in range(n_user_factors): + * for j in range(n_item_factors): */ - } - } + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":704 - * U[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":581 * - * for j in range(n_item_factors): # <<<<<<<<<<<<<< - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: + * del_sqerror = 2 * (pred - score) + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): */ - __pyx_t_10 = __pyx_v_n_item_factors; - __pyx_t_11 = __pyx_t_10; - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { - __pyx_v_j = __pyx_t_12; + __pyx_t_3 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "cornac/models/comparer/recom_comparer_sub.pyx":705 - * - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":582 + * del_sqerror = 2 * (pred - score) + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] */ - __pyx_t_13 = __pyx_v_n_aspect_factors; - __pyx_t_14 = __pyx_t_13; - for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { - __pyx_v_k = __pyx_t_15; + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "cornac/models/comparer/recom_comparer_sub.pyx":706 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":583 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] */ - __pyx_t_8 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* "cornac/models/comparer/recom_comparer_sub.pyx":707 - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":584 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_k; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_i_idx; + __pyx_t_20 = __pyx_v_j; + __pyx_t_21 = __pyx_v_a_idx; __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_8, __pyx_pybuffernd_del_g1.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) ))))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":706 - * for j in range(n_item_factors): - * for k in range(n_aspect_factors): - * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - */ - } - - /* "cornac/models/comparer/recom_comparer_sub.pyx":708 - * if del_g1[i, j, k] != 0: - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: - */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_8 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_22 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G1.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":709 - * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< - * if G1[i, j, k] < 0: - * G1[i, j, k] = 0 - */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_k; - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_22 * __pyx_v_G1.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_23 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_25 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_8 * __pyx_v_sgrad_G1.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides))); + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_20 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":710 - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< - * G1[i, j, k] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":585 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_26 = (((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_24 * __pyx_v_G1.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_i_idx; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":711 - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: - * G1[i, j, k] = 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":586 + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] * - * for j in range(n_aspect_factors): */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; __pyx_t_18 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )) = 0.0; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_k; + __pyx_t_23 = __pyx_v_i_idx; + __pyx_t_24 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_25 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_20 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":710 - * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] - * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] - * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< - * G1[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":587 + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] # <<<<<<<<<<<<<< * + * # get user aspect opinion element */ + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))); } } } - /* "cornac/models/comparer/recom_comparer_sub.pyx":713 - * G1[i, j, k] = 0 - * - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: - */ - __pyx_t_10 = __pyx_v_n_aspect_factors; - __pyx_t_11 = __pyx_t_10; - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { - __pyx_v_j = __pyx_t_12; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":714 + /* "cornac/models/comparer/recom_comparer_sub.pyx":590 * - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - */ - __pyx_t_13 = __pyx_v_n_opinion_factors; - __pyx_t_14 = __pyx_t_13; - for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { - __pyx_v_k = __pyx_t_15; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":715 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * # get user aspect opinion element + * idx = rng_pos_uao.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uao->__pyx_vtab)->generate(__pyx_v_rng_pos_uao, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 590, __pyx_L12_error) + __pyx_v_idx = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":716 - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":591 + * # get user aspect opinion element + * idx = rng_pos_uao.generate(thread_id) + * u_idx = YU_uids[idx] # <<<<<<<<<<<<<< + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_8 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_8 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) ))))); + __pyx_t_25 = __pyx_v_idx; + __pyx_v_u_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YU_uids.data + __pyx_t_25 * __pyx_v_YU_uids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":715 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":592 + * idx = rng_pos_uao.generate(thread_id) + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] # <<<<<<<<<<<<<< + * o_idx = YU_oids[idx] + * score = YU[idx] */ - } + __pyx_t_25 = __pyx_v_idx; + __pyx_v_a_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YU_aids.data + __pyx_t_25 * __pyx_v_YU_aids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":717 - * if del_g2[i, j, k] != 0: - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":593 + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] # <<<<<<<<<<<<<< + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_20 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_22 * __pyx_v_sgrad_G2.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_8, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)))); + __pyx_t_25 = __pyx_v_idx; + __pyx_v_o_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YU_oids.data + __pyx_t_25 * __pyx_v_YU_oids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":718 - * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< - * if G2[i, j, k] < 0: - * G2[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":594 + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] + * score = YU[idx] # <<<<<<<<<<<<<< + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_8 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_22 * __pyx_v_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_G2.strides[1]) ) + __pyx_t_20 * __pyx_v_G2.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_24 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G2.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides))); + __pyx_t_25 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_YU.data + __pyx_t_25 * __pyx_v_YU.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":719 - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< - * G2[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":595 + * o_idx = YU_oids[idx] + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) * */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_k; - __pyx_t_26 = (((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_23 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_8 * __pyx_v_G2.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G2, __pyx_v_n_user_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_U, __pyx_v_A, __pyx_v_O, __pyx_v_u_idx, __pyx_v_a_idx, __pyx_v_o_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 595, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; - /* "cornac/models/comparer/recom_comparer_sub.pyx":720 - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: - * G2[i, j, k] = 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":596 + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< * - * for i in prange(n_item_factors, schedule='guided'): + * del_sqerror = 2 * (pred - score) */ - __pyx_t_8 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_8 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) )) = 0.0; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":719 - * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] - * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] - * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< - * G2[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":598 + * loss += (pred - score) * (pred - score) * + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * + * for i in range(n_user_factors): */ - } - } - } - } - } - } - } + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":722 - * G2[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":600 + * del_sqerror = 2 * (pred - score) * - * for i in prange(n_item_factors, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_items): - * if del_i[j, i] != 0: + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): */ - __pyx_t_9 = __pyx_v_n_item_factors; - if ((1 == 0)) abort(); - { - __pyx_t_7 = (__pyx_t_9 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_7 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_7; __pyx_t_3++){ - { - __pyx_v_i = (long)(0 + 1 * __pyx_t_3); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((long)0xbad0bad0); - __pyx_v_k = ((long)0xbad0bad0); + __pyx_t_3 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "cornac/models/comparer/recom_comparer_sub.pyx":723 + /* "cornac/models/comparer/recom_comparer_sub.pyx":601 * - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): # <<<<<<<<<<<<<< - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * for i in range(n_user_factors): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] */ - __pyx_t_10 = __pyx_v_n_items; - __pyx_t_11 = __pyx_t_10; - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { - __pyx_v_j = __pyx_t_12; + __pyx_t_12 = __pyx_v_n_aspect_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "cornac/models/comparer/recom_comparer_sub.pyx":724 - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): - * if del_i[j, i] != 0: # <<<<<<<<<<<<<< - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":602 + * for i in range(n_user_factors): + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] */ - __pyx_t_23 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_15 = __pyx_v_n_opinion_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* "cornac/models/comparer/recom_comparer_sub.pyx":725 - * for j in range(n_items): - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] # <<<<<<<<<<<<<< - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":603 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_8 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) ))))); + __pyx_t_25 = __pyx_v_u_idx; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_j; + __pyx_t_20 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":724 - * for i in prange(n_item_factors, schedule='guided'): - * for j in range(n_items): - * if del_i[j, i] != 0: # <<<<<<<<<<<<<< - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":604 + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] */ - } + __pyx_t_21 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_18 = __pyx_v_a_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_o_idx; + __pyx_t_24 = __pyx_v_k; + __pyx_t_23 = __pyx_v_u_idx; + __pyx_t_22 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_9 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_25 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":726 - * if del_i[j, i] != 0: - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] # <<<<<<<<<<<<<< - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":605 + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] + * */ - __pyx_t_18 = __pyx_v_j; - __pyx_t_8 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_24 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_I.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_8, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)))); + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_18 = __pyx_v_u_idx; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + __pyx_t_22 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_24 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":727 - * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] # <<<<<<<<<<<<<< - * if I[j, i] < 0: - * I[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":606 + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< + * + * # get item aspect opinion element */ - __pyx_t_25 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_24 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_25 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_I.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[1].strides))); + __pyx_t_21 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_18 = __pyx_v_u_idx; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_a_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_o_idx; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_24 * __pyx_v_A.strides[1]) )))); + } + } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":728 - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: # <<<<<<<<<<<<<< - * I[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":609 * + * # get item aspect opinion element + * idx = rng_pos_iao.generate(thread_id) # <<<<<<<<<<<<<< + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] */ - __pyx_t_18 = __pyx_v_j; - __pyx_t_8 = __pyx_v_i; - __pyx_t_26 = (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_18 * __pyx_v_I.strides[0]) ) + __pyx_t_8 * __pyx_v_I.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_iao->__pyx_vtab)->generate(__pyx_v_rng_pos_iao, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 609, __pyx_L12_error) + __pyx_v_idx = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":729 - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: - * I[j, i] = 0 # <<<<<<<<<<<<<< - * - * for j in range(n_aspect_factors): + /* "cornac/models/comparer/recom_comparer_sub.pyx":610 + * # get item aspect opinion element + * idx = rng_pos_iao.generate(thread_id) + * i_idx = YI_iids[idx] # <<<<<<<<<<<<<< + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] */ - __pyx_t_8 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_8 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )) = 0.0; + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YI_iids.data + __pyx_t_24 * __pyx_v_YI_iids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":728 - * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] - * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] - * if I[j, i] < 0: # <<<<<<<<<<<<<< - * I[j, i] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":611 + * idx = rng_pos_iao.generate(thread_id) + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] # <<<<<<<<<<<<<< + * o_idx = YI_oids[idx] + * score = YI[idx] */ - } - } + __pyx_t_24 = __pyx_v_idx; + __pyx_v_a_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YI_aids.data + __pyx_t_24 * __pyx_v_YI_aids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":731 - * I[j, i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":612 + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] # <<<<<<<<<<<<<< + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_o_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YI_oids.data + __pyx_t_24 * __pyx_v_YI_oids.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":613 + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] + * score = YI[idx] # <<<<<<<<<<<<<< + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_YI.data + __pyx_t_24 * __pyx_v_YI.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":614 + * o_idx = YI_oids[idx] + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) * - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: */ - __pyx_t_10 = __pyx_v_n_aspect_factors; - __pyx_t_11 = __pyx_t_10; - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { - __pyx_v_j = __pyx_t_12; + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G3, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_i_idx, __pyx_v_a_idx, __pyx_v_o_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 614, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; - /* "cornac/models/comparer/recom_comparer_sub.pyx":732 + /* "cornac/models/comparer/recom_comparer_sub.pyx":615 + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< * - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * del_sqerror = 2 * (pred - score) */ - __pyx_t_13 = __pyx_v_n_opinion_factors; - __pyx_t_14 = __pyx_t_13; - for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { - __pyx_v_k = __pyx_t_15; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":733 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":617 + * loss += (pred - score) * (pred - score) + * + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_26 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_8, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "cornac/models/comparer/recom_comparer_sub.pyx":734 - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] # <<<<<<<<<<<<<< - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":618 + * + * del_sqerror = 2 * (pred - score) + * for i in range(n_item_factors): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_8, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) ))))); + __pyx_t_3 = __pyx_v_n_item_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "cornac/models/comparer/recom_comparer_sub.pyx":733 - * for j in range(n_aspect_factors): - * for k in range(n_opinion_factors): - * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + /* "cornac/models/comparer/recom_comparer_sub.pyx":619 + * del_sqerror = 2 * (pred - score) + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] */ - } + __pyx_t_12 = __pyx_v_n_aspect_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "cornac/models/comparer/recom_comparer_sub.pyx":735 - * if del_g3[i, j, k] != 0: - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":620 + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_18 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_23 = __pyx_v_k; - __pyx_t_22 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_20 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_22 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G3.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_8, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)))); + __pyx_t_15 = __pyx_v_n_opinion_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* "cornac/models/comparer/recom_comparer_sub.pyx":736 - * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< - * if G3[i, j, k] < 0: - * G3[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":621 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] */ - __pyx_t_23 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - __pyx_t_18 = __pyx_v_k; - __pyx_t_25 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - __pyx_t_20 = __pyx_v_i; - __pyx_t_21 = __pyx_v_j; - __pyx_t_22 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_G3.strides[1]) ) + __pyx_t_22 * __pyx_v_G3.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_23 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_8 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G3.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides))); + __pyx_t_24 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_o_idx; + __pyx_t_20 = __pyx_v_k; + __pyx_t_21 = __pyx_v_i; + __pyx_t_22 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_24 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":737 - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< - * G3[i, j, k] = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":622 + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_25 = __pyx_v_k; - __pyx_t_26 = (((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_19 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_o_idx; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i_idx; + __pyx_t_21 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_23 * __pyx_v_O.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":738 - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: - * G3[i, j, k] = 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":623 + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] * - * for i in prange(n_aspects + 1, schedule='guided'): */ - __pyx_t_25 = __pyx_v_i; + __pyx_t_23 = __pyx_v_i; __pyx_t_24 = __pyx_v_j; - __pyx_t_19 = __pyx_v_k; - *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) )) = 0.0; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_o_idx; + __pyx_t_20 = __pyx_v_k; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_23 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":737 - * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] - * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] - * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< - * G3[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":624 + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< * + * for _ in prange(num_bpr_samples, schedule='guided'): */ + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_j; + __pyx_t_22 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); } } } + goto __pyx_L33; + __pyx_L12_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L32; + __pyx_L32:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates3) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_a_idx; + __pyx_parallel_temp2 = __pyx_v_del_sqerror; + __pyx_parallel_temp3 = __pyx_v_i; + __pyx_parallel_temp4 = __pyx_v_i_idx; + __pyx_parallel_temp5 = __pyx_v_idx; + __pyx_parallel_temp6 = __pyx_v_j; + __pyx_parallel_temp7 = __pyx_v_k; + __pyx_parallel_temp8 = __pyx_v_loss; + __pyx_parallel_temp9 = __pyx_v_o_idx; + __pyx_parallel_temp10 = __pyx_v_pred; + __pyx_parallel_temp11 = __pyx_v_score; + __pyx_parallel_temp12 = __pyx_v_u_idx; + } + __pyx_L33:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ } } } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_a_idx = __pyx_parallel_temp1; + __pyx_v_del_sqerror = __pyx_parallel_temp2; + __pyx_v_i = __pyx_parallel_temp3; + __pyx_v_i_idx = __pyx_parallel_temp4; + __pyx_v_idx = __pyx_parallel_temp5; + __pyx_v_j = __pyx_parallel_temp6; + __pyx_v_k = __pyx_parallel_temp7; + __pyx_v_loss = __pyx_parallel_temp8; + __pyx_v_o_idx = __pyx_parallel_temp9; + __pyx_v_pred = __pyx_parallel_temp10; + __pyx_v_score = __pyx_parallel_temp11; + __pyx_v_u_idx = __pyx_parallel_temp12; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } } - /* "cornac/models/comparer/recom_comparer_sub.pyx":740 - * G3[i, j, k] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":626 + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] * - * for i in prange(n_aspects + 1, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: + * for _ in prange(num_bpr_samples, schedule='guided'): # <<<<<<<<<<<<<< + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] */ - __pyx_t_7 = (__pyx_v_n_aspects + 1); - if ((1 == 0)) abort(); + __pyx_t_8 = __pyx_v_num_bpr_samples; { - __pyx_t_9 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_9 > 0) + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + float __pyx_parallel_temp1 = ((float)__PYX_NAN()); + long __pyx_parallel_temp2 = ((long)0xbad0bad0); + float __pyx_parallel_temp3 = ((float)__PYX_NAN()); + int __pyx_parallel_temp4 = ((int)0xbad0bad0); + int __pyx_parallel_temp5 = ((int)0xbad0bad0); + float __pyx_parallel_temp6 = ((float)__PYX_NAN()); + float __pyx_parallel_temp7 = ((float)__PYX_NAN()); + int __pyx_parallel_temp8 = ((int)0xbad0bad0); + int __pyx_parallel_temp9 = ((int)0xbad0bad0); + int __pyx_parallel_temp10 = ((int)0xbad0bad0); + float __pyx_parallel_temp11 = ((float)__PYX_NAN()); + int __pyx_parallel_temp12 = ((int)0xbad0bad0); + int __pyx_parallel_temp13 = ((int)0xbad0bad0); + float __pyx_parallel_temp14 = ((float)__PYX_NAN()); + long __pyx_parallel_temp15 = ((long)0xbad0bad0); + long __pyx_parallel_temp16 = ((long)0xbad0bad0); + int __pyx_parallel_temp17 = ((int)0xbad0bad0); + float __pyx_parallel_temp18 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_4 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_4 > 0) { #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_del_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_i_ij) lastprivate(__pyx_v_i_score) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_j_score) lastprivate(__pyx_v_jdx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_s) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) #endif /* _OPENMP */ - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_9; __pyx_t_3++){ + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_4; __pyx_t_7++){ + if (__pyx_parallel_why < 2) { - __pyx_v_i = (long)(0 + 1 * __pyx_t_3); + __pyx_v__ = (int)(0 + 1 * __pyx_t_7); /* Initialize private variables to invalid values */ - __pyx_v_j = ((long)0xbad0bad0); + __pyx_v_del_bpr = ((float)__PYX_NAN()); + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_i_idx = ((int)0xbad0bad0); + __pyx_v_i_ij = ((float)__PYX_NAN()); + __pyx_v_i_score = ((float)__PYX_NAN()); + __pyx_v_idx = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_j_idx = ((int)0xbad0bad0); + __pyx_v_j_score = ((float)__PYX_NAN()); + __pyx_v_jdx = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_pred = ((float)__PYX_NAN()); + __pyx_v_s = ((long)0xbad0bad0); + __pyx_v_u_idx = ((int)0xbad0bad0); + __pyx_v_z = ((float)__PYX_NAN()); - /* "cornac/models/comparer/recom_comparer_sub.pyx":741 + /* "cornac/models/comparer/recom_comparer_sub.pyx":627 * - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - */ - __pyx_t_10 = __pyx_v_n_aspect_factors; - __pyx_t_11 = __pyx_t_10; - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { - __pyx_v_j = __pyx_t_12; - - /* "cornac/models/comparer/recom_comparer_sub.pyx":742 - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: # <<<<<<<<<<<<<< - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { - - /* "cornac/models/comparer/recom_comparer_sub.pyx":743 - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] # <<<<<<<<<<<<<< - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_8 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) ))))); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":742 - * for i in prange(n_aspects + 1, schedule='guided'): - * for j in range(n_aspect_factors): - * if del_a[i, j] != 0: # <<<<<<<<<<<<<< - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * for _ in prange(num_bpr_samples, schedule='guided'): + * idx = rng_pos.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] */ - } + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos->__pyx_vtab)->generate(__pyx_v_rng_pos, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 627, __pyx_L36_error) + __pyx_v_idx = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":744 - * if del_a[i, j] != 0: - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] # <<<<<<<<<<<<<< - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":628 + * for _ in prange(num_bpr_samples, schedule='guided'): + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] # <<<<<<<<<<<<<< + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_23 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_8 * __pyx_v_sgrad_A.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)))); + __pyx_t_23 = __pyx_v_idx; + __pyx_v_u_idx = (*((int *) ( /* dim=0 */ (__pyx_v_user_ids.data + __pyx_t_23 * __pyx_v_user_ids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":745 - * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] # <<<<<<<<<<<<<< - * if A[i, j] < 0: - * A[i, j] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":629 + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] # <<<<<<<<<<<<<< + * jdx = rng_neg.generate(thread_id) + * j_idx = neg_item_ids[jdx] */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_8 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_8 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_24 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_A.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[1].strides))); + __pyx_t_23 = __pyx_v_idx; + __pyx_v_i_idx = (*((int *) ( /* dim=0 */ (__pyx_v_item_ids.data + __pyx_t_23 * __pyx_v_item_ids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":746 - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: # <<<<<<<<<<<<<< - * A[i, j] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":630 + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) # <<<<<<<<<<<<<< + * j_idx = neg_item_ids[jdx] * */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_26 = (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_neg->__pyx_vtab)->generate(__pyx_v_rng_neg, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 630, __pyx_L36_error) + __pyx_v_jdx = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":747 - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: - * A[i, j] = 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":631 + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) + * j_idx = neg_item_ids[jdx] # <<<<<<<<<<<<<< * - * for i in prange(n_opinions, schedule='guided'): + * s = 1 */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )) = 0.0; + __pyx_t_23 = __pyx_v_jdx; + __pyx_v_j_idx = (*((int *) ( /* dim=0 */ (__pyx_v_neg_item_ids.data + __pyx_t_23 * __pyx_v_neg_item_ids.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":746 - * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] - * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] - * if A[i, j] < 0: # <<<<<<<<<<<<<< - * A[i, j] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":633 + * j_idx = neg_item_ids[jdx] * + * s = 1 # <<<<<<<<<<<<<< + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): */ - } - } - } - } - } - } + __pyx_v_s = 1; - /* "cornac/models/comparer/recom_comparer_sub.pyx":749 - * A[i, j] = 0 - * - * for i in prange(n_opinions, schedule='guided'): # <<<<<<<<<<<<<< - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":635 + * s = 1 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] */ - __pyx_t_9 = __pyx_v_n_opinions; - if ((1 == 0)) abort(); - { - __pyx_t_7 = (__pyx_t_9 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_7 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) - #endif /* _OPENMP */ - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_7; __pyx_t_3++){ - { - __pyx_v_i = (long)(0 + 1 * __pyx_t_3); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((long)0xbad0bad0); + __pyx_t_26 = __pyx_fuse_1__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero(__pyx_v_indptr, __pyx_v_item_ids, __pyx_v_u_idx, __pyx_v_j_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 635, __pyx_L36_error) + __pyx_t_27 = (__pyx_t_26 != 0); + if (__pyx_t_27) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":750 - * - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): # <<<<<<<<<<<<<< - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":636 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] # <<<<<<<<<<<<<< + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: */ - __pyx_t_10 = __pyx_v_n_opinion_factors; - __pyx_t_11 = __pyx_t_10; - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { - __pyx_v_j = __pyx_t_12; + __pyx_t_11 = __pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_i_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 636, __pyx_L36_error) + __pyx_v_i_score = (__pyx_v_rating_dict->my_map[__pyx_t_11]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":751 - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: # <<<<<<<<<<<<<< - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":637 + * if has_non_zero(indptr, item_ids, u_idx, j_idx): + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] # <<<<<<<<<<<<<< + * if i_score == j_score: + * skipped += 1 */ - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_26 = (((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[1].strides)) != 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_11 = __pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_j_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 637, __pyx_L36_error) + __pyx_v_j_score = (__pyx_v_rating_dict->my_map[__pyx_t_11]); - /* "cornac/models/comparer/recom_comparer_sub.pyx":752 - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] # <<<<<<<<<<<<<< - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":638 + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: # <<<<<<<<<<<<<< + * skipped += 1 + * continue */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_8, __pyx_pybuffernd_del_o_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) ))))); + __pyx_t_27 = (__pyx_v_i_score == __pyx_v_j_score); + if (__pyx_t_27) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":751 - * for i in prange(n_opinions, schedule='guided'): - * for j in range(n_opinion_factors): - * if del_o[i, j] != 0: # <<<<<<<<<<<<<< - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + /* "cornac/models/comparer/recom_comparer_sub.pyx":639 + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: + * skipped += 1 # <<<<<<<<<<<<<< + * continue + * elif i_score < j_score: */ - } + __pyx_v_skipped = (__pyx_v_skipped + 1); - /* "cornac/models/comparer/recom_comparer_sub.pyx":753 - * if del_o[i, j] != 0: - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] # <<<<<<<<<<<<<< - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":640 + * if i_score == j_score: + * skipped += 1 + * continue # <<<<<<<<<<<<<< + * elif i_score < j_score: + * s = -1 */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_18 = __pyx_v_i; - __pyx_t_25 = __pyx_v_j; - __pyx_t_8 = __pyx_v_i; - __pyx_t_23 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_8 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_O.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)))); + goto __pyx_L34_continue; - /* "cornac/models/comparer/recom_comparer_sub.pyx":754 - * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] # <<<<<<<<<<<<<< - * if O[i, j] < 0: - * O[i, j] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":638 + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: # <<<<<<<<<<<<<< + * skipped += 1 + * continue */ - __pyx_t_25 = __pyx_v_i; - __pyx_t_18 = __pyx_v_j; - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - __pyx_t_23 = __pyx_v_i; - __pyx_t_8 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_23 * __pyx_v_O.strides[0]) ) + __pyx_t_8 * __pyx_v_O.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_25 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_O.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[1].strides))); + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":755 - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: # <<<<<<<<<<<<<< - * O[i, j] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":641 + * skipped += 1 + * continue + * elif i_score < j_score: # <<<<<<<<<<<<<< + * s = -1 * */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_19 = __pyx_v_j; - __pyx_t_26 = (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_19 * __pyx_v_O.strides[1]) ))) < 0.0) != 0); - if (__pyx_t_26) { + __pyx_t_27 = (__pyx_v_i_score < __pyx_v_j_score); + if (__pyx_t_27) { - /* "cornac/models/comparer/recom_comparer_sub.pyx":756 - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: - * O[i, j] = 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":642 + * continue + * elif i_score < j_score: + * s = -1 # <<<<<<<<<<<<<< * - * return correct, skipped, loss, bpr_loss + * pred = ( */ - __pyx_t_19 = __pyx_v_i; - __pyx_t_24 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )) = 0.0; + __pyx_v_s = -1L; - /* "cornac/models/comparer/recom_comparer_sub.pyx":755 - * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] - * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] - * if O[i, j] < 0: # <<<<<<<<<<<<<< - * O[i, j] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":641 + * skipped += 1 + * continue + * elif i_score < j_score: # <<<<<<<<<<<<<< + * s = -1 * */ } - } - } - } - } - } - } - } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } - /* "cornac/models/comparer/recom_comparer_sub.pyx":694 - * - * # update params with AdaGrad - * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< - * for i in prange(n_user_factors, schedule='guided'): - * for j in range(n_users): + /* "cornac/models/comparer/recom_comparer_sub.pyx":635 + * s = 1 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L66; - } - __pyx_L66:; - } - } + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":758 - * O[i, j] = 0 - * - * return correct, skipped, loss, bpr_loss # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":645 * - * def rank(self, user_id, item_ids=None): + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) # <<<<<<<<<<<<<< + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_correct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v_skipped); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_27 = PyFloat_FromDouble(__pyx_v_bpr_loss); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_27); - __pyx_t_28 = PyTuple_New(4); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 758, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_28); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_28, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_28, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_28, 2, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_27); - PyTuple_SET_ITEM(__pyx_t_28, 3, __pyx_t_27); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_6 = 0; - __pyx_t_27 = 0; - __pyx_r = __pyx_t_28; - __pyx_t_28 = 0; - goto __pyx_L0; + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_n_aspects); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 645, __pyx_L36_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":485 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def _fit_mter( # <<<<<<<<<<<<<< - * self, - * RNGVector rng_pos_uia, + /* "cornac/models/comparer/recom_comparer_sub.pyx":646 + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) # <<<<<<<<<<<<<< + * ) * s + * z = (1.0 / (1.0 + exp(pred))) */ + __pyx_t_28 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_n_aspects); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 646, __pyx_L36_error) - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_27); - __Pyx_XDECREF(__pyx_t_28); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); - __pyx_L2:; - __PYX_XDEC_MEMVIEW(&__pyx_v_X, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YU_oids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_YI_oids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_user_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_item_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_neg_item_ids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_indptr, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_p_user_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_earlier_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_later_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_aspect_indices, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_pair_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_G3, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_I, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_O, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_G3, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_U, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_I, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_sgrad_O, 1); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":647 + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s # <<<<<<<<<<<<<< + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: + */ + __pyx_v_pred = ((__pyx_t_5 - __pyx_t_28) * __pyx_v_s); -/* "cornac/models/comparer/recom_comparer_sub.pyx":760 - * return correct, skipped, loss, bpr_loss - * - * def rank(self, user_id, item_ids=None): # <<<<<<<<<<<<<< - * if self.alpha > 0 and self.n_top_aspects > 0: - * n_items = self.train_set.num_items + /* "cornac/models/comparer/recom_comparer_sub.pyx":648 + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s + * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< + * if z < .5: + * correct += 1 */ + __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); -/* Python wrapper */ -static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_13rank(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_13rank = {"rank", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_13rank, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_13rank(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_user_id = 0; - PyObject *__pyx_v_item_ids = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("rank (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_user_id,&__pyx_n_s_item_ids,0}; - PyObject* values[3] = {0,0,0}; - values[2] = ((PyObject *)((PyObject *)Py_None)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_user_id)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("rank", 0, 2, 3, 1); __PYX_ERR(0, 760, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item_ids); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rank") < 0)) __PYX_ERR(0, 760, __pyx_L3_error) - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_user_id = values[1]; - __pyx_v_item_ids = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("rank", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 760, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.rank", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_12rank(__pyx_self, __pyx_v_self, __pyx_v_user_id, __pyx_v_item_ids); + /* "cornac/models/comparer/recom_comparer_sub.pyx":649 + * ) * s + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * correct += 1 + * del_bpr = ld_bpr * z * s + */ + __pyx_t_27 = (__pyx_v_z < .5); + if (__pyx_t_27) { - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":650 + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: + * correct += 1 # <<<<<<<<<<<<<< + * del_bpr = ld_bpr * z * s + * + */ + __pyx_v_correct = (__pyx_v_correct + 1); -static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_12rank(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_user_id, PyObject *__pyx_v_item_ids) { - PyObject *__pyx_v_n_items = NULL; - PyObject *__pyx_v_n_top_aspects = NULL; - PyObject *__pyx_v_ts1 = NULL; - PyObject *__pyx_v_ts2 = NULL; - PyObject *__pyx_v_ts3 = NULL; - PyObject *__pyx_v_top_aspect_scores = NULL; - PyObject *__pyx_v_item_scores = NULL; - PyObject *__pyx_v_item_rank = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - PyObject *__pyx_t_9 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("rank", 0); - __Pyx_INCREF(__pyx_v_item_ids); + /* "cornac/models/comparer/recom_comparer_sub.pyx":649 + * ) * s + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * correct += 1 + * del_bpr = ld_bpr * z * s + */ + } - /* "cornac/models/comparer/recom_comparer_sub.pyx":761 + /* "cornac/models/comparer/recom_comparer_sub.pyx":651 + * if z < .5: + * correct += 1 + * del_bpr = ld_bpr * z * s # <<<<<<<<<<<<<< * - * def rank(self, user_id, item_ids=None): - * if self.alpha > 0 and self.n_top_aspects > 0: # <<<<<<<<<<<<<< - * n_items = self.train_set.num_items - * n_top_aspects = min(self.n_top_aspects, self.train_set.sentiment.num_aspects) + * bpr_loss += log(1 / (1 + exp(-pred))) */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_alpha); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 761, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 761, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_4) { - } else { - __pyx_t_1 = __pyx_t_4; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_top_aspects); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 761, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 761, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_1 = __pyx_t_4; - __pyx_L4_bool_binop_done:; - if (__pyx_t_1) { + __pyx_v_del_bpr = ((__pyx_v_ld_bpr * __pyx_v_z) * __pyx_v_s); - /* "cornac/models/comparer/recom_comparer_sub.pyx":762 - * def rank(self, user_id, item_ids=None): - * if self.alpha > 0 and self.n_top_aspects > 0: - * n_items = self.train_set.num_items # <<<<<<<<<<<<<< - * n_top_aspects = min(self.n_top_aspects, self.train_set.sentiment.num_aspects) - * item_ids = item_ids if item_ids is not None else range(n_items) + /* "cornac/models/comparer/recom_comparer_sub.pyx":653 + * del_bpr = ld_bpr * z * s + * + * bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< + * + * for i in range(n_user_factors): */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 762, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 762, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_n_items = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_v_bpr_loss = (__pyx_v_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":763 - * if self.alpha > 0 and self.n_top_aspects > 0: - * n_items = self.train_set.num_items - * n_top_aspects = min(self.n_top_aspects, self.train_set.sentiment.num_aspects) # <<<<<<<<<<<<<< - * item_ids = item_ids if item_ids is not None else range(n_items) - * item_ids = np.array(item_ids) + /* "cornac/models/comparer/recom_comparer_sub.pyx":655 + * bpr_loss += log(1 / (1 + exp(-pred))) + * + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 763, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 763, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 763, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_top_aspects); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 763, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 763, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 763, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (__pyx_t_1) { - __Pyx_INCREF(__pyx_t_3); - __pyx_t_5 = __pyx_t_3; - } else { - __Pyx_INCREF(__pyx_t_2); - __pyx_t_5 = __pyx_t_2; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __pyx_t_5; - __Pyx_INCREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_n_top_aspects = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_t_3 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "cornac/models/comparer/recom_comparer_sub.pyx":764 - * n_items = self.train_set.num_items - * n_top_aspects = min(self.n_top_aspects, self.train_set.sentiment.num_aspects) - * item_ids = item_ids if item_ids is not None else range(n_items) # <<<<<<<<<<<<<< - * item_ids = np.array(item_ids) - * ts1 = np.einsum("abc,a->bc", self.G1, self.U[user_id]) - */ - __pyx_t_1 = (__pyx_v_item_ids != Py_None); - if ((__pyx_t_1 != 0)) { - __Pyx_INCREF(__pyx_v_item_ids); - __pyx_t_3 = __pyx_v_item_ids; - } else { - __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_n_items); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 764, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = __pyx_t_5; - __pyx_t_5 = 0; - } - __Pyx_DECREF_SET(__pyx_v_item_ids, __pyx_t_3); - __pyx_t_3 = 0; + /* "cornac/models/comparer/recom_comparer_sub.pyx":656 + * + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): + */ + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "cornac/models/comparer/recom_comparer_sub.pyx":765 - * n_top_aspects = min(self.n_top_aspects, self.train_set.sentiment.num_aspects) - * item_ids = item_ids if item_ids is not None else range(n_items) - * item_ids = np.array(item_ids) # <<<<<<<<<<<<<< - * ts1 = np.einsum("abc,a->bc", self.G1, self.U[user_id]) - * ts2 = np.einsum("bc,Mb->Mc", ts1, self.I[item_ids]) + /* "cornac/models/comparer/recom_comparer_sub.pyx":657 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] */ - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 765, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 765, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && 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); - } - } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_v_item_ids) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_item_ids); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 765, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF_SET(__pyx_v_item_ids, __pyx_t_3); - __pyx_t_3 = 0; + __pyx_t_23 = __pyx_v_i_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_j_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_v_i_ij = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":766 - * item_ids = item_ids if item_ids is not None else range(n_items) - * item_ids = np.array(item_ids) - * ts1 = np.einsum("abc,a->bc", self.G1, self.U[user_id]) # <<<<<<<<<<<<<< - * ts2 = np.einsum("bc,Mb->Mc", ts1, self.I[item_ids]) - * ts3 = np.einsum("Mc,Nc->MN", ts2, self.A) + /* "cornac/models/comparer/recom_comparer_sub.pyx":658 + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 766, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_einsum); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 766, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 766, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 766, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_v_user_id); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 766, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = NULL; - __pyx_t_8 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - __pyx_t_8 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_5)) { - PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_kp_u_abc_a_bc, __pyx_t_2, __pyx_t_7}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 766, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { - PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_kp_u_abc_a_bc, __pyx_t_2, __pyx_t_7}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 766, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else - #endif - { - __pyx_t_9 = PyTuple_New(3+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 766, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - if (__pyx_t_6) { - __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_6); __pyx_t_6 = NULL; - } - __Pyx_INCREF(__pyx_kp_u_abc_a_bc); - __Pyx_GIVEREF(__pyx_kp_u_abc_a_bc); - PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_kp_u_abc_a_bc); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_8, __pyx_t_7); - __pyx_t_2 = 0; - __pyx_t_7 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 766, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_ts1 = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* "cornac/models/comparer/recom_comparer_sub.pyx":767 - * item_ids = np.array(item_ids) - * ts1 = np.einsum("abc,a->bc", self.G1, self.U[user_id]) - * ts2 = np.einsum("bc,Mb->Mc", ts1, self.I[item_ids]) # <<<<<<<<<<<<<< - * ts3 = np.einsum("Mc,Nc->MN", ts2, self.A) - * top_aspect_scores = ts3[ + /* "cornac/models/comparer/recom_comparer_sub.pyx":659 + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] */ - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 767, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_einsum); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 767, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_I); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 767, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_v_item_ids); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 767, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = NULL; - __pyx_t_8 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); - __pyx_t_8 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_kp_u_bc_Mb_Mc, __pyx_v_ts1, __pyx_t_7}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 767, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_kp_u_bc_Mb_Mc, __pyx_v_ts1, __pyx_t_7}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 767, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else - #endif - { - __pyx_t_2 = PyTuple_New(3+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 767, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (__pyx_t_5) { - __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5); __pyx_t_5 = NULL; - } - __Pyx_INCREF(__pyx_kp_u_bc_Mb_Mc); - __Pyx_GIVEREF(__pyx_kp_u_bc_Mb_Mc); - PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_8, __pyx_kp_u_bc_Mb_Mc); - __Pyx_INCREF(__pyx_v_ts1); - __Pyx_GIVEREF(__pyx_v_ts1); - PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_8, __pyx_v_ts1); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_2, 2+__pyx_t_8, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 767, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_v_ts2 = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_n_aspects; + __pyx_t_23 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":768 - * ts1 = np.einsum("abc,a->bc", self.G1, self.U[user_id]) - * ts2 = np.einsum("bc,Mb->Mc", ts1, self.I[item_ids]) - * ts3 = np.einsum("Mc,Nc->MN", ts2, self.A) # <<<<<<<<<<<<<< - * top_aspect_scores = ts3[ - * np.repeat(range(n_items), n_top_aspects).reshape( + /* "cornac/models/comparer/recom_comparer_sub.pyx":660 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 768, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_einsum); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 768, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_A); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 768, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_7 = NULL; - __pyx_t_8 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - __pyx_t_8 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_2)) { - PyObject *__pyx_temp[4] = {__pyx_t_7, __pyx_kp_u_Mc_Nc_MN, __pyx_v_ts2, __pyx_t_9}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 768, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { - PyObject *__pyx_temp[4] = {__pyx_t_7, __pyx_kp_u_Mc_Nc_MN, __pyx_v_ts2, __pyx_t_9}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 768, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } else - #endif - { - __pyx_t_5 = PyTuple_New(3+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 768, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7); __pyx_t_7 = NULL; - } - __Pyx_INCREF(__pyx_kp_u_Mc_Nc_MN); - __Pyx_GIVEREF(__pyx_kp_u_Mc_Nc_MN); - PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_8, __pyx_kp_u_Mc_Nc_MN); - __Pyx_INCREF(__pyx_v_ts2); - __Pyx_GIVEREF(__pyx_v_ts2); - PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_8, __pyx_v_ts2); - __Pyx_GIVEREF(__pyx_t_9); - PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_8, __pyx_t_9); - __pyx_t_9 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 768, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_ts3 = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_n_aspects; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_i_ij) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":770 - * ts3 = np.einsum("Mc,Nc->MN", ts2, self.A) - * top_aspect_scores = ts3[ - * np.repeat(range(n_items), n_top_aspects).reshape( # <<<<<<<<<<<<<< - * n_items, n_top_aspects - * ), + /* "cornac/models/comparer/recom_comparer_sub.pyx":661 + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij */ - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 770, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_repeat); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 770, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_n_items); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 770, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_7 = NULL; - __pyx_t_8 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); - __pyx_t_8 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_5, __pyx_v_n_top_aspects}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 770, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_5, __pyx_v_n_top_aspects}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 770, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } else - #endif - { - __pyx_t_6 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 770, __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_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_8, __pyx_t_5); - __Pyx_INCREF(__pyx_v_n_top_aspects); - __Pyx_GIVEREF(__pyx_v_n_top_aspects); - PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_8, __pyx_v_n_top_aspects); - __pyx_t_5 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 770, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_reshape); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 770, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_20 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_18 = __pyx_v_n_aspects; + __pyx_t_19 = __pyx_v_k; + __pyx_t_21 = __pyx_v_i_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":771 - * top_aspect_scores = ts3[ - * np.repeat(range(n_items), n_top_aspects).reshape( - * n_items, n_top_aspects # <<<<<<<<<<<<<< - * ), - * ts3[:, :-1].argsort(axis=1)[::-1][:, :n_top_aspects], + /* "cornac/models/comparer/recom_comparer_sub.pyx":662 + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij + * */ - __pyx_t_2 = NULL; - __pyx_t_8 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); - __pyx_t_8 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_n_items, __pyx_v_n_top_aspects}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_3); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_n_items, __pyx_v_n_top_aspects}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_3); - } else - #endif - { - __pyx_t_6 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 770, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - if (__pyx_t_2) { - __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); __pyx_t_2 = NULL; - } - __Pyx_INCREF(__pyx_v_n_items); - __Pyx_GIVEREF(__pyx_v_n_items); - PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_8, __pyx_v_n_items); - __Pyx_INCREF(__pyx_v_n_top_aspects); - __Pyx_GIVEREF(__pyx_v_n_top_aspects); - PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_8, __pyx_v_n_top_aspects); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_19 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_n_aspects; + __pyx_t_20 = __pyx_v_k; + __pyx_t_22 = __pyx_v_j_idx; + __pyx_t_21 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_18 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":663 + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij # <<<<<<<<<<<<<< + * + * for _ in prange(num_pair_samples, schedule='guided'): + */ + __pyx_t_20 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_18 = __pyx_v_n_aspects; + __pyx_t_19 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij); + } + } + } + goto __pyx_L48; + __pyx_L34_continue:; + goto __pyx_L48; + __pyx_L36_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L47; + __pyx_L47:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates4) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_bpr_loss; + __pyx_parallel_temp2 = __pyx_v_correct; + __pyx_parallel_temp3 = __pyx_v_del_bpr; + __pyx_parallel_temp4 = __pyx_v_i; + __pyx_parallel_temp5 = __pyx_v_i_idx; + __pyx_parallel_temp6 = __pyx_v_i_ij; + __pyx_parallel_temp7 = __pyx_v_i_score; + __pyx_parallel_temp8 = __pyx_v_idx; + __pyx_parallel_temp9 = __pyx_v_j; + __pyx_parallel_temp10 = __pyx_v_j_idx; + __pyx_parallel_temp11 = __pyx_v_j_score; + __pyx_parallel_temp12 = __pyx_v_jdx; + __pyx_parallel_temp13 = __pyx_v_k; + __pyx_parallel_temp14 = __pyx_v_pred; + __pyx_parallel_temp15 = __pyx_v_s; + __pyx_parallel_temp16 = __pyx_v_skipped; + __pyx_parallel_temp17 = __pyx_v_u_idx; + __pyx_parallel_temp18 = __pyx_v_z; + } + __pyx_L48:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_bpr_loss = __pyx_parallel_temp1; + __pyx_v_correct = __pyx_parallel_temp2; + __pyx_v_del_bpr = __pyx_parallel_temp3; + __pyx_v_i = __pyx_parallel_temp4; + __pyx_v_i_idx = __pyx_parallel_temp5; + __pyx_v_i_ij = __pyx_parallel_temp6; + __pyx_v_i_score = __pyx_parallel_temp7; + __pyx_v_idx = __pyx_parallel_temp8; + __pyx_v_j = __pyx_parallel_temp9; + __pyx_v_j_idx = __pyx_parallel_temp10; + __pyx_v_j_score = __pyx_parallel_temp11; + __pyx_v_jdx = __pyx_parallel_temp12; + __pyx_v_k = __pyx_parallel_temp13; + __pyx_v_pred = __pyx_parallel_temp14; + __pyx_v_s = __pyx_parallel_temp15; + __pyx_v_skipped = __pyx_parallel_temp16; + __pyx_v_u_idx = __pyx_parallel_temp17; + __pyx_v_z = __pyx_parallel_temp18; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":665 + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij + * + * for _ in prange(num_pair_samples, schedule='guided'): # <<<<<<<<<<<<<< + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] + */ + __pyx_t_4 = __pyx_v_num_pair_samples; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + float __pyx_parallel_temp2 = ((float)__PYX_NAN()); + float __pyx_parallel_temp3 = ((float)__PYX_NAN()); + long __pyx_parallel_temp4 = ((long)0xbad0bad0); + float __pyx_parallel_temp5 = ((float)__PYX_NAN()); + int __pyx_parallel_temp6 = ((int)0xbad0bad0); + int __pyx_parallel_temp7 = ((int)0xbad0bad0); + int __pyx_parallel_temp8 = ((int)0xbad0bad0); + int __pyx_parallel_temp9 = ((int)0xbad0bad0); + int __pyx_parallel_temp10 = ((int)0xbad0bad0); + int __pyx_parallel_temp11 = ((int)0xbad0bad0); + float __pyx_parallel_temp12 = ((float)__PYX_NAN()); + int __pyx_parallel_temp13 = ((int)0xbad0bad0); + float __pyx_parallel_temp14 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_8 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_8 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_a_ji) lastprivate(__pyx_v_del_aspect_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){ + if (__pyx_parallel_why < 2) + { + __pyx_v__ = (int)(0 + 1 * __pyx_t_7); + /* Initialize private variables to invalid values */ + __pyx_v_a_idx = ((int)0xbad0bad0); + __pyx_v_a_ji = ((float)__PYX_NAN()); + __pyx_v_del_aspect_bpr = ((float)__PYX_NAN()); + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_i_idx = ((int)0xbad0bad0); + __pyx_v_idx = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_j_idx = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_pred = ((float)__PYX_NAN()); + __pyx_v_u_idx = ((int)0xbad0bad0); + __pyx_v_z = ((float)__PYX_NAN()); - /* "cornac/models/comparer/recom_comparer_sub.pyx":773 - * n_items, n_top_aspects - * ), - * ts3[:, :-1].argsort(axis=1)[::-1][:, :n_top_aspects], # <<<<<<<<<<<<<< - * ] - * item_scores = ( + /* "cornac/models/comparer/recom_comparer_sub.pyx":666 + * + * for _ in prange(num_pair_samples, schedule='guided'): + * idx = rng_pos_pair.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] */ - __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_ts3, __pyx_tuple__12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 773, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_argsort); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 773, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 773, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_axis, __pyx_int_1) < 0) __PYX_ERR(0, 773, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 773, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_slice__13); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 773, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PySlice_New(Py_None, __pyx_v_n_top_aspects, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 773, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 773, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_slice__10); - __Pyx_GIVEREF(__pyx_slice__10); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_slice__10); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_9, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 773, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_pair->__pyx_vtab)->generate(__pyx_v_rng_pos_pair, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 666, __pyx_L51_error) + __pyx_v_idx = __pyx_t_3; - /* "cornac/models/comparer/recom_comparer_sub.pyx":769 - * ts2 = np.einsum("bc,Mb->Mc", ts1, self.I[item_ids]) - * ts3 = np.einsum("Mc,Nc->MN", ts2, self.A) - * top_aspect_scores = ts3[ # <<<<<<<<<<<<<< - * np.repeat(range(n_items), n_top_aspects).reshape( - * n_items, n_top_aspects + /* "cornac/models/comparer/recom_comparer_sub.pyx":667 + * for _ in prange(num_pair_samples, schedule='guided'): + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] # <<<<<<<<<<<<<< + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] */ - __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 769, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2); - __pyx_t_3 = 0; - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_ts3, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 769, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_top_aspect_scores = __pyx_t_2; - __pyx_t_2 = 0; + __pyx_t_23 = __pyx_v_idx; + __pyx_v_u_idx = (*((int *) ( /* dim=0 */ (__pyx_v_p_user_indices.data + __pyx_t_23 * __pyx_v_p_user_indices.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":776 - * ] - * item_scores = ( - * self.alpha * top_aspect_scores.mean(axis=1) + (1 - self.alpha) * ts3[:, -1] # <<<<<<<<<<<<<< - * ) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":668 + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] # <<<<<<<<<<<<<< + * j_idx = later_indices[idx] + * a_idx = aspect_indices[idx] */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_alpha); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 776, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_top_aspect_scores, __pyx_n_s_mean); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 776, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 776, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_axis, __pyx_int_1) < 0) __PYX_ERR(0, 776, __pyx_L1_error) - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 776, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Multiply(__pyx_t_2, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 776, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_alpha); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 776, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_2 = __Pyx_PyInt_SubtractCObj(__pyx_int_1, __pyx_t_9, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 776, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_ts3, __pyx_tuple__14); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 776, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_6 = PyNumber_Multiply(__pyx_t_2, __pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 776, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyNumber_Add(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 776, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_item_scores = __pyx_t_9; - __pyx_t_9 = 0; + __pyx_t_23 = __pyx_v_idx; + __pyx_v_i_idx = (*((int *) ( /* dim=0 */ (__pyx_v_earlier_indices.data + __pyx_t_23 * __pyx_v_earlier_indices.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":779 - * ) + /* "cornac/models/comparer/recom_comparer_sub.pyx":669 + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] # <<<<<<<<<<<<<< + * a_idx = aspect_indices[idx] * - * item_rank = item_ids[item_scores.argsort()[::-1]] # <<<<<<<<<<<<<< - * return item_rank, item_scores - * return super().rank(user_id, item_ids) */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_item_scores, __pyx_n_s_argsort); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 779, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && 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); - } - } - __pyx_t_9 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 779, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_9, __pyx_slice__13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 779, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_item_ids, __pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 779, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_item_rank = __pyx_t_9; - __pyx_t_9 = 0; + __pyx_t_23 = __pyx_v_idx; + __pyx_v_j_idx = (*((int *) ( /* dim=0 */ (__pyx_v_later_indices.data + __pyx_t_23 * __pyx_v_later_indices.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":780 + /* "cornac/models/comparer/recom_comparer_sub.pyx":670 + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] + * a_idx = aspect_indices[idx] # <<<<<<<<<<<<<< * - * item_rank = item_ids[item_scores.argsort()[::-1]] - * return item_rank, item_scores # <<<<<<<<<<<<<< - * return super().rank(user_id, item_ids) + * pred = ( */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 780, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_INCREF(__pyx_v_item_rank); - __Pyx_GIVEREF(__pyx_v_item_rank); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_item_rank); - __Pyx_INCREF(__pyx_v_item_scores); - __Pyx_GIVEREF(__pyx_v_item_scores); - PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_item_scores); - __pyx_r = __pyx_t_9; - __pyx_t_9 = 0; - goto __pyx_L0; + __pyx_t_23 = __pyx_v_idx; + __pyx_v_a_idx = (*((int *) ( /* dim=0 */ (__pyx_v_aspect_indices.data + __pyx_t_23 * __pyx_v_aspect_indices.strides[0]) ))); - /* "cornac/models/comparer/recom_comparer_sub.pyx":761 + /* "cornac/models/comparer/recom_comparer_sub.pyx":673 * - * def rank(self, user_id, item_ids=None): - * if self.alpha > 0 and self.n_top_aspects > 0: # <<<<<<<<<<<<<< - * n_items = self.train_set.num_items - * n_top_aspects = min(self.n_top_aspects, self.train_set.sentiment.num_aspects) + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) # <<<<<<<<<<<<<< + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * ) */ - } + __pyx_t_28 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 673, __pyx_L51_error) - /* "cornac/models/comparer/recom_comparer_sub.pyx":781 - * item_rank = item_ids[item_scores.argsort()[::-1]] - * return item_rank, item_scores - * return super().rank(user_id, item_ids) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":674 + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< + * ) + * */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_6 = __Pyx_CyFunction_GetClassObj(__pyx_self); - if (!__pyx_t_6) { PyErr_SetString(PyExc_SystemError, "super(): empty __class__ cell"); __PYX_ERR(0, 781, __pyx_L1_error) } - __Pyx_INCREF(__pyx_t_6); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 781, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); - __Pyx_INCREF(__pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self); - __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 781, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_rank); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 781, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = NULL; - __pyx_t_8 = 0; - if (CYTHON_UNPACK_METHODS && likely(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_8 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_user_id, __pyx_v_item_ids}; - __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 781, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_9); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_user_id, __pyx_v_item_ids}; - __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 781, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_9); - } else - #endif - { - __pyx_t_2 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 781, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (__pyx_t_6) { - __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6); __pyx_t_6 = NULL; - } - __Pyx_INCREF(__pyx_v_user_id); - __Pyx_GIVEREF(__pyx_v_user_id); - PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_8, __pyx_v_user_id); - __Pyx_INCREF(__pyx_v_item_ids); - __Pyx_GIVEREF(__pyx_v_item_ids); - PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_8, __pyx_v_item_ids); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 781, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_9; - __pyx_t_9 = 0; - goto __pyx_L0; + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 674, __pyx_L51_error) + __pyx_v_pred = (__pyx_t_28 - __pyx_t_5); - /* "cornac/models/comparer/recom_comparer_sub.pyx":760 - * return correct, skipped, loss, bpr_loss + /* "cornac/models/comparer/recom_comparer_sub.pyx":677 + * ) * - * def rank(self, user_id, item_ids=None): # <<<<<<<<<<<<<< - * if self.alpha > 0 and self.n_top_aspects > 0: - * n_items = self.train_set.num_items + * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< + * if z < .5: + * aspect_correct += 1 */ + __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.rank", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_n_items); - __Pyx_XDECREF(__pyx_v_n_top_aspects); - __Pyx_XDECREF(__pyx_v_ts1); - __Pyx_XDECREF(__pyx_v_ts2); - __Pyx_XDECREF(__pyx_v_ts3); - __Pyx_XDECREF(__pyx_v_top_aspect_scores); - __Pyx_XDECREF(__pyx_v_item_scores); - __Pyx_XDECREF(__pyx_v_item_rank); - __Pyx_XDECREF(__pyx_v_item_ids); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":735 - * ctypedef npy_cdouble complex_t + /* "cornac/models/comparer/recom_comparer_sub.pyx":678 * - * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(1, a) + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * aspect_correct += 1 * */ + __pyx_t_27 = (__pyx_v_z < .5); + if (__pyx_t_27) { -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0); - - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":736 - * - * cdef inline object PyArray_MultiIterNew1(a): - * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":679 + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: + * aspect_correct += 1 # <<<<<<<<<<<<<< * - * cdef inline object PyArray_MultiIterNew2(a, b): + * del_aspect_bpr = lambda_d * z */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 736, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; + __pyx_v_aspect_correct = (__pyx_v_aspect_correct + 1); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":735 - * ctypedef npy_cdouble complex_t + /* "cornac/models/comparer/recom_comparer_sub.pyx":678 * - * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(1, a) + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * aspect_correct += 1 * */ + } - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":738 - * return PyArray_MultiIterNew(1, a) + /* "cornac/models/comparer/recom_comparer_sub.pyx":681 + * aspect_correct += 1 * - * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(2, a, b) + * del_aspect_bpr = lambda_d * z # <<<<<<<<<<<<<< + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): + */ + __pyx_v_del_aspect_bpr = (__pyx_v_lambda_d * __pyx_v_z); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":682 * + * del_aspect_bpr = lambda_d * z + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< + * for i in range(n_user_factors): + * for j in range(n_item_factors): */ + __pyx_v_aspect_bpr_loss = (__pyx_v_aspect_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":683 + * del_aspect_bpr = lambda_d * z + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] + */ + __pyx_t_3 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":739 - * - * cdef inline object PyArray_MultiIterNew2(a, b): - * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew3(a, b, c): + /* "cornac/models/comparer/recom_comparer_sub.pyx":684 + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 739, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":738 - * return PyArray_MultiIterNew(1, a) - * - * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(2, a, b) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":685 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] */ + __pyx_t_23 = __pyx_v_j_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_v_a_ji = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":686 + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + */ + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":741 - * return PyArray_MultiIterNew(2, a, b) - * - * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(3, a, b, c) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":687 + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] */ + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":688 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_20 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_a_ji) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":742 - * - * cdef inline object PyArray_MultiIterNew3(a, b, c): - * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + /* "cornac/models/comparer/recom_comparer_sub.pyx":689 + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 742, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_20 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_k; + __pyx_t_21 = __pyx_v_j_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_20 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":741 - * return PyArray_MultiIterNew(2, a, b) - * - * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(3, a, b, c) + /* "cornac/models/comparer/recom_comparer_sub.pyx":690 + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji * */ + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i_idx; + __pyx_t_21 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_20 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; + /* "cornac/models/comparer/recom_comparer_sub.pyx":691 + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji # <<<<<<<<<<<<<< + * + * # update params with AdaGrad + */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_20 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji); + } + } + } + goto __pyx_L61; + __pyx_L51_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L60; + __pyx_L60:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates5) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_a_idx; + __pyx_parallel_temp2 = __pyx_v_a_ji; + __pyx_parallel_temp3 = __pyx_v_aspect_bpr_loss; + __pyx_parallel_temp4 = __pyx_v_aspect_correct; + __pyx_parallel_temp5 = __pyx_v_del_aspect_bpr; + __pyx_parallel_temp6 = __pyx_v_i; + __pyx_parallel_temp7 = __pyx_v_i_idx; + __pyx_parallel_temp8 = __pyx_v_idx; + __pyx_parallel_temp9 = __pyx_v_j; + __pyx_parallel_temp10 = __pyx_v_j_idx; + __pyx_parallel_temp11 = __pyx_v_k; + __pyx_parallel_temp12 = __pyx_v_pred; + __pyx_parallel_temp13 = __pyx_v_u_idx; + __pyx_parallel_temp14 = __pyx_v_z; + } + __pyx_L61:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_a_idx = __pyx_parallel_temp1; + __pyx_v_a_ji = __pyx_parallel_temp2; + __pyx_v_aspect_bpr_loss = __pyx_parallel_temp3; + __pyx_v_aspect_correct = __pyx_parallel_temp4; + __pyx_v_del_aspect_bpr = __pyx_parallel_temp5; + __pyx_v_i = __pyx_parallel_temp6; + __pyx_v_i_idx = __pyx_parallel_temp7; + __pyx_v_idx = __pyx_parallel_temp8; + __pyx_v_j = __pyx_parallel_temp9; + __pyx_v_j_idx = __pyx_parallel_temp10; + __pyx_v_k = __pyx_parallel_temp11; + __pyx_v_pred = __pyx_parallel_temp12; + __pyx_v_u_idx = __pyx_parallel_temp13; + __pyx_v_z = __pyx_parallel_temp14; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } + goto __pyx_L63; + __pyx_L8_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L63; + __pyx_L63:; + #ifdef _OPENMP + Py_END_ALLOW_THREADS + #else +{ +#ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #endif /* _OPENMP */ + /* Clean up any temporaries */ + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + #ifndef _OPENMP } +#endif /* _OPENMP */ + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L4_error; + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif + } -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":744 - * return PyArray_MultiIterNew(3, a, b, c) - * - * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(4, a, b, c, d) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":568 + * del_a_reg.fill(0) + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L5; + } + __pyx_L4_error: { + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L1_error; + } + __pyx_L5:; + } + } -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0); - - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":745 - * - * cdef inline object PyArray_MultiIterNew4(a, b, c, d): - * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":694 * - * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 745, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel private(__pyx_t_10, __pyx_t_12, __pyx_t_13, __pyx_t_15, __pyx_t_16, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_27, __pyx_t_29, __pyx_t_3, __pyx_t_7, __pyx_t_8, __pyx_t_9) num_threads(__pyx_v_n_threads) + #endif /* _OPENMP */ + { - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":744 - * return PyArray_MultiIterNew(3, a, b, c) - * - * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(4, a, b, c, d) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":695 + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): + * for i in prange(n_user_factors, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_users): + * if del_u[j, i] != 0: */ + __pyx_t_3 = __pyx_v_n_user_factors; + { + __pyx_t_12 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_12 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_12; __pyx_t_10++){ + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_10); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":747 - * return PyArray_MultiIterNew(4, a, b, c, d) - * - * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(5, a, b, c, d, e) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":696 + * with nogil, parallel(num_threads=n_threads): + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): # <<<<<<<<<<<<<< + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] */ + __pyx_t_13 = __pyx_v_n_users; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { + __pyx_v_j = __pyx_t_8; -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0); - - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":748 - * - * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): - * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< - * - * cdef inline tuple PyDataType_SHAPE(dtype d): + /* "cornac/models/comparer/recom_comparer_sub.pyx":697 + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): + * if del_u[j, i] != 0: # <<<<<<<<<<<<<< + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 748, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":747 - * return PyArray_MultiIterNew(4, a, b, c, d) - * - * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(5, a, b, c, d, e) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":698 + * for j in range(n_users): + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] # <<<<<<<<<<<<<< + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] */ + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_u_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) ))))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":697 + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): + * if del_u[j, i] != 0: # <<<<<<<<<<<<<< + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + */ + } -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":750 - * return PyArray_MultiIterNew(5, a, b, c, d, e) - * - * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< - * if PyDataType_HASSUBARRAY(d): - * return d.subarray.shape + /* "cornac/models/comparer/recom_comparer_sub.pyx":699 + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] # <<<<<<<<<<<<<< + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: */ + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_19 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_U.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)))); -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__pyx_v_d) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("PyDataType_SHAPE", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":700 + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] # <<<<<<<<<<<<<< + * if U[j, i] < 0: + * U[j, i] = 0 + */ + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_24 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_U.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[1].strides))); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":751 + /* "cornac/models/comparer/recom_comparer_sub.pyx":701 + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: # <<<<<<<<<<<<<< + * U[j, i] = 0 * - * cdef inline tuple PyDataType_SHAPE(dtype d): - * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< - * return d.subarray.shape - * else: */ - __pyx_t_1 = (PyDataType_HASSUBARRAY(__pyx_v_d) != 0); - if (__pyx_t_1) { + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_27 = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":752 - * cdef inline tuple PyDataType_SHAPE(dtype d): - * if PyDataType_HASSUBARRAY(d): - * return d.subarray.shape # <<<<<<<<<<<<<< - * else: - * return () + /* "cornac/models/comparer/recom_comparer_sub.pyx":702 + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: + * U[j, i] = 0 # <<<<<<<<<<<<<< + * + * for j in range(n_item_factors): */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject*)__pyx_v_d->subarray->shape)); - __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape); - goto __pyx_L0; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )) = 0.0; - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":751 + /* "cornac/models/comparer/recom_comparer_sub.pyx":701 + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: # <<<<<<<<<<<<<< + * U[j, i] = 0 * - * cdef inline tuple PyDataType_SHAPE(dtype d): - * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< - * return d.subarray.shape - * else: */ - } + } + } - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":754 - * return d.subarray.shape - * else: - * return () # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":704 + * U[j, i] = 0 * + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_empty_tuple); - __pyx_r = __pyx_empty_tuple; - goto __pyx_L0; - } + __pyx_t_13 = __pyx_v_n_item_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { + __pyx_v_j = __pyx_t_8; - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":750 - * return PyArray_MultiIterNew(5, a, b, c, d, e) + /* "cornac/models/comparer/recom_comparer_sub.pyx":705 * - * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< - * if PyDataType_HASSUBARRAY(d): - * return d.subarray.shape + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] */ + __pyx_t_16 = __pyx_v_n_aspect_factors; + __pyx_t_29 = __pyx_t_16; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_29; __pyx_t_7+=1) { + __pyx_v_k = __pyx_t_7; - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":706 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + */ + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":929 - * int _import_umath() except -1 - * - * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< - * Py_INCREF(base) # important to do this before stealing the reference below! - * PyArray_SetBaseObject(arr, base) + /* "cornac/models/comparer/recom_comparer_sub.pyx":707 + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) ))))); -static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_array_base", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":706 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + */ + } - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":930 - * - * cdef inline void set_array_base(ndarray arr, object base): - * Py_INCREF(base) # important to do this before stealing the reference below! # <<<<<<<<<<<<<< - * PyArray_SetBaseObject(arr, base) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":708 + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: */ - Py_INCREF(__pyx_v_base); + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_22 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G1.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)))); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":931 - * cdef inline void set_array_base(ndarray arr, object base): - * Py_INCREF(base) # important to do this before stealing the reference below! - * PyArray_SetBaseObject(arr, base) # <<<<<<<<<<<<<< - * - * cdef inline object get_array_base(ndarray arr): + /* "cornac/models/comparer/recom_comparer_sub.pyx":709 + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< + * if G1[i, j, k] < 0: + * G1[i, j, k] = 0 */ - (void)(PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base)); + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_22 * __pyx_v_G1.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_23 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_25 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_9 * __pyx_v_sgrad_G1.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides))); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":929 - * int _import_umath() except -1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":710 + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< + * G1[i, j, k] = 0 * - * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< - * Py_INCREF(base) # important to do this before stealing the reference below! - * PyArray_SetBaseObject(arr, base) */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_24 * __pyx_v_G1.strides[2]) ))) < 0.0); + if (__pyx_t_27) { - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":933 - * PyArray_SetBaseObject(arr, base) + /* "cornac/models/comparer/recom_comparer_sub.pyx":711 + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: + * G1[i, j, k] = 0 # <<<<<<<<<<<<<< * - * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< - * base = PyArray_BASE(arr) - * if base is NULL: + * for j in range(n_aspect_factors): */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )) = 0.0; -static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { - PyObject *__pyx_v_base; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("get_array_base", 0); - - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":934 + /* "cornac/models/comparer/recom_comparer_sub.pyx":710 + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< + * G1[i, j, k] = 0 * - * cdef inline object get_array_base(ndarray arr): - * base = PyArray_BASE(arr) # <<<<<<<<<<<<<< - * if base is NULL: - * return None */ - __pyx_v_base = PyArray_BASE(__pyx_v_arr); + } + } + } - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":935 - * cdef inline object get_array_base(ndarray arr): - * base = PyArray_BASE(arr) - * if base is NULL: # <<<<<<<<<<<<<< - * return None - * return base + /* "cornac/models/comparer/recom_comparer_sub.pyx":713 + * G1[i, j, k] = 0 + * + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: */ - __pyx_t_1 = ((__pyx_v_base == NULL) != 0); - if (__pyx_t_1) { + __pyx_t_13 = __pyx_v_n_aspect_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { + __pyx_v_j = __pyx_t_8; - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":936 - * base = PyArray_BASE(arr) - * if base is NULL: - * return None # <<<<<<<<<<<<<< - * return base + /* "cornac/models/comparer/recom_comparer_sub.pyx":714 * + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] */ - __Pyx_XDECREF(__pyx_r); - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; + __pyx_t_16 = __pyx_v_n_opinion_factors; + __pyx_t_29 = __pyx_t_16; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_29; __pyx_t_7+=1) { + __pyx_v_k = __pyx_t_7; - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":935 - * cdef inline object get_array_base(ndarray arr): - * base = PyArray_BASE(arr) - * if base is NULL: # <<<<<<<<<<<<<< - * return None - * return base + /* "cornac/models/comparer/recom_comparer_sub.pyx":715 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] */ - } + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":937 - * if base is NULL: - * return None - * return base # <<<<<<<<<<<<<< - * - * # Versions of the import_* functions which are more suitable for + /* "cornac/models/comparer/recom_comparer_sub.pyx":716 + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_base)); - __pyx_r = ((PyObject *)__pyx_v_base); - goto __pyx_L0; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) ))))); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":933 - * PyArray_SetBaseObject(arr, base) - * - * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< - * base = PyArray_BASE(arr) - * if base is NULL: + /* "cornac/models/comparer/recom_comparer_sub.pyx":715 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] */ + } - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":941 - * # Versions of the import_* functions which are more suitable for - * # Cython code. - * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< - * try: - * __pyx_import_array() + /* "cornac/models/comparer/recom_comparer_sub.pyx":717 + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_20 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_22 * __pyx_v_sgrad_G2.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)))); -static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("import_array", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":718 + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< + * if G2[i, j, k] < 0: + * G2[i, j, k] = 0 + */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_22 * __pyx_v_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_G2.strides[1]) ) + __pyx_t_20 * __pyx_v_G2.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_24 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G2.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides))); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":942 - * # Cython code. - * cdef inline int import_array() except -1: - * try: # <<<<<<<<<<<<<< - * __pyx_import_array() - * except Exception: + /* "cornac/models/comparer/recom_comparer_sub.pyx":719 + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< + * G2[i, j, k] = 0 + * */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_27 = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_23 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) ))) < 0.0); + if (__pyx_t_27) { - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":943 - * cdef inline int import_array() except -1: - * try: - * __pyx_import_array() # <<<<<<<<<<<<<< - * except Exception: - * raise ImportError("numpy.core.multiarray failed to import") + /* "cornac/models/comparer/recom_comparer_sub.pyx":720 + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: + * G2[i, j, k] = 0 # <<<<<<<<<<<<<< + * + * for i in prange(n_item_factors, schedule='guided'): */ - __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 943, __pyx_L3_error) + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) )) = 0.0; - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":942 - * # Cython code. - * cdef inline int import_array() except -1: - * try: # <<<<<<<<<<<<<< - * __pyx_import_array() - * except Exception: + /* "cornac/models/comparer/recom_comparer_sub.pyx":719 + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< + * G2[i, j, k] = 0 + * */ - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L8_try_end; - __pyx_L3_error:; + } + } + } + } + } + } + } - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":944 - * try: - * __pyx_import_array() - * except Exception: # <<<<<<<<<<<<<< - * raise ImportError("numpy.core.multiarray failed to import") + /* "cornac/models/comparer/recom_comparer_sub.pyx":722 + * G2[i, j, k] = 0 * + * for i in prange(n_item_factors, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_items): + * if del_i[j, i] != 0: */ - __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); - if (__pyx_t_4) { - __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 944, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_7); + __pyx_t_12 = __pyx_v_n_item_factors; + { + __pyx_t_3 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_3 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_3; __pyx_t_10++){ + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_10); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":945 - * __pyx_import_array() - * except Exception: - * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":723 * - * cdef inline int import_umath() except -1: + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): # <<<<<<<<<<<<<< + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] */ - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 945, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_Raise(__pyx_t_8, 0, 0, 0); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __PYX_ERR(1, 945, __pyx_L5_except_error) - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; + __pyx_t_13 = __pyx_v_n_items; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { + __pyx_v_j = __pyx_t_8; - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":942 - * # Cython code. - * cdef inline int import_array() except -1: - * try: # <<<<<<<<<<<<<< - * __pyx_import_array() - * except Exception: + /* "cornac/models/comparer/recom_comparer_sub.pyx":724 + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): + * if del_i[j, i] != 0: # <<<<<<<<<<<<<< + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] */ - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L8_try_end:; - } + __pyx_t_23 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":941 - * # Versions of the import_* functions which are more suitable for - * # Cython code. - * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< - * try: - * __pyx_import_array() + /* "cornac/models/comparer/recom_comparer_sub.pyx":725 + * for j in range(n_items): + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] # <<<<<<<<<<<<<< + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] */ + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) ))))); - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":724 + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): + * if del_i[j, i] != 0: # <<<<<<<<<<<<<< + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + */ + } -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":947 - * raise ImportError("numpy.core.multiarray failed to import") - * - * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< - * try: - * _import_umath() + /* "cornac/models/comparer/recom_comparer_sub.pyx":726 + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] # <<<<<<<<<<<<<< + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: */ + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_24 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_I.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)))); -static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("import_umath", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":727 + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] # <<<<<<<<<<<<<< + * if I[j, i] < 0: + * I[j, i] = 0 + */ + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_25 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_I.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[1].strides))); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":948 + /* "cornac/models/comparer/recom_comparer_sub.pyx":728 + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: # <<<<<<<<<<<<<< + * I[j, i] = 0 * - * cdef inline int import_umath() except -1: - * try: # <<<<<<<<<<<<<< - * _import_umath() - * except Exception: */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_27 = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_18 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":949 - * cdef inline int import_umath() except -1: - * try: - * _import_umath() # <<<<<<<<<<<<<< - * except Exception: - * raise ImportError("numpy.core.umath failed to import") + /* "cornac/models/comparer/recom_comparer_sub.pyx":729 + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: + * I[j, i] = 0 # <<<<<<<<<<<<<< + * + * for j in range(n_aspect_factors): */ - __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 949, __pyx_L3_error) + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )) = 0.0; - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":948 + /* "cornac/models/comparer/recom_comparer_sub.pyx":728 + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: # <<<<<<<<<<<<<< + * I[j, i] = 0 * - * cdef inline int import_umath() except -1: - * try: # <<<<<<<<<<<<<< - * _import_umath() - * except Exception: */ - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L8_try_end; - __pyx_L3_error:; + } + } - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":950 - * try: - * _import_umath() - * except Exception: # <<<<<<<<<<<<<< - * raise ImportError("numpy.core.umath failed to import") + /* "cornac/models/comparer/recom_comparer_sub.pyx":731 + * I[j, i] = 0 * + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: */ - __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); - if (__pyx_t_4) { - __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 950, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_7); + __pyx_t_13 = __pyx_v_n_aspect_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { + __pyx_v_j = __pyx_t_8; - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":951 - * _import_umath() - * except Exception: - * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":732 * - * cdef inline int import_ufunc() except -1: + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] */ - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 951, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_Raise(__pyx_t_8, 0, 0, 0); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __PYX_ERR(1, 951, __pyx_L5_except_error) - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; + __pyx_t_16 = __pyx_v_n_opinion_factors; + __pyx_t_29 = __pyx_t_16; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_29; __pyx_t_7+=1) { + __pyx_v_k = __pyx_t_7; - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":948 - * - * cdef inline int import_umath() except -1: - * try: # <<<<<<<<<<<<<< - * _import_umath() - * except Exception: + /* "cornac/models/comparer/recom_comparer_sub.pyx":733 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] */ - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L8_try_end:; - } + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":947 - * raise ImportError("numpy.core.multiarray failed to import") - * - * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< - * try: - * _import_umath() + /* "cornac/models/comparer/recom_comparer_sub.pyx":734 + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) ))))); - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":733 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + */ + } -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":953 - * raise ImportError("numpy.core.umath failed to import") - * - * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< - * try: - * _import_umath() + /* "cornac/models/comparer/recom_comparer_sub.pyx":735 + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: */ + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_22 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G3.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)))); -static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("import_ufunc", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":736 + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< + * if G3[i, j, k] < 0: + * G3[i, j, k] = 0 + */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_G3.strides[1]) ) + __pyx_t_22 * __pyx_v_G3.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_23 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G3.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides))); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":954 + /* "cornac/models/comparer/recom_comparer_sub.pyx":737 + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< + * G3[i, j, k] = 0 * - * cdef inline int import_ufunc() except -1: - * try: # <<<<<<<<<<<<<< - * _import_umath() - * except Exception: */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_27 = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_19 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) ))) < 0.0); + if (__pyx_t_27) { - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":955 - * cdef inline int import_ufunc() except -1: - * try: - * _import_umath() # <<<<<<<<<<<<<< - * except Exception: - * raise ImportError("numpy.core.umath failed to import") + /* "cornac/models/comparer/recom_comparer_sub.pyx":738 + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: + * G3[i, j, k] = 0 # <<<<<<<<<<<<<< + * + * for i in prange(n_aspects + 1, schedule='guided'): */ - __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 955, __pyx_L3_error) + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) )) = 0.0; - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":954 + /* "cornac/models/comparer/recom_comparer_sub.pyx":737 + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< + * G3[i, j, k] = 0 * - * cdef inline int import_ufunc() except -1: - * try: # <<<<<<<<<<<<<< - * _import_umath() - * except Exception: */ - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L8_try_end; - __pyx_L3_error:; + } + } + } + } + } + } + } - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":956 - * try: - * _import_umath() - * except Exception: # <<<<<<<<<<<<<< - * raise ImportError("numpy.core.umath failed to import") + /* "cornac/models/comparer/recom_comparer_sub.pyx":740 + * G3[i, j, k] = 0 * + * for i in prange(n_aspects + 1, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: */ - __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); - if (__pyx_t_4) { - __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 956, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = (__pyx_v_n_aspects + 1); + { + __pyx_t_12 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_12 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_12; __pyx_t_10++){ + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_10); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":957 - * _import_umath() - * except Exception: - * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":741 * - * cdef extern from *: + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] */ - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 957, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_Raise(__pyx_t_8, 0, 0, 0); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __PYX_ERR(1, 957, __pyx_L5_except_error) - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; + __pyx_t_13 = __pyx_v_n_aspect_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { + __pyx_v_j = __pyx_t_8; - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":954 - * - * cdef inline int import_ufunc() except -1: - * try: # <<<<<<<<<<<<<< - * _import_umath() - * except Exception: + /* "cornac/models/comparer/recom_comparer_sub.pyx":742 + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: # <<<<<<<<<<<<<< + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] */ - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L8_try_end:; - } + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":953 - * raise ImportError("numpy.core.umath failed to import") - * - * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< - * try: - * _import_umath() + /* "cornac/models/comparer/recom_comparer_sub.pyx":743 + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] # <<<<<<<<<<<<<< + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) ))))); - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":742 + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: # <<<<<<<<<<<<<< + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + */ + } -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":967 - * - * - * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< - * """ - * Cython equivalent of `isinstance(obj, np.timedelta64)` + /* "cornac/models/comparer/recom_comparer_sub.pyx":744 + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] # <<<<<<<<<<<<<< + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_23 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_A.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)))); -static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_obj) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("is_timedelta64_object", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":745 + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] # <<<<<<<<<<<<<< + * if A[i, j] < 0: + * A[i, j] = 0 + */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_24 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_A.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[1].strides))); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":979 - * bool - * """ - * return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type) # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":746 + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: # <<<<<<<<<<<<<< + * A[i, j] = 0 * */ - __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyTimedeltaArrType_Type)); - goto __pyx_L0; + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":967 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":747 + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: + * A[i, j] = 0 # <<<<<<<<<<<<<< * - * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< - * """ - * Cython equivalent of `isinstance(obj, np.timedelta64)` + * for i in prange(n_opinions, schedule='guided'): */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )) = 0.0; - /* function exit code */ - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":982 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":746 + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: # <<<<<<<<<<<<<< + * A[i, j] = 0 * - * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< - * """ - * Cython equivalent of `isinstance(obj, np.datetime64)` */ + } + } + } + } + } + } -static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_obj) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("is_datetime64_object", 0); - - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":994 - * bool - * """ - * return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type) # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":749 + * A[i, j] = 0 * + * for i in prange(n_opinions, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: */ - __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyDatetimeArrType_Type)); - goto __pyx_L0; + __pyx_t_12 = __pyx_v_n_opinions; + { + __pyx_t_3 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_3 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_3; __pyx_t_10++){ + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_10); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":982 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":750 * - * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< - * """ - * Cython equivalent of `isinstance(obj, np.datetime64)` + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] */ + __pyx_t_13 = __pyx_v_n_opinion_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { + __pyx_v_j = __pyx_t_8; - /* function exit code */ - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":997 - * - * - * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< - * """ - * returns the int64 value underlying scalar numpy datetime64 object + /* "cornac/models/comparer/recom_comparer_sub.pyx":751 + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: # <<<<<<<<<<<<<< + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { -static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject *__pyx_v_obj) { - npy_datetime __pyx_r; + /* "cornac/models/comparer/recom_comparer_sub.pyx":752 + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] # <<<<<<<<<<<<<< + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_o_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) ))))); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":1004 - * also needed. That can be found using `get_datetime64_unit`. - * """ - * return (obj).obval # <<<<<<<<<<<<<< - * - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":751 + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: # <<<<<<<<<<<<<< + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] */ - __pyx_r = ((PyDatetimeScalarObject *)__pyx_v_obj)->obval; - goto __pyx_L0; + } - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":997 - * - * - * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< - * """ - * returns the int64 value underlying scalar numpy datetime64 object + /* "cornac/models/comparer/recom_comparer_sub.pyx":753 + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] # <<<<<<<<<<<<<< + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_9 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_O.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)))); - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":754 + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] # <<<<<<<<<<<<<< + * if O[i, j] < 0: + * O[i, j] = 0 + */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_23 * __pyx_v_O.strides[0]) ) + __pyx_t_9 * __pyx_v_O.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_25 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_O.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[1].strides))); -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":1007 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":755 + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: # <<<<<<<<<<<<<< + * O[i, j] = 0 * - * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< - * """ - * returns the int64 value underlying scalar numpy timedelta64 object */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_27 = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_19 * __pyx_v_O.strides[1]) ))) < 0.0); + if (__pyx_t_27) { -static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject *__pyx_v_obj) { - npy_timedelta __pyx_r; - - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":1011 - * returns the int64 value underlying scalar numpy timedelta64 object - * """ - * return (obj).obval # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":756 + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: + * O[i, j] = 0 # <<<<<<<<<<<<<< * + * return correct, skipped, loss, bpr_loss */ - __pyx_r = ((PyTimedeltaScalarObject *)__pyx_v_obj)->obval; - goto __pyx_L0; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )) = 0.0; - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":1007 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":755 + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: # <<<<<<<<<<<<<< + * O[i, j] = 0 * - * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< - * """ - * returns the int64 value underlying scalar numpy timedelta64 object */ + } + } + } + } + } + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif + } - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} - -/* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":1014 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":694 * - * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< - * """ - * returns the unit part of the dtype for a numpy datetime64 object. + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L66; + } + __pyx_L66:; + } + } -static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObject *__pyx_v_obj) { - NPY_DATETIMEUNIT __pyx_r; - - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":1018 - * returns the unit part of the dtype for a numpy datetime64 object. - * """ - * return (obj).obmeta.base # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":758 + * O[i, j] = 0 + * + * return correct, skipped, loss, bpr_loss # <<<<<<<<<<<<<< + * + * def rank(self, user_idx, item_indices=None): */ - __pyx_r = ((NPY_DATETIMEUNIT)((PyDatetimeScalarObject *)__pyx_v_obj)->obmeta.base); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_correct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v_skipped); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_30 = PyFloat_FromDouble(__pyx_v_bpr_loss); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_30); + __pyx_t_31 = PyTuple_New(4); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_31); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_31, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_31, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_31, 2, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_30); + PyTuple_SET_ITEM(__pyx_t_31, 3, __pyx_t_30); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_6 = 0; + __pyx_t_30 = 0; + __pyx_r = __pyx_t_31; + __pyx_t_31 = 0; goto __pyx_L0; - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":1014 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":482 + * return self * - * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< - * """ - * returns the unit part of the dtype for a numpy datetime64 object. + * @cython.cdivision(True) # <<<<<<<<<<<<<< + * @cython.boundscheck(False) + * @cython.wraparound(False) */ /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_30); + __Pyx_XDECREF(__pyx_t_31); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "View.MemoryView":123 - * cdef bint dtype_is_object - * - * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< - * mode="c", bint allocate_buffer=True): - * - */ - /* Python wrapper */ -static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_shape = 0; - Py_ssize_t __pyx_v_itemsize; - PyObject *__pyx_v_format = 0; - PyObject *__pyx_v_mode = 0; - int __pyx_v_allocate_buffer; +static PyObject *__pyx_fuse_0_2__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_19_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_fuse_0_2__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_19_fit_mter = {"__pyx_fuse_0_2_fit_mter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0_2__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_19_fit_mter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter}; +static PyObject *__pyx_fuse_0_2__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_19_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg = 0; + int __pyx_v_n_threads; + __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; + struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict = 0; + __Pyx_memviewslice __pyx_v_user_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_neg_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_indptr = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_p_user_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_earlier_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_later_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_aspect_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_O = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_U = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_I = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_O = { 0, 0, { 0 }, { 0 }, { 0 } }; + PyArrayObject *__pyx_v_del_g1 = 0; + PyArrayObject *__pyx_v_del_g2 = 0; + PyArrayObject *__pyx_v_del_g3 = 0; + PyArrayObject *__pyx_v_del_u = 0; + PyArrayObject *__pyx_v_del_i = 0; + PyArrayObject *__pyx_v_del_a = 0; + PyArrayObject *__pyx_v_del_o = 0; + PyArrayObject *__pyx_v_del_g1_reg = 0; + PyArrayObject *__pyx_v_del_g2_reg = 0; + PyArrayObject *__pyx_v_del_g3_reg = 0; + PyArrayObject *__pyx_v_del_u_reg = 0; + PyArrayObject *__pyx_v_del_i_reg = 0; + PyArrayObject *__pyx_v_del_a_reg = 0; + PyArrayObject *__pyx_v_del_o_reg = 0; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - int __pyx_r; + PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + __Pyx_RefNannySetupContext("_fit_mter (wrapper)", 0); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shape,&__pyx_n_s_itemsize,&__pyx_n_s_format,&__pyx_n_s_mode,&__pyx_n_s_allocate_buffer,0}; - PyObject* values[5] = {0,0,0,0,0}; - values[3] = ((PyObject *)__pyx_n_s_c); - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_rng_pos_uia,&__pyx_n_s_rng_pos_uao,&__pyx_n_s_rng_pos_iao,&__pyx_n_s_rng_pos_pair,&__pyx_n_s_rng_pos,&__pyx_n_s_rng_neg,&__pyx_n_s_n_threads,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_iids,&__pyx_n_s_X_aids,&__pyx_n_s_YU,&__pyx_n_s_YU_uids,&__pyx_n_s_YU_aids,&__pyx_n_s_YU_oids,&__pyx_n_s_YI,&__pyx_n_s_YI_iids,&__pyx_n_s_YI_aids,&__pyx_n_s_YI_oids,&__pyx_n_s_rating_dict,&__pyx_n_s_user_ids,&__pyx_n_s_item_ids,&__pyx_n_s_neg_item_ids,&__pyx_n_s_indptr,&__pyx_n_s_p_user_indices,&__pyx_n_s_earlier_indices,&__pyx_n_s_later_indices,&__pyx_n_s_aspect_indices,&__pyx_n_s_pair_counts,&__pyx_n_s_G1,&__pyx_n_s_G2,&__pyx_n_s_G3,&__pyx_n_s_U,&__pyx_n_s_I,&__pyx_n_s_A,&__pyx_n_s_O,&__pyx_n_s_sgrad_G1,&__pyx_n_s_sgrad_G2,&__pyx_n_s_sgrad_G3,&__pyx_n_s_sgrad_U,&__pyx_n_s_sgrad_I,&__pyx_n_s_sgrad_A,&__pyx_n_s_sgrad_O,&__pyx_n_s_del_g1,&__pyx_n_s_del_g2,&__pyx_n_s_del_g3,&__pyx_n_s_del_u,&__pyx_n_s_del_i,&__pyx_n_s_del_a,&__pyx_n_s_del_o,&__pyx_n_s_del_g1_reg,&__pyx_n_s_del_g2_reg,&__pyx_n_s_del_g3_reg,&__pyx_n_s_del_u_reg,&__pyx_n_s_del_i_reg,&__pyx_n_s_del_a_reg,&__pyx_n_s_del_o_reg,0}; + PyObject* values[58] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (__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); + switch (__pyx_nargs) { + case 58: values[57] = __Pyx_Arg_VARARGS(__pyx_args, 57); CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 57: values[56] = __Pyx_Arg_VARARGS(__pyx_args, 56); CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 56: values[55] = __Pyx_Arg_VARARGS(__pyx_args, 55); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 55: values[54] = __Pyx_Arg_VARARGS(__pyx_args, 54); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 54: values[53] = __Pyx_Arg_VARARGS(__pyx_args, 53); + CYTHON_FALLTHROUGH; + case 53: values[52] = __Pyx_Arg_VARARGS(__pyx_args, 52); + CYTHON_FALLTHROUGH; + case 52: values[51] = __Pyx_Arg_VARARGS(__pyx_args, 51); + CYTHON_FALLTHROUGH; + case 51: values[50] = __Pyx_Arg_VARARGS(__pyx_args, 50); + CYTHON_FALLTHROUGH; + case 50: values[49] = __Pyx_Arg_VARARGS(__pyx_args, 49); + CYTHON_FALLTHROUGH; + case 49: values[48] = __Pyx_Arg_VARARGS(__pyx_args, 48); + CYTHON_FALLTHROUGH; + case 48: values[47] = __Pyx_Arg_VARARGS(__pyx_args, 47); + CYTHON_FALLTHROUGH; + case 47: values[46] = __Pyx_Arg_VARARGS(__pyx_args, 46); + CYTHON_FALLTHROUGH; + case 46: values[45] = __Pyx_Arg_VARARGS(__pyx_args, 45); + CYTHON_FALLTHROUGH; + case 45: values[44] = __Pyx_Arg_VARARGS(__pyx_args, 44); + CYTHON_FALLTHROUGH; + case 44: values[43] = __Pyx_Arg_VARARGS(__pyx_args, 43); + CYTHON_FALLTHROUGH; + case 43: values[42] = __Pyx_Arg_VARARGS(__pyx_args, 42); + CYTHON_FALLTHROUGH; + case 42: values[41] = __Pyx_Arg_VARARGS(__pyx_args, 41); + CYTHON_FALLTHROUGH; + case 41: values[40] = __Pyx_Arg_VARARGS(__pyx_args, 40); + CYTHON_FALLTHROUGH; + case 40: values[39] = __Pyx_Arg_VARARGS(__pyx_args, 39); + CYTHON_FALLTHROUGH; + case 39: values[38] = __Pyx_Arg_VARARGS(__pyx_args, 38); + CYTHON_FALLTHROUGH; + case 38: values[37] = __Pyx_Arg_VARARGS(__pyx_args, 37); + CYTHON_FALLTHROUGH; + case 37: values[36] = __Pyx_Arg_VARARGS(__pyx_args, 36); + CYTHON_FALLTHROUGH; + case 36: values[35] = __Pyx_Arg_VARARGS(__pyx_args, 35); + CYTHON_FALLTHROUGH; + case 35: values[34] = __Pyx_Arg_VARARGS(__pyx_args, 34); + CYTHON_FALLTHROUGH; + case 34: values[33] = __Pyx_Arg_VARARGS(__pyx_args, 33); + CYTHON_FALLTHROUGH; + case 33: values[32] = __Pyx_Arg_VARARGS(__pyx_args, 32); + CYTHON_FALLTHROUGH; + case 32: values[31] = __Pyx_Arg_VARARGS(__pyx_args, 31); + CYTHON_FALLTHROUGH; + case 31: values[30] = __Pyx_Arg_VARARGS(__pyx_args, 30); + CYTHON_FALLTHROUGH; + case 30: values[29] = __Pyx_Arg_VARARGS(__pyx_args, 29); + CYTHON_FALLTHROUGH; + case 29: values[28] = __Pyx_Arg_VARARGS(__pyx_args, 28); + CYTHON_FALLTHROUGH; + case 28: values[27] = __Pyx_Arg_VARARGS(__pyx_args, 27); + CYTHON_FALLTHROUGH; + case 27: values[26] = __Pyx_Arg_VARARGS(__pyx_args, 26); + CYTHON_FALLTHROUGH; + case 26: values[25] = __Pyx_Arg_VARARGS(__pyx_args, 25); + CYTHON_FALLTHROUGH; + case 25: values[24] = __Pyx_Arg_VARARGS(__pyx_args, 24); + CYTHON_FALLTHROUGH; + case 24: values[23] = __Pyx_Arg_VARARGS(__pyx_args, 23); + CYTHON_FALLTHROUGH; + case 23: values[22] = __Pyx_Arg_VARARGS(__pyx_args, 22); + CYTHON_FALLTHROUGH; + case 22: values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + CYTHON_FALLTHROUGH; + case 21: values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + CYTHON_FALLTHROUGH; + case 20: values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + CYTHON_FALLTHROUGH; + case 19: values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + CYTHON_FALLTHROUGH; + case 18: values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + CYTHON_FALLTHROUGH; + case 17: values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + CYTHON_FALLTHROUGH; + case 16: values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shape)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_itemsize)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_uia)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); __PYX_ERR(2, 123, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 1); __PYX_ERR(0, 482, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_format)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_uao)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); __PYX_ERR(2, 123, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 2); __PYX_ERR(0, 482, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mode); - if (value) { values[3] = value; kw_args--; } + if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_iao)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 3); __PYX_ERR(0, 482, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_allocate_buffer); - if (value) { values[4] = value; kw_args--; } + if (likely((values[4] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_pair)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 4); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 5); __PYX_ERR(0, 482, __pyx_L3_error) } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(2, 123, __pyx_L3_error) - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 6: + if (likely((values[6] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_neg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 6); __PYX_ERR(0, 482, __pyx_L3_error) + } CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; + case 7: + if (likely((values[7] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_threads)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 7); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 8); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 9); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 10); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 11); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 12); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 13); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 14); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 15: + if (likely((values[15] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_oids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 15); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 16: + if (likely((values[16] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 16); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 17: + if (likely((values[17] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 17); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 18: + if (likely((values[18] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 18); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 19: + if (likely((values[19] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_oids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 19); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 20: + if (likely((values[20] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rating_dict)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 20); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 21: + if (likely((values[21] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_user_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 21); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 22: + if (likely((values[22] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_item_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 22); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 23: + if (likely((values[23] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_neg_item_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 23); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 24: + if (likely((values[24] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_indptr)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 24); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 25: + if (likely((values[25] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_p_user_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 25); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 26: + if (likely((values[26] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_earlier_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 26); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 27: + if (likely((values[27] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_later_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 27); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 28: + if (likely((values[28] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_aspect_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 28); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 29: + if (likely((values[29] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pair_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 29); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 30: + if (likely((values[30] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 30); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 31: + if (likely((values[31] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 31); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 32: + if (likely((values[32] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 32); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 33: + if (likely((values[33] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 33); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 34: + if (likely((values[34] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_I)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 34); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 35: + if (likely((values[35] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 35); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 36: + if (likely((values[36] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_O)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 36); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 37: + if (likely((values[37] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 37); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 38: + if (likely((values[38] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 38); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 39: + if (likely((values[39] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 39); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 40: + if (likely((values[40] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_U)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 40); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 41: + if (likely((values[41] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_I)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 41); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 42: + if (likely((values[42] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 42); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 43: + if (likely((values[43] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_O)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 43); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 44: + if (likely((values[44] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 44); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 45: + if (likely((values[45] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 45); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 46: + if (likely((values[46] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 46); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 47: + if (likely((values[47] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_u)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 47); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 48: + if (likely((values[48] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_i)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 48); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 49: + if (likely((values[49] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_a)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 49); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 50: + if (likely((values[50] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_o)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 50); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 51: + if (likely((values[51] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g1_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 51); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 52: + if (likely((values[52] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g2_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 52); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 53: + if (likely((values[53] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g3_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 53); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 54: + if (likely((values[54] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_u_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 54); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 55: + if (likely((values[55] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_i_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 55); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 56: + if (likely((values[56] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_a_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 56); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 57: + if (likely((values[57] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_o_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 57); __PYX_ERR(0, 482, __pyx_L3_error) + } } - } - __pyx_v_shape = ((PyObject*)values[0]); - __pyx_v_itemsize = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_itemsize == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 123, __pyx_L3_error) - __pyx_v_format = values[2]; - __pyx_v_mode = values[3]; - if (values[4]) { - __pyx_v_allocate_buffer = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_allocate_buffer == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 124, __pyx_L3_error) + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_fit_mter") < 0)) __PYX_ERR(0, 482, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 58)) { + goto __pyx_L5_argtuple_error; } else { - - /* "View.MemoryView":124 - * - * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, - * mode="c", bint allocate_buffer=True): # <<<<<<<<<<<<<< - * - * cdef int idx - */ - __pyx_v_allocate_buffer = ((int)1); + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + values[22] = __Pyx_Arg_VARARGS(__pyx_args, 22); + values[23] = __Pyx_Arg_VARARGS(__pyx_args, 23); + values[24] = __Pyx_Arg_VARARGS(__pyx_args, 24); + values[25] = __Pyx_Arg_VARARGS(__pyx_args, 25); + values[26] = __Pyx_Arg_VARARGS(__pyx_args, 26); + values[27] = __Pyx_Arg_VARARGS(__pyx_args, 27); + values[28] = __Pyx_Arg_VARARGS(__pyx_args, 28); + values[29] = __Pyx_Arg_VARARGS(__pyx_args, 29); + values[30] = __Pyx_Arg_VARARGS(__pyx_args, 30); + values[31] = __Pyx_Arg_VARARGS(__pyx_args, 31); + values[32] = __Pyx_Arg_VARARGS(__pyx_args, 32); + values[33] = __Pyx_Arg_VARARGS(__pyx_args, 33); + values[34] = __Pyx_Arg_VARARGS(__pyx_args, 34); + values[35] = __Pyx_Arg_VARARGS(__pyx_args, 35); + values[36] = __Pyx_Arg_VARARGS(__pyx_args, 36); + values[37] = __Pyx_Arg_VARARGS(__pyx_args, 37); + values[38] = __Pyx_Arg_VARARGS(__pyx_args, 38); + values[39] = __Pyx_Arg_VARARGS(__pyx_args, 39); + values[40] = __Pyx_Arg_VARARGS(__pyx_args, 40); + values[41] = __Pyx_Arg_VARARGS(__pyx_args, 41); + values[42] = __Pyx_Arg_VARARGS(__pyx_args, 42); + values[43] = __Pyx_Arg_VARARGS(__pyx_args, 43); + values[44] = __Pyx_Arg_VARARGS(__pyx_args, 44); + values[45] = __Pyx_Arg_VARARGS(__pyx_args, 45); + values[46] = __Pyx_Arg_VARARGS(__pyx_args, 46); + values[47] = __Pyx_Arg_VARARGS(__pyx_args, 47); + values[48] = __Pyx_Arg_VARARGS(__pyx_args, 48); + values[49] = __Pyx_Arg_VARARGS(__pyx_args, 49); + values[50] = __Pyx_Arg_VARARGS(__pyx_args, 50); + values[51] = __Pyx_Arg_VARARGS(__pyx_args, 51); + values[52] = __Pyx_Arg_VARARGS(__pyx_args, 52); + values[53] = __Pyx_Arg_VARARGS(__pyx_args, 53); + values[54] = __Pyx_Arg_VARARGS(__pyx_args, 54); + values[55] = __Pyx_Arg_VARARGS(__pyx_args, 55); + values[56] = __Pyx_Arg_VARARGS(__pyx_args, 56); + values[57] = __Pyx_Arg_VARARGS(__pyx_args, 57); } + __pyx_v_self = values[0]; + __pyx_v_rng_pos_uia = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[1]); + __pyx_v_rng_pos_uao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[2]); + __pyx_v_rng_pos_iao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[3]); + __pyx_v_rng_pos_pair = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[4]); + __pyx_v_rng_pos = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[5]); + __pyx_v_rng_neg = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[6]); + __pyx_v_n_threads = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_n_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 493, __pyx_L3_error) + __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_iids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_YU = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_uids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_aids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_oids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YI = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_iids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_aids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_oids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_rating_dict = ((struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *)values[20]); + __pyx_v_user_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_user_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[22], PyBUF_WRITABLE); if (unlikely(!__pyx_v_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_neg_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[23], PyBUF_WRITABLE); if (unlikely(!__pyx_v_neg_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_indptr = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[24], PyBUF_WRITABLE); if (unlikely(!__pyx_v_indptr.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_p_user_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[25], PyBUF_WRITABLE); if (unlikely(!__pyx_v_p_user_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_earlier_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[26], PyBUF_WRITABLE); if (unlikely(!__pyx_v_earlier_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_later_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[27], PyBUF_WRITABLE); if (unlikely(!__pyx_v_later_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_aspect_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[28], PyBUF_WRITABLE); if (unlikely(!__pyx_v_aspect_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_pair_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[29], PyBUF_WRITABLE); if (unlikely(!__pyx_v_pair_counts.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[30], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G1.memview)) __PYX_ERR(0, 500, __pyx_L3_error) + __pyx_v_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[31], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G2.memview)) __PYX_ERR(0, 501, __pyx_L3_error) + __pyx_v_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[32], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G3.memview)) __PYX_ERR(0, 502, __pyx_L3_error) + __pyx_v_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[33], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U.memview)) __PYX_ERR(0, 503, __pyx_L3_error) + __pyx_v_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[34], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I.memview)) __PYX_ERR(0, 504, __pyx_L3_error) + __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[35], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 505, __pyx_L3_error) + __pyx_v_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[36], PyBUF_WRITABLE); if (unlikely(!__pyx_v_O.memview)) __PYX_ERR(0, 506, __pyx_L3_error) + __pyx_v_sgrad_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[37], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G1.memview)) __PYX_ERR(0, 507, __pyx_L3_error) + __pyx_v_sgrad_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[38], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G2.memview)) __PYX_ERR(0, 508, __pyx_L3_error) + __pyx_v_sgrad_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[39], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G3.memview)) __PYX_ERR(0, 509, __pyx_L3_error) + __pyx_v_sgrad_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[40], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_U.memview)) __PYX_ERR(0, 510, __pyx_L3_error) + __pyx_v_sgrad_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[41], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_I.memview)) __PYX_ERR(0, 511, __pyx_L3_error) + __pyx_v_sgrad_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[42], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_A.memview)) __PYX_ERR(0, 512, __pyx_L3_error) + __pyx_v_sgrad_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[43], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_O.memview)) __PYX_ERR(0, 513, __pyx_L3_error) + __pyx_v_del_g1 = ((PyArrayObject *)values[44]); + __pyx_v_del_g2 = ((PyArrayObject *)values[45]); + __pyx_v_del_g3 = ((PyArrayObject *)values[46]); + __pyx_v_del_u = ((PyArrayObject *)values[47]); + __pyx_v_del_i = ((PyArrayObject *)values[48]); + __pyx_v_del_a = ((PyArrayObject *)values[49]); + __pyx_v_del_o = ((PyArrayObject *)values[50]); + __pyx_v_del_g1_reg = ((PyArrayObject *)values[51]); + __pyx_v_del_g2_reg = ((PyArrayObject *)values[52]); + __pyx_v_del_g3_reg = ((PyArrayObject *)values[53]); + __pyx_v_del_u_reg = ((PyArrayObject *)values[54]); + __pyx_v_del_i_reg = ((PyArrayObject *)values[55]); + __pyx_v_del_a_reg = ((PyArrayObject *)values[56]); + __pyx_v_del_o_reg = ((PyArrayObject *)values[57]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 123, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, __pyx_nargs); __PYX_ERR(0, 482, __pyx_L3_error) __pyx_L3_error:; - __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_user_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_neg_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_indptr, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_p_user_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_earlier_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_later_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_aspect_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_pair_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_O, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_O, 1); + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); - return -1; + return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shape), (&PyTuple_Type), 1, "shape", 1))) __PYX_ERR(2, 123, __pyx_L1_error) - if (unlikely(((PyObject *)__pyx_v_format) == Py_None)) { - PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "format"); __PYX_ERR(2, 123, __pyx_L1_error) - } - __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v_shape, __pyx_v_itemsize, __pyx_v_format, __pyx_v_mode, __pyx_v_allocate_buffer); - - /* "View.MemoryView":123 - * cdef bint dtype_is_object - * - * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< - * mode="c", bint allocate_buffer=True): - * - */ + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uia), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uia", 0))) __PYX_ERR(0, 487, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uao", 0))) __PYX_ERR(0, 488, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_iao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_iao", 0))) __PYX_ERR(0, 489, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_pair), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_pair", 0))) __PYX_ERR(0, 490, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos", 0))) __PYX_ERR(0, 491, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_neg), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_neg", 0))) __PYX_ERR(0, 492, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rating_dict), __pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict, 1, "rating_dict", 0))) __PYX_ERR(0, 497, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1), __pyx_ptype_5numpy_ndarray, 1, "del_g1", 0))) __PYX_ERR(0, 514, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2), __pyx_ptype_5numpy_ndarray, 1, "del_g2", 0))) __PYX_ERR(0, 515, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3), __pyx_ptype_5numpy_ndarray, 1, "del_g3", 0))) __PYX_ERR(0, 516, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u), __pyx_ptype_5numpy_ndarray, 1, "del_u", 0))) __PYX_ERR(0, 517, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i), __pyx_ptype_5numpy_ndarray, 1, "del_i", 0))) __PYX_ERR(0, 518, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a), __pyx_ptype_5numpy_ndarray, 1, "del_a", 0))) __PYX_ERR(0, 519, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o), __pyx_ptype_5numpy_ndarray, 1, "del_o", 0))) __PYX_ERR(0, 520, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g1_reg", 0))) __PYX_ERR(0, 521, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g2_reg", 0))) __PYX_ERR(0, 522, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g3_reg", 0))) __PYX_ERR(0, 523, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u_reg), __pyx_ptype_5numpy_ndarray, 1, "del_u_reg", 0))) __PYX_ERR(0, 524, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i_reg), __pyx_ptype_5numpy_ndarray, 1, "del_i_reg", 0))) __PYX_ERR(0, 525, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a_reg), __pyx_ptype_5numpy_ndarray, 1, "del_a_reg", 0))) __PYX_ERR(0, 526, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o_reg), __pyx_ptype_5numpy_ndarray, 1, "del_o_reg", 0))) __PYX_ERR(0, 527, __pyx_L1_error) + __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_18_fit_mter(__pyx_self, __pyx_v_self, __pyx_v_rng_pos_uia, __pyx_v_rng_pos_uao, __pyx_v_rng_pos_iao, __pyx_v_rng_pos_pair, __pyx_v_rng_pos, __pyx_v_rng_neg, __pyx_v_n_threads, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_iids, __pyx_v_X_aids, __pyx_v_YU, __pyx_v_YU_uids, __pyx_v_YU_aids, __pyx_v_YU_oids, __pyx_v_YI, __pyx_v_YI_iids, __pyx_v_YI_aids, __pyx_v_YI_oids, __pyx_v_rating_dict, __pyx_v_user_ids, __pyx_v_item_ids, __pyx_v_neg_item_ids, __pyx_v_indptr, __pyx_v_p_user_indices, __pyx_v_earlier_indices, __pyx_v_later_indices, __pyx_v_aspect_indices, __pyx_v_pair_counts, __pyx_v_G1, __pyx_v_G2, __pyx_v_G3, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_sgrad_G1, __pyx_v_sgrad_G2, __pyx_v_sgrad_G3, __pyx_v_sgrad_U, __pyx_v_sgrad_I, __pyx_v_sgrad_A, __pyx_v_sgrad_O, __pyx_v_del_g1, __pyx_v_del_g2, __pyx_v_del_g3, __pyx_v_del_u, __pyx_v_del_i, __pyx_v_del_a, __pyx_v_del_o, __pyx_v_del_g1_reg, __pyx_v_del_g2_reg, __pyx_v_del_g3_reg, __pyx_v_del_u_reg, __pyx_v_del_i_reg, __pyx_v_del_a_reg, __pyx_v_del_o_reg); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; - __pyx_r = -1; + __pyx_r = NULL; __pyx_L0:; + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_user_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_neg_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_indptr, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_p_user_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_earlier_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_later_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_aspect_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_pair_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_O, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_O, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer) { - int __pyx_v_idx; - Py_ssize_t __pyx_v_i; - Py_ssize_t __pyx_v_dim; - PyObject **__pyx_v_p; - char __pyx_v_order; - int __pyx_r; +static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_18_fit_mter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg, int __pyx_v_n_threads, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_iids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_YU, __Pyx_memviewslice __pyx_v_YU_uids, __Pyx_memviewslice __pyx_v_YU_aids, __Pyx_memviewslice __pyx_v_YU_oids, __Pyx_memviewslice __pyx_v_YI, __Pyx_memviewslice __pyx_v_YI_iids, __Pyx_memviewslice __pyx_v_YI_aids, __Pyx_memviewslice __pyx_v_YI_oids, struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict, __Pyx_memviewslice __pyx_v_user_ids, __Pyx_memviewslice __pyx_v_item_ids, __Pyx_memviewslice __pyx_v_neg_item_ids, __Pyx_memviewslice __pyx_v_indptr, __Pyx_memviewslice __pyx_v_p_user_indices, __Pyx_memviewslice __pyx_v_earlier_indices, __Pyx_memviewslice __pyx_v_later_indices, __Pyx_memviewslice __pyx_v_aspect_indices, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts, __Pyx_memviewslice __pyx_v_G1, __Pyx_memviewslice __pyx_v_G2, __Pyx_memviewslice __pyx_v_G3, __Pyx_memviewslice __pyx_v_U, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_O, __Pyx_memviewslice __pyx_v_sgrad_G1, __Pyx_memviewslice __pyx_v_sgrad_G2, __Pyx_memviewslice __pyx_v_sgrad_G3, __Pyx_memviewslice __pyx_v_sgrad_U, __Pyx_memviewslice __pyx_v_sgrad_I, __Pyx_memviewslice __pyx_v_sgrad_A, __Pyx_memviewslice __pyx_v_sgrad_O, PyArrayObject *__pyx_v_del_g1, PyArrayObject *__pyx_v_del_g2, PyArrayObject *__pyx_v_del_g3, PyArrayObject *__pyx_v_del_u, PyArrayObject *__pyx_v_del_i, PyArrayObject *__pyx_v_del_a, PyArrayObject *__pyx_v_del_o, PyArrayObject *__pyx_v_del_g1_reg, PyArrayObject *__pyx_v_del_g2_reg, PyArrayObject *__pyx_v_del_g3_reg, PyArrayObject *__pyx_v_del_u_reg, PyArrayObject *__pyx_v_del_i_reg, PyArrayObject *__pyx_v_del_a_reg, PyArrayObject *__pyx_v_del_o_reg) { + long __pyx_v_s; + long __pyx_v_correct; + long __pyx_v_skipped; + long __pyx_v_aspect_correct; + long __pyx_v_n_users; + long __pyx_v_n_items; + long __pyx_v_n_aspects; + CYTHON_UNUSED long __pyx_v_n_opinions; + long __pyx_v_n_user_factors; + long __pyx_v_n_item_factors; + long __pyx_v_n_aspect_factors; + long __pyx_v_n_opinion_factors; + CYTHON_UNUSED int __pyx_v_num_samples; + CYTHON_UNUSED int __pyx_v_num_bpr_samples; + CYTHON_UNUSED int __pyx_v_num_pair_samples; + CYTHON_UNUSED long __pyx_v__; + long __pyx_v_i; + long __pyx_v_j; + long __pyx_v_k; + long __pyx_v_idx; + long __pyx_v_jdx; + long __pyx_v_u_idx; + long __pyx_v_i_idx; + long __pyx_v_a_idx; + long __pyx_v_o_idx; + long __pyx_v_j_idx; + long __pyx_v_thread_id; + float __pyx_v_z; + float __pyx_v_score; + float __pyx_v_i_score; + float __pyx_v_j_score; + float __pyx_v_pred; + float __pyx_v_i_ij; + float __pyx_v_a_ji; + float __pyx_v_loss; + float __pyx_v_bpr_loss; + float __pyx_v_aspect_bpr_loss; + float __pyx_v_del_sqerror; + float __pyx_v_del_bpr; + float __pyx_v_del_aspect_bpr; + float __pyx_v_eps; + float __pyx_v_lr; + float __pyx_v_ld_reg; + float __pyx_v_ld_bpr; + float __pyx_v_lambda_d; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a; + __Pyx_Buffer __pyx_pybuffer_del_a; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a_reg; + __Pyx_Buffer __pyx_pybuffer_del_a_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1; + __Pyx_Buffer __pyx_pybuffer_del_g1; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1_reg; + __Pyx_Buffer __pyx_pybuffer_del_g1_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2; + __Pyx_Buffer __pyx_pybuffer_del_g2; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2_reg; + __Pyx_Buffer __pyx_pybuffer_del_g2_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3; + __Pyx_Buffer __pyx_pybuffer_del_g3; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3_reg; + __Pyx_Buffer __pyx_pybuffer_del_g3_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i; + __Pyx_Buffer __pyx_pybuffer_del_i; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i_reg; + __Pyx_Buffer __pyx_pybuffer_del_i_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o; + __Pyx_Buffer __pyx_pybuffer_del_o; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o_reg; + __Pyx_Buffer __pyx_pybuffer_del_o_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u; + __Pyx_Buffer __pyx_pybuffer_del_u; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u_reg; + __Pyx_Buffer __pyx_pybuffer_del_u_reg; + PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + long __pyx_t_3; int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; + float __pyx_t_5; PyObject *__pyx_t_6 = NULL; - char *__pyx_t_7; - int __pyx_t_8; + long __pyx_t_7; + long __pyx_t_8; Py_ssize_t __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - Py_ssize_t __pyx_t_11; + long __pyx_t_10; + long __pyx_t_11; + long __pyx_t_12; + long __pyx_t_13; + long __pyx_t_14; + long __pyx_t_15; + long __pyx_t_16; + long __pyx_t_17; + Py_ssize_t __pyx_t_18; + Py_ssize_t __pyx_t_19; + Py_ssize_t __pyx_t_20; + Py_ssize_t __pyx_t_21; + Py_ssize_t __pyx_t_22; + Py_ssize_t __pyx_t_23; + Py_ssize_t __pyx_t_24; + Py_ssize_t __pyx_t_25; + bool __pyx_t_26; + int __pyx_t_27; + int __pyx_t_28; + float __pyx_t_29; + PyObject *__pyx_t_30 = NULL; + PyObject *__pyx_t_31 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__cinit__", 0); - __Pyx_INCREF(__pyx_v_format); - - /* "View.MemoryView":130 - * cdef PyObject **p - * - * self.ndim = len(shape) # <<<<<<<<<<<<<< - * self.itemsize = itemsize - * - */ - if (unlikely(__pyx_v_shape == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(2, 130, __pyx_L1_error) + __Pyx_RefNannySetupContext("__pyx_fuse_0_2_fit_mter", 0); + __pyx_pybuffer_del_g1.pybuffer.buf = NULL; + __pyx_pybuffer_del_g1.refcount = 0; + __pyx_pybuffernd_del_g1.data = NULL; + __pyx_pybuffernd_del_g1.rcbuffer = &__pyx_pybuffer_del_g1; + __pyx_pybuffer_del_g2.pybuffer.buf = NULL; + __pyx_pybuffer_del_g2.refcount = 0; + __pyx_pybuffernd_del_g2.data = NULL; + __pyx_pybuffernd_del_g2.rcbuffer = &__pyx_pybuffer_del_g2; + __pyx_pybuffer_del_g3.pybuffer.buf = NULL; + __pyx_pybuffer_del_g3.refcount = 0; + __pyx_pybuffernd_del_g3.data = NULL; + __pyx_pybuffernd_del_g3.rcbuffer = &__pyx_pybuffer_del_g3; + __pyx_pybuffer_del_u.pybuffer.buf = NULL; + __pyx_pybuffer_del_u.refcount = 0; + __pyx_pybuffernd_del_u.data = NULL; + __pyx_pybuffernd_del_u.rcbuffer = &__pyx_pybuffer_del_u; + __pyx_pybuffer_del_i.pybuffer.buf = NULL; + __pyx_pybuffer_del_i.refcount = 0; + __pyx_pybuffernd_del_i.data = NULL; + __pyx_pybuffernd_del_i.rcbuffer = &__pyx_pybuffer_del_i; + __pyx_pybuffer_del_a.pybuffer.buf = NULL; + __pyx_pybuffer_del_a.refcount = 0; + __pyx_pybuffernd_del_a.data = NULL; + __pyx_pybuffernd_del_a.rcbuffer = &__pyx_pybuffer_del_a; + __pyx_pybuffer_del_o.pybuffer.buf = NULL; + __pyx_pybuffer_del_o.refcount = 0; + __pyx_pybuffernd_del_o.data = NULL; + __pyx_pybuffernd_del_o.rcbuffer = &__pyx_pybuffer_del_o; + __pyx_pybuffer_del_g1_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g1_reg.refcount = 0; + __pyx_pybuffernd_del_g1_reg.data = NULL; + __pyx_pybuffernd_del_g1_reg.rcbuffer = &__pyx_pybuffer_del_g1_reg; + __pyx_pybuffer_del_g2_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g2_reg.refcount = 0; + __pyx_pybuffernd_del_g2_reg.data = NULL; + __pyx_pybuffernd_del_g2_reg.rcbuffer = &__pyx_pybuffer_del_g2_reg; + __pyx_pybuffer_del_g3_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g3_reg.refcount = 0; + __pyx_pybuffernd_del_g3_reg.data = NULL; + __pyx_pybuffernd_del_g3_reg.rcbuffer = &__pyx_pybuffer_del_g3_reg; + __pyx_pybuffer_del_u_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_u_reg.refcount = 0; + __pyx_pybuffernd_del_u_reg.data = NULL; + __pyx_pybuffernd_del_u_reg.rcbuffer = &__pyx_pybuffer_del_u_reg; + __pyx_pybuffer_del_i_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_i_reg.refcount = 0; + __pyx_pybuffernd_del_i_reg.data = NULL; + __pyx_pybuffernd_del_i_reg.rcbuffer = &__pyx_pybuffer_del_i_reg; + __pyx_pybuffer_del_a_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_a_reg.refcount = 0; + __pyx_pybuffernd_del_a_reg.data = NULL; + __pyx_pybuffernd_del_a_reg.rcbuffer = &__pyx_pybuffer_del_a_reg; + __pyx_pybuffer_del_o_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_o_reg.refcount = 0; + __pyx_pybuffernd_del_o_reg.data = NULL; + __pyx_pybuffernd_del_o_reg.rcbuffer = &__pyx_pybuffer_del_o_reg; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(2, 130, __pyx_L1_error) - __pyx_v_self->ndim = ((int)__pyx_t_1); - - /* "View.MemoryView":131 - * - * self.ndim = len(shape) - * self.itemsize = itemsize # <<<<<<<<<<<<<< - * - * if not self.ndim: - */ - __pyx_v_self->itemsize = __pyx_v_itemsize; - - /* "View.MemoryView":133 - * self.itemsize = itemsize - * - * if not self.ndim: # <<<<<<<<<<<<<< - * raise ValueError("Empty shape tuple for cython.array") - * - */ - __pyx_t_2 = ((!(__pyx_v_self->ndim != 0)) != 0); - if (unlikely(__pyx_t_2)) { - - /* "View.MemoryView":134 - * - * if not self.ndim: - * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< - * - * if itemsize <= 0: - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 134, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(2, 134, __pyx_L1_error) - - /* "View.MemoryView":133 - * self.itemsize = itemsize - * - * if not self.ndim: # <<<<<<<<<<<<<< - * raise ValueError("Empty shape tuple for cython.array") - * - */ + __pyx_pybuffernd_del_g1.diminfo[0].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1.diminfo[0].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1.diminfo[1].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1.diminfo[1].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1.diminfo[2].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1.diminfo[2].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - - /* "View.MemoryView":136 - * raise ValueError("Empty shape tuple for cython.array") - * - * if itemsize <= 0: # <<<<<<<<<<<<<< - * raise ValueError("itemsize <= 0 for cython.array") - * - */ - __pyx_t_2 = ((__pyx_v_itemsize <= 0) != 0); - if (unlikely(__pyx_t_2)) { - - /* "View.MemoryView":137 - * - * if itemsize <= 0: - * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< - * - * if not isinstance(format, bytes): - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 137, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(2, 137, __pyx_L1_error) - - /* "View.MemoryView":136 - * raise ValueError("Empty shape tuple for cython.array") - * - * if itemsize <= 0: # <<<<<<<<<<<<<< - * raise ValueError("itemsize <= 0 for cython.array") - * - */ + __pyx_pybuffernd_del_g2.diminfo[0].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2.diminfo[0].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2.diminfo[1].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2.diminfo[1].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2.diminfo[2].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2.diminfo[2].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - - /* "View.MemoryView":139 - * raise ValueError("itemsize <= 0 for cython.array") - * - * if not isinstance(format, bytes): # <<<<<<<<<<<<<< - * format = format.encode('ASCII') - * self._format = format # keep a reference to the byte string - */ - __pyx_t_2 = PyBytes_Check(__pyx_v_format); - __pyx_t_4 = ((!(__pyx_t_2 != 0)) != 0); - if (__pyx_t_4) { - - /* "View.MemoryView":140 - * - * if not isinstance(format, bytes): - * format = format.encode('ASCII') # <<<<<<<<<<<<<< - * self._format = format # keep a reference to the byte string - * self.format = self._format - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_format, __pyx_n_s_encode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 140, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - } - } - __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_n_s_ASCII) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_n_s_ASCII); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 140, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_3); - __pyx_t_3 = 0; - - /* "View.MemoryView":139 - * raise ValueError("itemsize <= 0 for cython.array") - * - * if not isinstance(format, bytes): # <<<<<<<<<<<<<< - * format = format.encode('ASCII') - * self._format = format # keep a reference to the byte string - */ + __pyx_pybuffernd_del_g3.diminfo[0].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3.diminfo[0].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3.diminfo[1].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3.diminfo[1].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3.diminfo[2].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3.diminfo[2].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - - /* "View.MemoryView":141 - * if not isinstance(format, bytes): - * format = format.encode('ASCII') - * self._format = format # keep a reference to the byte string # <<<<<<<<<<<<<< - * self.format = self._format - * - */ - if (!(likely(PyBytes_CheckExact(__pyx_v_format))||((__pyx_v_format) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_format)->tp_name), 0))) __PYX_ERR(2, 141, __pyx_L1_error) - __pyx_t_3 = __pyx_v_format; - __Pyx_INCREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_v_self->_format); - __Pyx_DECREF(__pyx_v_self->_format); - __pyx_v_self->_format = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "View.MemoryView":142 - * format = format.encode('ASCII') - * self._format = format # keep a reference to the byte string - * self.format = self._format # <<<<<<<<<<<<<< - * - * - */ - if (unlikely(__pyx_v_self->_format == Py_None)) { - PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found"); - __PYX_ERR(2, 142, __pyx_L1_error) + __pyx_pybuffernd_del_u.diminfo[0].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u.diminfo[0].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u.diminfo[1].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u.diminfo[1].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->_format); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(2, 142, __pyx_L1_error) - __pyx_v_self->format = __pyx_t_7; - - /* "View.MemoryView":145 - * - * - * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) # <<<<<<<<<<<<<< - * self._strides = self._shape + self.ndim - * - */ - __pyx_v_self->_shape = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * __pyx_v_self->ndim) * 2))); - - /* "View.MemoryView":146 - * - * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) - * self._strides = self._shape + self.ndim # <<<<<<<<<<<<<< - * - * if not self._shape: - */ - __pyx_v_self->_strides = (__pyx_v_self->_shape + __pyx_v_self->ndim); - - /* "View.MemoryView":148 - * self._strides = self._shape + self.ndim - * - * if not self._shape: # <<<<<<<<<<<<<< - * raise MemoryError("unable to allocate shape and strides.") - * - */ - __pyx_t_4 = ((!(__pyx_v_self->_shape != 0)) != 0); - if (unlikely(__pyx_t_4)) { - - /* "View.MemoryView":149 - * - * if not self._shape: - * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 149, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(2, 149, __pyx_L1_error) - - /* "View.MemoryView":148 - * self._strides = self._shape + self.ndim - * - * if not self._shape: # <<<<<<<<<<<<<< - * raise MemoryError("unable to allocate shape and strides.") - * - */ + __pyx_pybuffernd_del_i.diminfo[0].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i.diminfo[0].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i.diminfo[1].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i.diminfo[1].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - - /* "View.MemoryView":152 - * - * - * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< - * if dim <= 0: - * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) - */ - __pyx_t_8 = 0; - __pyx_t_3 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_3); __pyx_t_1 = 0; - for (;;) { - if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely(0 < 0)) __PYX_ERR(2, 152, __pyx_L1_error) - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 152, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 152, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_dim = __pyx_t_9; - __pyx_v_idx = __pyx_t_8; - __pyx_t_8 = (__pyx_t_8 + 1); - - /* "View.MemoryView":153 - * - * for idx, dim in enumerate(shape): - * if dim <= 0: # <<<<<<<<<<<<<< - * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) - * self._shape[idx] = dim - */ - __pyx_t_4 = ((__pyx_v_dim <= 0) != 0); - if (unlikely(__pyx_t_4)) { - - /* "View.MemoryView":154 - * for idx, dim in enumerate(shape): - * if dim <= 0: - * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) # <<<<<<<<<<<<<< - * self._shape[idx] = dim - * - */ - __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_idx); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 154, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 154, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 154, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_6); - __pyx_t_5 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 154, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 154, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_Raise(__pyx_t_10, 0, 0, 0); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __PYX_ERR(2, 154, __pyx_L1_error) - - /* "View.MemoryView":153 - * - * for idx, dim in enumerate(shape): - * if dim <= 0: # <<<<<<<<<<<<<< - * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) - * self._shape[idx] = dim - */ - } - - /* "View.MemoryView":155 - * if dim <= 0: - * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) - * self._shape[idx] = dim # <<<<<<<<<<<<<< - * - * cdef char order - */ - (__pyx_v_self->_shape[__pyx_v_idx]) = __pyx_v_dim; - - /* "View.MemoryView":152 - * - * - * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< - * if dim <= 0: - * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) - */ + __pyx_pybuffernd_del_a.diminfo[0].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a.diminfo[0].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a.diminfo[1].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a.diminfo[1].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "View.MemoryView":158 - * - * cdef char order - * if mode == 'fortran': # <<<<<<<<<<<<<< - * order = b'F' - * self.mode = u'fortran' - */ - __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_fortran, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(2, 158, __pyx_L1_error) - if (__pyx_t_4) { - - /* "View.MemoryView":159 - * cdef char order - * if mode == 'fortran': - * order = b'F' # <<<<<<<<<<<<<< - * self.mode = u'fortran' - * elif mode == 'c': - */ - __pyx_v_order = 'F'; - - /* "View.MemoryView":160 - * if mode == 'fortran': - * order = b'F' - * self.mode = u'fortran' # <<<<<<<<<<<<<< - * elif mode == 'c': - * order = b'C' - */ - __Pyx_INCREF(__pyx_n_u_fortran); - __Pyx_GIVEREF(__pyx_n_u_fortran); - __Pyx_GOTREF(__pyx_v_self->mode); - __Pyx_DECREF(__pyx_v_self->mode); - __pyx_v_self->mode = __pyx_n_u_fortran; - - /* "View.MemoryView":158 - * - * cdef char order - * if mode == 'fortran': # <<<<<<<<<<<<<< - * order = b'F' - * self.mode = u'fortran' - */ - goto __pyx_L10; + __pyx_pybuffernd_del_o.diminfo[0].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o.diminfo[0].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o.diminfo[1].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o.diminfo[1].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - - /* "View.MemoryView":161 - * order = b'F' - * self.mode = u'fortran' - * elif mode == 'c': # <<<<<<<<<<<<<< - * order = b'C' - * self.mode = u'c' - */ - __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(2, 161, __pyx_L1_error) - if (likely(__pyx_t_4)) { - - /* "View.MemoryView":162 - * self.mode = u'fortran' - * elif mode == 'c': - * order = b'C' # <<<<<<<<<<<<<< - * self.mode = u'c' - * else: - */ - __pyx_v_order = 'C'; - - /* "View.MemoryView":163 - * elif mode == 'c': - * order = b'C' - * self.mode = u'c' # <<<<<<<<<<<<<< - * else: - * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) - */ - __Pyx_INCREF(__pyx_n_u_c); - __Pyx_GIVEREF(__pyx_n_u_c); - __Pyx_GOTREF(__pyx_v_self->mode); - __Pyx_DECREF(__pyx_v_self->mode); - __pyx_v_self->mode = __pyx_n_u_c; - - /* "View.MemoryView":161 - * order = b'F' - * self.mode = u'fortran' - * elif mode == 'c': # <<<<<<<<<<<<<< - * order = b'C' - * self.mode = u'c' - */ - goto __pyx_L10; + __pyx_pybuffernd_del_g1_reg.diminfo[0].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1_reg.diminfo[0].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1_reg.diminfo[1].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1_reg.diminfo[1].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1_reg.diminfo[2].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1_reg.diminfo[2].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - - /* "View.MemoryView":165 - * self.mode = u'c' - * else: - * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) # <<<<<<<<<<<<<< - * - * self.len = fill_contig_strides_array(self._shape, self._strides, - */ - /*else*/ { - __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_v_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 165, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 165, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_10, 0, 0, 0); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __PYX_ERR(2, 165, __pyx_L1_error) + __pyx_pybuffernd_del_g2_reg.diminfo[0].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2_reg.diminfo[0].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2_reg.diminfo[1].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2_reg.diminfo[1].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2_reg.diminfo[2].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2_reg.diminfo[2].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - __pyx_L10:; - - /* "View.MemoryView":167 - * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) - * - * self.len = fill_contig_strides_array(self._shape, self._strides, # <<<<<<<<<<<<<< - * itemsize, self.ndim, order) - * - */ - __pyx_v_self->len = __pyx_fill_contig_strides_array(__pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_itemsize, __pyx_v_self->ndim, __pyx_v_order); - - /* "View.MemoryView":170 - * itemsize, self.ndim, order) - * - * self.free_data = allocate_buffer # <<<<<<<<<<<<<< - * self.dtype_is_object = format == b'O' - * if allocate_buffer: - */ - __pyx_v_self->free_data = __pyx_v_allocate_buffer; - - /* "View.MemoryView":171 - * - * self.free_data = allocate_buffer - * self.dtype_is_object = format == b'O' # <<<<<<<<<<<<<< - * if allocate_buffer: - * - */ - __pyx_t_10 = PyObject_RichCompare(__pyx_v_format, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 171, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 171, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_v_self->dtype_is_object = __pyx_t_4; - - /* "View.MemoryView":172 - * self.free_data = allocate_buffer - * self.dtype_is_object = format == b'O' - * if allocate_buffer: # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_4 = (__pyx_v_allocate_buffer != 0); - if (__pyx_t_4) { - - /* "View.MemoryView":175 - * - * - * self.data = malloc(self.len) # <<<<<<<<<<<<<< - * if not self.data: - * raise MemoryError("unable to allocate array data.") - */ - __pyx_v_self->data = ((char *)malloc(__pyx_v_self->len)); - - /* "View.MemoryView":176 - * - * self.data = malloc(self.len) - * if not self.data: # <<<<<<<<<<<<<< - * raise MemoryError("unable to allocate array data.") - * - */ - __pyx_t_4 = ((!(__pyx_v_self->data != 0)) != 0); - if (unlikely(__pyx_t_4)) { - - /* "View.MemoryView":177 - * self.data = malloc(self.len) - * if not self.data: - * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< - * - * if self.dtype_is_object: - */ - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_Raise(__pyx_t_10, 0, 0, 0); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __PYX_ERR(2, 177, __pyx_L1_error) - - /* "View.MemoryView":176 - * - * self.data = malloc(self.len) - * if not self.data: # <<<<<<<<<<<<<< - * raise MemoryError("unable to allocate array data.") - * - */ - } - - /* "View.MemoryView":179 - * raise MemoryError("unable to allocate array data.") - * - * if self.dtype_is_object: # <<<<<<<<<<<<<< - * p = self.data - * for i in range(self.len / itemsize): - */ - __pyx_t_4 = (__pyx_v_self->dtype_is_object != 0); - if (__pyx_t_4) { - - /* "View.MemoryView":180 - * - * if self.dtype_is_object: - * p = self.data # <<<<<<<<<<<<<< - * for i in range(self.len / itemsize): - * p[i] = Py_None - */ - __pyx_v_p = ((PyObject **)__pyx_v_self->data); - - /* "View.MemoryView":181 - * if self.dtype_is_object: - * p = self.data - * for i in range(self.len / itemsize): # <<<<<<<<<<<<<< - * p[i] = Py_None - * Py_INCREF(Py_None) - */ - if (unlikely(__pyx_v_itemsize == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); - __PYX_ERR(2, 181, __pyx_L1_error) - } - else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_self->len))) { - PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); - __PYX_ERR(2, 181, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_div_Py_ssize_t(__pyx_v_self->len, __pyx_v_itemsize); - __pyx_t_9 = __pyx_t_1; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_9; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; - - /* "View.MemoryView":182 - * p = self.data - * for i in range(self.len / itemsize): - * p[i] = Py_None # <<<<<<<<<<<<<< - * Py_INCREF(Py_None) - * - */ - (__pyx_v_p[__pyx_v_i]) = Py_None; - - /* "View.MemoryView":183 - * for i in range(self.len / itemsize): - * p[i] = Py_None - * Py_INCREF(Py_None) # <<<<<<<<<<<<<< - * - * @cname('getbuffer') - */ - Py_INCREF(Py_None); - } - - /* "View.MemoryView":179 - * raise MemoryError("unable to allocate array data.") - * - * if self.dtype_is_object: # <<<<<<<<<<<<<< - * p = self.data - * for i in range(self.len / itemsize): - */ - } - - /* "View.MemoryView":172 - * self.free_data = allocate_buffer - * self.dtype_is_object = format == b'O' - * if allocate_buffer: # <<<<<<<<<<<<<< - * - * - */ + __pyx_pybuffernd_del_g3_reg.diminfo[0].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3_reg.diminfo[0].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3_reg.diminfo[1].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3_reg.diminfo[1].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3_reg.diminfo[2].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3_reg.diminfo[2].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_u_reg.diminfo[0].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u_reg.diminfo[0].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u_reg.diminfo[1].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u_reg.diminfo[1].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - - /* "View.MemoryView":123 - * cdef bint dtype_is_object - * - * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< - * mode="c", bint allocate_buffer=True): - * - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_format); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":186 - * - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< - * cdef int bufmode = -1 - * if self.mode == u"c": - */ - -/* Python wrapper */ -static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ -static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); - __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(((struct __pyx_array_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_v_bufmode; - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - char *__pyx_t_4; - Py_ssize_t __pyx_t_5; - int __pyx_t_6; - Py_ssize_t *__pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - if (__pyx_v_info == NULL) { - PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); - return -1; + __pyx_pybuffernd_del_i_reg.diminfo[0].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i_reg.diminfo[0].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i_reg.diminfo[1].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i_reg.diminfo[1].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - __Pyx_RefNannySetupContext("__getbuffer__", 0); - __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(__pyx_v_info->obj); - - /* "View.MemoryView":187 - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): - * cdef int bufmode = -1 # <<<<<<<<<<<<<< - * if self.mode == u"c": - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - */ - __pyx_v_bufmode = -1; - - /* "View.MemoryView":188 - * def __getbuffer__(self, Py_buffer *info, int flags): - * cdef int bufmode = -1 - * if self.mode == u"c": # <<<<<<<<<<<<<< - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * elif self.mode == u"fortran": - */ - __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_c, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 188, __pyx_L1_error) - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":189 - * cdef int bufmode = -1 - * if self.mode == u"c": - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< - * elif self.mode == u"fortran": - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - */ - __pyx_v_bufmode = (PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); - - /* "View.MemoryView":188 - * def __getbuffer__(self, Py_buffer *info, int flags): - * cdef int bufmode = -1 - * if self.mode == u"c": # <<<<<<<<<<<<<< - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * elif self.mode == u"fortran": - */ - goto __pyx_L3; + __pyx_pybuffernd_del_a_reg.diminfo[0].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a_reg.diminfo[0].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a_reg.diminfo[1].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a_reg.diminfo[1].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } + __pyx_pybuffernd_del_o_reg.diminfo[0].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o_reg.diminfo[0].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o_reg.diminfo[1].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o_reg.diminfo[1].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[1]; - /* "View.MemoryView":190 - * if self.mode == u"c": - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * elif self.mode == u"fortran": # <<<<<<<<<<<<<< - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * if not (flags & bufmode): - */ - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_fortran, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 190, __pyx_L1_error) - __pyx_t_1 = (__pyx_t_2 != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":191 - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * elif self.mode == u"fortran": - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< - * if not (flags & bufmode): - * raise ValueError("Can only create a buffer that is contiguous in memory.") + /* "cornac/models/comparer/recom_comparer_sub.pyx":531 + * """ + * cdef: + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 # <<<<<<<<<<<<<< + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items */ - __pyx_v_bufmode = (PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); + __pyx_v_correct = 0; + __pyx_v_skipped = 0; + __pyx_v_aspect_correct = 0; - /* "View.MemoryView":190 - * if self.mode == u"c": - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * elif self.mode == u"fortran": # <<<<<<<<<<<<<< - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * if not (flags & bufmode): + /* "cornac/models/comparer/recom_comparer_sub.pyx":532 + * cdef: + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 + * long n_users = self.train_set.num_users # <<<<<<<<<<<<<< + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects */ - } - __pyx_L3:; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_n_users = __pyx_t_3; - /* "View.MemoryView":192 - * elif self.mode == u"fortran": - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * if not (flags & bufmode): # <<<<<<<<<<<<<< - * raise ValueError("Can only create a buffer that is contiguous in memory.") - * info.buf = self.data + /* "cornac/models/comparer/recom_comparer_sub.pyx":533 + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items # <<<<<<<<<<<<<< + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions */ - __pyx_t_1 = ((!((__pyx_v_flags & __pyx_v_bufmode) != 0)) != 0); - if (unlikely(__pyx_t_1)) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_items = __pyx_t_3; - /* "View.MemoryView":193 - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * if not (flags & bufmode): - * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< - * info.buf = self.data - * info.len = self.len + /* "cornac/models/comparer/recom_comparer_sub.pyx":534 + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 193, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(2, 193, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_aspects = __pyx_t_3; - /* "View.MemoryView":192 - * elif self.mode == u"fortran": - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * if not (flags & bufmode): # <<<<<<<<<<<<<< - * raise ValueError("Can only create a buffer that is contiguous in memory.") - * info.buf = self.data + /* "cornac/models/comparer/recom_comparer_sub.pyx":535 + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions # <<<<<<<<<<<<<< + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors */ - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_opinions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_opinions = __pyx_t_3; - /* "View.MemoryView":194 - * if not (flags & bufmode): - * raise ValueError("Can only create a buffer that is contiguous in memory.") - * info.buf = self.data # <<<<<<<<<<<<<< - * info.len = self.len - * info.ndim = self.ndim + /* "cornac/models/comparer/recom_comparer_sub.pyx":536 + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors # <<<<<<<<<<<<<< + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors */ - __pyx_t_4 = __pyx_v_self->data; - __pyx_v_info->buf = __pyx_t_4; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_user_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 536, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 536, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_user_factors = __pyx_t_3; - /* "View.MemoryView":195 - * raise ValueError("Can only create a buffer that is contiguous in memory.") - * info.buf = self.data - * info.len = self.len # <<<<<<<<<<<<<< - * info.ndim = self.ndim - * info.shape = self._shape + /* "cornac/models/comparer/recom_comparer_sub.pyx":537 + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors # <<<<<<<<<<<<<< + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors */ - __pyx_t_5 = __pyx_v_self->len; - __pyx_v_info->len = __pyx_t_5; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_item_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 537, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_item_factors = __pyx_t_3; - /* "View.MemoryView":196 - * info.buf = self.data - * info.len = self.len - * info.ndim = self.ndim # <<<<<<<<<<<<<< - * info.shape = self._shape - * info.strides = self._strides + /* "cornac/models/comparer/recom_comparer_sub.pyx":538 + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors # <<<<<<<<<<<<<< + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples */ - __pyx_t_6 = __pyx_v_self->ndim; - __pyx_v_info->ndim = __pyx_t_6; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_aspect_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 538, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_aspect_factors = __pyx_t_3; - /* "View.MemoryView":197 - * info.len = self.len - * info.ndim = self.ndim - * info.shape = self._shape # <<<<<<<<<<<<<< - * info.strides = self._strides - * info.suboffsets = NULL + /* "cornac/models/comparer/recom_comparer_sub.pyx":539 + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors # <<<<<<<<<<<<<< + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples */ - __pyx_t_7 = __pyx_v_self->_shape; - __pyx_v_info->shape = __pyx_t_7; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_opinion_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 539, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_opinion_factors = __pyx_t_3; - /* "View.MemoryView":198 - * info.ndim = self.ndim - * info.shape = self._shape - * info.strides = self._strides # <<<<<<<<<<<<<< - * info.suboffsets = NULL - * info.itemsize = self.itemsize + /* "cornac/models/comparer/recom_comparer_sub.pyx":540 + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples # <<<<<<<<<<<<<< + * int num_bpr_samples = self.n_bpr_samples + * int num_pair_samples = self.n_pair_samples */ - __pyx_t_7 = __pyx_v_self->_strides; - __pyx_v_info->strides = __pyx_t_7; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_element_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 540, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_samples = __pyx_t_4; - /* "View.MemoryView":199 - * info.shape = self._shape - * info.strides = self._strides - * info.suboffsets = NULL # <<<<<<<<<<<<<< - * info.itemsize = self.itemsize - * info.readonly = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":541 + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples # <<<<<<<<<<<<<< + * int num_pair_samples = self.n_pair_samples + * */ - __pyx_v_info->suboffsets = NULL; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 541, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_bpr_samples = __pyx_t_4; - /* "View.MemoryView":200 - * info.strides = self._strides - * info.suboffsets = NULL - * info.itemsize = self.itemsize # <<<<<<<<<<<<<< - * info.readonly = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":542 + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples + * int num_pair_samples = self.n_pair_samples # <<<<<<<<<<<<<< * + * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id */ - __pyx_t_5 = __pyx_v_self->itemsize; - __pyx_v_info->itemsize = __pyx_t_5; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_pair_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 542, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_pair_samples = __pyx_t_4; - /* "View.MemoryView":201 - * info.suboffsets = NULL - * info.itemsize = self.itemsize - * info.readonly = 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":546 + * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id + * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji + * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr # <<<<<<<<<<<<<< + * floating eps = 1e-9 * - * if flags & PyBUF_FORMAT: */ - __pyx_v_info->readonly = 0; + __pyx_v_loss = 0.; + __pyx_v_bpr_loss = 0.; + __pyx_v_aspect_bpr_loss = 0.; - /* "View.MemoryView":203 - * info.readonly = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":547 + * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji + * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr + * floating eps = 1e-9 # <<<<<<<<<<<<<< * - * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< - * info.format = self.format - * else: + * floating lr = self.lr */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); - if (__pyx_t_1) { + __pyx_v_eps = 1e-9; - /* "View.MemoryView":204 + /* "cornac/models/comparer/recom_comparer_sub.pyx":549 + * floating eps = 1e-9 * - * if flags & PyBUF_FORMAT: - * info.format = self.format # <<<<<<<<<<<<<< - * else: - * info.format = NULL + * floating lr = self.lr # <<<<<<<<<<<<<< + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr */ - __pyx_t_4 = __pyx_v_self->format; - __pyx_v_info->format = __pyx_t_4; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 549, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lr = __pyx_t_5; - /* "View.MemoryView":203 - * info.readonly = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":550 * - * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< - * info.format = self.format - * else: + * floating lr = self.lr + * floating ld_reg = self.lambda_reg # <<<<<<<<<<<<<< + * floating ld_bpr = self.lambda_bpr + * floating lambda_d = self.lambda_d */ - goto __pyx_L5; - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_reg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 550, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 550, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_ld_reg = __pyx_t_5; - /* "View.MemoryView":206 - * info.format = self.format - * else: - * info.format = NULL # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":551 + * floating lr = self.lr + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr # <<<<<<<<<<<<<< + * floating lambda_d = self.lambda_d * - * info.obj = self */ - /*else*/ { - __pyx_v_info->format = NULL; - } - __pyx_L5:; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_bpr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_ld_bpr = __pyx_t_5; - /* "View.MemoryView":208 - * info.format = NULL - * - * info.obj = self # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":552 + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr + * floating lambda_d = self.lambda_d # <<<<<<<<<<<<<< * - * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + * del_g1.fill(0) */ - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); - __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_d = __pyx_t_5; - /* "View.MemoryView":186 + /* "cornac/models/comparer/recom_comparer_sub.pyx":554 + * floating lambda_d = self.lambda_d * - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< - * cdef int bufmode = -1 - * if self.mode == u"c": + * del_g1.fill(0) # <<<<<<<<<<<<<< + * del_g2.fill(0) + * del_g3.fill(0) */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.array.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - if (__pyx_v_info->obj != NULL) { - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } } - goto __pyx_L2; - __pyx_L0:; - if (__pyx_v_info->obj == Py_None) { - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } - __pyx_L2:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":212 - * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") - * - * def __dealloc__(array self): # <<<<<<<<<<<<<< - * if self.callback_free_data != NULL: - * self.callback_free_data(self.data) - */ - -/* Python wrapper */ -static void __pyx_array___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_array___dealloc__(PyObject *__pyx_v_self) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); - __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(((struct __pyx_array_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self) { - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("__dealloc__", 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":213 + /* "cornac/models/comparer/recom_comparer_sub.pyx":555 * - * def __dealloc__(array self): - * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< - * self.callback_free_data(self.data) - * elif self.free_data: + * del_g1.fill(0) + * del_g2.fill(0) # <<<<<<<<<<<<<< + * del_g3.fill(0) + * del_u.fill(0) */ - __pyx_t_1 = ((__pyx_v_self->callback_free_data != NULL) != 0); - if (__pyx_t_1) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":214 - * def __dealloc__(array self): - * if self.callback_free_data != NULL: - * self.callback_free_data(self.data) # <<<<<<<<<<<<<< - * elif self.free_data: - * if self.dtype_is_object: + /* "cornac/models/comparer/recom_comparer_sub.pyx":556 + * del_g1.fill(0) + * del_g2.fill(0) + * del_g3.fill(0) # <<<<<<<<<<<<<< + * del_u.fill(0) + * del_i.fill(0) */ - __pyx_v_self->callback_free_data(__pyx_v_self->data); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":213 - * - * def __dealloc__(array self): - * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< - * self.callback_free_data(self.data) - * elif self.free_data: + /* "cornac/models/comparer/recom_comparer_sub.pyx":557 + * del_g2.fill(0) + * del_g3.fill(0) + * del_u.fill(0) # <<<<<<<<<<<<<< + * del_i.fill(0) + * del_a.fill(0) */ - goto __pyx_L3; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 557, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":215 - * if self.callback_free_data != NULL: - * self.callback_free_data(self.data) - * elif self.free_data: # <<<<<<<<<<<<<< - * if self.dtype_is_object: - * refcount_objects_in_slice(self.data, self._shape, + /* "cornac/models/comparer/recom_comparer_sub.pyx":558 + * del_g3.fill(0) + * del_u.fill(0) + * del_i.fill(0) # <<<<<<<<<<<<<< + * del_a.fill(0) + * del_o.fill(0) */ - __pyx_t_1 = (__pyx_v_self->free_data != 0); - if (__pyx_t_1) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":216 - * self.callback_free_data(self.data) - * elif self.free_data: - * if self.dtype_is_object: # <<<<<<<<<<<<<< - * refcount_objects_in_slice(self.data, self._shape, - * self._strides, self.ndim, False) + /* "cornac/models/comparer/recom_comparer_sub.pyx":559 + * del_u.fill(0) + * del_i.fill(0) + * del_a.fill(0) # <<<<<<<<<<<<<< + * del_o.fill(0) + * del_g1_reg.fill(0) */ - __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0); - if (__pyx_t_1) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 559, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 559, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":217 - * elif self.free_data: - * if self.dtype_is_object: - * refcount_objects_in_slice(self.data, self._shape, # <<<<<<<<<<<<<< - * self._strides, self.ndim, False) - * free(self.data) + /* "cornac/models/comparer/recom_comparer_sub.pyx":560 + * del_i.fill(0) + * del_a.fill(0) + * del_o.fill(0) # <<<<<<<<<<<<<< + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) */ - __pyx_memoryview_refcount_objects_in_slice(__pyx_v_self->data, __pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_self->ndim, 0); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":216 - * self.callback_free_data(self.data) - * elif self.free_data: - * if self.dtype_is_object: # <<<<<<<<<<<<<< - * refcount_objects_in_slice(self.data, self._shape, - * self._strides, self.ndim, False) + /* "cornac/models/comparer/recom_comparer_sub.pyx":561 + * del_a.fill(0) + * del_o.fill(0) + * del_g1_reg.fill(0) # <<<<<<<<<<<<<< + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":219 - * refcount_objects_in_slice(self.data, self._shape, - * self._strides, self.ndim, False) - * free(self.data) # <<<<<<<<<<<<<< - * PyObject_Free(self._shape) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":562 + * del_o.fill(0) + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) # <<<<<<<<<<<<<< + * del_g3_reg.fill(0) + * del_u_reg.fill(0) */ - free(__pyx_v_self->data); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 562, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":215 - * if self.callback_free_data != NULL: - * self.callback_free_data(self.data) - * elif self.free_data: # <<<<<<<<<<<<<< - * if self.dtype_is_object: - * refcount_objects_in_slice(self.data, self._shape, + /* "cornac/models/comparer/recom_comparer_sub.pyx":563 + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) # <<<<<<<<<<<<<< + * del_u_reg.fill(0) + * del_i_reg.fill(0) */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 563, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } } - __pyx_L3:; + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 563, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":220 - * self._strides, self.ndim, False) - * free(self.data) - * PyObject_Free(self._shape) # <<<<<<<<<<<<<< - * - * @property + /* "cornac/models/comparer/recom_comparer_sub.pyx":564 + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) + * del_u_reg.fill(0) # <<<<<<<<<<<<<< + * del_i_reg.fill(0) + * del_a_reg.fill(0) */ - PyObject_Free(__pyx_v_self->_shape); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":212 - * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") - * - * def __dealloc__(array self): # <<<<<<<<<<<<<< - * if self.callback_free_data != NULL: - * self.callback_free_data(self.data) + /* "cornac/models/comparer/recom_comparer_sub.pyx":565 + * del_g3_reg.fill(0) + * del_u_reg.fill(0) + * del_i_reg.fill(0) # <<<<<<<<<<<<<< + * del_a_reg.fill(0) + * del_o_reg.fill(0) */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "View.MemoryView":223 - * - * @property - * def memview(self): # <<<<<<<<<<<<<< - * return self.get_memview() - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":566 + * del_u_reg.fill(0) + * del_i_reg.fill(0) + * del_a_reg.fill(0) # <<<<<<<<<<<<<< + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 566, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_5array_7memview___get__(((struct __pyx_array_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":224 - * @property - * def memview(self): - * return self.get_memview() # <<<<<<<<<<<<<< - * - * @cname('get_memview') + /* "cornac/models/comparer/recom_comparer_sub.pyx":567 + * del_i_reg.fill(0) + * del_a_reg.fill(0) + * del_o_reg.fill(0) # <<<<<<<<<<<<<< + * with nogil, parallel(num_threads=n_threads): + * thread_id = get_thread_num() */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = ((struct __pyx_vtabstruct_array *)__pyx_v_self->__pyx_vtab)->get_memview(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 224, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":223 - * - * @property - * def memview(self): # <<<<<<<<<<<<<< - * return self.get_memview() - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":568 + * del_a_reg.fill(0) + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): */ + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel private(__pyx_v_thread_id) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_bpr_loss) reduction(+:__pyx_v_correct) reduction(+:__pyx_v_skipped) reduction(+:__pyx_v_aspect_bpr_loss) reduction(+:__pyx_v_aspect_correct) private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_7, __pyx_t_8, __pyx_t_9) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_n_threads) + #endif /* _OPENMP */ + { + #ifdef _OPENMP + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + Py_BEGIN_ALLOW_THREADS + #endif /* _OPENMP */ + /* Initialize private variables to invalid values */ + __pyx_v_thread_id = ((long)0xbad0bad0); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.array.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":227 - * - * @cname('get_memview') - * cdef get_memview(self): # <<<<<<<<<<<<<< - * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE - * return memoryview(self, flags, self.dtype_is_object) + /* "cornac/models/comparer/recom_comparer_sub.pyx":569 + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): + * thread_id = get_thread_num() # <<<<<<<<<<<<<< + * for _ in prange(num_samples, schedule='guided'): + * # get user item aspect element */ + __pyx_v_thread_id = recom_bpr::get_thread_num(); -static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self) { - int __pyx_v_flags; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_memview", 0); - - /* "View.MemoryView":228 - * @cname('get_memview') - * cdef get_memview(self): - * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE # <<<<<<<<<<<<<< - * return memoryview(self, flags, self.dtype_is_object) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":570 + * with nogil, parallel(num_threads=n_threads): + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): # <<<<<<<<<<<<<< + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) */ - __pyx_v_flags = ((PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) | PyBUF_WRITABLE); + __pyx_t_4 = __pyx_v_num_samples; + { + long __pyx_parallel_temp0 = ((long)0xbad0bad0); + long __pyx_parallel_temp1 = ((long)0xbad0bad0); + float __pyx_parallel_temp2 = ((float)__PYX_NAN()); + long __pyx_parallel_temp3 = ((long)0xbad0bad0); + long __pyx_parallel_temp4 = ((long)0xbad0bad0); + long __pyx_parallel_temp5 = ((long)0xbad0bad0); + long __pyx_parallel_temp6 = ((long)0xbad0bad0); + long __pyx_parallel_temp7 = ((long)0xbad0bad0); + float __pyx_parallel_temp8 = ((float)__PYX_NAN()); + long __pyx_parallel_temp9 = ((long)0xbad0bad0); + float __pyx_parallel_temp10 = ((float)__PYX_NAN()); + float __pyx_parallel_temp11 = ((float)__PYX_NAN()); + long __pyx_parallel_temp12 = ((long)0xbad0bad0); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_7 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_7 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_del_sqerror) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_o_idx) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_score) lastprivate(__pyx_v_u_idx) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_7; __pyx_t_3++){ + if (__pyx_parallel_why < 2) + { + __pyx_v__ = (long)(0 + 1 * __pyx_t_3); + /* Initialize private variables to invalid values */ + __pyx_v_a_idx = ((long)0xbad0bad0); + __pyx_v_del_sqerror = ((float)__PYX_NAN()); + __pyx_v_i = ((long)0xbad0bad0); + __pyx_v_i_idx = ((long)0xbad0bad0); + __pyx_v_idx = ((long)0xbad0bad0); + __pyx_v_j = ((long)0xbad0bad0); + __pyx_v_k = ((long)0xbad0bad0); + __pyx_v_o_idx = ((long)0xbad0bad0); + __pyx_v_pred = ((float)__PYX_NAN()); + __pyx_v_score = ((float)__PYX_NAN()); + __pyx_v_u_idx = ((long)0xbad0bad0); - /* "View.MemoryView":229 - * cdef get_memview(self): - * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE - * return memoryview(self, flags, self.dtype_is_object) # <<<<<<<<<<<<<< - * - * def __len__(self): + /* "cornac/models/comparer/recom_comparer_sub.pyx":572 + * for _ in prange(num_samples, schedule='guided'): + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 229, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 229, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 229, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); - PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 229, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; + __pyx_t_8 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uia->__pyx_vtab)->generate(__pyx_v_rng_pos_uia, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 572, __pyx_L12_error) + __pyx_v_idx = __pyx_t_8; - /* "View.MemoryView":227 - * - * @cname('get_memview') - * cdef get_memview(self): # <<<<<<<<<<<<<< - * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE - * return memoryview(self, flags, self.dtype_is_object) + /* "cornac/models/comparer/recom_comparer_sub.pyx":573 + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) + * u_idx = X_uids[idx] # <<<<<<<<<<<<<< + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] */ + __pyx_t_9 = __pyx_v_idx; + __pyx_v_u_idx = (*((long *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_9 * __pyx_v_X_uids.strides[0]) ))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.array.get_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":231 - * return memoryview(self, flags, self.dtype_is_object) - * - * def __len__(self): # <<<<<<<<<<<<<< - * return self._shape[0] - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":574 + * idx = rng_pos_uia.generate(thread_id) + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] # <<<<<<<<<<<<<< + * a_idx = X_aids[idx] + * score = X[idx] */ + __pyx_t_9 = __pyx_v_idx; + __pyx_v_i_idx = (*((long *) ( /* dim=0 */ (__pyx_v_X_iids.data + __pyx_t_9 * __pyx_v_X_iids.strides[0]) ))); -/* Python wrapper */ -static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self); /*proto*/ -static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self) { - Py_ssize_t __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); - __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(((struct __pyx_array_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":575 + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] # <<<<<<<<<<<<<< + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + */ + __pyx_t_9 = __pyx_v_idx; + __pyx_v_a_idx = (*((long *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_9 * __pyx_v_X_aids.strides[0]) ))); -static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self) { - Py_ssize_t __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__len__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":576 + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] + * score = X[idx] # <<<<<<<<<<<<<< + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * loss += (pred - score) * (pred - score) + */ + __pyx_t_9 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_9 * __pyx_v_X.strides[0]) ))); - /* "View.MemoryView":232 - * - * def __len__(self): - * return self._shape[0] # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":577 + * a_idx = X_aids[idx] + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) * - * def __getattr__(self, attr): */ - __pyx_r = (__pyx_v_self->_shape[0]); - goto __pyx_L0; + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 577, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; - /* "View.MemoryView":231 - * return memoryview(self, flags, self.dtype_is_object) - * - * def __len__(self): # <<<<<<<<<<<<<< - * return self._shape[0] + /* "cornac/models/comparer/recom_comparer_sub.pyx":578 + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< * + * del_sqerror = 2 * (pred - score) */ + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* function exit code */ - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":234 - * return self._shape[0] + /* "cornac/models/comparer/recom_comparer_sub.pyx":580 + * loss += (pred - score) * (pred - score) * - * def __getattr__(self, attr): # <<<<<<<<<<<<<< - * return getattr(self.memview, attr) + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * for i in range(n_user_factors): + * for j in range(n_item_factors): + */ + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":581 * + * del_sqerror = 2 * (pred - score) + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): */ + __pyx_t_8 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_8; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; -/* Python wrapper */ -static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/ -static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0); - __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_attr)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":582 + * del_sqerror = 2 * (pred - score) + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + */ + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":583 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + */ + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; -static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__getattr__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":584 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + */ + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_i_idx; + __pyx_t_20 = __pyx_v_j; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_k; + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_20 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":235 - * - * def __getattr__(self, attr): - * return getattr(self.memview, attr) # <<<<<<<<<<<<<< - * - * def __getitem__(self, item): + /* "cornac/models/comparer/recom_comparer_sub.pyx":585 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 235, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 235, __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; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_i_idx; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":234 - * return self._shape[0] - * - * def __getattr__(self, attr): # <<<<<<<<<<<<<< - * return getattr(self.memview, attr) + /* "cornac/models/comparer/recom_comparer_sub.pyx":586 + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] * */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_k; + __pyx_t_23 = __pyx_v_i_idx; + __pyx_t_24 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_25 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_20 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.array.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":237 - * return getattr(self.memview, attr) + /* "cornac/models/comparer/recom_comparer_sub.pyx":587 + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] # <<<<<<<<<<<<<< * - * def __getitem__(self, item): # <<<<<<<<<<<<<< - * return self.memview[item] + * # get user aspect opinion element + */ + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))); + } + } + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":590 * + * # get user aspect opinion element + * idx = rng_pos_uao.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] */ + __pyx_t_8 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uao->__pyx_vtab)->generate(__pyx_v_rng_pos_uao, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 590, __pyx_L12_error) + __pyx_v_idx = __pyx_t_8; -/* Python wrapper */ -static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ -static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); - __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":591 + * # get user aspect opinion element + * idx = rng_pos_uao.generate(thread_id) + * u_idx = YU_uids[idx] # <<<<<<<<<<<<<< + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] + */ + __pyx_t_25 = __pyx_v_idx; + __pyx_v_u_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YU_uids.data + __pyx_t_25 * __pyx_v_YU_uids.strides[0]) ))); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":592 + * idx = rng_pos_uao.generate(thread_id) + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] # <<<<<<<<<<<<<< + * o_idx = YU_oids[idx] + * score = YU[idx] + */ + __pyx_t_25 = __pyx_v_idx; + __pyx_v_a_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YU_aids.data + __pyx_t_25 * __pyx_v_YU_aids.strides[0]) ))); -static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__getitem__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":593 + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] # <<<<<<<<<<<<<< + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + */ + __pyx_t_25 = __pyx_v_idx; + __pyx_v_o_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YU_oids.data + __pyx_t_25 * __pyx_v_YU_oids.strides[0]) ))); - /* "View.MemoryView":238 + /* "cornac/models/comparer/recom_comparer_sub.pyx":594 + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] + * score = YU[idx] # <<<<<<<<<<<<<< + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) + */ + __pyx_t_25 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_YU.data + __pyx_t_25 * __pyx_v_YU.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":595 + * o_idx = YU_oids[idx] + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) * - * def __getitem__(self, item): - * return self.memview[item] # <<<<<<<<<<<<<< + */ + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G2, __pyx_v_n_user_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_U, __pyx_v_A, __pyx_v_O, __pyx_v_u_idx, __pyx_v_a_idx, __pyx_v_o_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 595, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":596 + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< * - * def __setitem__(self, item, value): + * del_sqerror = 2 * (pred - score) */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 238, __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; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "View.MemoryView":237 - * return getattr(self.memview, attr) + /* "cornac/models/comparer/recom_comparer_sub.pyx":598 + * loss += (pred - score) * (pred - score) * - * def __getitem__(self, item): # <<<<<<<<<<<<<< - * return self.memview[item] + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< * + * for i in range(n_user_factors): */ + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.array.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":240 - * return self.memview[item] + /* "cornac/models/comparer/recom_comparer_sub.pyx":600 + * del_sqerror = 2 * (pred - score) * - * def __setitem__(self, item, value): # <<<<<<<<<<<<<< - * self.memview[item] = value + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + */ + __pyx_t_8 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_8; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":601 * + * for i in range(n_user_factors): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] */ + __pyx_t_12 = __pyx_v_n_aspect_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; -/* Python wrapper */ -static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); - __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":602 + * for i in range(n_user_factors): + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + */ + __pyx_t_15 = __pyx_v_n_opinion_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":603 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + */ + __pyx_t_25 = __pyx_v_u_idx; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_j; + __pyx_t_20 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); -static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setitem__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":604 + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] + */ + __pyx_t_21 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_18 = __pyx_v_a_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_o_idx; + __pyx_t_24 = __pyx_v_k; + __pyx_t_23 = __pyx_v_u_idx; + __pyx_t_22 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_9 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_25 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":241 - * - * def __setitem__(self, item, value): - * self.memview[item] = value # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":605 + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 241, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_item, __pyx_v_value) < 0)) __PYX_ERR(2, 241, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_18 = __pyx_v_u_idx; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + __pyx_t_22 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_24 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":240 - * return self.memview[item] - * - * def __setitem__(self, item, value): # <<<<<<<<<<<<<< - * self.memview[item] = value + /* "cornac/models/comparer/recom_comparer_sub.pyx":606 + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< * + * # get item aspect opinion element */ + __pyx_t_21 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_18 = __pyx_v_u_idx; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_a_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_o_idx; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_24 * __pyx_v_A.strides[1]) )))); + } + } + } - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.array.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): + /* "cornac/models/comparer/recom_comparer_sub.pyx":609 + * + * # get item aspect opinion element + * idx = rng_pos_iao.generate(thread_id) # <<<<<<<<<<<<<< + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] */ + __pyx_t_8 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_iao->__pyx_vtab)->generate(__pyx_v_rng_pos_iao, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 609, __pyx_L12_error) + __pyx_v_idx = __pyx_t_8; -/* Python wrapper */ -static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf___pyx_array___reduce_cython__(((struct __pyx_array_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); - - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + /* "cornac/models/comparer/recom_comparer_sub.pyx":610 + * # get item aspect opinion element + * idx = rng_pos_iao.generate(thread_id) + * i_idx = YI_iids[idx] # <<<<<<<<<<<<<< + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(2, 2, __pyx_L1_error) + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YI_iids.data + __pyx_t_24 * __pyx_v_YI_iids.strides[0]) ))); - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): + /* "cornac/models/comparer/recom_comparer_sub.pyx":611 + * idx = rng_pos_iao.generate(thread_id) + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] # <<<<<<<<<<<<<< + * o_idx = YI_oids[idx] + * score = YI[idx] */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_a_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YI_aids.data + __pyx_t_24 * __pyx_v_YI_aids.strides[0]) ))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.array.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":612 + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] # <<<<<<<<<<<<<< + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_o_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YI_oids.data + __pyx_t_24 * __pyx_v_YI_oids.strides[0]) ))); -/* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + /* "cornac/models/comparer/recom_comparer_sub.pyx":613 + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] + * score = YI[idx] # <<<<<<<<<<<<<< + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_YI.data + __pyx_t_24 * __pyx_v_YI.strides[0]) ))); -/* Python wrapper */ -static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf___pyx_array_2__setstate_cython__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":614 + * o_idx = YI_oids[idx] + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) + * + */ + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G3, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_i_idx, __pyx_v_a_idx, __pyx_v_o_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 614, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":615 + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< + * + * del_sqerror = 2 * (pred - score) + */ + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); -static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":617 + * loss += (pred - score) * (pred - score) + * + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): + */ + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":618 + * + * del_sqerror = 2 * (pred - score) + * for i in range(n_item_factors): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(2, 4, __pyx_L1_error) + __pyx_t_8 = __pyx_v_n_item_factors; + __pyx_t_10 = __pyx_t_8; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + /* "cornac/models/comparer/recom_comparer_sub.pyx":619 + * del_sqerror = 2 * (pred - score) + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] */ + __pyx_t_12 = __pyx_v_n_aspect_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":620 + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + */ + __pyx_t_15 = __pyx_v_n_opinion_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; -/* "View.MemoryView":245 - * - * @cname("__pyx_array_new") - * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< - * char *mode, char *buf): - * cdef array result + /* "cornac/models/comparer/recom_comparer_sub.pyx":621 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] */ + __pyx_t_24 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_o_idx; + __pyx_t_20 = __pyx_v_k; + __pyx_t_21 = __pyx_v_i; + __pyx_t_22 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_24 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); -static struct __pyx_array_obj *__pyx_array_new(PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, char *__pyx_v_format, char *__pyx_v_mode, char *__pyx_v_buf) { - struct __pyx_array_obj *__pyx_v_result = 0; - struct __pyx_array_obj *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("array_cwrapper", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":622 + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + */ + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_o_idx; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i_idx; + __pyx_t_21 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_23 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":249 - * cdef array result + /* "cornac/models/comparer/recom_comparer_sub.pyx":623 + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] * - * if buf == NULL: # <<<<<<<<<<<<<< - * result = array(shape, itemsize, format, mode.decode('ASCII')) - * else: */ - __pyx_t_1 = ((__pyx_v_buf == NULL) != 0); - if (__pyx_t_1) { + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_o_idx; + __pyx_t_20 = __pyx_v_k; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_23 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":250 + /* "cornac/models/comparer/recom_comparer_sub.pyx":624 + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< * - * if buf == NULL: - * result = array(shape, itemsize, format, mode.decode('ASCII')) # <<<<<<<<<<<<<< - * else: - * result = array(shape, itemsize, format, mode.decode('ASCII'), + * for _ in prange(num_bpr_samples, schedule='guided'): */ - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 250, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 250, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 250, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 250, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_shape); - __Pyx_GIVEREF(__pyx_v_shape); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_shape); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4); - __pyx_t_2 = 0; - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 250, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_4); - __pyx_t_4 = 0; + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_j; + __pyx_t_22 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); + } + } + } + goto __pyx_L33; + __pyx_L12_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L32; + __pyx_L32:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates6) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_a_idx; + __pyx_parallel_temp2 = __pyx_v_del_sqerror; + __pyx_parallel_temp3 = __pyx_v_i; + __pyx_parallel_temp4 = __pyx_v_i_idx; + __pyx_parallel_temp5 = __pyx_v_idx; + __pyx_parallel_temp6 = __pyx_v_j; + __pyx_parallel_temp7 = __pyx_v_k; + __pyx_parallel_temp8 = __pyx_v_loss; + __pyx_parallel_temp9 = __pyx_v_o_idx; + __pyx_parallel_temp10 = __pyx_v_pred; + __pyx_parallel_temp11 = __pyx_v_score; + __pyx_parallel_temp12 = __pyx_v_u_idx; + } + __pyx_L33:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_a_idx = __pyx_parallel_temp1; + __pyx_v_del_sqerror = __pyx_parallel_temp2; + __pyx_v_i = __pyx_parallel_temp3; + __pyx_v_i_idx = __pyx_parallel_temp4; + __pyx_v_idx = __pyx_parallel_temp5; + __pyx_v_j = __pyx_parallel_temp6; + __pyx_v_k = __pyx_parallel_temp7; + __pyx_v_loss = __pyx_parallel_temp8; + __pyx_v_o_idx = __pyx_parallel_temp9; + __pyx_v_pred = __pyx_parallel_temp10; + __pyx_v_score = __pyx_parallel_temp11; + __pyx_v_u_idx = __pyx_parallel_temp12; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } - /* "View.MemoryView":249 - * cdef array result + /* "cornac/models/comparer/recom_comparer_sub.pyx":626 + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] * - * if buf == NULL: # <<<<<<<<<<<<<< - * result = array(shape, itemsize, format, mode.decode('ASCII')) - * else: + * for _ in prange(num_bpr_samples, schedule='guided'): # <<<<<<<<<<<<<< + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] */ - goto __pyx_L3; - } + __pyx_t_4 = __pyx_v_num_bpr_samples; + { + long __pyx_parallel_temp0 = ((long)0xbad0bad0); + float __pyx_parallel_temp1 = ((float)__PYX_NAN()); + long __pyx_parallel_temp2 = ((long)0xbad0bad0); + float __pyx_parallel_temp3 = ((float)__PYX_NAN()); + long __pyx_parallel_temp4 = ((long)0xbad0bad0); + long __pyx_parallel_temp5 = ((long)0xbad0bad0); + float __pyx_parallel_temp6 = ((float)__PYX_NAN()); + float __pyx_parallel_temp7 = ((float)__PYX_NAN()); + long __pyx_parallel_temp8 = ((long)0xbad0bad0); + long __pyx_parallel_temp9 = ((long)0xbad0bad0); + long __pyx_parallel_temp10 = ((long)0xbad0bad0); + float __pyx_parallel_temp11 = ((float)__PYX_NAN()); + long __pyx_parallel_temp12 = ((long)0xbad0bad0); + long __pyx_parallel_temp13 = ((long)0xbad0bad0); + float __pyx_parallel_temp14 = ((float)__PYX_NAN()); + long __pyx_parallel_temp15 = ((long)0xbad0bad0); + long __pyx_parallel_temp16 = ((long)0xbad0bad0); + long __pyx_parallel_temp17 = ((long)0xbad0bad0); + float __pyx_parallel_temp18 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_3 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_3 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_del_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_i_ij) lastprivate(__pyx_v_i_score) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_j_score) lastprivate(__pyx_v_jdx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_s) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_3; __pyx_t_7++){ + if (__pyx_parallel_why < 2) + { + __pyx_v__ = (long)(0 + 1 * __pyx_t_7); + /* Initialize private variables to invalid values */ + __pyx_v_del_bpr = ((float)__PYX_NAN()); + __pyx_v_i = ((long)0xbad0bad0); + __pyx_v_i_idx = ((long)0xbad0bad0); + __pyx_v_i_ij = ((float)__PYX_NAN()); + __pyx_v_i_score = ((float)__PYX_NAN()); + __pyx_v_idx = ((long)0xbad0bad0); + __pyx_v_j = ((long)0xbad0bad0); + __pyx_v_j_idx = ((long)0xbad0bad0); + __pyx_v_j_score = ((float)__PYX_NAN()); + __pyx_v_jdx = ((long)0xbad0bad0); + __pyx_v_k = ((long)0xbad0bad0); + __pyx_v_pred = ((float)__PYX_NAN()); + __pyx_v_s = ((long)0xbad0bad0); + __pyx_v_u_idx = ((long)0xbad0bad0); + __pyx_v_z = ((float)__PYX_NAN()); - /* "View.MemoryView":252 - * result = array(shape, itemsize, format, mode.decode('ASCII')) - * else: - * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< - * allocate_buffer=False) - * result.data = buf + /* "cornac/models/comparer/recom_comparer_sub.pyx":627 + * + * for _ in prange(num_bpr_samples, schedule='guided'): + * idx = rng_pos.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] */ - /*else*/ { - __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_shape); - __Pyx_GIVEREF(__pyx_v_shape); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_3); - __pyx_t_4 = 0; - __pyx_t_5 = 0; - __pyx_t_3 = 0; + __pyx_t_8 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos->__pyx_vtab)->generate(__pyx_v_rng_pos, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 627, __pyx_L36_error) + __pyx_v_idx = __pyx_t_8; - /* "View.MemoryView":253 - * else: - * result = array(shape, itemsize, format, mode.decode('ASCII'), - * allocate_buffer=False) # <<<<<<<<<<<<<< - * result.data = buf - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":628 + * for _ in prange(num_bpr_samples, schedule='guided'): + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] # <<<<<<<<<<<<<< + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) */ - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(2, 253, __pyx_L1_error) + __pyx_t_23 = __pyx_v_idx; + __pyx_v_u_idx = (*((long *) ( /* dim=0 */ (__pyx_v_user_ids.data + __pyx_t_23 * __pyx_v_user_ids.strides[0]) ))); - /* "View.MemoryView":252 - * result = array(shape, itemsize, format, mode.decode('ASCII')) - * else: - * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< - * allocate_buffer=False) - * result.data = buf + /* "cornac/models/comparer/recom_comparer_sub.pyx":629 + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] # <<<<<<<<<<<<<< + * jdx = rng_neg.generate(thread_id) + * j_idx = neg_item_ids[jdx] */ - __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_5); - __pyx_t_5 = 0; + __pyx_t_23 = __pyx_v_idx; + __pyx_v_i_idx = (*((long *) ( /* dim=0 */ (__pyx_v_item_ids.data + __pyx_t_23 * __pyx_v_item_ids.strides[0]) ))); - /* "View.MemoryView":254 - * result = array(shape, itemsize, format, mode.decode('ASCII'), - * allocate_buffer=False) - * result.data = buf # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":630 + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) # <<<<<<<<<<<<<< + * j_idx = neg_item_ids[jdx] * - * return result */ - __pyx_v_result->data = __pyx_v_buf; - } - __pyx_L3:; + __pyx_t_8 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_neg->__pyx_vtab)->generate(__pyx_v_rng_neg, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 630, __pyx_L36_error) + __pyx_v_jdx = __pyx_t_8; - /* "View.MemoryView":256 - * result.data = buf - * - * return result # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":631 + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) + * j_idx = neg_item_ids[jdx] # <<<<<<<<<<<<<< * + * s = 1 */ - __Pyx_XDECREF(((PyObject *)__pyx_r)); - __Pyx_INCREF(((PyObject *)__pyx_v_result)); - __pyx_r = __pyx_v_result; - goto __pyx_L0; + __pyx_t_23 = __pyx_v_jdx; + __pyx_v_j_idx = (*((long *) ( /* dim=0 */ (__pyx_v_neg_item_ids.data + __pyx_t_23 * __pyx_v_neg_item_ids.strides[0]) ))); - /* "View.MemoryView":245 + /* "cornac/models/comparer/recom_comparer_sub.pyx":633 + * j_idx = neg_item_ids[jdx] * - * @cname("__pyx_array_new") - * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< - * char *mode, char *buf): - * cdef array result + * s = 1 # <<<<<<<<<<<<<< + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): */ + __pyx_v_s = 1; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.array_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_result); - __Pyx_XGIVEREF((PyObject *)__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":282 - * cdef class Enum(object): - * cdef object name - * def __init__(self, name): # <<<<<<<<<<<<<< - * self.name = name - * def __repr__(self): + /* "cornac/models/comparer/recom_comparer_sub.pyx":635 + * s = 1 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] */ + __pyx_t_26 = __pyx_fuse_2__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero(__pyx_v_indptr, __pyx_v_item_ids, __pyx_v_u_idx, __pyx_v_j_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 635, __pyx_L36_error) + __pyx_t_27 = (__pyx_t_26 != 0); + if (__pyx_t_27) { -/* Python wrapper */ -static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_name = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,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); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 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, "__init__") < 0)) __PYX_ERR(2, 282, __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_name = values[0]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 282, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("View.MemoryView.Enum.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return -1; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v_name); + /* "cornac/models/comparer/recom_comparer_sub.pyx":636 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] # <<<<<<<<<<<<<< + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: + */ + __pyx_t_28 = __pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_i_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 636, __pyx_L36_error) + __pyx_v_i_score = (__pyx_v_rating_dict->my_map[__pyx_t_28]); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":637 + * if has_non_zero(indptr, item_ids, u_idx, j_idx): + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] # <<<<<<<<<<<<<< + * if i_score == j_score: + * skipped += 1 + */ + __pyx_t_28 = __pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_j_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 637, __pyx_L36_error) + __pyx_v_j_score = (__pyx_v_rating_dict->my_map[__pyx_t_28]); -static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":638 + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: # <<<<<<<<<<<<<< + * skipped += 1 + * continue + */ + __pyx_t_27 = (__pyx_v_i_score == __pyx_v_j_score); + if (__pyx_t_27) { - /* "View.MemoryView":283 - * cdef object name - * def __init__(self, name): - * self.name = name # <<<<<<<<<<<<<< - * def __repr__(self): - * return self.name + /* "cornac/models/comparer/recom_comparer_sub.pyx":639 + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: + * skipped += 1 # <<<<<<<<<<<<<< + * continue + * elif i_score < j_score: */ - __Pyx_INCREF(__pyx_v_name); - __Pyx_GIVEREF(__pyx_v_name); - __Pyx_GOTREF(__pyx_v_self->name); - __Pyx_DECREF(__pyx_v_self->name); - __pyx_v_self->name = __pyx_v_name; + __pyx_v_skipped = (__pyx_v_skipped + 1); - /* "View.MemoryView":282 - * cdef class Enum(object): - * cdef object name - * def __init__(self, name): # <<<<<<<<<<<<<< - * self.name = name - * def __repr__(self): + /* "cornac/models/comparer/recom_comparer_sub.pyx":640 + * if i_score == j_score: + * skipped += 1 + * continue # <<<<<<<<<<<<<< + * elif i_score < j_score: + * s = -1 */ + goto __pyx_L34_continue; - /* function exit code */ - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":638 + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: # <<<<<<<<<<<<<< + * skipped += 1 + * continue + */ + } -/* "View.MemoryView":284 - * def __init__(self, name): - * self.name = name - * def __repr__(self): # <<<<<<<<<<<<<< - * return self.name + /* "cornac/models/comparer/recom_comparer_sub.pyx":641 + * skipped += 1 + * continue + * elif i_score < j_score: # <<<<<<<<<<<<<< + * s = -1 * */ + __pyx_t_27 = (__pyx_v_i_score < __pyx_v_j_score); + if (__pyx_t_27) { -/* Python wrapper */ -static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); - __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":642 + * continue + * elif i_score < j_score: + * s = -1 # <<<<<<<<<<<<<< + * + * pred = ( + */ + __pyx_v_s = -1L; - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":641 + * skipped += 1 + * continue + * elif i_score < j_score: # <<<<<<<<<<<<<< + * s = -1 + * + */ + } -static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__repr__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":635 + * s = 1 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + */ + } - /* "View.MemoryView":285 - * self.name = name - * def __repr__(self): - * return self.name # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":645 * - * cdef generic = Enum("") + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) # <<<<<<<<<<<<<< + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->name); - __pyx_r = __pyx_v_self->name; - goto __pyx_L0; + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_n_aspects); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 645, __pyx_L36_error) - /* "View.MemoryView":284 - * def __init__(self, name): - * self.name = name - * def __repr__(self): # <<<<<<<<<<<<<< - * return self.name - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":646 + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) # <<<<<<<<<<<<<< + * ) * s + * z = (1.0 / (1.0 + exp(pred))) */ + __pyx_t_29 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_n_aspects); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 646, __pyx_L36_error) - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":647 + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s # <<<<<<<<<<<<<< + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: + */ + __pyx_v_pred = ((__pyx_t_5 - __pyx_t_29) * __pyx_v_s); -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict + /* "cornac/models/comparer/recom_comparer_sub.pyx":648 + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s + * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< + * if z < .5: + * correct += 1 */ + __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); -/* Python wrapper */ -static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf___pyx_MemviewEnum___reduce_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":649 + * ) * s + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * correct += 1 + * del_bpr = ld_bpr * z * s + */ + __pyx_t_27 = (__pyx_v_z < .5); + if (__pyx_t_27) { - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":650 + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: + * correct += 1 # <<<<<<<<<<<<<< + * del_bpr = ld_bpr * z * s + * + */ + __pyx_v_correct = (__pyx_v_correct + 1); -static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { - PyObject *__pyx_v_state = 0; - PyObject *__pyx_v__dict = 0; - int __pyx_v_use_setstate; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":649 + * ) * s + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * correct += 1 + * del_bpr = ld_bpr * z * s + */ + } - /* "(tree fragment)":5 - * cdef object _dict - * cdef bint use_setstate - * state = (self.name,) # <<<<<<<<<<<<<< - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: + /* "cornac/models/comparer/recom_comparer_sub.pyx":651 + * if z < .5: + * correct += 1 + * del_bpr = ld_bpr * z * s # <<<<<<<<<<<<<< + * + * bpr_loss += log(1 / (1 + exp(-pred))) */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self->name); - __Pyx_GIVEREF(__pyx_v_self->name); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name); - __pyx_v_state = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; + __pyx_v_del_bpr = ((__pyx_v_ld_bpr * __pyx_v_z) * __pyx_v_s); - /* "(tree fragment)":6 - * cdef bint use_setstate - * state = (self.name,) - * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< - * if _dict is not None: - * state += (_dict,) + /* "cornac/models/comparer/recom_comparer_sub.pyx":653 + * del_bpr = ld_bpr * z * s + * + * bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< + * + * for i in range(n_user_factors): */ - __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v__dict = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_v_bpr_loss = (__pyx_v_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); - /* "(tree fragment)":7 - * state = (self.name,) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True + /* "cornac/models/comparer/recom_comparer_sub.pyx":655 + * bpr_loss += log(1 / (1 + exp(-pred))) + * + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] */ - __pyx_t_2 = (__pyx_v__dict != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + __pyx_t_8 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_8; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "(tree fragment)":8 - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - * state += (_dict,) # <<<<<<<<<<<<<< - * use_setstate = True - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":656 + * + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v__dict); - __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); - __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4)); - __pyx_t_4 = 0; + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "(tree fragment)":9 - * if _dict is not None: - * state += (_dict,) - * use_setstate = True # <<<<<<<<<<<<<< - * else: - * use_setstate = self.name is not None + /* "cornac/models/comparer/recom_comparer_sub.pyx":657 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] */ - __pyx_v_use_setstate = 1; + __pyx_t_23 = __pyx_v_i_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_j_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_v_i_ij = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); - /* "(tree fragment)":7 - * state = (self.name,) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True + /* "cornac/models/comparer/recom_comparer_sub.pyx":658 + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] */ - goto __pyx_L3; - } + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* "(tree fragment)":11 - * use_setstate = True - * else: - * use_setstate = self.name is not None # <<<<<<<<<<<<<< - * if use_setstate: - * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + /* "cornac/models/comparer/recom_comparer_sub.pyx":659 + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] */ - /*else*/ { - __pyx_t_3 = (__pyx_v_self->name != Py_None); - __pyx_v_use_setstate = __pyx_t_3; - } - __pyx_L3:; + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_n_aspects; + __pyx_t_23 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); - /* "(tree fragment)":12 - * else: - * use_setstate = self.name is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":660 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] */ - __pyx_t_3 = (__pyx_v_use_setstate != 0); - if (__pyx_t_3) { + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_n_aspects; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_i_ij) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); - /* "(tree fragment)":13 - * use_setstate = self.name is not None - * if use_setstate: - * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state # <<<<<<<<<<<<<< - * else: - * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) + /* "cornac/models/comparer/recom_comparer_sub.pyx":661 + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij */ - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_184977713); - __Pyx_GIVEREF(__pyx_int_184977713); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); - __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); - __pyx_t_4 = 0; - __pyx_t_1 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; + __pyx_t_20 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_18 = __pyx_v_n_aspects; + __pyx_t_19 = __pyx_v_k; + __pyx_t_21 = __pyx_v_i_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); - /* "(tree fragment)":12 - * else: - * use_setstate = self.name is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":662 + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij + * */ - } + __pyx_t_19 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_n_aspects; + __pyx_t_20 = __pyx_v_k; + __pyx_t_22 = __pyx_v_j_idx; + __pyx_t_21 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_18 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); - /* "(tree fragment)":15 - * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state - * else: - * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_Enum__set_state(self, __pyx_state) + /* "cornac/models/comparer/recom_comparer_sub.pyx":663 + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij # <<<<<<<<<<<<<< + * + * for _ in prange(num_pair_samples, schedule='guided'): */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_184977713); - __Pyx_GIVEREF(__pyx_int_184977713); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); - __pyx_t_5 = 0; - __pyx_t_1 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } + __pyx_t_20 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_18 = __pyx_v_n_aspects; + __pyx_t_19 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij); + } + } + } + goto __pyx_L48; + __pyx_L34_continue:; + goto __pyx_L48; + __pyx_L36_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L47; + __pyx_L47:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates7) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_bpr_loss; + __pyx_parallel_temp2 = __pyx_v_correct; + __pyx_parallel_temp3 = __pyx_v_del_bpr; + __pyx_parallel_temp4 = __pyx_v_i; + __pyx_parallel_temp5 = __pyx_v_i_idx; + __pyx_parallel_temp6 = __pyx_v_i_ij; + __pyx_parallel_temp7 = __pyx_v_i_score; + __pyx_parallel_temp8 = __pyx_v_idx; + __pyx_parallel_temp9 = __pyx_v_j; + __pyx_parallel_temp10 = __pyx_v_j_idx; + __pyx_parallel_temp11 = __pyx_v_j_score; + __pyx_parallel_temp12 = __pyx_v_jdx; + __pyx_parallel_temp13 = __pyx_v_k; + __pyx_parallel_temp14 = __pyx_v_pred; + __pyx_parallel_temp15 = __pyx_v_s; + __pyx_parallel_temp16 = __pyx_v_skipped; + __pyx_parallel_temp17 = __pyx_v_u_idx; + __pyx_parallel_temp18 = __pyx_v_z; + } + __pyx_L48:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_bpr_loss = __pyx_parallel_temp1; + __pyx_v_correct = __pyx_parallel_temp2; + __pyx_v_del_bpr = __pyx_parallel_temp3; + __pyx_v_i = __pyx_parallel_temp4; + __pyx_v_i_idx = __pyx_parallel_temp5; + __pyx_v_i_ij = __pyx_parallel_temp6; + __pyx_v_i_score = __pyx_parallel_temp7; + __pyx_v_idx = __pyx_parallel_temp8; + __pyx_v_j = __pyx_parallel_temp9; + __pyx_v_j_idx = __pyx_parallel_temp10; + __pyx_v_j_score = __pyx_parallel_temp11; + __pyx_v_jdx = __pyx_parallel_temp12; + __pyx_v_k = __pyx_parallel_temp13; + __pyx_v_pred = __pyx_parallel_temp14; + __pyx_v_s = __pyx_parallel_temp15; + __pyx_v_skipped = __pyx_parallel_temp16; + __pyx_v_u_idx = __pyx_parallel_temp17; + __pyx_v_z = __pyx_parallel_temp18; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict + /* "cornac/models/comparer/recom_comparer_sub.pyx":665 + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij + * + * for _ in prange(num_pair_samples, schedule='guided'): # <<<<<<<<<<<<<< + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] */ + __pyx_t_4 = __pyx_v_num_pair_samples; + { + long __pyx_parallel_temp0 = ((long)0xbad0bad0); + long __pyx_parallel_temp1 = ((long)0xbad0bad0); + float __pyx_parallel_temp2 = ((float)__PYX_NAN()); + float __pyx_parallel_temp3 = ((float)__PYX_NAN()); + long __pyx_parallel_temp4 = ((long)0xbad0bad0); + float __pyx_parallel_temp5 = ((float)__PYX_NAN()); + long __pyx_parallel_temp6 = ((long)0xbad0bad0); + long __pyx_parallel_temp7 = ((long)0xbad0bad0); + long __pyx_parallel_temp8 = ((long)0xbad0bad0); + long __pyx_parallel_temp9 = ((long)0xbad0bad0); + long __pyx_parallel_temp10 = ((long)0xbad0bad0); + long __pyx_parallel_temp11 = ((long)0xbad0bad0); + float __pyx_parallel_temp12 = ((float)__PYX_NAN()); + long __pyx_parallel_temp13 = ((long)0xbad0bad0); + float __pyx_parallel_temp14 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_7 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_7 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_a_ji) lastprivate(__pyx_v_del_aspect_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_7; __pyx_t_3++){ + if (__pyx_parallel_why < 2) + { + __pyx_v__ = (long)(0 + 1 * __pyx_t_3); + /* Initialize private variables to invalid values */ + __pyx_v_a_idx = ((long)0xbad0bad0); + __pyx_v_a_ji = ((float)__PYX_NAN()); + __pyx_v_del_aspect_bpr = ((float)__PYX_NAN()); + __pyx_v_i = ((long)0xbad0bad0); + __pyx_v_i_idx = ((long)0xbad0bad0); + __pyx_v_idx = ((long)0xbad0bad0); + __pyx_v_j = ((long)0xbad0bad0); + __pyx_v_j_idx = ((long)0xbad0bad0); + __pyx_v_k = ((long)0xbad0bad0); + __pyx_v_pred = ((float)__PYX_NAN()); + __pyx_v_u_idx = ((long)0xbad0bad0); + __pyx_v_z = ((float)__PYX_NAN()); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.Enum.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_state); - __Pyx_XDECREF(__pyx_v__dict); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":666 + * + * for _ in prange(num_pair_samples, schedule='guided'): + * idx = rng_pos_pair.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] + */ + __pyx_t_8 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_pair->__pyx_vtab)->generate(__pyx_v_rng_pos_pair, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 666, __pyx_L51_error) + __pyx_v_idx = __pyx_t_8; -/* "(tree fragment)":16 - * else: - * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_Enum__set_state(self, __pyx_state) + /* "cornac/models/comparer/recom_comparer_sub.pyx":667 + * for _ in prange(num_pair_samples, schedule='guided'): + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] # <<<<<<<<<<<<<< + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] */ + __pyx_t_23 = __pyx_v_idx; + __pyx_v_u_idx = (*((long *) ( /* dim=0 */ (__pyx_v_p_user_indices.data + __pyx_t_23 * __pyx_v_p_user_indices.strides[0]) ))); -/* Python wrapper */ -static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf___pyx_MemviewEnum_2__setstate_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":668 + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] # <<<<<<<<<<<<<< + * j_idx = later_indices[idx] + * a_idx = aspect_indices[idx] + */ + __pyx_t_23 = __pyx_v_idx; + __pyx_v_i_idx = (*((long *) ( /* dim=0 */ (__pyx_v_earlier_indices.data + __pyx_t_23 * __pyx_v_earlier_indices.strides[0]) ))); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":669 + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] # <<<<<<<<<<<<<< + * a_idx = aspect_indices[idx] + * + */ + __pyx_t_23 = __pyx_v_idx; + __pyx_v_j_idx = (*((long *) ( /* dim=0 */ (__pyx_v_later_indices.data + __pyx_t_23 * __pyx_v_later_indices.strides[0]) ))); -static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":670 + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] + * a_idx = aspect_indices[idx] # <<<<<<<<<<<<<< + * + * pred = ( + */ + __pyx_t_23 = __pyx_v_idx; + __pyx_v_a_idx = (*((long *) ( /* dim=0 */ (__pyx_v_aspect_indices.data + __pyx_t_23 * __pyx_v_aspect_indices.strides[0]) ))); - /* "(tree fragment)":17 - * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_Enum__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":673 + * + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) # <<<<<<<<<<<<<< + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * ) */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error) - __pyx_t_1 = __pyx_unpickle_Enum__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_29 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 673, __pyx_L51_error) - /* "(tree fragment)":16 - * else: - * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_Enum__set_state(self, __pyx_state) + /* "cornac/models/comparer/recom_comparer_sub.pyx":674 + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< + * ) + * */ + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 674, __pyx_L51_error) + __pyx_v_pred = (__pyx_t_29 - __pyx_t_5); - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":677 + * ) + * + * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< + * if z < .5: + * aspect_correct += 1 + */ + __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); -/* "View.MemoryView":299 + /* "cornac/models/comparer/recom_comparer_sub.pyx":678 + * + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * aspect_correct += 1 * - * @cname('__pyx_align_pointer') - * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< - * "Align pointer memory on a given boundary" - * cdef Py_intptr_t aligned_p = memory */ + __pyx_t_27 = (__pyx_v_z < .5); + if (__pyx_t_27) { -static void *__pyx_align_pointer(void *__pyx_v_memory, size_t __pyx_v_alignment) { - Py_intptr_t __pyx_v_aligned_p; - size_t __pyx_v_offset; - void *__pyx_r; - int __pyx_t_1; - - /* "View.MemoryView":301 - * cdef void *align_pointer(void *memory, size_t alignment) nogil: - * "Align pointer memory on a given boundary" - * cdef Py_intptr_t aligned_p = memory # <<<<<<<<<<<<<< - * cdef size_t offset + /* "cornac/models/comparer/recom_comparer_sub.pyx":679 + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: + * aspect_correct += 1 # <<<<<<<<<<<<<< * + * del_aspect_bpr = lambda_d * z */ - __pyx_v_aligned_p = ((Py_intptr_t)__pyx_v_memory); + __pyx_v_aspect_correct = (__pyx_v_aspect_correct + 1); - /* "View.MemoryView":305 + /* "cornac/models/comparer/recom_comparer_sub.pyx":678 * - * with cython.cdivision(True): - * offset = aligned_p % alignment # <<<<<<<<<<<<<< + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * aspect_correct += 1 * - * if offset > 0: */ - __pyx_v_offset = (__pyx_v_aligned_p % __pyx_v_alignment); + } - /* "View.MemoryView":307 - * offset = aligned_p % alignment - * - * if offset > 0: # <<<<<<<<<<<<<< - * aligned_p += alignment - offset + /* "cornac/models/comparer/recom_comparer_sub.pyx":681 + * aspect_correct += 1 * + * del_aspect_bpr = lambda_d * z # <<<<<<<<<<<<<< + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): */ - __pyx_t_1 = ((__pyx_v_offset > 0) != 0); - if (__pyx_t_1) { + __pyx_v_del_aspect_bpr = (__pyx_v_lambda_d * __pyx_v_z); - /* "View.MemoryView":308 - * - * if offset > 0: - * aligned_p += alignment - offset # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":682 * - * return aligned_p + * del_aspect_bpr = lambda_d * z + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< + * for i in range(n_user_factors): + * for j in range(n_item_factors): */ - __pyx_v_aligned_p = (__pyx_v_aligned_p + (__pyx_v_alignment - __pyx_v_offset)); + __pyx_v_aspect_bpr_loss = (__pyx_v_aspect_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); - /* "View.MemoryView":307 - * offset = aligned_p % alignment - * - * if offset > 0: # <<<<<<<<<<<<<< - * aligned_p += alignment - offset - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":683 + * del_aspect_bpr = lambda_d * z + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] */ - } + __pyx_t_8 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_8; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "View.MemoryView":310 - * aligned_p += alignment - offset - * - * return aligned_p # <<<<<<<<<<<<<< - * - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":684 + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): */ - __pyx_r = ((void *)__pyx_v_aligned_p); - goto __pyx_L0; + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "View.MemoryView":299 - * - * @cname('__pyx_align_pointer') - * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< - * "Align pointer memory on a given boundary" - * cdef Py_intptr_t aligned_p = memory + /* "cornac/models/comparer/recom_comparer_sub.pyx":685 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] */ + __pyx_t_23 = __pyx_v_j_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_v_a_ji = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":686 + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + */ + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; -/* "View.MemoryView":346 - * cdef __Pyx_TypeInfo *typeinfo + /* "cornac/models/comparer/recom_comparer_sub.pyx":687 + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + */ + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":688 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_20 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_a_ji) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":689 + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji + */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_20 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_k; + __pyx_t_21 = __pyx_v_j_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_20 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":690 + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji * - * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< - * self.obj = obj - * self.flags = flags */ + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i_idx; + __pyx_t_21 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_20 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); -/* Python wrapper */ -static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_obj = 0; - int __pyx_v_flags; - int __pyx_v_dtype_is_object; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_flags,&__pyx_n_s_dtype_is_object,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; + /* "cornac/models/comparer/recom_comparer_sub.pyx":691 + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji # <<<<<<<<<<<<<< + * + * # update params with AdaGrad + */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_20 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji); + } + } + } + goto __pyx_L61; + __pyx_L51_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L60; + __pyx_L60:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates8) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_a_idx; + __pyx_parallel_temp2 = __pyx_v_a_ji; + __pyx_parallel_temp3 = __pyx_v_aspect_bpr_loss; + __pyx_parallel_temp4 = __pyx_v_aspect_correct; + __pyx_parallel_temp5 = __pyx_v_del_aspect_bpr; + __pyx_parallel_temp6 = __pyx_v_i; + __pyx_parallel_temp7 = __pyx_v_i_idx; + __pyx_parallel_temp8 = __pyx_v_idx; + __pyx_parallel_temp9 = __pyx_v_j; + __pyx_parallel_temp10 = __pyx_v_j_idx; + __pyx_parallel_temp11 = __pyx_v_k; + __pyx_parallel_temp12 = __pyx_v_pred; + __pyx_parallel_temp13 = __pyx_v_u_idx; + __pyx_parallel_temp14 = __pyx_v_z; + } + __pyx_L61:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_a_idx = __pyx_parallel_temp1; + __pyx_v_a_ji = __pyx_parallel_temp2; + __pyx_v_aspect_bpr_loss = __pyx_parallel_temp3; + __pyx_v_aspect_correct = __pyx_parallel_temp4; + __pyx_v_del_aspect_bpr = __pyx_parallel_temp5; + __pyx_v_i = __pyx_parallel_temp6; + __pyx_v_i_idx = __pyx_parallel_temp7; + __pyx_v_idx = __pyx_parallel_temp8; + __pyx_v_j = __pyx_parallel_temp9; + __pyx_v_j_idx = __pyx_parallel_temp10; + __pyx_v_k = __pyx_parallel_temp11; + __pyx_v_pred = __pyx_parallel_temp12; + __pyx_v_u_idx = __pyx_parallel_temp13; + __pyx_v_z = __pyx_parallel_temp14; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } + goto __pyx_L63; + __pyx_L8_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L63; + __pyx_L63:; + #ifdef _OPENMP + Py_END_ALLOW_THREADS + #else +{ +#ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #endif /* _OPENMP */ + /* Clean up any temporaries */ + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + #ifndef _OPENMP +} +#endif /* _OPENMP */ + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L4_error; + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flags)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(2, 346, __pyx_L3_error) + + /* "cornac/models/comparer/recom_comparer_sub.pyx":568 + * del_a_reg.fill(0) + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): + */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L5; } - CYTHON_FALLTHROUGH; - case 2: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dtype_is_object); - if (value) { values[2] = value; kw_args--; } + __pyx_L4_error: { + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L1_error; } + __pyx_L5:; } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(2, 346, __pyx_L3_error) - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_obj = values[0]; - __pyx_v_flags = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_flags == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 346, __pyx_L3_error) - if (values[2]) { - __pyx_v_dtype_is_object = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_dtype_is_object == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 346, __pyx_L3_error) - } else { - __pyx_v_dtype_is_object = ((int)0); - } } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 346, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return -1; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_obj, __pyx_v_flags, __pyx_v_dtype_is_object); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":694 + * + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): + */ + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_27, __pyx_t_3, __pyx_t_7, __pyx_t_8, __pyx_t_9) num_threads(__pyx_v_n_threads) + #endif /* _OPENMP */ + { -static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__cinit__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":695 + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): + * for i in prange(n_user_factors, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_users): + * if del_u[j, i] != 0: + */ + __pyx_t_7 = __pyx_v_n_user_factors; + { + __pyx_t_8 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_8 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_8; __pyx_t_3++){ + { + __pyx_v_i = (long)(0 + 1 * __pyx_t_3); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((long)0xbad0bad0); + __pyx_v_k = ((long)0xbad0bad0); - /* "View.MemoryView":347 - * - * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): - * self.obj = obj # <<<<<<<<<<<<<< - * self.flags = flags - * if type(self) is memoryview or obj is not None: + /* "cornac/models/comparer/recom_comparer_sub.pyx":696 + * with nogil, parallel(num_threads=n_threads): + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): # <<<<<<<<<<<<<< + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] */ - __Pyx_INCREF(__pyx_v_obj); - __Pyx_GIVEREF(__pyx_v_obj); - __Pyx_GOTREF(__pyx_v_self->obj); - __Pyx_DECREF(__pyx_v_self->obj); - __pyx_v_self->obj = __pyx_v_obj; + __pyx_t_10 = __pyx_v_n_users; + __pyx_t_11 = __pyx_t_10; + for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { + __pyx_v_j = __pyx_t_12; - /* "View.MemoryView":348 - * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): - * self.obj = obj - * self.flags = flags # <<<<<<<<<<<<<< - * if type(self) is memoryview or obj is not None: - * __Pyx_GetBuffer(obj, &self.view, flags) + /* "cornac/models/comparer/recom_comparer_sub.pyx":697 + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): + * if del_u[j, i] != 0: # <<<<<<<<<<<<<< + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] */ - __pyx_v_self->flags = __pyx_v_flags; + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":349 - * self.obj = obj - * self.flags = flags - * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< - * __Pyx_GetBuffer(obj, &self.view, flags) - * if self.view.obj == NULL: + /* "cornac/models/comparer/recom_comparer_sub.pyx":698 + * for j in range(n_users): + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] # <<<<<<<<<<<<<< + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] */ - __pyx_t_2 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))) == ((PyObject *)__pyx_memoryview_type)); - __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_v_obj != Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); - __pyx_t_1 = __pyx_t_2; - __pyx_L4_bool_binop_done:; - if (__pyx_t_1) { + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_u_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) ))))); - /* "View.MemoryView":350 - * self.flags = flags - * if type(self) is memoryview or obj is not None: - * __Pyx_GetBuffer(obj, &self.view, flags) # <<<<<<<<<<<<<< - * if self.view.obj == NULL: - * (<__pyx_buffer *> &self.view).obj = Py_None + /* "cornac/models/comparer/recom_comparer_sub.pyx":697 + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): + * if del_u[j, i] != 0: # <<<<<<<<<<<<<< + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] */ - __pyx_t_4 = __Pyx_GetBuffer(__pyx_v_obj, (&__pyx_v_self->view), __pyx_v_flags); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 350, __pyx_L1_error) + } - /* "View.MemoryView":351 - * if type(self) is memoryview or obj is not None: - * __Pyx_GetBuffer(obj, &self.view, flags) - * if self.view.obj == NULL: # <<<<<<<<<<<<<< - * (<__pyx_buffer *> &self.view).obj = Py_None - * Py_INCREF(Py_None) + /* "cornac/models/comparer/recom_comparer_sub.pyx":699 + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] # <<<<<<<<<<<<<< + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: */ - __pyx_t_1 = ((((PyObject *)__pyx_v_self->view.obj) == NULL) != 0); - if (__pyx_t_1) { + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_19 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_U.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)))); - /* "View.MemoryView":352 - * __Pyx_GetBuffer(obj, &self.view, flags) - * if self.view.obj == NULL: - * (<__pyx_buffer *> &self.view).obj = Py_None # <<<<<<<<<<<<<< - * Py_INCREF(Py_None) + /* "cornac/models/comparer/recom_comparer_sub.pyx":700 + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] # <<<<<<<<<<<<<< + * if U[j, i] < 0: + * U[j, i] = 0 + */ + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_24 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_U.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[1].strides))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":701 + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: # <<<<<<<<<<<<<< + * U[j, i] = 0 * */ - ((Py_buffer *)(&__pyx_v_self->view))->obj = Py_None; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_27 = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":353 - * if self.view.obj == NULL: - * (<__pyx_buffer *> &self.view).obj = Py_None - * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":702 + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: + * U[j, i] = 0 # <<<<<<<<<<<<<< * - * if not __PYX_CYTHON_ATOMICS_ENABLED(): + * for j in range(n_item_factors): */ - Py_INCREF(Py_None); + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )) = 0.0; - /* "View.MemoryView":351 - * if type(self) is memoryview or obj is not None: - * __Pyx_GetBuffer(obj, &self.view, flags) - * if self.view.obj == NULL: # <<<<<<<<<<<<<< - * (<__pyx_buffer *> &self.view).obj = Py_None - * Py_INCREF(Py_None) + /* "cornac/models/comparer/recom_comparer_sub.pyx":701 + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: # <<<<<<<<<<<<<< + * U[j, i] = 0 + * */ - } + } + } - /* "View.MemoryView":349 - * self.obj = obj - * self.flags = flags - * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< - * __Pyx_GetBuffer(obj, &self.view, flags) - * if self.view.obj == NULL: + /* "cornac/models/comparer/recom_comparer_sub.pyx":704 + * U[j, i] = 0 + * + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: */ - } + __pyx_t_10 = __pyx_v_n_item_factors; + __pyx_t_11 = __pyx_t_10; + for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { + __pyx_v_j = __pyx_t_12; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":705 + * + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + */ + __pyx_t_13 = __pyx_v_n_aspect_factors; + __pyx_t_14 = __pyx_t_13; + for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { + __pyx_v_k = __pyx_t_15; - /* "View.MemoryView":355 - * Py_INCREF(Py_None) - * - * if not __PYX_CYTHON_ATOMICS_ENABLED(): # <<<<<<<<<<<<<< - * global __pyx_memoryview_thread_locks_used - * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: + /* "cornac/models/comparer/recom_comparer_sub.pyx":706 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] */ - __pyx_t_1 = ((!(__PYX_CYTHON_ATOMICS_ENABLED() != 0)) != 0); - if (__pyx_t_1) { + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":357 - * if not __PYX_CYTHON_ATOMICS_ENABLED(): - * global __pyx_memoryview_thread_locks_used - * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< - * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] - * __pyx_memoryview_thread_locks_used += 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":707 + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] */ - __pyx_t_1 = ((__pyx_memoryview_thread_locks_used < 8) != 0); - if (__pyx_t_1) { + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) ))))); - /* "View.MemoryView":358 - * global __pyx_memoryview_thread_locks_used - * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: - * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] # <<<<<<<<<<<<<< - * __pyx_memoryview_thread_locks_used += 1 - * if self.lock is NULL: + /* "cornac/models/comparer/recom_comparer_sub.pyx":706 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] */ - __pyx_v_self->lock = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); + } - /* "View.MemoryView":359 - * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: - * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] - * __pyx_memoryview_thread_locks_used += 1 # <<<<<<<<<<<<<< - * if self.lock is NULL: - * self.lock = PyThread_allocate_lock() + /* "cornac/models/comparer/recom_comparer_sub.pyx":708 + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: */ - __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used + 1); + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_22 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G1.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)))); - /* "View.MemoryView":357 - * if not __PYX_CYTHON_ATOMICS_ENABLED(): - * global __pyx_memoryview_thread_locks_used - * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< - * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] - * __pyx_memoryview_thread_locks_used += 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":709 + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< + * if G1[i, j, k] < 0: + * G1[i, j, k] = 0 */ - } + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_22 * __pyx_v_G1.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_23 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_25 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_9 * __pyx_v_sgrad_G1.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides))); - /* "View.MemoryView":360 - * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] - * __pyx_memoryview_thread_locks_used += 1 - * if self.lock is NULL: # <<<<<<<<<<<<<< - * self.lock = PyThread_allocate_lock() - * if self.lock is NULL: + /* "cornac/models/comparer/recom_comparer_sub.pyx":710 + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< + * G1[i, j, k] = 0 + * */ - __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); - if (__pyx_t_1) { + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_24 * __pyx_v_G1.strides[2]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":361 - * __pyx_memoryview_thread_locks_used += 1 - * if self.lock is NULL: - * self.lock = PyThread_allocate_lock() # <<<<<<<<<<<<<< - * if self.lock is NULL: - * raise MemoryError + /* "cornac/models/comparer/recom_comparer_sub.pyx":711 + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: + * G1[i, j, k] = 0 # <<<<<<<<<<<<<< + * + * for j in range(n_aspect_factors): */ - __pyx_v_self->lock = PyThread_allocate_lock(); + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )) = 0.0; - /* "View.MemoryView":362 - * if self.lock is NULL: - * self.lock = PyThread_allocate_lock() - * if self.lock is NULL: # <<<<<<<<<<<<<< - * raise MemoryError + /* "cornac/models/comparer/recom_comparer_sub.pyx":710 + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< + * G1[i, j, k] = 0 * */ - __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); - if (unlikely(__pyx_t_1)) { + } + } + } - /* "View.MemoryView":363 - * self.lock = PyThread_allocate_lock() - * if self.lock is NULL: - * raise MemoryError # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":713 + * G1[i, j, k] = 0 * - * if flags & PyBUF_FORMAT: + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: */ - PyErr_NoMemory(); __PYX_ERR(2, 363, __pyx_L1_error) + __pyx_t_10 = __pyx_v_n_aspect_factors; + __pyx_t_11 = __pyx_t_10; + for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { + __pyx_v_j = __pyx_t_12; - /* "View.MemoryView":362 - * if self.lock is NULL: - * self.lock = PyThread_allocate_lock() - * if self.lock is NULL: # <<<<<<<<<<<<<< - * raise MemoryError + /* "cornac/models/comparer/recom_comparer_sub.pyx":714 * + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] */ - } + __pyx_t_13 = __pyx_v_n_opinion_factors; + __pyx_t_14 = __pyx_t_13; + for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { + __pyx_v_k = __pyx_t_15; - /* "View.MemoryView":360 - * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] - * __pyx_memoryview_thread_locks_used += 1 - * if self.lock is NULL: # <<<<<<<<<<<<<< - * self.lock = PyThread_allocate_lock() - * if self.lock is NULL: + /* "cornac/models/comparer/recom_comparer_sub.pyx":715 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] */ - } + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":355 - * Py_INCREF(Py_None) - * - * if not __PYX_CYTHON_ATOMICS_ENABLED(): # <<<<<<<<<<<<<< - * global __pyx_memoryview_thread_locks_used - * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: + /* "cornac/models/comparer/recom_comparer_sub.pyx":716 + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] */ - } + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) ))))); - /* "View.MemoryView":365 - * raise MemoryError - * - * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< - * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":715 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); - if (__pyx_t_1) { + } - /* "View.MemoryView":366 - * - * if flags & PyBUF_FORMAT: - * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') # <<<<<<<<<<<<<< - * else: - * self.dtype_is_object = dtype_is_object + /* "cornac/models/comparer/recom_comparer_sub.pyx":717 + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: */ - __pyx_t_2 = (((__pyx_v_self->view.format[0]) == 'O') != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L12_bool_binop_done; - } - __pyx_t_2 = (((__pyx_v_self->view.format[1]) == '\x00') != 0); - __pyx_t_1 = __pyx_t_2; - __pyx_L12_bool_binop_done:; - __pyx_v_self->dtype_is_object = __pyx_t_1; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_20 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_22 * __pyx_v_sgrad_G2.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)))); - /* "View.MemoryView":365 - * raise MemoryError - * - * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< - * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":718 + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< + * if G2[i, j, k] < 0: + * G2[i, j, k] = 0 */ - goto __pyx_L11; - } + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_22 * __pyx_v_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_G2.strides[1]) ) + __pyx_t_20 * __pyx_v_G2.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_24 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G2.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides))); - /* "View.MemoryView":368 - * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') - * else: - * self.dtype_is_object = dtype_is_object # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":719 + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< + * G2[i, j, k] = 0 * - * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( */ - /*else*/ { - __pyx_v_self->dtype_is_object = __pyx_v_dtype_is_object; - } - __pyx_L11:; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_27 = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_23 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":370 - * self.dtype_is_object = dtype_is_object + /* "cornac/models/comparer/recom_comparer_sub.pyx":720 + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: + * G2[i, j, k] = 0 # <<<<<<<<<<<<<< * - * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( # <<<<<<<<<<<<<< - * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) - * self.typeinfo = NULL + * for i in prange(n_item_factors, schedule='guided'): */ - __pyx_v_self->acquisition_count_aligned_p = ((__pyx_atomic_int *)__pyx_align_pointer(((void *)(&(__pyx_v_self->acquisition_count[0]))), (sizeof(__pyx_atomic_int)))); + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) )) = 0.0; - /* "View.MemoryView":372 - * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( - * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) - * self.typeinfo = NULL # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":719 + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< + * G2[i, j, k] = 0 * - * def __dealloc__(memoryview self): */ - __pyx_v_self->typeinfo = NULL; + } + } + } + } + } + } + } - /* "View.MemoryView":346 - * cdef __Pyx_TypeInfo *typeinfo + /* "cornac/models/comparer/recom_comparer_sub.pyx":722 + * G2[i, j, k] = 0 * - * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< - * self.obj = obj - * self.flags = flags + * for i in prange(n_item_factors, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_items): + * if del_i[j, i] != 0: */ + __pyx_t_8 = __pyx_v_n_item_factors; + { + __pyx_t_7 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_7 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_7; __pyx_t_3++){ + { + __pyx_v_i = (long)(0 + 1 * __pyx_t_3); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((long)0xbad0bad0); + __pyx_v_k = ((long)0xbad0bad0); - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":374 - * self.typeinfo = NULL + /* "cornac/models/comparer/recom_comparer_sub.pyx":723 * - * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< - * if self.obj is not None: - * __Pyx_ReleaseBuffer(&self.view) + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): # <<<<<<<<<<<<<< + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] */ + __pyx_t_10 = __pyx_v_n_items; + __pyx_t_11 = __pyx_t_10; + for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { + __pyx_v_j = __pyx_t_12; -/* Python wrapper */ -static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); - __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self) { - int __pyx_v_i; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - int __pyx_t_5; - PyThread_type_lock __pyx_t_6; - PyThread_type_lock __pyx_t_7; - __Pyx_RefNannySetupContext("__dealloc__", 0); - - /* "View.MemoryView":375 - * - * def __dealloc__(memoryview self): - * if self.obj is not None: # <<<<<<<<<<<<<< - * __Pyx_ReleaseBuffer(&self.view) - * elif (<__pyx_buffer *> &self.view).obj == Py_None: + /* "cornac/models/comparer/recom_comparer_sub.pyx":724 + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): + * if del_i[j, i] != 0: # <<<<<<<<<<<<<< + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] */ - __pyx_t_1 = (__pyx_v_self->obj != Py_None); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __pyx_t_23 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":376 - * def __dealloc__(memoryview self): - * if self.obj is not None: - * __Pyx_ReleaseBuffer(&self.view) # <<<<<<<<<<<<<< - * elif (<__pyx_buffer *> &self.view).obj == Py_None: - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":725 + * for j in range(n_items): + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] # <<<<<<<<<<<<<< + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] */ - __Pyx_ReleaseBuffer((&__pyx_v_self->view)); + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) ))))); - /* "View.MemoryView":375 - * - * def __dealloc__(memoryview self): - * if self.obj is not None: # <<<<<<<<<<<<<< - * __Pyx_ReleaseBuffer(&self.view) - * elif (<__pyx_buffer *> &self.view).obj == Py_None: + /* "cornac/models/comparer/recom_comparer_sub.pyx":724 + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): + * if del_i[j, i] != 0: # <<<<<<<<<<<<<< + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] */ - goto __pyx_L3; - } + } - /* "View.MemoryView":377 - * if self.obj is not None: - * __Pyx_ReleaseBuffer(&self.view) - * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< - * - * (<__pyx_buffer *> &self.view).obj = NULL + /* "cornac/models/comparer/recom_comparer_sub.pyx":726 + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] # <<<<<<<<<<<<<< + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: */ - __pyx_t_2 = ((((Py_buffer *)(&__pyx_v_self->view))->obj == Py_None) != 0); - if (__pyx_t_2) { + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_24 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_I.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)))); - /* "View.MemoryView":379 - * elif (<__pyx_buffer *> &self.view).obj == Py_None: - * - * (<__pyx_buffer *> &self.view).obj = NULL # <<<<<<<<<<<<<< - * Py_DECREF(Py_None) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":727 + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] # <<<<<<<<<<<<<< + * if I[j, i] < 0: + * I[j, i] = 0 */ - ((Py_buffer *)(&__pyx_v_self->view))->obj = NULL; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_25 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_I.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[1].strides))); - /* "View.MemoryView":380 - * - * (<__pyx_buffer *> &self.view).obj = NULL - * Py_DECREF(Py_None) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":728 + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: # <<<<<<<<<<<<<< + * I[j, i] = 0 * - * cdef int i */ - Py_DECREF(Py_None); + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_27 = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_18 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":377 - * if self.obj is not None: - * __Pyx_ReleaseBuffer(&self.view) - * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":729 + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: + * I[j, i] = 0 # <<<<<<<<<<<<<< * - * (<__pyx_buffer *> &self.view).obj = NULL + * for j in range(n_aspect_factors): */ - } - __pyx_L3:; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )) = 0.0; - /* "View.MemoryView":384 - * cdef int i - * global __pyx_memoryview_thread_locks_used - * if self.lock != NULL: # <<<<<<<<<<<<<< - * for i in range(__pyx_memoryview_thread_locks_used): - * if __pyx_memoryview_thread_locks[i] is self.lock: + /* "cornac/models/comparer/recom_comparer_sub.pyx":728 + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: # <<<<<<<<<<<<<< + * I[j, i] = 0 + * */ - __pyx_t_2 = ((__pyx_v_self->lock != NULL) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":385 - * global __pyx_memoryview_thread_locks_used - * if self.lock != NULL: - * for i in range(__pyx_memoryview_thread_locks_used): # <<<<<<<<<<<<<< - * if __pyx_memoryview_thread_locks[i] is self.lock: - * __pyx_memoryview_thread_locks_used -= 1 + } + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":731 + * I[j, i] = 0 + * + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: */ - __pyx_t_3 = __pyx_memoryview_thread_locks_used; - __pyx_t_4 = __pyx_t_3; - for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { - __pyx_v_i = __pyx_t_5; + __pyx_t_10 = __pyx_v_n_aspect_factors; + __pyx_t_11 = __pyx_t_10; + for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { + __pyx_v_j = __pyx_t_12; - /* "View.MemoryView":386 - * if self.lock != NULL: - * for i in range(__pyx_memoryview_thread_locks_used): - * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< - * __pyx_memoryview_thread_locks_used -= 1 - * if i != __pyx_memoryview_thread_locks_used: + /* "cornac/models/comparer/recom_comparer_sub.pyx":732 + * + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] */ - __pyx_t_2 = (((__pyx_memoryview_thread_locks[__pyx_v_i]) == __pyx_v_self->lock) != 0); - if (__pyx_t_2) { + __pyx_t_13 = __pyx_v_n_opinion_factors; + __pyx_t_14 = __pyx_t_13; + for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { + __pyx_v_k = __pyx_t_15; - /* "View.MemoryView":387 - * for i in range(__pyx_memoryview_thread_locks_used): - * if __pyx_memoryview_thread_locks[i] is self.lock: - * __pyx_memoryview_thread_locks_used -= 1 # <<<<<<<<<<<<<< - * if i != __pyx_memoryview_thread_locks_used: - * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + /* "cornac/models/comparer/recom_comparer_sub.pyx":733 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] */ - __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used - 1); + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":388 - * if __pyx_memoryview_thread_locks[i] is self.lock: - * __pyx_memoryview_thread_locks_used -= 1 - * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< - * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( - * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + /* "cornac/models/comparer/recom_comparer_sub.pyx":734 + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] */ - __pyx_t_2 = ((__pyx_v_i != __pyx_memoryview_thread_locks_used) != 0); - if (__pyx_t_2) { + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) ))))); - /* "View.MemoryView":390 - * if i != __pyx_memoryview_thread_locks_used: - * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( - * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) # <<<<<<<<<<<<<< - * break - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":733 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] */ - __pyx_t_6 = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); - __pyx_t_7 = (__pyx_memoryview_thread_locks[__pyx_v_i]); + } - /* "View.MemoryView":389 - * __pyx_memoryview_thread_locks_used -= 1 - * if i != __pyx_memoryview_thread_locks_used: - * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( # <<<<<<<<<<<<<< - * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) - * break + /* "cornac/models/comparer/recom_comparer_sub.pyx":735 + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: */ - (__pyx_memoryview_thread_locks[__pyx_v_i]) = __pyx_t_6; - (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]) = __pyx_t_7; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_22 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G3.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)))); - /* "View.MemoryView":388 - * if __pyx_memoryview_thread_locks[i] is self.lock: - * __pyx_memoryview_thread_locks_used -= 1 - * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< - * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( - * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + /* "cornac/models/comparer/recom_comparer_sub.pyx":736 + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< + * if G3[i, j, k] < 0: + * G3[i, j, k] = 0 */ - } + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_G3.strides[1]) ) + __pyx_t_22 * __pyx_v_G3.strides[2]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_23 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G3.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides))); - /* "View.MemoryView":391 - * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( - * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) - * break # <<<<<<<<<<<<<< - * else: - * PyThread_free_lock(self.lock) + /* "cornac/models/comparer/recom_comparer_sub.pyx":737 + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< + * G3[i, j, k] = 0 + * */ - goto __pyx_L6_break; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_27 = ((*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_19 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":386 - * if self.lock != NULL: - * for i in range(__pyx_memoryview_thread_locks_used): - * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< - * __pyx_memoryview_thread_locks_used -= 1 - * if i != __pyx_memoryview_thread_locks_used: + /* "cornac/models/comparer/recom_comparer_sub.pyx":738 + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: + * G3[i, j, k] = 0 # <<<<<<<<<<<<<< + * + * for i in prange(n_aspects + 1, schedule='guided'): */ - } - } - /*else*/ { + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + *((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) )) = 0.0; - /* "View.MemoryView":393 - * break - * else: - * PyThread_free_lock(self.lock) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":737 + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< + * G3[i, j, k] = 0 * - * cdef char *get_item_pointer(memoryview self, object index) except NULL: */ - PyThread_free_lock(__pyx_v_self->lock); - } - __pyx_L6_break:; + } + } + } + } + } + } + } - /* "View.MemoryView":384 - * cdef int i - * global __pyx_memoryview_thread_locks_used - * if self.lock != NULL: # <<<<<<<<<<<<<< - * for i in range(__pyx_memoryview_thread_locks_used): - * if __pyx_memoryview_thread_locks[i] is self.lock: + /* "cornac/models/comparer/recom_comparer_sub.pyx":740 + * G3[i, j, k] = 0 + * + * for i in prange(n_aspects + 1, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: */ - } + __pyx_t_7 = (__pyx_v_n_aspects + 1); + { + __pyx_t_8 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_8 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_8; __pyx_t_3++){ + { + __pyx_v_i = (long)(0 + 1 * __pyx_t_3); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((long)0xbad0bad0); - /* "View.MemoryView":374 - * self.typeinfo = NULL + /* "cornac/models/comparer/recom_comparer_sub.pyx":741 * - * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< - * if self.obj is not None: - * __Pyx_ReleaseBuffer(&self.view) + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] */ + __pyx_t_10 = __pyx_v_n_aspect_factors; + __pyx_t_11 = __pyx_t_10; + for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { + __pyx_v_j = __pyx_t_12; - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":742 + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: # <<<<<<<<<<<<<< + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + */ + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { -/* "View.MemoryView":395 - * PyThread_free_lock(self.lock) - * - * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< - * cdef Py_ssize_t dim - * cdef char *itemp = self.view.buf + /* "cornac/models/comparer/recom_comparer_sub.pyx":743 + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] # <<<<<<<<<<<<<< + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) ))))); -static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { - Py_ssize_t __pyx_v_dim; - char *__pyx_v_itemp; - PyObject *__pyx_v_idx = NULL; - char *__pyx_r; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - PyObject *(*__pyx_t_4)(PyObject *); - PyObject *__pyx_t_5 = NULL; - Py_ssize_t __pyx_t_6; - char *__pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_item_pointer", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":742 + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: # <<<<<<<<<<<<<< + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + */ + } - /* "View.MemoryView":397 - * cdef char *get_item_pointer(memoryview self, object index) except NULL: - * cdef Py_ssize_t dim - * cdef char *itemp = self.view.buf # <<<<<<<<<<<<<< - * - * for dim, idx in enumerate(index): + /* "cornac/models/comparer/recom_comparer_sub.pyx":744 + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] # <<<<<<<<<<<<<< + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: */ - __pyx_v_itemp = ((char *)__pyx_v_self->view.buf); + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_23 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_A.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)))); - /* "View.MemoryView":399 - * cdef char *itemp = self.view.buf - * - * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< - * itemp = pybuffer_index(&self.view, itemp, idx, dim) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":745 + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] # <<<<<<<<<<<<<< + * if A[i, j] < 0: + * A[i, j] = 0 */ - __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_v_index)) || PyTuple_CheckExact(__pyx_v_index)) { - __pyx_t_2 = __pyx_v_index; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; - __pyx_t_4 = NULL; - } else { - __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 399, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 399, __pyx_L1_error) - } - for (;;) { - if (likely(!__pyx_t_4)) { - if (likely(PyList_CheckExact(__pyx_t_2))) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(2, 399, __pyx_L1_error) - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 399, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - } else { - if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(2, 399, __pyx_L1_error) - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 399, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - } - } else { - __pyx_t_5 = __pyx_t_4(__pyx_t_2); - if (unlikely(!__pyx_t_5)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(2, 399, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_5); - } - __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5); - __pyx_t_5 = 0; - __pyx_v_dim = __pyx_t_1; - __pyx_t_1 = (__pyx_t_1 + 1); + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_24 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_A.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[1].strides))); - /* "View.MemoryView":400 - * - * for dim, idx in enumerate(index): - * itemp = pybuffer_index(&self.view, itemp, idx, dim) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":746 + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: # <<<<<<<<<<<<<< + * A[i, j] = 0 * - * return itemp */ - __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 400, __pyx_L1_error) - __pyx_t_7 = __pyx_pybuffer_index((&__pyx_v_self->view), __pyx_v_itemp, __pyx_t_6, __pyx_v_dim); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(2, 400, __pyx_L1_error) - __pyx_v_itemp = __pyx_t_7; + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":399 - * cdef char *itemp = self.view.buf - * - * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< - * itemp = pybuffer_index(&self.view, itemp, idx, dim) + /* "cornac/models/comparer/recom_comparer_sub.pyx":747 + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: + * A[i, j] = 0 # <<<<<<<<<<<<<< * + * for i in prange(n_opinions, schedule='guided'): */ - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )) = 0.0; - /* "View.MemoryView":402 - * itemp = pybuffer_index(&self.view, itemp, idx, dim) - * - * return itemp # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":746 + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: # <<<<<<<<<<<<<< + * A[i, j] = 0 * */ - __pyx_r = __pyx_v_itemp; - goto __pyx_L0; + } + } + } + } + } + } - /* "View.MemoryView":395 - * PyThread_free_lock(self.lock) + /* "cornac/models/comparer/recom_comparer_sub.pyx":749 + * A[i, j] = 0 * - * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< - * cdef Py_ssize_t dim - * cdef char *itemp = self.view.buf + * for i in prange(n_opinions, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: */ + __pyx_t_8 = __pyx_v_n_opinions; + { + __pyx_t_7 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_7 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_7; __pyx_t_3++){ + { + __pyx_v_i = (long)(0 + 1 * __pyx_t_3); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((long)0xbad0bad0); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.memoryview.get_item_pointer", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_idx); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":405 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":750 * - * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< - * if index is Ellipsis: - * return self + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] */ + __pyx_t_10 = __pyx_v_n_opinion_factors; + __pyx_t_11 = __pyx_t_10; + for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { + __pyx_v_j = __pyx_t_12; -/* Python wrapper */ -static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/ -static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":751 + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: # <<<<<<<<<<<<<< + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { -static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { - PyObject *__pyx_v_have_slices = NULL; - PyObject *__pyx_v_indices = NULL; - char *__pyx_v_itemp; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - char *__pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__getitem__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":752 + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] # <<<<<<<<<<<<<< + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_o_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) ))))); - /* "View.MemoryView":406 - * - * def __getitem__(memoryview self, object index): - * if index is Ellipsis: # <<<<<<<<<<<<<< - * return self - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":751 + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: # <<<<<<<<<<<<<< + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] */ - __pyx_t_1 = (__pyx_v_index == __pyx_builtin_Ellipsis); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + } - /* "View.MemoryView":407 - * def __getitem__(memoryview self, object index): - * if index is Ellipsis: - * return self # <<<<<<<<<<<<<< - * - * have_slices, indices = _unellipsify(index, self.view.ndim) + /* "cornac/models/comparer/recom_comparer_sub.pyx":753 + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] # <<<<<<<<<<<<<< + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __pyx_r = ((PyObject *)__pyx_v_self); - goto __pyx_L0; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_9 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_O.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)))); - /* "View.MemoryView":406 - * - * def __getitem__(memoryview self, object index): - * if index is Ellipsis: # <<<<<<<<<<<<<< - * return self - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":754 + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] # <<<<<<<<<<<<<< + * if O[i, j] < 0: + * O[i, j] = 0 */ - } + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_23 * __pyx_v_O.strides[0]) ) + __pyx_t_9 * __pyx_v_O.strides[1]) )) -= ((((double)__pyx_v_lr) / sqrt((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_25 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_O.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[1].strides))); - /* "View.MemoryView":409 - * return self - * - * have_slices, indices = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":755 + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: # <<<<<<<<<<<<<< + * O[i, j] = 0 * - * cdef char *itemp */ - __pyx_t_3 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (likely(__pyx_t_3 != Py_None)) { - PyObject* sequence = __pyx_t_3; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(2, 409, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - #else - __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else { - __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 409, __pyx_L1_error) - } - __pyx_v_have_slices = __pyx_t_4; - __pyx_t_4 = 0; - __pyx_v_indices = __pyx_t_5; - __pyx_t_5 = 0; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_27 = ((*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_19 * __pyx_v_O.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":412 + /* "cornac/models/comparer/recom_comparer_sub.pyx":756 + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: + * O[i, j] = 0 # <<<<<<<<<<<<<< * - * cdef char *itemp - * if have_slices: # <<<<<<<<<<<<<< - * return memview_slice(self, indices) - * else: + * return correct, skipped, loss, bpr_loss */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 412, __pyx_L1_error) - if (__pyx_t_2) { + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )) = 0.0; - /* "View.MemoryView":413 - * cdef char *itemp - * if have_slices: - * return memview_slice(self, indices) # <<<<<<<<<<<<<< - * else: - * itemp = self.get_item_pointer(indices) + /* "cornac/models/comparer/recom_comparer_sub.pyx":755 + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: # <<<<<<<<<<<<<< + * O[i, j] = 0 + * */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = ((PyObject *)__pyx_memview_slice(__pyx_v_self, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; + } + } + } + } + } + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif + } - /* "View.MemoryView":412 + /* "cornac/models/comparer/recom_comparer_sub.pyx":694 * - * cdef char *itemp - * if have_slices: # <<<<<<<<<<<<<< - * return memview_slice(self, indices) - * else: + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L66; + } + __pyx_L66:; + } } - /* "View.MemoryView":415 - * return memview_slice(self, indices) - * else: - * itemp = self.get_item_pointer(indices) # <<<<<<<<<<<<<< - * return self.convert_item_to_object(itemp) + /* "cornac/models/comparer/recom_comparer_sub.pyx":758 + * O[i, j] = 0 * - */ - /*else*/ { - __pyx_t_6 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_indices); if (unlikely(__pyx_t_6 == ((char *)NULL))) __PYX_ERR(2, 415, __pyx_L1_error) - __pyx_v_itemp = __pyx_t_6; - - /* "View.MemoryView":416 - * else: - * itemp = self.get_item_pointer(indices) - * return self.convert_item_to_object(itemp) # <<<<<<<<<<<<<< + * return correct, skipped, loss, bpr_loss # <<<<<<<<<<<<<< * - * def __setitem__(memoryview self, object index, object value): + * def rank(self, user_idx, item_indices=None): */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->convert_item_to_object(__pyx_v_self, __pyx_v_itemp); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 416, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - } + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_correct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v_skipped); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_30 = PyFloat_FromDouble(__pyx_v_bpr_loss); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_30); + __pyx_t_31 = PyTuple_New(4); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_31); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_31, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_31, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_31, 2, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_30); + PyTuple_SET_ITEM(__pyx_t_31, 3, __pyx_t_30); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_6 = 0; + __pyx_t_30 = 0; + __pyx_r = __pyx_t_31; + __pyx_t_31 = 0; + goto __pyx_L0; - /* "View.MemoryView":405 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":482 + * return self * - * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< - * if index is Ellipsis: - * return self + * @cython.cdivision(True) # <<<<<<<<<<<<<< + * @cython.boundscheck(False) + * @cython.wraparound(False) */ /* function exit code */ __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.memoryview.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_30); + __Pyx_XDECREF(__pyx_t_31); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; + goto __pyx_L2; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_have_slices); - __Pyx_XDECREF(__pyx_v_indices); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); + __pyx_L2:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "View.MemoryView":418 - * return self.convert_item_to_object(itemp) - * - * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< - * if self.view.readonly: - * raise TypeError("Cannot assign to read-only memoryview") - */ - /* Python wrapper */ -static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { - PyObject *__pyx_v_have_slices = NULL; - PyObject *__pyx_v_obj = NULL; - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; +static PyObject *__pyx_fuse_1_0__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_21_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_fuse_1_0__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_21_fit_mter = {"__pyx_fuse_1_0_fit_mter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1_0__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_21_fit_mter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter}; +static PyObject *__pyx_fuse_1_0__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_21_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg = 0; + int __pyx_v_n_threads; + __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; + struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict = 0; + __Pyx_memviewslice __pyx_v_user_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_neg_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_indptr = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_p_user_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_earlier_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_later_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_aspect_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_O = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_U = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_I = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_O = { 0, 0, { 0 }, { 0 }, { 0 } }; + PyArrayObject *__pyx_v_del_g1 = 0; + PyArrayObject *__pyx_v_del_g2 = 0; + PyArrayObject *__pyx_v_del_g3 = 0; + PyArrayObject *__pyx_v_del_u = 0; + PyArrayObject *__pyx_v_del_i = 0; + PyArrayObject *__pyx_v_del_a = 0; + PyArrayObject *__pyx_v_del_o = 0; + PyArrayObject *__pyx_v_del_g1_reg = 0; + PyArrayObject *__pyx_v_del_g2_reg = 0; + PyArrayObject *__pyx_v_del_g3_reg = 0; + PyArrayObject *__pyx_v_del_u_reg = 0; + PyArrayObject *__pyx_v_del_i_reg = 0; + PyArrayObject *__pyx_v_del_a_reg = 0; + PyArrayObject *__pyx_v_del_o_reg = 0; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setitem__", 0); - __Pyx_INCREF(__pyx_v_index); - - /* "View.MemoryView":419 - * - * def __setitem__(memoryview self, object index, object value): - * if self.view.readonly: # <<<<<<<<<<<<<< - * raise TypeError("Cannot assign to read-only memoryview") - * - */ - __pyx_t_1 = (__pyx_v_self->view.readonly != 0); - if (unlikely(__pyx_t_1)) { - - /* "View.MemoryView":420 - * def __setitem__(memoryview self, object index, object value): - * if self.view.readonly: - * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< - * - * have_slices, index = _unellipsify(index, self.view.ndim) - */ - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_Raise(__pyx_t_2, 0, 0, 0); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __PYX_ERR(2, 420, __pyx_L1_error) - - /* "View.MemoryView":419 - * - * def __setitem__(memoryview self, object index, object value): - * if self.view.readonly: # <<<<<<<<<<<<<< - * raise TypeError("Cannot assign to read-only memoryview") - * - */ - } - - /* "View.MemoryView":422 - * raise TypeError("Cannot assign to read-only memoryview") - * - * have_slices, index = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< - * - * if have_slices: - */ - __pyx_t_2 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 422, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (likely(__pyx_t_2 != Py_None)) { - PyObject* sequence = __pyx_t_2; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(2, 422, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - #else - __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 422, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 422, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } else { - __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 422, __pyx_L1_error) - } - __pyx_v_have_slices = __pyx_t_3; - __pyx_t_3 = 0; - __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_4); - __pyx_t_4 = 0; - - /* "View.MemoryView":424 - * have_slices, index = _unellipsify(index, self.view.ndim) - * - * if have_slices: # <<<<<<<<<<<<<< - * obj = self.is_slice(value) - * if obj: - */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 424, __pyx_L1_error) - if (__pyx_t_1) { - - /* "View.MemoryView":425 - * - * if have_slices: - * obj = self.is_slice(value) # <<<<<<<<<<<<<< - * if obj: - * self.setitem_slice_assignment(self[index], obj) - */ - __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_obj = __pyx_t_2; - __pyx_t_2 = 0; - - /* "View.MemoryView":426 - * if have_slices: - * obj = self.is_slice(value) - * if obj: # <<<<<<<<<<<<<< - * self.setitem_slice_assignment(self[index], obj) - * else: - */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 426, __pyx_L1_error) - if (__pyx_t_1) { - - /* "View.MemoryView":427 - * obj = self.is_slice(value) - * if obj: - * self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<< - * else: - * self.setitem_slice_assign_scalar(self[index], value) - */ - __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assignment(__pyx_v_self, __pyx_t_2, __pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "View.MemoryView":426 - * if have_slices: - * obj = self.is_slice(value) - * if obj: # <<<<<<<<<<<<<< - * self.setitem_slice_assignment(self[index], obj) - * else: - */ - goto __pyx_L5; - } - - /* "View.MemoryView":429 - * self.setitem_slice_assignment(self[index], obj) - * else: - * self.setitem_slice_assign_scalar(self[index], value) # <<<<<<<<<<<<<< - * else: - * self.setitem_indexed(index, value) - */ - /*else*/ { - __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_memoryview_type))))) __PYX_ERR(2, 429, __pyx_L1_error) - __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assign_scalar(__pyx_v_self, ((struct __pyx_memoryview_obj *)__pyx_t_4), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_fit_mter (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_rng_pos_uia,&__pyx_n_s_rng_pos_uao,&__pyx_n_s_rng_pos_iao,&__pyx_n_s_rng_pos_pair,&__pyx_n_s_rng_pos,&__pyx_n_s_rng_neg,&__pyx_n_s_n_threads,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_iids,&__pyx_n_s_X_aids,&__pyx_n_s_YU,&__pyx_n_s_YU_uids,&__pyx_n_s_YU_aids,&__pyx_n_s_YU_oids,&__pyx_n_s_YI,&__pyx_n_s_YI_iids,&__pyx_n_s_YI_aids,&__pyx_n_s_YI_oids,&__pyx_n_s_rating_dict,&__pyx_n_s_user_ids,&__pyx_n_s_item_ids,&__pyx_n_s_neg_item_ids,&__pyx_n_s_indptr,&__pyx_n_s_p_user_indices,&__pyx_n_s_earlier_indices,&__pyx_n_s_later_indices,&__pyx_n_s_aspect_indices,&__pyx_n_s_pair_counts,&__pyx_n_s_G1,&__pyx_n_s_G2,&__pyx_n_s_G3,&__pyx_n_s_U,&__pyx_n_s_I,&__pyx_n_s_A,&__pyx_n_s_O,&__pyx_n_s_sgrad_G1,&__pyx_n_s_sgrad_G2,&__pyx_n_s_sgrad_G3,&__pyx_n_s_sgrad_U,&__pyx_n_s_sgrad_I,&__pyx_n_s_sgrad_A,&__pyx_n_s_sgrad_O,&__pyx_n_s_del_g1,&__pyx_n_s_del_g2,&__pyx_n_s_del_g3,&__pyx_n_s_del_u,&__pyx_n_s_del_i,&__pyx_n_s_del_a,&__pyx_n_s_del_o,&__pyx_n_s_del_g1_reg,&__pyx_n_s_del_g2_reg,&__pyx_n_s_del_g3_reg,&__pyx_n_s_del_u_reg,&__pyx_n_s_del_i_reg,&__pyx_n_s_del_a_reg,&__pyx_n_s_del_o_reg,0}; + PyObject* values[58] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 58: values[57] = __Pyx_Arg_VARARGS(__pyx_args, 57); + CYTHON_FALLTHROUGH; + case 57: values[56] = __Pyx_Arg_VARARGS(__pyx_args, 56); + CYTHON_FALLTHROUGH; + case 56: values[55] = __Pyx_Arg_VARARGS(__pyx_args, 55); + CYTHON_FALLTHROUGH; + case 55: values[54] = __Pyx_Arg_VARARGS(__pyx_args, 54); + CYTHON_FALLTHROUGH; + case 54: values[53] = __Pyx_Arg_VARARGS(__pyx_args, 53); + CYTHON_FALLTHROUGH; + case 53: values[52] = __Pyx_Arg_VARARGS(__pyx_args, 52); + CYTHON_FALLTHROUGH; + case 52: values[51] = __Pyx_Arg_VARARGS(__pyx_args, 51); + CYTHON_FALLTHROUGH; + case 51: values[50] = __Pyx_Arg_VARARGS(__pyx_args, 50); + CYTHON_FALLTHROUGH; + case 50: values[49] = __Pyx_Arg_VARARGS(__pyx_args, 49); + CYTHON_FALLTHROUGH; + case 49: values[48] = __Pyx_Arg_VARARGS(__pyx_args, 48); + CYTHON_FALLTHROUGH; + case 48: values[47] = __Pyx_Arg_VARARGS(__pyx_args, 47); + CYTHON_FALLTHROUGH; + case 47: values[46] = __Pyx_Arg_VARARGS(__pyx_args, 46); + CYTHON_FALLTHROUGH; + case 46: values[45] = __Pyx_Arg_VARARGS(__pyx_args, 45); + CYTHON_FALLTHROUGH; + case 45: values[44] = __Pyx_Arg_VARARGS(__pyx_args, 44); + CYTHON_FALLTHROUGH; + case 44: values[43] = __Pyx_Arg_VARARGS(__pyx_args, 43); + CYTHON_FALLTHROUGH; + case 43: values[42] = __Pyx_Arg_VARARGS(__pyx_args, 42); + CYTHON_FALLTHROUGH; + case 42: values[41] = __Pyx_Arg_VARARGS(__pyx_args, 41); + CYTHON_FALLTHROUGH; + case 41: values[40] = __Pyx_Arg_VARARGS(__pyx_args, 40); + CYTHON_FALLTHROUGH; + case 40: values[39] = __Pyx_Arg_VARARGS(__pyx_args, 39); + CYTHON_FALLTHROUGH; + case 39: values[38] = __Pyx_Arg_VARARGS(__pyx_args, 38); + CYTHON_FALLTHROUGH; + case 38: values[37] = __Pyx_Arg_VARARGS(__pyx_args, 37); + CYTHON_FALLTHROUGH; + case 37: values[36] = __Pyx_Arg_VARARGS(__pyx_args, 36); + CYTHON_FALLTHROUGH; + case 36: values[35] = __Pyx_Arg_VARARGS(__pyx_args, 35); + CYTHON_FALLTHROUGH; + case 35: values[34] = __Pyx_Arg_VARARGS(__pyx_args, 34); + CYTHON_FALLTHROUGH; + case 34: values[33] = __Pyx_Arg_VARARGS(__pyx_args, 33); + CYTHON_FALLTHROUGH; + case 33: values[32] = __Pyx_Arg_VARARGS(__pyx_args, 32); + CYTHON_FALLTHROUGH; + case 32: values[31] = __Pyx_Arg_VARARGS(__pyx_args, 31); + CYTHON_FALLTHROUGH; + case 31: values[30] = __Pyx_Arg_VARARGS(__pyx_args, 30); + CYTHON_FALLTHROUGH; + case 30: values[29] = __Pyx_Arg_VARARGS(__pyx_args, 29); + CYTHON_FALLTHROUGH; + case 29: values[28] = __Pyx_Arg_VARARGS(__pyx_args, 28); + CYTHON_FALLTHROUGH; + case 28: values[27] = __Pyx_Arg_VARARGS(__pyx_args, 27); + CYTHON_FALLTHROUGH; + case 27: values[26] = __Pyx_Arg_VARARGS(__pyx_args, 26); + CYTHON_FALLTHROUGH; + case 26: values[25] = __Pyx_Arg_VARARGS(__pyx_args, 25); + CYTHON_FALLTHROUGH; + case 25: values[24] = __Pyx_Arg_VARARGS(__pyx_args, 24); + CYTHON_FALLTHROUGH; + case 24: values[23] = __Pyx_Arg_VARARGS(__pyx_args, 23); + CYTHON_FALLTHROUGH; + case 23: values[22] = __Pyx_Arg_VARARGS(__pyx_args, 22); + CYTHON_FALLTHROUGH; + case 22: values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + CYTHON_FALLTHROUGH; + case 21: values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + CYTHON_FALLTHROUGH; + case 20: values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + CYTHON_FALLTHROUGH; + case 19: values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + CYTHON_FALLTHROUGH; + case 18: values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + CYTHON_FALLTHROUGH; + case 17: values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + CYTHON_FALLTHROUGH; + case 16: values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_uia)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 1); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_uao)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 2); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_iao)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 3); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_pair)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 4); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 5); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_neg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 6); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_threads)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 7); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 8); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 9); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 10); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 11); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 12); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 13); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 14); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 15: + if (likely((values[15] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_oids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 15); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 16: + if (likely((values[16] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 16); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 17: + if (likely((values[17] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 17); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 18: + if (likely((values[18] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 18); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 19: + if (likely((values[19] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_oids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 19); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 20: + if (likely((values[20] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rating_dict)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 20); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 21: + if (likely((values[21] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_user_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 21); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 22: + if (likely((values[22] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_item_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 22); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 23: + if (likely((values[23] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_neg_item_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 23); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 24: + if (likely((values[24] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_indptr)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 24); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 25: + if (likely((values[25] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_p_user_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 25); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 26: + if (likely((values[26] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_earlier_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 26); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 27: + if (likely((values[27] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_later_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 27); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 28: + if (likely((values[28] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_aspect_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 28); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 29: + if (likely((values[29] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pair_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 29); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 30: + if (likely((values[30] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 30); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 31: + if (likely((values[31] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 31); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 32: + if (likely((values[32] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 32); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 33: + if (likely((values[33] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 33); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 34: + if (likely((values[34] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_I)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 34); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 35: + if (likely((values[35] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 35); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 36: + if (likely((values[36] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_O)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 36); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 37: + if (likely((values[37] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 37); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 38: + if (likely((values[38] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 38); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 39: + if (likely((values[39] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 39); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 40: + if (likely((values[40] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_U)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 40); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 41: + if (likely((values[41] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_I)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 41); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 42: + if (likely((values[42] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 42); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 43: + if (likely((values[43] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_O)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 43); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 44: + if (likely((values[44] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 44); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 45: + if (likely((values[45] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 45); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 46: + if (likely((values[46] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 46); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 47: + if (likely((values[47] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_u)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 47); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 48: + if (likely((values[48] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_i)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 48); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 49: + if (likely((values[49] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_a)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 49); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 50: + if (likely((values[50] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_o)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 50); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 51: + if (likely((values[51] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g1_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 51); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 52: + if (likely((values[52] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g2_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 52); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 53: + if (likely((values[53] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g3_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 53); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 54: + if (likely((values[54] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_u_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 54); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 55: + if (likely((values[55] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_i_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 55); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 56: + if (likely((values[56] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_a_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 56); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 57: + if (likely((values[57] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_o_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 57); __PYX_ERR(0, 482, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_fit_mter") < 0)) __PYX_ERR(0, 482, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 58)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + values[22] = __Pyx_Arg_VARARGS(__pyx_args, 22); + values[23] = __Pyx_Arg_VARARGS(__pyx_args, 23); + values[24] = __Pyx_Arg_VARARGS(__pyx_args, 24); + values[25] = __Pyx_Arg_VARARGS(__pyx_args, 25); + values[26] = __Pyx_Arg_VARARGS(__pyx_args, 26); + values[27] = __Pyx_Arg_VARARGS(__pyx_args, 27); + values[28] = __Pyx_Arg_VARARGS(__pyx_args, 28); + values[29] = __Pyx_Arg_VARARGS(__pyx_args, 29); + values[30] = __Pyx_Arg_VARARGS(__pyx_args, 30); + values[31] = __Pyx_Arg_VARARGS(__pyx_args, 31); + values[32] = __Pyx_Arg_VARARGS(__pyx_args, 32); + values[33] = __Pyx_Arg_VARARGS(__pyx_args, 33); + values[34] = __Pyx_Arg_VARARGS(__pyx_args, 34); + values[35] = __Pyx_Arg_VARARGS(__pyx_args, 35); + values[36] = __Pyx_Arg_VARARGS(__pyx_args, 36); + values[37] = __Pyx_Arg_VARARGS(__pyx_args, 37); + values[38] = __Pyx_Arg_VARARGS(__pyx_args, 38); + values[39] = __Pyx_Arg_VARARGS(__pyx_args, 39); + values[40] = __Pyx_Arg_VARARGS(__pyx_args, 40); + values[41] = __Pyx_Arg_VARARGS(__pyx_args, 41); + values[42] = __Pyx_Arg_VARARGS(__pyx_args, 42); + values[43] = __Pyx_Arg_VARARGS(__pyx_args, 43); + values[44] = __Pyx_Arg_VARARGS(__pyx_args, 44); + values[45] = __Pyx_Arg_VARARGS(__pyx_args, 45); + values[46] = __Pyx_Arg_VARARGS(__pyx_args, 46); + values[47] = __Pyx_Arg_VARARGS(__pyx_args, 47); + values[48] = __Pyx_Arg_VARARGS(__pyx_args, 48); + values[49] = __Pyx_Arg_VARARGS(__pyx_args, 49); + values[50] = __Pyx_Arg_VARARGS(__pyx_args, 50); + values[51] = __Pyx_Arg_VARARGS(__pyx_args, 51); + values[52] = __Pyx_Arg_VARARGS(__pyx_args, 52); + values[53] = __Pyx_Arg_VARARGS(__pyx_args, 53); + values[54] = __Pyx_Arg_VARARGS(__pyx_args, 54); + values[55] = __Pyx_Arg_VARARGS(__pyx_args, 55); + values[56] = __Pyx_Arg_VARARGS(__pyx_args, 56); + values[57] = __Pyx_Arg_VARARGS(__pyx_args, 57); } - __pyx_L5:; - - /* "View.MemoryView":424 - * have_slices, index = _unellipsify(index, self.view.ndim) - * - * if have_slices: # <<<<<<<<<<<<<< - * obj = self.is_slice(value) - * if obj: - */ - goto __pyx_L4; - } - - /* "View.MemoryView":431 - * self.setitem_slice_assign_scalar(self[index], value) - * else: - * self.setitem_indexed(index, value) # <<<<<<<<<<<<<< - * - * cdef is_slice(self, obj): - */ - /*else*/ { - __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_indexed(__pyx_v_self, __pyx_v_index, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 431, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_self = values[0]; + __pyx_v_rng_pos_uia = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[1]); + __pyx_v_rng_pos_uao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[2]); + __pyx_v_rng_pos_iao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[3]); + __pyx_v_rng_pos_pair = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[4]); + __pyx_v_rng_pos = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[5]); + __pyx_v_rng_neg = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[6]); + __pyx_v_n_threads = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_n_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 493, __pyx_L3_error) + __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_iids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_YU = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_uids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_aids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_oids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YI = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_iids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_aids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_oids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_rating_dict = ((struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *)values[20]); + __pyx_v_user_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_user_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[22], PyBUF_WRITABLE); if (unlikely(!__pyx_v_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_neg_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[23], PyBUF_WRITABLE); if (unlikely(!__pyx_v_neg_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_indptr = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[24], PyBUF_WRITABLE); if (unlikely(!__pyx_v_indptr.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_p_user_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[25], PyBUF_WRITABLE); if (unlikely(!__pyx_v_p_user_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_earlier_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[26], PyBUF_WRITABLE); if (unlikely(!__pyx_v_earlier_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_later_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[27], PyBUF_WRITABLE); if (unlikely(!__pyx_v_later_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_aspect_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[28], PyBUF_WRITABLE); if (unlikely(!__pyx_v_aspect_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_pair_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[29], PyBUF_WRITABLE); if (unlikely(!__pyx_v_pair_counts.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[30], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G1.memview)) __PYX_ERR(0, 500, __pyx_L3_error) + __pyx_v_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[31], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G2.memview)) __PYX_ERR(0, 501, __pyx_L3_error) + __pyx_v_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[32], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G3.memview)) __PYX_ERR(0, 502, __pyx_L3_error) + __pyx_v_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[33], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U.memview)) __PYX_ERR(0, 503, __pyx_L3_error) + __pyx_v_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[34], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I.memview)) __PYX_ERR(0, 504, __pyx_L3_error) + __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[35], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 505, __pyx_L3_error) + __pyx_v_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[36], PyBUF_WRITABLE); if (unlikely(!__pyx_v_O.memview)) __PYX_ERR(0, 506, __pyx_L3_error) + __pyx_v_sgrad_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[37], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G1.memview)) __PYX_ERR(0, 507, __pyx_L3_error) + __pyx_v_sgrad_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[38], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G2.memview)) __PYX_ERR(0, 508, __pyx_L3_error) + __pyx_v_sgrad_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[39], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G3.memview)) __PYX_ERR(0, 509, __pyx_L3_error) + __pyx_v_sgrad_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[40], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_U.memview)) __PYX_ERR(0, 510, __pyx_L3_error) + __pyx_v_sgrad_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[41], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_I.memview)) __PYX_ERR(0, 511, __pyx_L3_error) + __pyx_v_sgrad_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[42], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_A.memview)) __PYX_ERR(0, 512, __pyx_L3_error) + __pyx_v_sgrad_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[43], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_O.memview)) __PYX_ERR(0, 513, __pyx_L3_error) + __pyx_v_del_g1 = ((PyArrayObject *)values[44]); + __pyx_v_del_g2 = ((PyArrayObject *)values[45]); + __pyx_v_del_g3 = ((PyArrayObject *)values[46]); + __pyx_v_del_u = ((PyArrayObject *)values[47]); + __pyx_v_del_i = ((PyArrayObject *)values[48]); + __pyx_v_del_a = ((PyArrayObject *)values[49]); + __pyx_v_del_o = ((PyArrayObject *)values[50]); + __pyx_v_del_g1_reg = ((PyArrayObject *)values[51]); + __pyx_v_del_g2_reg = ((PyArrayObject *)values[52]); + __pyx_v_del_g3_reg = ((PyArrayObject *)values[53]); + __pyx_v_del_u_reg = ((PyArrayObject *)values[54]); + __pyx_v_del_i_reg = ((PyArrayObject *)values[55]); + __pyx_v_del_a_reg = ((PyArrayObject *)values[56]); + __pyx_v_del_o_reg = ((PyArrayObject *)values[57]); } - __pyx_L4:; - - /* "View.MemoryView":418 - * return self.convert_item_to_object(itemp) - * - * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< - * if self.view.readonly: - * raise TypeError("Cannot assign to read-only memoryview") - */ + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, __pyx_nargs); __PYX_ERR(0, 482, __pyx_L3_error) + __pyx_L3_error:; + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_user_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_neg_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_indptr, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_p_user_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_earlier_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_later_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_aspect_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_pair_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_O, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_O, 1); + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uia), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uia", 0))) __PYX_ERR(0, 487, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uao", 0))) __PYX_ERR(0, 488, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_iao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_iao", 0))) __PYX_ERR(0, 489, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_pair), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_pair", 0))) __PYX_ERR(0, 490, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos", 0))) __PYX_ERR(0, 491, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_neg), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_neg", 0))) __PYX_ERR(0, 492, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rating_dict), __pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict, 1, "rating_dict", 0))) __PYX_ERR(0, 497, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1), __pyx_ptype_5numpy_ndarray, 1, "del_g1", 0))) __PYX_ERR(0, 514, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2), __pyx_ptype_5numpy_ndarray, 1, "del_g2", 0))) __PYX_ERR(0, 515, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3), __pyx_ptype_5numpy_ndarray, 1, "del_g3", 0))) __PYX_ERR(0, 516, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u), __pyx_ptype_5numpy_ndarray, 1, "del_u", 0))) __PYX_ERR(0, 517, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i), __pyx_ptype_5numpy_ndarray, 1, "del_i", 0))) __PYX_ERR(0, 518, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a), __pyx_ptype_5numpy_ndarray, 1, "del_a", 0))) __PYX_ERR(0, 519, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o), __pyx_ptype_5numpy_ndarray, 1, "del_o", 0))) __PYX_ERR(0, 520, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g1_reg", 0))) __PYX_ERR(0, 521, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g2_reg", 0))) __PYX_ERR(0, 522, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g3_reg", 0))) __PYX_ERR(0, 523, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u_reg), __pyx_ptype_5numpy_ndarray, 1, "del_u_reg", 0))) __PYX_ERR(0, 524, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i_reg), __pyx_ptype_5numpy_ndarray, 1, "del_i_reg", 0))) __PYX_ERR(0, 525, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a_reg), __pyx_ptype_5numpy_ndarray, 1, "del_a_reg", 0))) __PYX_ERR(0, 526, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o_reg), __pyx_ptype_5numpy_ndarray, 1, "del_o_reg", 0))) __PYX_ERR(0, 527, __pyx_L1_error) + __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_20_fit_mter(__pyx_self, __pyx_v_self, __pyx_v_rng_pos_uia, __pyx_v_rng_pos_uao, __pyx_v_rng_pos_iao, __pyx_v_rng_pos_pair, __pyx_v_rng_pos, __pyx_v_rng_neg, __pyx_v_n_threads, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_iids, __pyx_v_X_aids, __pyx_v_YU, __pyx_v_YU_uids, __pyx_v_YU_aids, __pyx_v_YU_oids, __pyx_v_YI, __pyx_v_YI_iids, __pyx_v_YI_aids, __pyx_v_YI_oids, __pyx_v_rating_dict, __pyx_v_user_ids, __pyx_v_item_ids, __pyx_v_neg_item_ids, __pyx_v_indptr, __pyx_v_p_user_indices, __pyx_v_earlier_indices, __pyx_v_later_indices, __pyx_v_aspect_indices, __pyx_v_pair_counts, __pyx_v_G1, __pyx_v_G2, __pyx_v_G3, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_sgrad_G1, __pyx_v_sgrad_G2, __pyx_v_sgrad_G3, __pyx_v_sgrad_U, __pyx_v_sgrad_I, __pyx_v_sgrad_A, __pyx_v_sgrad_O, __pyx_v_del_g1, __pyx_v_del_g2, __pyx_v_del_g3, __pyx_v_del_u, __pyx_v_del_i, __pyx_v_del_a, __pyx_v_del_o, __pyx_v_del_g1_reg, __pyx_v_del_g2_reg, __pyx_v_del_g3_reg, __pyx_v_del_u_reg, __pyx_v_del_i_reg, __pyx_v_del_a_reg, __pyx_v_del_o_reg); /* function exit code */ - __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("View.MemoryView.memoryview.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; + __pyx_r = NULL; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_have_slices); - __Pyx_XDECREF(__pyx_v_obj); - __Pyx_XDECREF(__pyx_v_index); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_user_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_neg_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_indptr, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_p_user_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_earlier_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_later_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_aspect_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_pair_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_O, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_O, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "View.MemoryView":433 - * self.setitem_indexed(index, value) - * - * cdef is_slice(self, obj): # <<<<<<<<<<<<<< - * if not isinstance(obj, memoryview): - * try: - */ - -static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj) { +static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_20_fit_mter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg, int __pyx_v_n_threads, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_iids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_YU, __Pyx_memviewslice __pyx_v_YU_uids, __Pyx_memviewslice __pyx_v_YU_aids, __Pyx_memviewslice __pyx_v_YU_oids, __Pyx_memviewslice __pyx_v_YI, __Pyx_memviewslice __pyx_v_YI_iids, __Pyx_memviewslice __pyx_v_YI_aids, __Pyx_memviewslice __pyx_v_YI_oids, struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict, __Pyx_memviewslice __pyx_v_user_ids, __Pyx_memviewslice __pyx_v_item_ids, __Pyx_memviewslice __pyx_v_neg_item_ids, __Pyx_memviewslice __pyx_v_indptr, __Pyx_memviewslice __pyx_v_p_user_indices, __Pyx_memviewslice __pyx_v_earlier_indices, __Pyx_memviewslice __pyx_v_later_indices, __Pyx_memviewslice __pyx_v_aspect_indices, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts, __Pyx_memviewslice __pyx_v_G1, __Pyx_memviewslice __pyx_v_G2, __Pyx_memviewslice __pyx_v_G3, __Pyx_memviewslice __pyx_v_U, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_O, __Pyx_memviewslice __pyx_v_sgrad_G1, __Pyx_memviewslice __pyx_v_sgrad_G2, __Pyx_memviewslice __pyx_v_sgrad_G3, __Pyx_memviewslice __pyx_v_sgrad_U, __Pyx_memviewslice __pyx_v_sgrad_I, __Pyx_memviewslice __pyx_v_sgrad_A, __Pyx_memviewslice __pyx_v_sgrad_O, PyArrayObject *__pyx_v_del_g1, PyArrayObject *__pyx_v_del_g2, PyArrayObject *__pyx_v_del_g3, PyArrayObject *__pyx_v_del_u, PyArrayObject *__pyx_v_del_i, PyArrayObject *__pyx_v_del_a, PyArrayObject *__pyx_v_del_o, PyArrayObject *__pyx_v_del_g1_reg, PyArrayObject *__pyx_v_del_g2_reg, PyArrayObject *__pyx_v_del_g3_reg, PyArrayObject *__pyx_v_del_u_reg, PyArrayObject *__pyx_v_del_i_reg, PyArrayObject *__pyx_v_del_a_reg, PyArrayObject *__pyx_v_del_o_reg) { + long __pyx_v_s; + long __pyx_v_correct; + long __pyx_v_skipped; + long __pyx_v_aspect_correct; + long __pyx_v_n_users; + long __pyx_v_n_items; + long __pyx_v_n_aspects; + CYTHON_UNUSED long __pyx_v_n_opinions; + long __pyx_v_n_user_factors; + long __pyx_v_n_item_factors; + long __pyx_v_n_aspect_factors; + long __pyx_v_n_opinion_factors; + CYTHON_UNUSED int __pyx_v_num_samples; + CYTHON_UNUSED int __pyx_v_num_bpr_samples; + CYTHON_UNUSED int __pyx_v_num_pair_samples; + CYTHON_UNUSED short __pyx_v__; + short __pyx_v_i; + short __pyx_v_j; + short __pyx_v_k; + short __pyx_v_idx; + short __pyx_v_jdx; + short __pyx_v_u_idx; + short __pyx_v_i_idx; + short __pyx_v_a_idx; + short __pyx_v_o_idx; + short __pyx_v_j_idx; + short __pyx_v_thread_id; + double __pyx_v_z; + double __pyx_v_score; + double __pyx_v_i_score; + double __pyx_v_j_score; + double __pyx_v_pred; + double __pyx_v_i_ij; + double __pyx_v_a_ji; + double __pyx_v_loss; + double __pyx_v_bpr_loss; + double __pyx_v_aspect_bpr_loss; + double __pyx_v_del_sqerror; + double __pyx_v_del_bpr; + double __pyx_v_del_aspect_bpr; + double __pyx_v_eps; + double __pyx_v_lr; + double __pyx_v_ld_reg; + double __pyx_v_ld_bpr; + double __pyx_v_lambda_d; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a; + __Pyx_Buffer __pyx_pybuffer_del_a; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a_reg; + __Pyx_Buffer __pyx_pybuffer_del_a_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1; + __Pyx_Buffer __pyx_pybuffer_del_g1; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1_reg; + __Pyx_Buffer __pyx_pybuffer_del_g1_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2; + __Pyx_Buffer __pyx_pybuffer_del_g2; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2_reg; + __Pyx_Buffer __pyx_pybuffer_del_g2_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3; + __Pyx_Buffer __pyx_pybuffer_del_g3; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3_reg; + __Pyx_Buffer __pyx_pybuffer_del_g3_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i; + __Pyx_Buffer __pyx_pybuffer_del_i; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i_reg; + __Pyx_Buffer __pyx_pybuffer_del_i_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o; + __Pyx_Buffer __pyx_pybuffer_del_o; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o_reg; + __Pyx_Buffer __pyx_pybuffer_del_o_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u; + __Pyx_Buffer __pyx_pybuffer_del_u; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u_reg; + __Pyx_Buffer __pyx_pybuffer_del_u_reg; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + long __pyx_t_3; + int __pyx_t_4; + double __pyx_t_5; PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; + int __pyx_t_7; + int __pyx_t_8; + Py_ssize_t __pyx_t_9; + long __pyx_t_10; + short __pyx_t_11; + long __pyx_t_12; + long __pyx_t_13; + short __pyx_t_14; + long __pyx_t_15; + long __pyx_t_16; + short __pyx_t_17; + Py_ssize_t __pyx_t_18; + Py_ssize_t __pyx_t_19; + Py_ssize_t __pyx_t_20; + Py_ssize_t __pyx_t_21; + Py_ssize_t __pyx_t_22; + Py_ssize_t __pyx_t_23; + Py_ssize_t __pyx_t_24; + Py_ssize_t __pyx_t_25; + bool __pyx_t_26; + int __pyx_t_27; + int __pyx_t_28; + double __pyx_t_29; + long __pyx_t_30; + PyObject *__pyx_t_31 = NULL; + PyObject *__pyx_t_32 = NULL; int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("is_slice", 0); - __Pyx_INCREF(__pyx_v_obj); - - /* "View.MemoryView":434 - * - * cdef is_slice(self, obj): - * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< - * try: - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, - */ - __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_memoryview_type); - __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":435 - * cdef is_slice(self, obj): - * if not isinstance(obj, memoryview): - * try: # <<<<<<<<<<<<<< - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, - * self.dtype_is_object) - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_5); - /*try:*/ { - - /* "View.MemoryView":436 - * if not isinstance(obj, memoryview): - * try: - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< - * self.dtype_is_object) - * except TypeError: - */ - __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_self->flags & (~PyBUF_WRITABLE)) | PyBUF_ANY_CONTIGUOUS)); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 436, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_6); - - /* "View.MemoryView":437 - * try: - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, - * self.dtype_is_object) # <<<<<<<<<<<<<< - * except TypeError: - * return None - */ - __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 437, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - - /* "View.MemoryView":436 - * if not isinstance(obj, memoryview): - * try: - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< - * self.dtype_is_object) - * except TypeError: - */ - __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 436, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_obj); - __Pyx_GIVEREF(__pyx_v_obj); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_obj); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7); - __pyx_t_6 = 0; - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 436, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_7); - __pyx_t_7 = 0; - - /* "View.MemoryView":435 - * cdef is_slice(self, obj): - * if not isinstance(obj, memoryview): - * try: # <<<<<<<<<<<<<< - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, - * self.dtype_is_object) - */ - } - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L9_try_end; - __pyx_L4_error:; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_fuse_1_0_fit_mter", 0); + __pyx_pybuffer_del_g1.pybuffer.buf = NULL; + __pyx_pybuffer_del_g1.refcount = 0; + __pyx_pybuffernd_del_g1.data = NULL; + __pyx_pybuffernd_del_g1.rcbuffer = &__pyx_pybuffer_del_g1; + __pyx_pybuffer_del_g2.pybuffer.buf = NULL; + __pyx_pybuffer_del_g2.refcount = 0; + __pyx_pybuffernd_del_g2.data = NULL; + __pyx_pybuffernd_del_g2.rcbuffer = &__pyx_pybuffer_del_g2; + __pyx_pybuffer_del_g3.pybuffer.buf = NULL; + __pyx_pybuffer_del_g3.refcount = 0; + __pyx_pybuffernd_del_g3.data = NULL; + __pyx_pybuffernd_del_g3.rcbuffer = &__pyx_pybuffer_del_g3; + __pyx_pybuffer_del_u.pybuffer.buf = NULL; + __pyx_pybuffer_del_u.refcount = 0; + __pyx_pybuffernd_del_u.data = NULL; + __pyx_pybuffernd_del_u.rcbuffer = &__pyx_pybuffer_del_u; + __pyx_pybuffer_del_i.pybuffer.buf = NULL; + __pyx_pybuffer_del_i.refcount = 0; + __pyx_pybuffernd_del_i.data = NULL; + __pyx_pybuffernd_del_i.rcbuffer = &__pyx_pybuffer_del_i; + __pyx_pybuffer_del_a.pybuffer.buf = NULL; + __pyx_pybuffer_del_a.refcount = 0; + __pyx_pybuffernd_del_a.data = NULL; + __pyx_pybuffernd_del_a.rcbuffer = &__pyx_pybuffer_del_a; + __pyx_pybuffer_del_o.pybuffer.buf = NULL; + __pyx_pybuffer_del_o.refcount = 0; + __pyx_pybuffernd_del_o.data = NULL; + __pyx_pybuffernd_del_o.rcbuffer = &__pyx_pybuffer_del_o; + __pyx_pybuffer_del_g1_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g1_reg.refcount = 0; + __pyx_pybuffernd_del_g1_reg.data = NULL; + __pyx_pybuffernd_del_g1_reg.rcbuffer = &__pyx_pybuffer_del_g1_reg; + __pyx_pybuffer_del_g2_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g2_reg.refcount = 0; + __pyx_pybuffernd_del_g2_reg.data = NULL; + __pyx_pybuffernd_del_g2_reg.rcbuffer = &__pyx_pybuffer_del_g2_reg; + __pyx_pybuffer_del_g3_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g3_reg.refcount = 0; + __pyx_pybuffernd_del_g3_reg.data = NULL; + __pyx_pybuffernd_del_g3_reg.rcbuffer = &__pyx_pybuffer_del_g3_reg; + __pyx_pybuffer_del_u_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_u_reg.refcount = 0; + __pyx_pybuffernd_del_u_reg.data = NULL; + __pyx_pybuffernd_del_u_reg.rcbuffer = &__pyx_pybuffer_del_u_reg; + __pyx_pybuffer_del_i_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_i_reg.refcount = 0; + __pyx_pybuffernd_del_i_reg.data = NULL; + __pyx_pybuffernd_del_i_reg.rcbuffer = &__pyx_pybuffer_del_i_reg; + __pyx_pybuffer_del_a_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_a_reg.refcount = 0; + __pyx_pybuffernd_del_a_reg.data = NULL; + __pyx_pybuffernd_del_a_reg.rcbuffer = &__pyx_pybuffer_del_a_reg; + __pyx_pybuffer_del_o_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_o_reg.refcount = 0; + __pyx_pybuffernd_del_o_reg.data = NULL; + __pyx_pybuffernd_del_o_reg.rcbuffer = &__pyx_pybuffer_del_o_reg; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g1.diminfo[0].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1.diminfo[0].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1.diminfo[1].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1.diminfo[1].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1.diminfo[2].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1.diminfo[2].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g2.diminfo[0].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2.diminfo[0].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2.diminfo[1].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2.diminfo[1].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2.diminfo[2].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2.diminfo[2].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g3.diminfo[0].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3.diminfo[0].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3.diminfo[1].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3.diminfo[1].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3.diminfo[2].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3.diminfo[2].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_u.diminfo[0].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u.diminfo[0].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u.diminfo[1].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u.diminfo[1].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_i.diminfo[0].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i.diminfo[0].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i.diminfo[1].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i.diminfo[1].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_a.diminfo[0].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a.diminfo[0].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a.diminfo[1].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a.diminfo[1].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_o.diminfo[0].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o.diminfo[0].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o.diminfo[1].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o.diminfo[1].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g1_reg.diminfo[0].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1_reg.diminfo[0].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1_reg.diminfo[1].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1_reg.diminfo[1].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1_reg.diminfo[2].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1_reg.diminfo[2].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g2_reg.diminfo[0].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2_reg.diminfo[0].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2_reg.diminfo[1].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2_reg.diminfo[1].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2_reg.diminfo[2].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2_reg.diminfo[2].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g3_reg.diminfo[0].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3_reg.diminfo[0].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3_reg.diminfo[1].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3_reg.diminfo[1].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3_reg.diminfo[2].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3_reg.diminfo[2].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_u_reg.diminfo[0].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u_reg.diminfo[0].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u_reg.diminfo[1].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u_reg.diminfo[1].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_i_reg.diminfo[0].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i_reg.diminfo[0].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i_reg.diminfo[1].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i_reg.diminfo[1].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_a_reg.diminfo[0].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a_reg.diminfo[0].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a_reg.diminfo[1].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a_reg.diminfo[1].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_o_reg.diminfo[0].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o_reg.diminfo[0].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o_reg.diminfo[1].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o_reg.diminfo[1].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[1]; - /* "View.MemoryView":438 - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, - * self.dtype_is_object) - * except TypeError: # <<<<<<<<<<<<<< - * return None - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":531 + * """ + * cdef: + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 # <<<<<<<<<<<<<< + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items */ - __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError); - if (__pyx_t_9) { - __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(2, 438, __pyx_L6_except_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_6); + __pyx_v_correct = 0; + __pyx_v_skipped = 0; + __pyx_v_aspect_correct = 0; - /* "View.MemoryView":439 - * self.dtype_is_object) - * except TypeError: - * return None # <<<<<<<<<<<<<< - * - * return obj + /* "cornac/models/comparer/recom_comparer_sub.pyx":532 + * cdef: + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 + * long n_users = self.train_set.num_users # <<<<<<<<<<<<<< + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects */ - __Pyx_XDECREF(__pyx_r); - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L7_except_return; - } - goto __pyx_L6_except_error; - __pyx_L6_except_error:; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_n_users = __pyx_t_3; - /* "View.MemoryView":435 - * cdef is_slice(self, obj): - * if not isinstance(obj, memoryview): - * try: # <<<<<<<<<<<<<< - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, - * self.dtype_is_object) + /* "cornac/models/comparer/recom_comparer_sub.pyx":533 + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items # <<<<<<<<<<<<<< + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions */ - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); - goto __pyx_L1_error; - __pyx_L7_except_return:; - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); - goto __pyx_L0; - __pyx_L9_try_end:; - } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_items = __pyx_t_3; - /* "View.MemoryView":434 - * - * cdef is_slice(self, obj): - * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< - * try: - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + /* "cornac/models/comparer/recom_comparer_sub.pyx":534 + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors */ - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_aspects = __pyx_t_3; - /* "View.MemoryView":441 - * return None - * - * return obj # <<<<<<<<<<<<<< - * - * cdef setitem_slice_assignment(self, dst, src): + /* "cornac/models/comparer/recom_comparer_sub.pyx":535 + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions # <<<<<<<<<<<<<< + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_obj); - __pyx_r = __pyx_v_obj; - goto __pyx_L0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_opinions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_opinions = __pyx_t_3; - /* "View.MemoryView":433 - * self.setitem_indexed(index, value) - * - * cdef is_slice(self, obj): # <<<<<<<<<<<<<< - * if not isinstance(obj, memoryview): - * try: + /* "cornac/models/comparer/recom_comparer_sub.pyx":536 + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors # <<<<<<<<<<<<<< + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_user_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 536, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 536, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_user_factors = __pyx_t_3; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_obj); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":443 - * return obj - * - * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice dst_slice - * cdef __Pyx_memviewslice src_slice + /* "cornac/models/comparer/recom_comparer_sub.pyx":537 + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors # <<<<<<<<<<<<<< + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_item_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 537, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_item_factors = __pyx_t_3; -static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src) { - __Pyx_memviewslice __pyx_v_dst_slice; - __Pyx_memviewslice __pyx_v_src_slice; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_memviewslice *__pyx_t_1; - __Pyx_memviewslice *__pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_t_5; - int __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("setitem_slice_assignment", 0); - - /* "View.MemoryView":447 - * cdef __Pyx_memviewslice src_slice - * - * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< - * get_slice_from_memview(dst, &dst_slice)[0], - * src.ndim, dst.ndim, self.dtype_is_object) + /* "cornac/models/comparer/recom_comparer_sub.pyx":538 + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors # <<<<<<<<<<<<<< + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples */ - if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(2, 447, __pyx_L1_error) - __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(2, 447, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_aspect_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 538, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_aspect_factors = __pyx_t_3; - /* "View.MemoryView":448 - * - * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], - * get_slice_from_memview(dst, &dst_slice)[0], # <<<<<<<<<<<<<< - * src.ndim, dst.ndim, self.dtype_is_object) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":539 + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors # <<<<<<<<<<<<<< + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples */ - if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(2, 448, __pyx_L1_error) - __pyx_t_2 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice)); if (unlikely(__pyx_t_2 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(2, 448, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_opinion_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 539, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_opinion_factors = __pyx_t_3; - /* "View.MemoryView":449 - * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], - * get_slice_from_memview(dst, &dst_slice)[0], - * src.ndim, dst.ndim, self.dtype_is_object) # <<<<<<<<<<<<<< - * - * cdef setitem_slice_assign_scalar(self, memoryview dst, value): + /* "cornac/models/comparer/recom_comparer_sub.pyx":540 + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples # <<<<<<<<<<<<<< + * int num_bpr_samples = self.n_bpr_samples + * int num_pair_samples = self.n_pair_samples */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 449, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 449, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 449, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 449, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_element_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 540, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_samples = __pyx_t_4; - /* "View.MemoryView":447 - * cdef __Pyx_memviewslice src_slice + /* "cornac/models/comparer/recom_comparer_sub.pyx":541 + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples # <<<<<<<<<<<<<< + * int num_pair_samples = self.n_pair_samples * - * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< - * get_slice_from_memview(dst, &dst_slice)[0], - * src.ndim, dst.ndim, self.dtype_is_object) */ - __pyx_t_6 = __pyx_memoryview_copy_contents((__pyx_t_1[0]), (__pyx_t_2[0]), __pyx_t_4, __pyx_t_5, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 447, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 541, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_bpr_samples = __pyx_t_4; - /* "View.MemoryView":443 - * return obj + /* "cornac/models/comparer/recom_comparer_sub.pyx":542 + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples + * int num_pair_samples = self.n_pair_samples # <<<<<<<<<<<<<< * - * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice dst_slice - * cdef __Pyx_memviewslice src_slice + * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_pair_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 542, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_pair_samples = __pyx_t_4; - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":451 - * src.ndim, dst.ndim, self.dtype_is_object) + /* "cornac/models/comparer/recom_comparer_sub.pyx":546 + * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id + * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji + * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr # <<<<<<<<<<<<<< + * floating eps = 1e-9 * - * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< - * cdef int array[128] - * cdef void *tmp = NULL */ + __pyx_v_loss = 0.; + __pyx_v_bpr_loss = 0.; + __pyx_v_aspect_bpr_loss = 0.; -static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value) { - int __pyx_v_array[0x80]; - void *__pyx_v_tmp; - void *__pyx_v_item; - __Pyx_memviewslice *__pyx_v_dst_slice; - __Pyx_memviewslice __pyx_v_tmp_slice; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_memviewslice *__pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_t_5; - char const *__pyx_t_6; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0); - - /* "View.MemoryView":453 - * cdef setitem_slice_assign_scalar(self, memoryview dst, value): - * cdef int array[128] - * cdef void *tmp = NULL # <<<<<<<<<<<<<< - * cdef void *item + /* "cornac/models/comparer/recom_comparer_sub.pyx":547 + * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji + * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr + * floating eps = 1e-9 # <<<<<<<<<<<<<< * + * floating lr = self.lr */ - __pyx_v_tmp = NULL; + __pyx_v_eps = 1e-9; - /* "View.MemoryView":458 - * cdef __Pyx_memviewslice *dst_slice - * cdef __Pyx_memviewslice tmp_slice - * dst_slice = get_slice_from_memview(dst, &tmp_slice) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":549 + * floating eps = 1e-9 * - * if self.view.itemsize > sizeof(array): + * floating lr = self.lr # <<<<<<<<<<<<<< + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr */ - __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(2, 458, __pyx_L1_error) - __pyx_v_dst_slice = __pyx_t_1; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 549, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lr = __pyx_t_5; - /* "View.MemoryView":460 - * dst_slice = get_slice_from_memview(dst, &tmp_slice) + /* "cornac/models/comparer/recom_comparer_sub.pyx":550 * - * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< - * tmp = PyMem_Malloc(self.view.itemsize) - * if tmp == NULL: + * floating lr = self.lr + * floating ld_reg = self.lambda_reg # <<<<<<<<<<<<<< + * floating ld_bpr = self.lambda_bpr + * floating lambda_d = self.lambda_d */ - __pyx_t_2 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0); - if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_reg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 550, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 550, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_ld_reg = __pyx_t_5; - /* "View.MemoryView":461 + /* "cornac/models/comparer/recom_comparer_sub.pyx":551 + * floating lr = self.lr + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr # <<<<<<<<<<<<<< + * floating lambda_d = self.lambda_d * - * if self.view.itemsize > sizeof(array): - * tmp = PyMem_Malloc(self.view.itemsize) # <<<<<<<<<<<<<< - * if tmp == NULL: - * raise MemoryError - */ - __pyx_v_tmp = PyMem_Malloc(__pyx_v_self->view.itemsize); - - /* "View.MemoryView":462 - * if self.view.itemsize > sizeof(array): - * tmp = PyMem_Malloc(self.view.itemsize) - * if tmp == NULL: # <<<<<<<<<<<<<< - * raise MemoryError - * item = tmp - */ - __pyx_t_2 = ((__pyx_v_tmp == NULL) != 0); - if (unlikely(__pyx_t_2)) { - - /* "View.MemoryView":463 - * tmp = PyMem_Malloc(self.view.itemsize) - * if tmp == NULL: - * raise MemoryError # <<<<<<<<<<<<<< - * item = tmp - * else: - */ - PyErr_NoMemory(); __PYX_ERR(2, 463, __pyx_L1_error) - - /* "View.MemoryView":462 - * if self.view.itemsize > sizeof(array): - * tmp = PyMem_Malloc(self.view.itemsize) - * if tmp == NULL: # <<<<<<<<<<<<<< - * raise MemoryError - * item = tmp - */ - } - - /* "View.MemoryView":464 - * if tmp == NULL: - * raise MemoryError - * item = tmp # <<<<<<<<<<<<<< - * else: - * item = array */ - __pyx_v_item = __pyx_v_tmp; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_bpr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_ld_bpr = __pyx_t_5; - /* "View.MemoryView":460 - * dst_slice = get_slice_from_memview(dst, &tmp_slice) + /* "cornac/models/comparer/recom_comparer_sub.pyx":552 + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr + * floating lambda_d = self.lambda_d # <<<<<<<<<<<<<< * - * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< - * tmp = PyMem_Malloc(self.view.itemsize) - * if tmp == NULL: + * del_g1.fill(0) */ - goto __pyx_L3; - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_d = __pyx_t_5; - /* "View.MemoryView":466 - * item = tmp - * else: - * item = array # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":554 + * floating lambda_d = self.lambda_d * - * try: + * del_g1.fill(0) # <<<<<<<<<<<<<< + * del_g2.fill(0) + * del_g3.fill(0) */ - /*else*/ { - __pyx_v_item = ((void *)__pyx_v_array); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } } - __pyx_L3:; + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":468 - * item = array + /* "cornac/models/comparer/recom_comparer_sub.pyx":555 * - * try: # <<<<<<<<<<<<<< - * if self.dtype_is_object: - * ( item)[0] = value + * del_g1.fill(0) + * del_g2.fill(0) # <<<<<<<<<<<<<< + * del_g3.fill(0) + * del_u.fill(0) */ - /*try:*/ { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":469 - * - * try: - * if self.dtype_is_object: # <<<<<<<<<<<<<< - * ( item)[0] = value - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":556 + * del_g1.fill(0) + * del_g2.fill(0) + * del_g3.fill(0) # <<<<<<<<<<<<<< + * del_u.fill(0) + * del_i.fill(0) */ - __pyx_t_2 = (__pyx_v_self->dtype_is_object != 0); - if (__pyx_t_2) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":470 - * try: - * if self.dtype_is_object: - * ( item)[0] = value # <<<<<<<<<<<<<< - * else: - * self.assign_item_from_object( item, value) + /* "cornac/models/comparer/recom_comparer_sub.pyx":557 + * del_g2.fill(0) + * del_g3.fill(0) + * del_u.fill(0) # <<<<<<<<<<<<<< + * del_i.fill(0) + * del_a.fill(0) */ - (((PyObject **)__pyx_v_item)[0]) = ((PyObject *)__pyx_v_value); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 557, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":469 - * - * try: - * if self.dtype_is_object: # <<<<<<<<<<<<<< - * ( item)[0] = value - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":558 + * del_g3.fill(0) + * del_u.fill(0) + * del_i.fill(0) # <<<<<<<<<<<<<< + * del_a.fill(0) + * del_o.fill(0) */ - goto __pyx_L8; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":472 - * ( item)[0] = value - * else: - * self.assign_item_from_object( item, value) # <<<<<<<<<<<<<< - * - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":559 + * del_u.fill(0) + * del_i.fill(0) + * del_a.fill(0) # <<<<<<<<<<<<<< + * del_o.fill(0) + * del_g1_reg.fill(0) */ - /*else*/ { - __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 472, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 559, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; } - __pyx_L8:; + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 559, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":476 - * - * - * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< - * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) - * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + /* "cornac/models/comparer/recom_comparer_sub.pyx":560 + * del_i.fill(0) + * del_a.fill(0) + * del_o.fill(0) # <<<<<<<<<<<<<< + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) */ - __pyx_t_2 = ((__pyx_v_self->view.suboffsets != NULL) != 0); - if (__pyx_t_2) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":477 - * - * if self.view.suboffsets != NULL: - * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) # <<<<<<<<<<<<<< - * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, - * item, self.dtype_is_object) + /* "cornac/models/comparer/recom_comparer_sub.pyx":561 + * del_a.fill(0) + * del_o.fill(0) + * del_g1_reg.fill(0) # <<<<<<<<<<<<<< + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) */ - __pyx_t_3 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 477, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":476 - * - * - * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< - * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) - * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + /* "cornac/models/comparer/recom_comparer_sub.pyx":562 + * del_o.fill(0) + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) # <<<<<<<<<<<<<< + * del_g3_reg.fill(0) + * del_u_reg.fill(0) */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 562, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":478 - * if self.view.suboffsets != NULL: - * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) - * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, # <<<<<<<<<<<<<< - * item, self.dtype_is_object) - * finally: + /* "cornac/models/comparer/recom_comparer_sub.pyx":563 + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) # <<<<<<<<<<<<<< + * del_u_reg.fill(0) + * del_i_reg.fill(0) */ - __pyx_memoryview_slice_assign_scalar(__pyx_v_dst_slice, __pyx_v_dst->view.ndim, __pyx_v_self->view.itemsize, __pyx_v_item, __pyx_v_self->dtype_is_object); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 563, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 563, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":481 - * item, self.dtype_is_object) - * finally: - * PyMem_Free(tmp) # <<<<<<<<<<<<<< - * - * cdef setitem_indexed(self, index, value): + /* "cornac/models/comparer/recom_comparer_sub.pyx":564 + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) + * del_u_reg.fill(0) # <<<<<<<<<<<<<< + * del_i_reg.fill(0) + * del_a_reg.fill(0) */ - /*finally:*/ { - /*normal exit:*/{ - PyMem_Free(__pyx_v_tmp); - goto __pyx_L7; - } - __pyx_L6_error:; - /*exception exit:*/{ - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); - __Pyx_XGOTREF(__pyx_t_7); - __Pyx_XGOTREF(__pyx_t_8); - __Pyx_XGOTREF(__pyx_t_9); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename; - { - PyMem_Free(__pyx_v_tmp); - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - } - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9); - __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; - __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6; - goto __pyx_L1_error; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; } - __pyx_L7:; } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":451 - * src.ndim, dst.ndim, self.dtype_is_object) - * - * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< - * cdef int array[128] - * cdef void *tmp = NULL + /* "cornac/models/comparer/recom_comparer_sub.pyx":565 + * del_g3_reg.fill(0) + * del_u_reg.fill(0) + * del_i_reg.fill(0) # <<<<<<<<<<<<<< + * del_a_reg.fill(0) + * del_o_reg.fill(0) */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":483 - * PyMem_Free(tmp) - * - * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< - * cdef char *itemp = self.get_item_pointer(index) - * self.assign_item_from_object(itemp, value) + /* "cornac/models/comparer/recom_comparer_sub.pyx":566 + * del_u_reg.fill(0) + * del_i_reg.fill(0) + * del_a_reg.fill(0) # <<<<<<<<<<<<<< + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 566, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; -static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { - char *__pyx_v_itemp; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - char *__pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("setitem_indexed", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":567 + * del_i_reg.fill(0) + * del_a_reg.fill(0) + * del_o_reg.fill(0) # <<<<<<<<<<<<<< + * with nogil, parallel(num_threads=n_threads): + * thread_id = get_thread_num() + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":484 - * - * cdef setitem_indexed(self, index, value): - * cdef char *itemp = self.get_item_pointer(index) # <<<<<<<<<<<<<< - * self.assign_item_from_object(itemp, value) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":568 + * del_a_reg.fill(0) + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): */ - __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_index); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(2, 484, __pyx_L1_error) - __pyx_v_itemp = __pyx_t_1; + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel private(__pyx_v_thread_id) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_bpr_loss) reduction(+:__pyx_v_correct) reduction(+:__pyx_v_skipped) reduction(+:__pyx_v_aspect_bpr_loss) reduction(+:__pyx_v_aspect_correct) private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_7, __pyx_t_8, __pyx_t_9) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_n_threads) + #endif /* _OPENMP */ + { + #ifdef _OPENMP + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + Py_BEGIN_ALLOW_THREADS + #endif /* _OPENMP */ + /* Initialize private variables to invalid values */ + __pyx_v_thread_id = ((short)0xbad0bad0); - /* "View.MemoryView":485 - * cdef setitem_indexed(self, index, value): - * cdef char *itemp = self.get_item_pointer(index) - * self.assign_item_from_object(itemp, value) # <<<<<<<<<<<<<< - * - * cdef convert_item_to_object(self, char *itemp): + /* "cornac/models/comparer/recom_comparer_sub.pyx":569 + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): + * thread_id = get_thread_num() # <<<<<<<<<<<<<< + * for _ in prange(num_samples, schedule='guided'): + * # get user item aspect element */ - __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_thread_id = recom_bpr::get_thread_num(); - /* "View.MemoryView":483 - * PyMem_Free(tmp) - * - * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< - * cdef char *itemp = self.get_item_pointer(index) - * self.assign_item_from_object(itemp, value) + /* "cornac/models/comparer/recom_comparer_sub.pyx":570 + * with nogil, parallel(num_threads=n_threads): + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): # <<<<<<<<<<<<<< + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) */ + __pyx_t_4 = __pyx_v_num_samples; + { + short __pyx_parallel_temp0 = ((short)0xbad0bad0); + short __pyx_parallel_temp1 = ((short)0xbad0bad0); + double __pyx_parallel_temp2 = ((double)__PYX_NAN()); + short __pyx_parallel_temp3 = ((short)0xbad0bad0); + short __pyx_parallel_temp4 = ((short)0xbad0bad0); + short __pyx_parallel_temp5 = ((short)0xbad0bad0); + short __pyx_parallel_temp6 = ((short)0xbad0bad0); + short __pyx_parallel_temp7 = ((short)0xbad0bad0); + double __pyx_parallel_temp8 = ((double)__PYX_NAN()); + short __pyx_parallel_temp9 = ((short)0xbad0bad0); + double __pyx_parallel_temp10 = ((double)__PYX_NAN()); + double __pyx_parallel_temp11 = ((double)__PYX_NAN()); + short __pyx_parallel_temp12 = ((short)0xbad0bad0); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_8 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_8 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_del_sqerror) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_o_idx) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_score) lastprivate(__pyx_v_u_idx) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){ + if (__pyx_parallel_why < 2) + { + __pyx_v__ = (short)(0 + 1 * __pyx_t_7); + /* Initialize private variables to invalid values */ + __pyx_v_a_idx = ((short)0xbad0bad0); + __pyx_v_del_sqerror = ((double)__PYX_NAN()); + __pyx_v_i = ((short)0xbad0bad0); + __pyx_v_i_idx = ((short)0xbad0bad0); + __pyx_v_idx = ((short)0xbad0bad0); + __pyx_v_j = ((short)0xbad0bad0); + __pyx_v_k = ((short)0xbad0bad0); + __pyx_v_o_idx = ((short)0xbad0bad0); + __pyx_v_pred = ((double)__PYX_NAN()); + __pyx_v_score = ((double)__PYX_NAN()); + __pyx_v_u_idx = ((short)0xbad0bad0); - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":572 + * for _ in prange(num_samples, schedule='guided'): + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] + */ + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uia->__pyx_vtab)->generate(__pyx_v_rng_pos_uia, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 572, __pyx_L12_error) + __pyx_v_idx = __pyx_t_3; -/* "View.MemoryView":487 - * self.assign_item_from_object(itemp, value) - * - * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" + /* "cornac/models/comparer/recom_comparer_sub.pyx":573 + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) + * u_idx = X_uids[idx] # <<<<<<<<<<<<<< + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] */ + __pyx_t_9 = __pyx_v_idx; + __pyx_v_u_idx = (*((short *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_9 * __pyx_v_X_uids.strides[0]) ))); -static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp) { - PyObject *__pyx_v_struct = NULL; - PyObject *__pyx_v_bytesitem = 0; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - PyObject *__pyx_t_9 = NULL; - size_t __pyx_t_10; - int __pyx_t_11; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("convert_item_to_object", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":574 + * idx = rng_pos_uia.generate(thread_id) + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] # <<<<<<<<<<<<<< + * a_idx = X_aids[idx] + * score = X[idx] + */ + __pyx_t_9 = __pyx_v_idx; + __pyx_v_i_idx = (*((short *) ( /* dim=0 */ (__pyx_v_X_iids.data + __pyx_t_9 * __pyx_v_X_iids.strides[0]) ))); - /* "View.MemoryView":490 - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" - * import struct # <<<<<<<<<<<<<< - * cdef bytes bytesitem - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":575 + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] # <<<<<<<<<<<<<< + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 490, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_struct = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_t_9 = __pyx_v_idx; + __pyx_v_a_idx = (*((short *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_9 * __pyx_v_X_aids.strides[0]) ))); - /* "View.MemoryView":493 - * cdef bytes bytesitem - * - * bytesitem = itemp[:self.view.itemsize] # <<<<<<<<<<<<<< - * try: - * result = struct.unpack(self.view.format, bytesitem) + /* "cornac/models/comparer/recom_comparer_sub.pyx":576 + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] + * score = X[idx] # <<<<<<<<<<<<<< + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * loss += (pred - score) * (pred - score) */ - __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_itemp + 0, __pyx_v_self->view.itemsize - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 493, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_bytesitem = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; + __pyx_t_9 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_9 * __pyx_v_X.strides[0]) ))); - /* "View.MemoryView":494 + /* "cornac/models/comparer/recom_comparer_sub.pyx":577 + * a_idx = X_aids[idx] + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) * - * bytesitem = itemp[:self.view.itemsize] - * try: # <<<<<<<<<<<<<< - * result = struct.unpack(self.view.format, bytesitem) - * except struct.error: */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_4); - /*try:*/ { + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 577, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; - /* "View.MemoryView":495 - * bytesitem = itemp[:self.view.itemsize] - * try: - * result = struct.unpack(self.view.format, bytesitem) # <<<<<<<<<<<<<< - * except struct.error: - * raise ValueError("Unable to convert item to object") + /* "cornac/models/comparer/recom_comparer_sub.pyx":578 + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< + * + * del_sqerror = 2 * (pred - score) */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_unpack); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 495, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 495, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - __pyx_t_8 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - __pyx_t_8 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_5)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 495, __pyx_L3_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 495, __pyx_L3_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } else - #endif - { - __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 495, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_9); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL; - } - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_6); - __Pyx_INCREF(__pyx_v_bytesitem); - __Pyx_GIVEREF(__pyx_v_bytesitem); - PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_bytesitem); - __pyx_t_6 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 495, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_result = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "View.MemoryView":494 + /* "cornac/models/comparer/recom_comparer_sub.pyx":580 + * loss += (pred - score) * (pred - score) * - * bytesitem = itemp[:self.view.itemsize] - * try: # <<<<<<<<<<<<<< - * result = struct.unpack(self.view.format, bytesitem) - * except struct.error: + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * for i in range(n_user_factors): + * for j in range(n_item_factors): */ - } + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "View.MemoryView":499 - * raise ValueError("Unable to convert item to object") - * else: - * if len(self.view.format) == 1: # <<<<<<<<<<<<<< - * return result[0] - * return result + /* "cornac/models/comparer/recom_comparer_sub.pyx":581 + * + * del_sqerror = 2 * (pred - score) + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): */ - /*else:*/ { - __pyx_t_10 = strlen(__pyx_v_self->view.format); - __pyx_t_11 = ((__pyx_t_10 == 1) != 0); - if (__pyx_t_11) { + __pyx_t_3 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "View.MemoryView":500 - * else: - * if len(self.view.format) == 1: - * return result[0] # <<<<<<<<<<<<<< - * return result - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":582 + * del_sqerror = 2 * (pred - score) + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_result, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 500, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L6_except_return; + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "View.MemoryView":499 - * raise ValueError("Unable to convert item to object") - * else: - * if len(self.view.format) == 1: # <<<<<<<<<<<<<< - * return result[0] - * return result + /* "cornac/models/comparer/recom_comparer_sub.pyx":583 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] */ - } + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* "View.MemoryView":501 - * if len(self.view.format) == 1: - * return result[0] - * return result # <<<<<<<<<<<<<< - * - * cdef assign_item_from_object(self, char *itemp, object value): + /* "cornac/models/comparer/recom_comparer_sub.pyx":584 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_result); - __pyx_r = __pyx_v_result; - goto __pyx_L6_except_return; - } - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_i_idx; + __pyx_t_20 = __pyx_v_j; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_k; + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_20 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":496 - * try: - * result = struct.unpack(self.view.format, bytesitem) - * except struct.error: # <<<<<<<<<<<<<< - * raise ValueError("Unable to convert item to object") - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":585 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] */ - __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_9); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 496, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_6); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_9); - __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_9 = 0; - if (__pyx_t_8) { - __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(2, 496, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_i_idx; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":497 - * result = struct.unpack(self.view.format, bytesitem) - * except struct.error: - * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< - * else: - * if len(self.view.format) == 1: + /* "cornac/models/comparer/recom_comparer_sub.pyx":586 + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] + * */ - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 497, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_Raise(__pyx_t_6, 0, 0, 0); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __PYX_ERR(2, 497, __pyx_L5_except_error) - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_k; + __pyx_t_23 = __pyx_v_i_idx; + __pyx_t_24 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_25 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_20 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":494 + /* "cornac/models/comparer/recom_comparer_sub.pyx":587 + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] # <<<<<<<<<<<<<< * - * bytesitem = itemp[:self.view.itemsize] - * try: # <<<<<<<<<<<<<< - * result = struct.unpack(self.view.format, bytesitem) - * except struct.error: + * # get user aspect opinion element */ - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L1_error; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L0; - } + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))); + } + } + } - /* "View.MemoryView":487 - * self.assign_item_from_object(itemp, value) + /* "cornac/models/comparer/recom_comparer_sub.pyx":590 * - * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" + * # get user aspect opinion element + * idx = rng_pos_uao.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] */ + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uao->__pyx_vtab)->generate(__pyx_v_rng_pos_uao, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 590, __pyx_L12_error) + __pyx_v_idx = __pyx_t_3; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_struct); - __Pyx_XDECREF(__pyx_v_bytesitem); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":591 + * # get user aspect opinion element + * idx = rng_pos_uao.generate(thread_id) + * u_idx = YU_uids[idx] # <<<<<<<<<<<<<< + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] + */ + __pyx_t_25 = __pyx_v_idx; + __pyx_v_u_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YU_uids.data + __pyx_t_25 * __pyx_v_YU_uids.strides[0]) ))); -/* "View.MemoryView":503 - * return result - * - * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" + /* "cornac/models/comparer/recom_comparer_sub.pyx":592 + * idx = rng_pos_uao.generate(thread_id) + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] # <<<<<<<<<<<<<< + * o_idx = YU_oids[idx] + * score = YU[idx] */ + __pyx_t_25 = __pyx_v_idx; + __pyx_v_a_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YU_aids.data + __pyx_t_25 * __pyx_v_YU_aids.strides[0]) ))); -static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { - PyObject *__pyx_v_struct = NULL; - char __pyx_v_c; - PyObject *__pyx_v_bytesvalue = 0; - Py_ssize_t __pyx_v_i; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - Py_ssize_t __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - char *__pyx_t_11; - char *__pyx_t_12; - char *__pyx_t_13; - char *__pyx_t_14; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("assign_item_from_object", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":593 + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] # <<<<<<<<<<<<<< + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + */ + __pyx_t_25 = __pyx_v_idx; + __pyx_v_o_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YU_oids.data + __pyx_t_25 * __pyx_v_YU_oids.strides[0]) ))); - /* "View.MemoryView":506 - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" - * import struct # <<<<<<<<<<<<<< - * cdef char c - * cdef bytes bytesvalue + /* "cornac/models/comparer/recom_comparer_sub.pyx":594 + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] + * score = YU[idx] # <<<<<<<<<<<<<< + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 506, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_struct = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_t_25 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_YU.data + __pyx_t_25 * __pyx_v_YU.strides[0]) ))); - /* "View.MemoryView":511 - * cdef Py_ssize_t i + /* "cornac/models/comparer/recom_comparer_sub.pyx":595 + * o_idx = YU_oids[idx] + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) * - * if isinstance(value, tuple): # <<<<<<<<<<<<<< - * bytesvalue = struct.pack(self.view.format, *value) - * else: */ - __pyx_t_2 = PyTuple_Check(__pyx_v_value); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G2, __pyx_v_n_user_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_U, __pyx_v_A, __pyx_v_O, __pyx_v_u_idx, __pyx_v_a_idx, __pyx_v_o_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 595, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; - /* "View.MemoryView":512 + /* "cornac/models/comparer/recom_comparer_sub.pyx":596 + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< * - * if isinstance(value, tuple): - * bytesvalue = struct.pack(self.view.format, *value) # <<<<<<<<<<<<<< - * else: - * bytesvalue = struct.pack(self.view.format, value) + * del_sqerror = 2 * (pred - score) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 512, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 512, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 512, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 512, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 512, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 512, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(2, 512, __pyx_L1_error) - __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); - __pyx_t_4 = 0; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "View.MemoryView":511 - * cdef Py_ssize_t i + /* "cornac/models/comparer/recom_comparer_sub.pyx":598 + * loss += (pred - score) * (pred - score) * - * if isinstance(value, tuple): # <<<<<<<<<<<<<< - * bytesvalue = struct.pack(self.view.format, *value) - * else: + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * + * for i in range(n_user_factors): */ - goto __pyx_L3; - } + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "View.MemoryView":514 - * bytesvalue = struct.pack(self.view.format, *value) - * else: - * bytesvalue = struct.pack(self.view.format, value) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":600 + * del_sqerror = 2 * (pred - score) * - * for i, c in enumerate(bytesvalue): + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): */ - /*else*/ { - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 514, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 514, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = NULL; - __pyx_t_7 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - __pyx_t_7 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; - __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 514, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; - __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 514, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } else - #endif - { - __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 514, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - if (__pyx_t_5) { - __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL; - } - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1); - __Pyx_INCREF(__pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_value); - __pyx_t_1 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 514, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(2, 514, __pyx_L1_error) - __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); - __pyx_t_4 = 0; - } - __pyx_L3:; + __pyx_t_3 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "View.MemoryView":516 - * bytesvalue = struct.pack(self.view.format, value) - * - * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< - * itemp[i] = c + /* "cornac/models/comparer/recom_comparer_sub.pyx":601 * + * for i in range(n_user_factors): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] */ - __pyx_t_9 = 0; - if (unlikely(__pyx_v_bytesvalue == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable"); - __PYX_ERR(2, 516, __pyx_L1_error) - } - __Pyx_INCREF(__pyx_v_bytesvalue); - __pyx_t_10 = __pyx_v_bytesvalue; - __pyx_t_12 = PyBytes_AS_STRING(__pyx_t_10); - __pyx_t_13 = (__pyx_t_12 + PyBytes_GET_SIZE(__pyx_t_10)); - for (__pyx_t_14 = __pyx_t_12; __pyx_t_14 < __pyx_t_13; __pyx_t_14++) { - __pyx_t_11 = __pyx_t_14; - __pyx_v_c = (__pyx_t_11[0]); + __pyx_t_12 = __pyx_v_n_aspect_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "View.MemoryView":517 - * - * for i, c in enumerate(bytesvalue): - * itemp[i] = c # <<<<<<<<<<<<<< - * - * @cname('getbuffer') + /* "cornac/models/comparer/recom_comparer_sub.pyx":602 + * for i in range(n_user_factors): + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] */ - __pyx_v_i = __pyx_t_9; + __pyx_t_15 = __pyx_v_n_opinion_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* "View.MemoryView":516 - * bytesvalue = struct.pack(self.view.format, value) - * - * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< - * itemp[i] = c - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":603 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + */ + __pyx_t_25 = __pyx_v_u_idx; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_j; + __pyx_t_20 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":604 + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] */ - __pyx_t_9 = (__pyx_t_9 + 1); + __pyx_t_21 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_18 = __pyx_v_a_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_o_idx; + __pyx_t_24 = __pyx_v_k; + __pyx_t_23 = __pyx_v_u_idx; + __pyx_t_22 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_9 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_25 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":517 + /* "cornac/models/comparer/recom_comparer_sub.pyx":605 + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] * - * for i, c in enumerate(bytesvalue): - * itemp[i] = c # <<<<<<<<<<<<<< + */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_18 = __pyx_v_u_idx; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + __pyx_t_22 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_24 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":606 + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< * - * @cname('getbuffer') + * # get item aspect opinion element */ - (__pyx_v_itemp[__pyx_v_i]) = __pyx_v_c; - } - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_21 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_18 = __pyx_v_u_idx; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_a_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_o_idx; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_24 * __pyx_v_A.strides[1]) )))); + } + } + } - /* "View.MemoryView":503 - * return result + /* "cornac/models/comparer/recom_comparer_sub.pyx":609 * - * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" + * # get item aspect opinion element + * idx = rng_pos_iao.generate(thread_id) # <<<<<<<<<<<<<< + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] */ + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_iao->__pyx_vtab)->generate(__pyx_v_rng_pos_iao, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 609, __pyx_L12_error) + __pyx_v_idx = __pyx_t_3; - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("View.MemoryView.memoryview.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_struct); - __Pyx_XDECREF(__pyx_v_bytesvalue); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":610 + * # get item aspect opinion element + * idx = rng_pos_iao.generate(thread_id) + * i_idx = YI_iids[idx] # <<<<<<<<<<<<<< + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YI_iids.data + __pyx_t_24 * __pyx_v_YI_iids.strides[0]) ))); -/* "View.MemoryView":520 - * - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< - * if flags & PyBUF_WRITABLE and self.view.readonly: - * raise ValueError("Cannot create writable memory view from read-only memoryview") + /* "cornac/models/comparer/recom_comparer_sub.pyx":611 + * idx = rng_pos_iao.generate(thread_id) + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] # <<<<<<<<<<<<<< + * o_idx = YI_oids[idx] + * score = YI[idx] */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_a_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YI_aids.data + __pyx_t_24 * __pyx_v_YI_aids.strides[0]) ))); -/* Python wrapper */ -static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ -static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":612 + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] # <<<<<<<<<<<<<< + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_o_idx = (*((short *) ( /* dim=0 */ (__pyx_v_YI_oids.data + __pyx_t_24 * __pyx_v_YI_oids.strides[0]) ))); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":613 + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] + * score = YI[idx] # <<<<<<<<<<<<<< + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_YI.data + __pyx_t_24 * __pyx_v_YI.strides[0]) ))); -static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t *__pyx_t_4; - char *__pyx_t_5; - void *__pyx_t_6; - int __pyx_t_7; - Py_ssize_t __pyx_t_8; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - if (__pyx_v_info == NULL) { - PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); - return -1; - } - __Pyx_RefNannySetupContext("__getbuffer__", 0); - __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(__pyx_v_info->obj); + /* "cornac/models/comparer/recom_comparer_sub.pyx":614 + * o_idx = YI_oids[idx] + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) + * + */ + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G3, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_i_idx, __pyx_v_a_idx, __pyx_v_o_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 614, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; - /* "View.MemoryView":521 - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): - * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< - * raise ValueError("Cannot create writable memory view from read-only memoryview") + /* "cornac/models/comparer/recom_comparer_sub.pyx":615 + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< * + * del_sqerror = 2 * (pred - score) */ - __pyx_t_2 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_2 = (__pyx_v_self->view.readonly != 0); - __pyx_t_1 = __pyx_t_2; - __pyx_L4_bool_binop_done:; - if (unlikely(__pyx_t_1)) { + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "View.MemoryView":522 - * def __getbuffer__(self, Py_buffer *info, int flags): - * if flags & PyBUF_WRITABLE and self.view.readonly: - * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":617 + * loss += (pred - score) * (pred - score) * - * if flags & PyBUF_ND: + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 522, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(2, 522, __pyx_L1_error) + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "View.MemoryView":521 - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): - * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< - * raise ValueError("Cannot create writable memory view from read-only memoryview") + /* "cornac/models/comparer/recom_comparer_sub.pyx":618 * + * del_sqerror = 2 * (pred - score) + * for i in range(n_item_factors): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): */ - } + __pyx_t_3 = __pyx_v_n_item_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":619 + * del_sqerror = 2 * (pred - score) + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + */ + __pyx_t_12 = __pyx_v_n_aspect_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":620 + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + */ + __pyx_t_15 = __pyx_v_n_opinion_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":621 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + */ + __pyx_t_24 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_o_idx; + __pyx_t_20 = __pyx_v_k; + __pyx_t_21 = __pyx_v_i; + __pyx_t_22 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_24 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":622 + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + */ + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_o_idx; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i_idx; + __pyx_t_21 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_23 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":524 - * raise ValueError("Cannot create writable memory view from read-only memoryview") + /* "cornac/models/comparer/recom_comparer_sub.pyx":623 + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] * - * if flags & PyBUF_ND: # <<<<<<<<<<<<<< - * info.shape = self.view.shape - * else: */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_ND) != 0); - if (__pyx_t_1) { + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_o_idx; + __pyx_t_20 = __pyx_v_k; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_23 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":525 + /* "cornac/models/comparer/recom_comparer_sub.pyx":624 + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< * - * if flags & PyBUF_ND: - * info.shape = self.view.shape # <<<<<<<<<<<<<< - * else: - * info.shape = NULL + * for _ in prange(num_bpr_samples, schedule='guided'): */ - __pyx_t_4 = __pyx_v_self->view.shape; - __pyx_v_info->shape = __pyx_t_4; + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_j; + __pyx_t_22 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); + } + } + } + goto __pyx_L33; + __pyx_L12_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L32; + __pyx_L32:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates9) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_a_idx; + __pyx_parallel_temp2 = __pyx_v_del_sqerror; + __pyx_parallel_temp3 = __pyx_v_i; + __pyx_parallel_temp4 = __pyx_v_i_idx; + __pyx_parallel_temp5 = __pyx_v_idx; + __pyx_parallel_temp6 = __pyx_v_j; + __pyx_parallel_temp7 = __pyx_v_k; + __pyx_parallel_temp8 = __pyx_v_loss; + __pyx_parallel_temp9 = __pyx_v_o_idx; + __pyx_parallel_temp10 = __pyx_v_pred; + __pyx_parallel_temp11 = __pyx_v_score; + __pyx_parallel_temp12 = __pyx_v_u_idx; + } + __pyx_L33:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_a_idx = __pyx_parallel_temp1; + __pyx_v_del_sqerror = __pyx_parallel_temp2; + __pyx_v_i = __pyx_parallel_temp3; + __pyx_v_i_idx = __pyx_parallel_temp4; + __pyx_v_idx = __pyx_parallel_temp5; + __pyx_v_j = __pyx_parallel_temp6; + __pyx_v_k = __pyx_parallel_temp7; + __pyx_v_loss = __pyx_parallel_temp8; + __pyx_v_o_idx = __pyx_parallel_temp9; + __pyx_v_pred = __pyx_parallel_temp10; + __pyx_v_score = __pyx_parallel_temp11; + __pyx_v_u_idx = __pyx_parallel_temp12; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } - /* "View.MemoryView":524 - * raise ValueError("Cannot create writable memory view from read-only memoryview") + /* "cornac/models/comparer/recom_comparer_sub.pyx":626 + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] * - * if flags & PyBUF_ND: # <<<<<<<<<<<<<< - * info.shape = self.view.shape - * else: + * for _ in prange(num_bpr_samples, schedule='guided'): # <<<<<<<<<<<<<< + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] */ - goto __pyx_L6; - } + __pyx_t_8 = __pyx_v_num_bpr_samples; + { + short __pyx_parallel_temp0 = ((short)0xbad0bad0); + double __pyx_parallel_temp1 = ((double)__PYX_NAN()); + long __pyx_parallel_temp2 = ((long)0xbad0bad0); + double __pyx_parallel_temp3 = ((double)__PYX_NAN()); + short __pyx_parallel_temp4 = ((short)0xbad0bad0); + short __pyx_parallel_temp5 = ((short)0xbad0bad0); + double __pyx_parallel_temp6 = ((double)__PYX_NAN()); + double __pyx_parallel_temp7 = ((double)__PYX_NAN()); + short __pyx_parallel_temp8 = ((short)0xbad0bad0); + short __pyx_parallel_temp9 = ((short)0xbad0bad0); + short __pyx_parallel_temp10 = ((short)0xbad0bad0); + double __pyx_parallel_temp11 = ((double)__PYX_NAN()); + short __pyx_parallel_temp12 = ((short)0xbad0bad0); + short __pyx_parallel_temp13 = ((short)0xbad0bad0); + double __pyx_parallel_temp14 = ((double)__PYX_NAN()); + long __pyx_parallel_temp15 = ((long)0xbad0bad0); + long __pyx_parallel_temp16 = ((long)0xbad0bad0); + short __pyx_parallel_temp17 = ((short)0xbad0bad0); + double __pyx_parallel_temp18 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_4 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_4 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_del_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_i_ij) lastprivate(__pyx_v_i_score) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_j_score) lastprivate(__pyx_v_jdx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_s) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_4; __pyx_t_7++){ + if (__pyx_parallel_why < 2) + { + __pyx_v__ = (short)(0 + 1 * __pyx_t_7); + /* Initialize private variables to invalid values */ + __pyx_v_del_bpr = ((double)__PYX_NAN()); + __pyx_v_i = ((short)0xbad0bad0); + __pyx_v_i_idx = ((short)0xbad0bad0); + __pyx_v_i_ij = ((double)__PYX_NAN()); + __pyx_v_i_score = ((double)__PYX_NAN()); + __pyx_v_idx = ((short)0xbad0bad0); + __pyx_v_j = ((short)0xbad0bad0); + __pyx_v_j_idx = ((short)0xbad0bad0); + __pyx_v_j_score = ((double)__PYX_NAN()); + __pyx_v_jdx = ((short)0xbad0bad0); + __pyx_v_k = ((short)0xbad0bad0); + __pyx_v_pred = ((double)__PYX_NAN()); + __pyx_v_s = ((long)0xbad0bad0); + __pyx_v_u_idx = ((short)0xbad0bad0); + __pyx_v_z = ((double)__PYX_NAN()); - /* "View.MemoryView":527 - * info.shape = self.view.shape - * else: - * info.shape = NULL # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":627 * - * if flags & PyBUF_STRIDES: + * for _ in prange(num_bpr_samples, schedule='guided'): + * idx = rng_pos.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] */ - /*else*/ { - __pyx_v_info->shape = NULL; - } - __pyx_L6:; + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos->__pyx_vtab)->generate(__pyx_v_rng_pos, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 627, __pyx_L36_error) + __pyx_v_idx = __pyx_t_3; - /* "View.MemoryView":529 - * info.shape = NULL - * - * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< - * info.strides = self.view.strides - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":628 + * for _ in prange(num_bpr_samples, schedule='guided'): + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] # <<<<<<<<<<<<<< + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0); - if (__pyx_t_1) { + __pyx_t_23 = __pyx_v_idx; + __pyx_v_u_idx = (*((short *) ( /* dim=0 */ (__pyx_v_user_ids.data + __pyx_t_23 * __pyx_v_user_ids.strides[0]) ))); - /* "View.MemoryView":530 - * - * if flags & PyBUF_STRIDES: - * info.strides = self.view.strides # <<<<<<<<<<<<<< - * else: - * info.strides = NULL + /* "cornac/models/comparer/recom_comparer_sub.pyx":629 + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] # <<<<<<<<<<<<<< + * jdx = rng_neg.generate(thread_id) + * j_idx = neg_item_ids[jdx] */ - __pyx_t_4 = __pyx_v_self->view.strides; - __pyx_v_info->strides = __pyx_t_4; + __pyx_t_23 = __pyx_v_idx; + __pyx_v_i_idx = (*((short *) ( /* dim=0 */ (__pyx_v_item_ids.data + __pyx_t_23 * __pyx_v_item_ids.strides[0]) ))); - /* "View.MemoryView":529 - * info.shape = NULL + /* "cornac/models/comparer/recom_comparer_sub.pyx":630 + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) # <<<<<<<<<<<<<< + * j_idx = neg_item_ids[jdx] * - * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< - * info.strides = self.view.strides - * else: */ - goto __pyx_L7; - } + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_neg->__pyx_vtab)->generate(__pyx_v_rng_neg, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 630, __pyx_L36_error) + __pyx_v_jdx = __pyx_t_3; - /* "View.MemoryView":532 - * info.strides = self.view.strides - * else: - * info.strides = NULL # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":631 + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) + * j_idx = neg_item_ids[jdx] # <<<<<<<<<<<<<< * - * if flags & PyBUF_INDIRECT: + * s = 1 */ - /*else*/ { - __pyx_v_info->strides = NULL; - } - __pyx_L7:; + __pyx_t_23 = __pyx_v_jdx; + __pyx_v_j_idx = (*((short *) ( /* dim=0 */ (__pyx_v_neg_item_ids.data + __pyx_t_23 * __pyx_v_neg_item_ids.strides[0]) ))); - /* "View.MemoryView":534 - * info.strides = NULL + /* "cornac/models/comparer/recom_comparer_sub.pyx":633 + * j_idx = neg_item_ids[jdx] * - * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< - * info.suboffsets = self.view.suboffsets - * else: + * s = 1 # <<<<<<<<<<<<<< + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_INDIRECT) != 0); - if (__pyx_t_1) { + __pyx_v_s = 1; - /* "View.MemoryView":535 - * - * if flags & PyBUF_INDIRECT: - * info.suboffsets = self.view.suboffsets # <<<<<<<<<<<<<< - * else: - * info.suboffsets = NULL + /* "cornac/models/comparer/recom_comparer_sub.pyx":635 + * s = 1 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] */ - __pyx_t_4 = __pyx_v_self->view.suboffsets; - __pyx_v_info->suboffsets = __pyx_t_4; + __pyx_t_26 = __pyx_fuse_0__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero(__pyx_v_indptr, __pyx_v_item_ids, __pyx_v_u_idx, __pyx_v_j_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 635, __pyx_L36_error) + __pyx_t_27 = (__pyx_t_26 != 0); + if (__pyx_t_27) { - /* "View.MemoryView":534 - * info.strides = NULL - * - * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< - * info.suboffsets = self.view.suboffsets - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":636 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] # <<<<<<<<<<<<<< + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: */ - goto __pyx_L8; - } + __pyx_t_28 = __pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_i_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 636, __pyx_L36_error) + __pyx_v_i_score = (__pyx_v_rating_dict->my_map[__pyx_t_28]); - /* "View.MemoryView":537 - * info.suboffsets = self.view.suboffsets - * else: - * info.suboffsets = NULL # <<<<<<<<<<<<<< - * - * if flags & PyBUF_FORMAT: + /* "cornac/models/comparer/recom_comparer_sub.pyx":637 + * if has_non_zero(indptr, item_ids, u_idx, j_idx): + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] # <<<<<<<<<<<<<< + * if i_score == j_score: + * skipped += 1 */ - /*else*/ { - __pyx_v_info->suboffsets = NULL; - } - __pyx_L8:; + __pyx_t_28 = __pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_j_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 637, __pyx_L36_error) + __pyx_v_j_score = (__pyx_v_rating_dict->my_map[__pyx_t_28]); - /* "View.MemoryView":539 - * info.suboffsets = NULL - * - * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< - * info.format = self.view.format - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":638 + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: # <<<<<<<<<<<<<< + * skipped += 1 + * continue */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); - if (__pyx_t_1) { + __pyx_t_27 = (__pyx_v_i_score == __pyx_v_j_score); + if (__pyx_t_27) { - /* "View.MemoryView":540 - * - * if flags & PyBUF_FORMAT: - * info.format = self.view.format # <<<<<<<<<<<<<< - * else: - * info.format = NULL + /* "cornac/models/comparer/recom_comparer_sub.pyx":639 + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: + * skipped += 1 # <<<<<<<<<<<<<< + * continue + * elif i_score < j_score: */ - __pyx_t_5 = __pyx_v_self->view.format; - __pyx_v_info->format = __pyx_t_5; + __pyx_v_skipped = (__pyx_v_skipped + 1); - /* "View.MemoryView":539 - * info.suboffsets = NULL - * - * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< - * info.format = self.view.format - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":640 + * if i_score == j_score: + * skipped += 1 + * continue # <<<<<<<<<<<<<< + * elif i_score < j_score: + * s = -1 */ - goto __pyx_L9; - } + goto __pyx_L34_continue; - /* "View.MemoryView":542 - * info.format = self.view.format - * else: - * info.format = NULL # <<<<<<<<<<<<<< - * - * info.buf = self.view.buf + /* "cornac/models/comparer/recom_comparer_sub.pyx":638 + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: # <<<<<<<<<<<<<< + * skipped += 1 + * continue */ - /*else*/ { - __pyx_v_info->format = NULL; - } - __pyx_L9:; + } - /* "View.MemoryView":544 - * info.format = NULL + /* "cornac/models/comparer/recom_comparer_sub.pyx":641 + * skipped += 1 + * continue + * elif i_score < j_score: # <<<<<<<<<<<<<< + * s = -1 * - * info.buf = self.view.buf # <<<<<<<<<<<<<< - * info.ndim = self.view.ndim - * info.itemsize = self.view.itemsize */ - __pyx_t_6 = __pyx_v_self->view.buf; - __pyx_v_info->buf = __pyx_t_6; + __pyx_t_27 = (__pyx_v_i_score < __pyx_v_j_score); + if (__pyx_t_27) { - /* "View.MemoryView":545 + /* "cornac/models/comparer/recom_comparer_sub.pyx":642 + * continue + * elif i_score < j_score: + * s = -1 # <<<<<<<<<<<<<< * - * info.buf = self.view.buf - * info.ndim = self.view.ndim # <<<<<<<<<<<<<< - * info.itemsize = self.view.itemsize - * info.len = self.view.len + * pred = ( */ - __pyx_t_7 = __pyx_v_self->view.ndim; - __pyx_v_info->ndim = __pyx_t_7; + __pyx_v_s = -1L; - /* "View.MemoryView":546 - * info.buf = self.view.buf - * info.ndim = self.view.ndim - * info.itemsize = self.view.itemsize # <<<<<<<<<<<<<< - * info.len = self.view.len - * info.readonly = self.view.readonly + /* "cornac/models/comparer/recom_comparer_sub.pyx":641 + * skipped += 1 + * continue + * elif i_score < j_score: # <<<<<<<<<<<<<< + * s = -1 + * */ - __pyx_t_8 = __pyx_v_self->view.itemsize; - __pyx_v_info->itemsize = __pyx_t_8; + } - /* "View.MemoryView":547 - * info.ndim = self.view.ndim - * info.itemsize = self.view.itemsize - * info.len = self.view.len # <<<<<<<<<<<<<< - * info.readonly = self.view.readonly - * info.obj = self + /* "cornac/models/comparer/recom_comparer_sub.pyx":635 + * s = 1 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] */ - __pyx_t_8 = __pyx_v_self->view.len; - __pyx_v_info->len = __pyx_t_8; + } - /* "View.MemoryView":548 - * info.itemsize = self.view.itemsize - * info.len = self.view.len - * info.readonly = self.view.readonly # <<<<<<<<<<<<<< - * info.obj = self + /* "cornac/models/comparer/recom_comparer_sub.pyx":645 * + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) # <<<<<<<<<<<<<< + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s */ - __pyx_t_1 = __pyx_v_self->view.readonly; - __pyx_v_info->readonly = __pyx_t_1; + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_n_aspects); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 645, __pyx_L36_error) - /* "View.MemoryView":549 - * info.len = self.view.len - * info.readonly = self.view.readonly - * info.obj = self # <<<<<<<<<<<<<< - * - * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") + /* "cornac/models/comparer/recom_comparer_sub.pyx":646 + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) # <<<<<<<<<<<<<< + * ) * s + * z = (1.0 / (1.0 + exp(pred))) */ - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); - __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + __pyx_t_29 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_n_aspects); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 646, __pyx_L36_error) - /* "View.MemoryView":520 - * - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< - * if flags & PyBUF_WRITABLE and self.view.readonly: - * raise ValueError("Cannot create writable memory view from read-only memoryview") + /* "cornac/models/comparer/recom_comparer_sub.pyx":647 + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s # <<<<<<<<<<<<<< + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: */ + __pyx_v_pred = ((__pyx_t_5 - __pyx_t_29) * __pyx_v_s); - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - if (__pyx_v_info->obj != NULL) { - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; - } - goto __pyx_L2; - __pyx_L0:; - if (__pyx_v_info->obj == Py_None) { - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; - } - __pyx_L2:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":555 - * - * @property - * def T(self): # <<<<<<<<<<<<<< - * cdef _memoryviewslice result = memoryview_copy(self) - * transpose_memslice(&result.from_slice) + /* "cornac/models/comparer/recom_comparer_sub.pyx":648 + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s + * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< + * if z < .5: + * correct += 1 */ + __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":556 - * @property - * def T(self): - * cdef _memoryviewslice result = memoryview_copy(self) # <<<<<<<<<<<<<< - * transpose_memslice(&result.from_slice) - * return result + /* "cornac/models/comparer/recom_comparer_sub.pyx":649 + * ) * s + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * correct += 1 + * del_bpr = ld_bpr * z * s */ - __pyx_t_1 = __pyx_memoryview_copy_object(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 556, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_memoryviewslice_type))))) __PYX_ERR(2, 556, __pyx_L1_error) - __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_1); - __pyx_t_1 = 0; + __pyx_t_27 = (__pyx_v_z < .5); + if (__pyx_t_27) { - /* "View.MemoryView":557 - * def T(self): - * cdef _memoryviewslice result = memoryview_copy(self) - * transpose_memslice(&result.from_slice) # <<<<<<<<<<<<<< - * return result + /* "cornac/models/comparer/recom_comparer_sub.pyx":650 + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: + * correct += 1 # <<<<<<<<<<<<<< + * del_bpr = ld_bpr * z * s * */ - __pyx_t_2 = __pyx_memslice_transpose((&__pyx_v_result->from_slice)); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(2, 557, __pyx_L1_error) + __pyx_v_correct = (__pyx_v_correct + 1); - /* "View.MemoryView":558 - * cdef _memoryviewslice result = memoryview_copy(self) - * transpose_memslice(&result.from_slice) - * return result # <<<<<<<<<<<<<< - * - * @property + /* "cornac/models/comparer/recom_comparer_sub.pyx":649 + * ) * s + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * correct += 1 + * del_bpr = ld_bpr * z * s */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_result)); - __pyx_r = ((PyObject *)__pyx_v_result); - goto __pyx_L0; + } - /* "View.MemoryView":555 + /* "cornac/models/comparer/recom_comparer_sub.pyx":651 + * if z < .5: + * correct += 1 + * del_bpr = ld_bpr * z * s # <<<<<<<<<<<<<< * - * @property - * def T(self): # <<<<<<<<<<<<<< - * cdef _memoryviewslice result = memoryview_copy(self) - * transpose_memslice(&result.from_slice) + * bpr_loss += log(1 / (1 + exp(-pred))) */ + __pyx_v_del_bpr = ((__pyx_v_ld_bpr * __pyx_v_z) * __pyx_v_s); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview.T.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":561 + /* "cornac/models/comparer/recom_comparer_sub.pyx":653 + * del_bpr = ld_bpr * z * s * - * @property - * def base(self): # <<<<<<<<<<<<<< - * return self.obj + * bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< * + * for i in range(n_user_factors): */ + __pyx_v_bpr_loss = (__pyx_v_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":562 - * @property - * def base(self): - * return self.obj # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":655 + * bpr_loss += log(1 / (1 + exp(-pred))) * - * @property + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->obj); - __pyx_r = __pyx_v_self->obj; - goto __pyx_L0; + __pyx_t_3 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "View.MemoryView":561 - * - * @property - * def base(self): # <<<<<<<<<<<<<< - * return self.obj + /* "cornac/models/comparer/recom_comparer_sub.pyx":656 * + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): */ + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":565 - * - * @property - * def shape(self): # <<<<<<<<<<<<<< - * return tuple([length for length in self.view.shape[:self.view.ndim]]) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":657 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] */ + __pyx_t_23 = __pyx_v_i_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_j_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_v_i_ij = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":658 + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + */ + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":659 + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + */ + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_n_aspects; + __pyx_t_23 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - Py_ssize_t __pyx_v_length; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t *__pyx_t_2; - Py_ssize_t *__pyx_t_3; - Py_ssize_t *__pyx_t_4; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":660 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_n_aspects; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_i_ij) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":566 - * @property - * def shape(self): - * return tuple([length for length in self.view.shape[:self.view.ndim]]) # <<<<<<<<<<<<<< - * - * @property + /* "cornac/models/comparer/recom_comparer_sub.pyx":661 + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 566, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); - for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { - __pyx_t_2 = __pyx_t_4; - __pyx_v_length = (__pyx_t_2[0]); - __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 566, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(2, 566, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 566, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; + __pyx_t_20 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_18 = __pyx_v_n_aspects; + __pyx_t_19 = __pyx_v_k; + __pyx_t_21 = __pyx_v_i_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":565 - * - * @property - * def shape(self): # <<<<<<<<<<<<<< - * return tuple([length for length in self.view.shape[:self.view.ndim]]) + /* "cornac/models/comparer/recom_comparer_sub.pyx":662 + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij * */ + __pyx_t_19 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_n_aspects; + __pyx_t_20 = __pyx_v_k; + __pyx_t_22 = __pyx_v_j_idx; + __pyx_t_21 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_18 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.memoryview.shape.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":569 - * - * @property - * def strides(self): # <<<<<<<<<<<<<< - * if self.view.strides == NULL: + /* "cornac/models/comparer/recom_comparer_sub.pyx":663 + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij # <<<<<<<<<<<<<< * + * for _ in prange(num_pair_samples, schedule='guided'): */ + __pyx_t_20 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_18 = __pyx_v_n_aspects; + __pyx_t_19 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij); + } + } + } + goto __pyx_L48; + __pyx_L34_continue:; + goto __pyx_L48; + __pyx_L36_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L47; + __pyx_L47:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates10) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_bpr_loss; + __pyx_parallel_temp2 = __pyx_v_correct; + __pyx_parallel_temp3 = __pyx_v_del_bpr; + __pyx_parallel_temp4 = __pyx_v_i; + __pyx_parallel_temp5 = __pyx_v_i_idx; + __pyx_parallel_temp6 = __pyx_v_i_ij; + __pyx_parallel_temp7 = __pyx_v_i_score; + __pyx_parallel_temp8 = __pyx_v_idx; + __pyx_parallel_temp9 = __pyx_v_j; + __pyx_parallel_temp10 = __pyx_v_j_idx; + __pyx_parallel_temp11 = __pyx_v_j_score; + __pyx_parallel_temp12 = __pyx_v_jdx; + __pyx_parallel_temp13 = __pyx_v_k; + __pyx_parallel_temp14 = __pyx_v_pred; + __pyx_parallel_temp15 = __pyx_v_s; + __pyx_parallel_temp16 = __pyx_v_skipped; + __pyx_parallel_temp17 = __pyx_v_u_idx; + __pyx_parallel_temp18 = __pyx_v_z; + } + __pyx_L48:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_bpr_loss = __pyx_parallel_temp1; + __pyx_v_correct = __pyx_parallel_temp2; + __pyx_v_del_bpr = __pyx_parallel_temp3; + __pyx_v_i = __pyx_parallel_temp4; + __pyx_v_i_idx = __pyx_parallel_temp5; + __pyx_v_i_ij = __pyx_parallel_temp6; + __pyx_v_i_score = __pyx_parallel_temp7; + __pyx_v_idx = __pyx_parallel_temp8; + __pyx_v_j = __pyx_parallel_temp9; + __pyx_v_j_idx = __pyx_parallel_temp10; + __pyx_v_j_score = __pyx_parallel_temp11; + __pyx_v_jdx = __pyx_parallel_temp12; + __pyx_v_k = __pyx_parallel_temp13; + __pyx_v_pred = __pyx_parallel_temp14; + __pyx_v_s = __pyx_parallel_temp15; + __pyx_v_skipped = __pyx_parallel_temp16; + __pyx_v_u_idx = __pyx_parallel_temp17; + __pyx_v_z = __pyx_parallel_temp18; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - Py_ssize_t __pyx_v_stride; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t *__pyx_t_3; - Py_ssize_t *__pyx_t_4; - Py_ssize_t *__pyx_t_5; - PyObject *__pyx_t_6 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":570 - * @property - * def strides(self): - * if self.view.strides == NULL: # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":665 + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij * - * raise ValueError("Buffer view does not expose strides") + * for _ in prange(num_pair_samples, schedule='guided'): # <<<<<<<<<<<<<< + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] */ - __pyx_t_1 = ((__pyx_v_self->view.strides == NULL) != 0); - if (unlikely(__pyx_t_1)) { + __pyx_t_4 = __pyx_v_num_pair_samples; + { + short __pyx_parallel_temp0 = ((short)0xbad0bad0); + short __pyx_parallel_temp1 = ((short)0xbad0bad0); + double __pyx_parallel_temp2 = ((double)__PYX_NAN()); + double __pyx_parallel_temp3 = ((double)__PYX_NAN()); + long __pyx_parallel_temp4 = ((long)0xbad0bad0); + double __pyx_parallel_temp5 = ((double)__PYX_NAN()); + short __pyx_parallel_temp6 = ((short)0xbad0bad0); + short __pyx_parallel_temp7 = ((short)0xbad0bad0); + short __pyx_parallel_temp8 = ((short)0xbad0bad0); + short __pyx_parallel_temp9 = ((short)0xbad0bad0); + short __pyx_parallel_temp10 = ((short)0xbad0bad0); + short __pyx_parallel_temp11 = ((short)0xbad0bad0); + double __pyx_parallel_temp12 = ((double)__PYX_NAN()); + short __pyx_parallel_temp13 = ((short)0xbad0bad0); + double __pyx_parallel_temp14 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_8 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_8 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_a_ji) lastprivate(__pyx_v_del_aspect_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){ + if (__pyx_parallel_why < 2) + { + __pyx_v__ = (short)(0 + 1 * __pyx_t_7); + /* Initialize private variables to invalid values */ + __pyx_v_a_idx = ((short)0xbad0bad0); + __pyx_v_a_ji = ((double)__PYX_NAN()); + __pyx_v_del_aspect_bpr = ((double)__PYX_NAN()); + __pyx_v_i = ((short)0xbad0bad0); + __pyx_v_i_idx = ((short)0xbad0bad0); + __pyx_v_idx = ((short)0xbad0bad0); + __pyx_v_j = ((short)0xbad0bad0); + __pyx_v_j_idx = ((short)0xbad0bad0); + __pyx_v_k = ((short)0xbad0bad0); + __pyx_v_pred = ((double)__PYX_NAN()); + __pyx_v_u_idx = ((short)0xbad0bad0); + __pyx_v_z = ((double)__PYX_NAN()); - /* "View.MemoryView":572 - * if self.view.strides == NULL: - * - * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":666 * - * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + * for _ in prange(num_pair_samples, schedule='guided'): + * idx = rng_pos_pair.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] */ - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 572, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_Raise(__pyx_t_2, 0, 0, 0); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __PYX_ERR(2, 572, __pyx_L1_error) + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_pair->__pyx_vtab)->generate(__pyx_v_rng_pos_pair, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 666, __pyx_L51_error) + __pyx_v_idx = __pyx_t_3; - /* "View.MemoryView":570 - * @property - * def strides(self): - * if self.view.strides == NULL: # <<<<<<<<<<<<<< - * - * raise ValueError("Buffer view does not expose strides") + /* "cornac/models/comparer/recom_comparer_sub.pyx":667 + * for _ in prange(num_pair_samples, schedule='guided'): + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] # <<<<<<<<<<<<<< + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] */ - } + __pyx_t_23 = __pyx_v_idx; + __pyx_v_u_idx = (*((short *) ( /* dim=0 */ (__pyx_v_p_user_indices.data + __pyx_t_23 * __pyx_v_p_user_indices.strides[0]) ))); - /* "View.MemoryView":574 - * raise ValueError("Buffer view does not expose strides") - * - * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) # <<<<<<<<<<<<<< - * - * @property + /* "cornac/models/comparer/recom_comparer_sub.pyx":668 + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] # <<<<<<<<<<<<<< + * j_idx = later_indices[idx] + * a_idx = aspect_indices[idx] */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 574, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = (__pyx_v_self->view.strides + __pyx_v_self->view.ndim); - for (__pyx_t_5 = __pyx_v_self->view.strides; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { - __pyx_t_3 = __pyx_t_5; - __pyx_v_stride = (__pyx_t_3[0]); - __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_stride); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 574, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(2, 574, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 574, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L0; + __pyx_t_23 = __pyx_v_idx; + __pyx_v_i_idx = (*((short *) ( /* dim=0 */ (__pyx_v_earlier_indices.data + __pyx_t_23 * __pyx_v_earlier_indices.strides[0]) ))); - /* "View.MemoryView":569 - * - * @property - * def strides(self): # <<<<<<<<<<<<<< - * if self.view.strides == NULL: + /* "cornac/models/comparer/recom_comparer_sub.pyx":669 + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] # <<<<<<<<<<<<<< + * a_idx = aspect_indices[idx] * */ + __pyx_t_23 = __pyx_v_idx; + __pyx_v_j_idx = (*((short *) ( /* dim=0 */ (__pyx_v_later_indices.data + __pyx_t_23 * __pyx_v_later_indices.strides[0]) ))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("View.MemoryView.memoryview.strides.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":577 + /* "cornac/models/comparer/recom_comparer_sub.pyx":670 + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] + * a_idx = aspect_indices[idx] # <<<<<<<<<<<<<< * - * @property - * def suboffsets(self): # <<<<<<<<<<<<<< - * if self.view.suboffsets == NULL: - * return (-1,) * self.view.ndim + * pred = ( */ + __pyx_t_23 = __pyx_v_idx; + __pyx_v_a_idx = (*((short *) ( /* dim=0 */ (__pyx_v_aspect_indices.data + __pyx_t_23 * __pyx_v_aspect_indices.strides[0]) ))); -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - Py_ssize_t __pyx_v_suboffset; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t *__pyx_t_4; - Py_ssize_t *__pyx_t_5; - Py_ssize_t *__pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":578 - * @property - * def suboffsets(self): - * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< - * return (-1,) * self.view.ndim + /* "cornac/models/comparer/recom_comparer_sub.pyx":673 * + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) # <<<<<<<<<<<<<< + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * ) */ - __pyx_t_1 = ((__pyx_v_self->view.suboffsets == NULL) != 0); - if (__pyx_t_1) { + __pyx_t_29 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 673, __pyx_L51_error) - /* "View.MemoryView":579 - * def suboffsets(self): - * if self.view.suboffsets == NULL: - * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":674 + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< + * ) * - * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 579, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_Multiply(__pyx_tuple__28, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 579, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 674, __pyx_L51_error) + __pyx_v_pred = (__pyx_t_29 - __pyx_t_5); - /* "View.MemoryView":578 - * @property - * def suboffsets(self): - * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< - * return (-1,) * self.view.ndim + /* "cornac/models/comparer/recom_comparer_sub.pyx":677 + * ) * + * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< + * if z < .5: + * aspect_correct += 1 */ - } + __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); - /* "View.MemoryView":581 - * return (-1,) * self.view.ndim + /* "cornac/models/comparer/recom_comparer_sub.pyx":678 * - * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) # <<<<<<<<<<<<<< + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * aspect_correct += 1 * - * @property */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 581, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = (__pyx_v_self->view.suboffsets + __pyx_v_self->view.ndim); - for (__pyx_t_6 = __pyx_v_self->view.suboffsets; __pyx_t_6 < __pyx_t_5; __pyx_t_6++) { - __pyx_t_4 = __pyx_t_6; - __pyx_v_suboffset = (__pyx_t_4[0]); - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_suboffset); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 581, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_2))) __PYX_ERR(2, 581, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 581, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; + __pyx_t_27 = (__pyx_v_z < .5); + if (__pyx_t_27) { - /* "View.MemoryView":577 + /* "cornac/models/comparer/recom_comparer_sub.pyx":679 + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: + * aspect_correct += 1 # <<<<<<<<<<<<<< * - * @property - * def suboffsets(self): # <<<<<<<<<<<<<< - * if self.view.suboffsets == NULL: - * return (-1,) * self.view.ndim + * del_aspect_bpr = lambda_d * z */ + __pyx_v_aspect_correct = (__pyx_v_aspect_correct + 1); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview.suboffsets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":584 + /* "cornac/models/comparer/recom_comparer_sub.pyx":678 * - * @property - * def ndim(self): # <<<<<<<<<<<<<< - * return self.view.ndim + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * aspect_correct += 1 * */ + } -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":585 - * @property - * def ndim(self): - * return self.view.ndim # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":681 + * aspect_correct += 1 * - * @property + * del_aspect_bpr = lambda_d * z # <<<<<<<<<<<<<< + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 585, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; + __pyx_v_del_aspect_bpr = (__pyx_v_lambda_d * __pyx_v_z); - /* "View.MemoryView":584 - * - * @property - * def ndim(self): # <<<<<<<<<<<<<< - * return self.view.ndim + /* "cornac/models/comparer/recom_comparer_sub.pyx":682 * + * del_aspect_bpr = lambda_d * z + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< + * for i in range(n_user_factors): + * for j in range(n_item_factors): */ + __pyx_v_aspect_bpr_loss = (__pyx_v_aspect_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":683 + * del_aspect_bpr = lambda_d * z + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] + */ + __pyx_t_3 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; -/* "View.MemoryView":588 - * - * @property - * def itemsize(self): # <<<<<<<<<<<<<< - * return self.view.itemsize - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":684 + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): */ + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":685 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + */ + __pyx_t_23 = __pyx_v_j_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_v_a_ji = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":686 + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + */ + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":687 + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + */ + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":589 - * @property - * def itemsize(self): - * return self.view.itemsize # <<<<<<<<<<<<<< - * - * @property + /* "cornac/models/comparer/recom_comparer_sub.pyx":688 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_20 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_a_ji) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":689 + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 589, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_20 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_k; + __pyx_t_21 = __pyx_v_j_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_20 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":588 - * - * @property - * def itemsize(self): # <<<<<<<<<<<<<< - * return self.view.itemsize + /* "cornac/models/comparer/recom_comparer_sub.pyx":690 + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji * */ + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i_idx; + __pyx_t_21 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_20 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview.itemsize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":592 - * - * @property - * def nbytes(self): # <<<<<<<<<<<<<< - * return self.size * self.view.itemsize + /* "cornac/models/comparer/recom_comparer_sub.pyx":691 + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji # <<<<<<<<<<<<<< * + * # update params with AdaGrad */ - -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_20 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji); + } + } + } + goto __pyx_L61; + __pyx_L51_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L60; + __pyx_L60:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates11) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_a_idx; + __pyx_parallel_temp2 = __pyx_v_a_ji; + __pyx_parallel_temp3 = __pyx_v_aspect_bpr_loss; + __pyx_parallel_temp4 = __pyx_v_aspect_correct; + __pyx_parallel_temp5 = __pyx_v_del_aspect_bpr; + __pyx_parallel_temp6 = __pyx_v_i; + __pyx_parallel_temp7 = __pyx_v_i_idx; + __pyx_parallel_temp8 = __pyx_v_idx; + __pyx_parallel_temp9 = __pyx_v_j; + __pyx_parallel_temp10 = __pyx_v_j_idx; + __pyx_parallel_temp11 = __pyx_v_k; + __pyx_parallel_temp12 = __pyx_v_pred; + __pyx_parallel_temp13 = __pyx_v_u_idx; + __pyx_parallel_temp14 = __pyx_v_z; + } + __pyx_L61:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_a_idx = __pyx_parallel_temp1; + __pyx_v_a_ji = __pyx_parallel_temp2; + __pyx_v_aspect_bpr_loss = __pyx_parallel_temp3; + __pyx_v_aspect_correct = __pyx_parallel_temp4; + __pyx_v_del_aspect_bpr = __pyx_parallel_temp5; + __pyx_v_i = __pyx_parallel_temp6; + __pyx_v_i_idx = __pyx_parallel_temp7; + __pyx_v_idx = __pyx_parallel_temp8; + __pyx_v_j = __pyx_parallel_temp9; + __pyx_v_j_idx = __pyx_parallel_temp10; + __pyx_v_k = __pyx_parallel_temp11; + __pyx_v_pred = __pyx_parallel_temp12; + __pyx_v_u_idx = __pyx_parallel_temp13; + __pyx_v_z = __pyx_parallel_temp14; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } + goto __pyx_L63; + __pyx_L8_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L63; + __pyx_L63:; + #ifdef _OPENMP + Py_END_ALLOW_THREADS + #else +{ +#ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #endif /* _OPENMP */ + /* Clean up any temporaries */ + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + #ifndef _OPENMP } +#endif /* _OPENMP */ + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L4_error; + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif + } -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":593 - * @property - * def nbytes(self): - * return self.size * self.view.itemsize # <<<<<<<<<<<<<< - * - * @property + /* "cornac/models/comparer/recom_comparer_sub.pyx":568 + * del_a_reg.fill(0) + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 593, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 593, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 593, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L5; + } + __pyx_L4_error: { + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L1_error; + } + __pyx_L5:; + } + } - /* "View.MemoryView":592 - * - * @property - * def nbytes(self): # <<<<<<<<<<<<<< - * return self.size * self.view.itemsize + /* "cornac/models/comparer/recom_comparer_sub.pyx":694 * + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): */ + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_27, __pyx_t_3, __pyx_t_30, __pyx_t_9) num_threads(__pyx_v_n_threads) + #endif /* _OPENMP */ + { - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":596 - * - * @property - * def size(self): # <<<<<<<<<<<<<< - * if self._size is None: - * result = 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":695 + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): + * for i in prange(n_user_factors, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_users): + * if del_u[j, i] != 0: */ + __pyx_t_3 = __pyx_v_n_user_factors; + { + __pyx_t_12 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_12 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_12; __pyx_t_10++){ + { + __pyx_v_i = (short)(0 + 1 * __pyx_t_10); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((short)0xbad0bad0); + __pyx_v_k = ((short)0xbad0bad0); -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":696 + * with nogil, parallel(num_threads=n_threads): + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): # <<<<<<<<<<<<<< + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + */ + __pyx_t_13 = __pyx_v_n_users; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { + __pyx_v_j = __pyx_t_11; - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":697 + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): + * if del_u[j, i] != 0: # <<<<<<<<<<<<<< + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + */ + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_length = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - Py_ssize_t *__pyx_t_3; - Py_ssize_t *__pyx_t_4; - Py_ssize_t *__pyx_t_5; - PyObject *__pyx_t_6 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":698 + * for j in range(n_users): + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] # <<<<<<<<<<<<<< + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + */ + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_u_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) ))))); - /* "View.MemoryView":597 - * @property - * def size(self): - * if self._size is None: # <<<<<<<<<<<<<< - * result = 1 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":697 + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): + * if del_u[j, i] != 0: # <<<<<<<<<<<<<< + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] */ - __pyx_t_1 = (__pyx_v_self->_size == Py_None); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + } - /* "View.MemoryView":598 - * def size(self): - * if self._size is None: - * result = 1 # <<<<<<<<<<<<<< - * - * for length in self.view.shape[:self.view.ndim]: + /* "cornac/models/comparer/recom_comparer_sub.pyx":699 + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] # <<<<<<<<<<<<<< + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: */ - __Pyx_INCREF(__pyx_int_1); - __pyx_v_result = __pyx_int_1; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_19 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_U.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)))); - /* "View.MemoryView":600 - * result = 1 - * - * for length in self.view.shape[:self.view.ndim]: # <<<<<<<<<<<<<< - * result *= length - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":700 + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] # <<<<<<<<<<<<<< + * if U[j, i] < 0: + * U[j, i] = 0 */ - __pyx_t_4 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); - for (__pyx_t_5 = __pyx_v_self->view.shape; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { - __pyx_t_3 = __pyx_t_5; - __pyx_t_6 = PyInt_FromSsize_t((__pyx_t_3[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 600, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_6); - __pyx_t_6 = 0; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_24 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_U.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[1].strides))); - /* "View.MemoryView":601 - * - * for length in self.view.shape[:self.view.ndim]: - * result *= length # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":701 + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: # <<<<<<<<<<<<<< + * U[j, i] = 0 * - * self._size = result */ - __pyx_t_6 = PyNumber_InPlaceMultiply(__pyx_v_result, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 601, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_6); - __pyx_t_6 = 0; - } + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_27 = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":603 - * result *= length - * - * self._size = result # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":702 + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: + * U[j, i] = 0 # <<<<<<<<<<<<<< * - * return self._size + * for j in range(n_item_factors): */ - __Pyx_INCREF(__pyx_v_result); - __Pyx_GIVEREF(__pyx_v_result); - __Pyx_GOTREF(__pyx_v_self->_size); - __Pyx_DECREF(__pyx_v_self->_size); - __pyx_v_self->_size = __pyx_v_result; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )) = 0.0; - /* "View.MemoryView":597 - * @property - * def size(self): - * if self._size is None: # <<<<<<<<<<<<<< - * result = 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":701 + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: # <<<<<<<<<<<<<< + * U[j, i] = 0 * */ - } + } + } - /* "View.MemoryView":605 - * self._size = result - * - * return self._size # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":704 + * U[j, i] = 0 * - * def __len__(self): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->_size); - __pyx_r = __pyx_v_self->_size; - goto __pyx_L0; + __pyx_t_13 = __pyx_v_n_item_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { + __pyx_v_j = __pyx_t_11; - /* "View.MemoryView":596 + /* "cornac/models/comparer/recom_comparer_sub.pyx":705 * - * @property - * def size(self): # <<<<<<<<<<<<<< - * if self._size is None: - * result = 1 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] */ + __pyx_t_16 = __pyx_v_n_aspect_factors; + __pyx_t_30 = __pyx_t_16; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_30; __pyx_t_14+=1) { + __pyx_v_k = __pyx_t_14; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("View.MemoryView.memoryview.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_length); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":706 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + */ + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { -/* "View.MemoryView":607 - * return self._size - * - * def __len__(self): # <<<<<<<<<<<<<< - * if self.view.ndim >= 1: - * return self.view.shape[0] + /* "cornac/models/comparer/recom_comparer_sub.pyx":707 + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) ))))); -/* Python wrapper */ -static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self); /*proto*/ -static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) { - Py_ssize_t __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":706 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + */ + } - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":708 + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: + */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_22 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G1.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)))); -static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self) { - Py_ssize_t __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("__len__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":709 + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< + * if G1[i, j, k] < 0: + * G1[i, j, k] = 0 + */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_22 * __pyx_v_G1.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_23 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_25 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_9 * __pyx_v_sgrad_G1.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides))); - /* "View.MemoryView":608 - * - * def __len__(self): - * if self.view.ndim >= 1: # <<<<<<<<<<<<<< - * return self.view.shape[0] + /* "cornac/models/comparer/recom_comparer_sub.pyx":710 + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< + * G1[i, j, k] = 0 * */ - __pyx_t_1 = ((__pyx_v_self->view.ndim >= 1) != 0); - if (__pyx_t_1) { + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = ((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_24 * __pyx_v_G1.strides[2]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":609 - * def __len__(self): - * if self.view.ndim >= 1: - * return self.view.shape[0] # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":711 + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: + * G1[i, j, k] = 0 # <<<<<<<<<<<<<< * - * return 0 + * for j in range(n_aspect_factors): */ - __pyx_r = (__pyx_v_self->view.shape[0]); - goto __pyx_L0; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )) = 0.0; - /* "View.MemoryView":608 - * - * def __len__(self): - * if self.view.ndim >= 1: # <<<<<<<<<<<<<< - * return self.view.shape[0] + /* "cornac/models/comparer/recom_comparer_sub.pyx":710 + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< + * G1[i, j, k] = 0 * */ - } + } + } + } - /* "View.MemoryView":611 - * return self.view.shape[0] - * - * return 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":713 + * G1[i, j, k] = 0 * - * def __repr__(self): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: */ - __pyx_r = 0; - goto __pyx_L0; + __pyx_t_13 = __pyx_v_n_aspect_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { + __pyx_v_j = __pyx_t_11; - /* "View.MemoryView":607 - * return self._size + /* "cornac/models/comparer/recom_comparer_sub.pyx":714 * - * def __len__(self): # <<<<<<<<<<<<<< - * if self.view.ndim >= 1: - * return self.view.shape[0] + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] */ + __pyx_t_16 = __pyx_v_n_opinion_factors; + __pyx_t_30 = __pyx_t_16; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_30; __pyx_t_14+=1) { + __pyx_v_k = __pyx_t_14; - /* function exit code */ - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":715 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { -/* "View.MemoryView":613 - * return 0 - * - * def __repr__(self): # <<<<<<<<<<<<<< - * return "" % (self.base.__class__.__name__, - * id(self)) + /* "cornac/models/comparer/recom_comparer_sub.pyx":716 + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) ))))); -/* Python wrapper */ -static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":715 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + */ + } - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":717 + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: + */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_20 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_22 * __pyx_v_sgrad_G2.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)))); -static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__repr__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":718 + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< + * if G2[i, j, k] < 0: + * G2[i, j, k] = 0 + */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_22 * __pyx_v_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_G2.strides[1]) ) + __pyx_t_20 * __pyx_v_G2.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_24 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G2.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides))); - /* "View.MemoryView":614 - * - * def __repr__(self): - * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< - * id(self)) + /* "cornac/models/comparer/recom_comparer_sub.pyx":719 + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< + * G2[i, j, k] = 0 * */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 614, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 614, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 614, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_27 = ((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_23 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":615 - * def __repr__(self): - * return "" % (self.base.__class__.__name__, - * id(self)) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":720 + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: + * G2[i, j, k] = 0 # <<<<<<<<<<<<<< * - * def __str__(self): + * for i in prange(n_item_factors, schedule='guided'): */ - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 615, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) )) = 0.0; - /* "View.MemoryView":614 + /* "cornac/models/comparer/recom_comparer_sub.pyx":719 + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< + * G2[i, j, k] = 0 * - * def __repr__(self): - * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< - * id(self)) + */ + } + } + } + } + } + } + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":722 + * G2[i, j, k] = 0 * + * for i in prange(n_item_factors, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_items): + * if del_i[j, i] != 0: */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 614, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 614, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; + __pyx_t_12 = __pyx_v_n_item_factors; + { + __pyx_t_3 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_3 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_3; __pyx_t_10++){ + { + __pyx_v_i = (short)(0 + 1 * __pyx_t_10); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((short)0xbad0bad0); + __pyx_v_k = ((short)0xbad0bad0); - /* "View.MemoryView":613 - * return 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":723 * - * def __repr__(self): # <<<<<<<<<<<<<< - * return "" % (self.base.__class__.__name__, - * id(self)) + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): # <<<<<<<<<<<<<< + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] */ + __pyx_t_13 = __pyx_v_n_items; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { + __pyx_v_j = __pyx_t_11; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":724 + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): + * if del_i[j, i] != 0: # <<<<<<<<<<<<<< + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + */ + __pyx_t_23 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { -/* "View.MemoryView":617 - * id(self)) - * - * def __str__(self): # <<<<<<<<<<<<<< - * return "" % (self.base.__class__.__name__,) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":725 + * for j in range(n_items): + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] # <<<<<<<<<<<<<< + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] */ + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) ))))); -/* Python wrapper */ -static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":724 + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): + * if del_i[j, i] != 0: # <<<<<<<<<<<<<< + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + */ + } - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":726 + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] # <<<<<<<<<<<<<< + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: + */ + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_24 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_I.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)))); -static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__str__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":727 + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] # <<<<<<<<<<<<<< + * if I[j, i] < 0: + * I[j, i] = 0 + */ + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_25 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_I.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[1].strides))); - /* "View.MemoryView":618 - * - * def __str__(self): - * return "" % (self.base.__class__.__name__,) # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":728 + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: # <<<<<<<<<<<<<< + * I[j, i] = 0 * */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 618, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 618, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 618, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 618, __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_PyString_Format(__pyx_kp_s_MemoryView_of_r_object, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 618, __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; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_27 = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_18 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":617 - * id(self)) - * - * def __str__(self): # <<<<<<<<<<<<<< - * return "" % (self.base.__class__.__name__,) + /* "cornac/models/comparer/recom_comparer_sub.pyx":729 + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: + * I[j, i] = 0 # <<<<<<<<<<<<<< * + * for j in range(n_aspect_factors): */ + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )) = 0.0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":728 + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: # <<<<<<<<<<<<<< + * I[j, i] = 0 + * + */ + } + } -/* "View.MemoryView":621 + /* "cornac/models/comparer/recom_comparer_sub.pyx":731 + * I[j, i] = 0 * + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: + */ + __pyx_t_13 = __pyx_v_n_aspect_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { + __pyx_v_j = __pyx_t_11; + + /* "cornac/models/comparer/recom_comparer_sub.pyx":732 * - * def is_c_contig(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] */ + __pyx_t_16 = __pyx_v_n_opinion_factors; + __pyx_t_30 = __pyx_t_16; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_30; __pyx_t_14+=1) { + __pyx_v_k = __pyx_t_14; -/* Python wrapper */ -static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("is_c_contig (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":733 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":734 + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) ))))); -static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self) { - __Pyx_memviewslice *__pyx_v_mslice; - __Pyx_memviewslice __pyx_v_tmp; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_memviewslice *__pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("is_c_contig", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":733 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + */ + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":735 + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: + */ + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_22 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G3.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)))); - /* "View.MemoryView":624 - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp - * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< - * return slice_is_contig(mslice[0], 'C', self.view.ndim) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":736 + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< + * if G3[i, j, k] < 0: + * G3[i, j, k] = 0 */ - __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(2, 624, __pyx_L1_error) - __pyx_v_mslice = __pyx_t_1; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_G3.strides[1]) ) + __pyx_t_22 * __pyx_v_G3.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_23 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G3.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides))); - /* "View.MemoryView":625 - * cdef __Pyx_memviewslice tmp - * mslice = get_slice_from_memview(self, &tmp) - * return slice_is_contig(mslice[0], 'C', self.view.ndim) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":737 + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< + * G3[i, j, k] = 0 * - * def is_f_contig(self): */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 625, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_27 = ((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_19 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":621 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":738 + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: + * G3[i, j, k] = 0 # <<<<<<<<<<<<<< * - * def is_c_contig(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp + * for i in prange(n_aspects + 1, schedule='guided'): */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) )) = 0.0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":627 - * return slice_is_contig(mslice[0], 'C', self.view.ndim) + /* "cornac/models/comparer/recom_comparer_sub.pyx":737 + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< + * G3[i, j, k] = 0 * - * def is_f_contig(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp */ + } + } + } + } + } + } + } -/* Python wrapper */ -static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("is_f_contig (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self) { - __Pyx_memviewslice *__pyx_v_mslice; - __Pyx_memviewslice __pyx_v_tmp; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_memviewslice *__pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("is_f_contig", 0); - - /* "View.MemoryView":630 - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp - * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< - * return slice_is_contig(mslice[0], 'F', self.view.ndim) + /* "cornac/models/comparer/recom_comparer_sub.pyx":740 + * G3[i, j, k] = 0 * + * for i in prange(n_aspects + 1, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: */ - __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(2, 630, __pyx_L1_error) - __pyx_v_mslice = __pyx_t_1; + __pyx_t_3 = (__pyx_v_n_aspects + 1); + { + __pyx_t_12 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_12 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_12; __pyx_t_10++){ + { + __pyx_v_i = (short)(0 + 1 * __pyx_t_10); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((short)0xbad0bad0); - /* "View.MemoryView":631 - * cdef __Pyx_memviewslice tmp - * mslice = get_slice_from_memview(self, &tmp) - * return slice_is_contig(mslice[0], 'F', self.view.ndim) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":741 * - * def copy(self): + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 631, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; + __pyx_t_13 = __pyx_v_n_aspect_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { + __pyx_v_j = __pyx_t_11; - /* "View.MemoryView":627 - * return slice_is_contig(mslice[0], 'C', self.view.ndim) - * - * def is_f_contig(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp + /* "cornac/models/comparer/recom_comparer_sub.pyx":742 + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: # <<<<<<<<<<<<<< + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] */ + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":633 - * return slice_is_contig(mslice[0], 'F', self.view.ndim) - * - * def copy(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice mslice - * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + /* "cornac/models/comparer/recom_comparer_sub.pyx":743 + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] # <<<<<<<<<<<<<< + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) ))))); -/* Python wrapper */ -static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("copy (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(((struct __pyx_memoryview_obj *)__pyx_v_self)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":742 + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: # <<<<<<<<<<<<<< + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + */ + } - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":744 + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] # <<<<<<<<<<<<<< + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: + */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_23 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_A.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)))); -static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self) { - __Pyx_memviewslice __pyx_v_mslice; - int __pyx_v_flags; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_memviewslice __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("copy", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":745 + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] # <<<<<<<<<<<<<< + * if A[i, j] < 0: + * A[i, j] = 0 + */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_24 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_A.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[1].strides))); - /* "View.MemoryView":635 - * def copy(self): - * cdef __Pyx_memviewslice mslice - * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":746 + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: # <<<<<<<<<<<<<< + * A[i, j] = 0 * - * slice_copy(self, &mslice) */ - __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_F_CONTIGUOUS)); + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":637 - * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + /* "cornac/models/comparer/recom_comparer_sub.pyx":747 + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: + * A[i, j] = 0 # <<<<<<<<<<<<<< * - * slice_copy(self, &mslice) # <<<<<<<<<<<<<< - * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, - * self.view.itemsize, + * for i in prange(n_opinions, schedule='guided'): */ - __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_mslice)); + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )) = 0.0; - /* "View.MemoryView":638 + /* "cornac/models/comparer/recom_comparer_sub.pyx":746 + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: # <<<<<<<<<<<<<< + * A[i, j] = 0 * - * slice_copy(self, &mslice) - * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, # <<<<<<<<<<<<<< - * self.view.itemsize, - * flags|PyBUF_C_CONTIGUOUS, */ - __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_mslice), ((char *)"c"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_C_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 638, __pyx_L1_error) - __pyx_v_mslice = __pyx_t_1; + } + } + } + } + } + } - /* "View.MemoryView":643 - * self.dtype_is_object) - * - * return memoryview_copy_from_slice(self, &mslice) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":749 + * A[i, j] = 0 * - * def copy_fortran(self): + * for i in prange(n_opinions, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_mslice)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 643, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; + __pyx_t_12 = __pyx_v_n_opinions; + { + __pyx_t_3 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_3 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_3; __pyx_t_10++){ + { + __pyx_v_i = (short)(0 + 1 * __pyx_t_10); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((short)0xbad0bad0); - /* "View.MemoryView":633 - * return slice_is_contig(mslice[0], 'F', self.view.ndim) + /* "cornac/models/comparer/recom_comparer_sub.pyx":750 * - * def copy(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice mslice - * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] */ + __pyx_t_13 = __pyx_v_n_opinion_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_15; __pyx_t_11+=1) { + __pyx_v_j = __pyx_t_11; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":751 + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: # <<<<<<<<<<<<<< + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { -/* "View.MemoryView":645 - * return memoryview_copy_from_slice(self, &mslice) - * - * def copy_fortran(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice src, dst - * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + /* "cornac/models/comparer/recom_comparer_sub.pyx":752 + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] # <<<<<<<<<<<<<< + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_o_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) ))))); -/* Python wrapper */ -static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("copy_fortran (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(((struct __pyx_memoryview_obj *)__pyx_v_self)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":751 + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: # <<<<<<<<<<<<<< + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + */ + } - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":753 + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] # <<<<<<<<<<<<<< + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: + */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_9 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_O.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)))); -static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self) { - __Pyx_memviewslice __pyx_v_src; - __Pyx_memviewslice __pyx_v_dst; - int __pyx_v_flags; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_memviewslice __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("copy_fortran", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":754 + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] # <<<<<<<<<<<<<< + * if O[i, j] < 0: + * O[i, j] = 0 + */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_23 * __pyx_v_O.strides[0]) ) + __pyx_t_9 * __pyx_v_O.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_25 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_O.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[1].strides))); - /* "View.MemoryView":647 - * def copy_fortran(self): - * cdef __Pyx_memviewslice src, dst - * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":755 + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: # <<<<<<<<<<<<<< + * O[i, j] = 0 * - * slice_copy(self, &src) */ - __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_C_CONTIGUOUS)); + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_27 = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_19 * __pyx_v_O.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":649 - * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + /* "cornac/models/comparer/recom_comparer_sub.pyx":756 + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: + * O[i, j] = 0 # <<<<<<<<<<<<<< * - * slice_copy(self, &src) # <<<<<<<<<<<<<< - * dst = slice_copy_contig(&src, "fortran", self.view.ndim, - * self.view.itemsize, + * return correct, skipped, loss, bpr_loss */ - __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_src)); + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )) = 0.0; - /* "View.MemoryView":650 + /* "cornac/models/comparer/recom_comparer_sub.pyx":755 + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: # <<<<<<<<<<<<<< + * O[i, j] = 0 * - * slice_copy(self, &src) - * dst = slice_copy_contig(&src, "fortran", self.view.ndim, # <<<<<<<<<<<<<< - * self.view.itemsize, - * flags|PyBUF_F_CONTIGUOUS, */ - __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_src), ((char *)"fortran"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_F_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 650, __pyx_L1_error) - __pyx_v_dst = __pyx_t_1; + } + } + } + } + } + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif + } - /* "View.MemoryView":655 - * self.dtype_is_object) + /* "cornac/models/comparer/recom_comparer_sub.pyx":694 * - * return memoryview_copy_from_slice(self, &dst) # <<<<<<<<<<<<<< + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): + */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L66; + } + __pyx_L66:; + } + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":758 + * O[i, j] = 0 * + * return correct, skipped, loss, bpr_loss # <<<<<<<<<<<<<< * + * def rank(self, user_idx, item_indices=None): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_dst)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 655, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_correct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v_skipped); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_31 = PyFloat_FromDouble(__pyx_v_bpr_loss); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_31); + __pyx_t_32 = PyTuple_New(4); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_32); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_32, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_32, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_32, 2, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_31); + PyTuple_SET_ITEM(__pyx_t_32, 3, __pyx_t_31); + __pyx_t_1 = 0; __pyx_t_2 = 0; + __pyx_t_6 = 0; + __pyx_t_31 = 0; + __pyx_r = __pyx_t_32; + __pyx_t_32 = 0; goto __pyx_L0; - /* "View.MemoryView":645 - * return memoryview_copy_from_slice(self, &mslice) + /* "cornac/models/comparer/recom_comparer_sub.pyx":482 + * return self * - * def copy_fortran(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice src, dst - * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + * @cython.cdivision(True) # <<<<<<<<<<<<<< + * @cython.boundscheck(False) + * @cython.wraparound(False) */ /* function exit code */ __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_31); + __Pyx_XDECREF(__pyx_t_32); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; + goto __pyx_L2; __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); + __pyx_L2:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - */ - /* Python wrapper */ -static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf___pyx_memoryview___reduce_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; +static PyObject *__pyx_fuse_1_1__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_23_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_fuse_1_1__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_23_fit_mter = {"__pyx_fuse_1_1_fit_mter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1_1__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_23_fit_mter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter}; +static PyObject *__pyx_fuse_1_1__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_23_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg = 0; + int __pyx_v_n_threads; + __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; + struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict = 0; + __Pyx_memviewslice __pyx_v_user_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_neg_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_indptr = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_p_user_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_earlier_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_later_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_aspect_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_O = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_U = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_I = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_O = { 0, 0, { 0 }, { 0 }, { 0 } }; + PyArrayObject *__pyx_v_del_g1 = 0; + PyArrayObject *__pyx_v_del_g2 = 0; + PyArrayObject *__pyx_v_del_g3 = 0; + PyArrayObject *__pyx_v_del_u = 0; + PyArrayObject *__pyx_v_del_i = 0; + PyArrayObject *__pyx_v_del_a = 0; + PyArrayObject *__pyx_v_del_o = 0; + PyArrayObject *__pyx_v_del_g1_reg = 0; + PyArrayObject *__pyx_v_del_g2_reg = 0; + PyArrayObject *__pyx_v_del_g3_reg = 0; + PyArrayObject *__pyx_v_del_u_reg = 0; + PyArrayObject *__pyx_v_del_i_reg = 0; + PyArrayObject *__pyx_v_del_a_reg = 0; + PyArrayObject *__pyx_v_del_o_reg = 0; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); - - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(2, 2, __pyx_L1_error) - - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - -/* Python wrapper */ -static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf___pyx_memoryview_2__setstate_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); - - /* function exit code */ + __Pyx_RefNannySetupContext("_fit_mter (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_rng_pos_uia,&__pyx_n_s_rng_pos_uao,&__pyx_n_s_rng_pos_iao,&__pyx_n_s_rng_pos_pair,&__pyx_n_s_rng_pos,&__pyx_n_s_rng_neg,&__pyx_n_s_n_threads,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_iids,&__pyx_n_s_X_aids,&__pyx_n_s_YU,&__pyx_n_s_YU_uids,&__pyx_n_s_YU_aids,&__pyx_n_s_YU_oids,&__pyx_n_s_YI,&__pyx_n_s_YI_iids,&__pyx_n_s_YI_aids,&__pyx_n_s_YI_oids,&__pyx_n_s_rating_dict,&__pyx_n_s_user_ids,&__pyx_n_s_item_ids,&__pyx_n_s_neg_item_ids,&__pyx_n_s_indptr,&__pyx_n_s_p_user_indices,&__pyx_n_s_earlier_indices,&__pyx_n_s_later_indices,&__pyx_n_s_aspect_indices,&__pyx_n_s_pair_counts,&__pyx_n_s_G1,&__pyx_n_s_G2,&__pyx_n_s_G3,&__pyx_n_s_U,&__pyx_n_s_I,&__pyx_n_s_A,&__pyx_n_s_O,&__pyx_n_s_sgrad_G1,&__pyx_n_s_sgrad_G2,&__pyx_n_s_sgrad_G3,&__pyx_n_s_sgrad_U,&__pyx_n_s_sgrad_I,&__pyx_n_s_sgrad_A,&__pyx_n_s_sgrad_O,&__pyx_n_s_del_g1,&__pyx_n_s_del_g2,&__pyx_n_s_del_g3,&__pyx_n_s_del_u,&__pyx_n_s_del_i,&__pyx_n_s_del_a,&__pyx_n_s_del_o,&__pyx_n_s_del_g1_reg,&__pyx_n_s_del_g2_reg,&__pyx_n_s_del_g3_reg,&__pyx_n_s_del_u_reg,&__pyx_n_s_del_i_reg,&__pyx_n_s_del_a_reg,&__pyx_n_s_del_o_reg,0}; + PyObject* values[58] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 58: values[57] = __Pyx_Arg_VARARGS(__pyx_args, 57); + CYTHON_FALLTHROUGH; + case 57: values[56] = __Pyx_Arg_VARARGS(__pyx_args, 56); + CYTHON_FALLTHROUGH; + case 56: values[55] = __Pyx_Arg_VARARGS(__pyx_args, 55); + CYTHON_FALLTHROUGH; + case 55: values[54] = __Pyx_Arg_VARARGS(__pyx_args, 54); + CYTHON_FALLTHROUGH; + case 54: values[53] = __Pyx_Arg_VARARGS(__pyx_args, 53); + CYTHON_FALLTHROUGH; + case 53: values[52] = __Pyx_Arg_VARARGS(__pyx_args, 52); + CYTHON_FALLTHROUGH; + case 52: values[51] = __Pyx_Arg_VARARGS(__pyx_args, 51); + CYTHON_FALLTHROUGH; + case 51: values[50] = __Pyx_Arg_VARARGS(__pyx_args, 50); + CYTHON_FALLTHROUGH; + case 50: values[49] = __Pyx_Arg_VARARGS(__pyx_args, 49); + CYTHON_FALLTHROUGH; + case 49: values[48] = __Pyx_Arg_VARARGS(__pyx_args, 48); + CYTHON_FALLTHROUGH; + case 48: values[47] = __Pyx_Arg_VARARGS(__pyx_args, 47); + CYTHON_FALLTHROUGH; + case 47: values[46] = __Pyx_Arg_VARARGS(__pyx_args, 46); + CYTHON_FALLTHROUGH; + case 46: values[45] = __Pyx_Arg_VARARGS(__pyx_args, 45); + CYTHON_FALLTHROUGH; + case 45: values[44] = __Pyx_Arg_VARARGS(__pyx_args, 44); + CYTHON_FALLTHROUGH; + case 44: values[43] = __Pyx_Arg_VARARGS(__pyx_args, 43); + CYTHON_FALLTHROUGH; + case 43: values[42] = __Pyx_Arg_VARARGS(__pyx_args, 42); + CYTHON_FALLTHROUGH; + case 42: values[41] = __Pyx_Arg_VARARGS(__pyx_args, 41); + CYTHON_FALLTHROUGH; + case 41: values[40] = __Pyx_Arg_VARARGS(__pyx_args, 40); + CYTHON_FALLTHROUGH; + case 40: values[39] = __Pyx_Arg_VARARGS(__pyx_args, 39); + CYTHON_FALLTHROUGH; + case 39: values[38] = __Pyx_Arg_VARARGS(__pyx_args, 38); + CYTHON_FALLTHROUGH; + case 38: values[37] = __Pyx_Arg_VARARGS(__pyx_args, 37); + CYTHON_FALLTHROUGH; + case 37: values[36] = __Pyx_Arg_VARARGS(__pyx_args, 36); + CYTHON_FALLTHROUGH; + case 36: values[35] = __Pyx_Arg_VARARGS(__pyx_args, 35); + CYTHON_FALLTHROUGH; + case 35: values[34] = __Pyx_Arg_VARARGS(__pyx_args, 34); + CYTHON_FALLTHROUGH; + case 34: values[33] = __Pyx_Arg_VARARGS(__pyx_args, 33); + CYTHON_FALLTHROUGH; + case 33: values[32] = __Pyx_Arg_VARARGS(__pyx_args, 32); + CYTHON_FALLTHROUGH; + case 32: values[31] = __Pyx_Arg_VARARGS(__pyx_args, 31); + CYTHON_FALLTHROUGH; + case 31: values[30] = __Pyx_Arg_VARARGS(__pyx_args, 30); + CYTHON_FALLTHROUGH; + case 30: values[29] = __Pyx_Arg_VARARGS(__pyx_args, 29); + CYTHON_FALLTHROUGH; + case 29: values[28] = __Pyx_Arg_VARARGS(__pyx_args, 28); + CYTHON_FALLTHROUGH; + case 28: values[27] = __Pyx_Arg_VARARGS(__pyx_args, 27); + CYTHON_FALLTHROUGH; + case 27: values[26] = __Pyx_Arg_VARARGS(__pyx_args, 26); + CYTHON_FALLTHROUGH; + case 26: values[25] = __Pyx_Arg_VARARGS(__pyx_args, 25); + CYTHON_FALLTHROUGH; + case 25: values[24] = __Pyx_Arg_VARARGS(__pyx_args, 24); + CYTHON_FALLTHROUGH; + case 24: values[23] = __Pyx_Arg_VARARGS(__pyx_args, 23); + CYTHON_FALLTHROUGH; + case 23: values[22] = __Pyx_Arg_VARARGS(__pyx_args, 22); + CYTHON_FALLTHROUGH; + case 22: values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + CYTHON_FALLTHROUGH; + case 21: values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + CYTHON_FALLTHROUGH; + case 20: values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + CYTHON_FALLTHROUGH; + case 19: values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + CYTHON_FALLTHROUGH; + case 18: values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + CYTHON_FALLTHROUGH; + case 17: values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + CYTHON_FALLTHROUGH; + case 16: values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_uia)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 1); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_uao)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 2); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_iao)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 3); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_pair)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 4); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 5); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_neg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 6); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_threads)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 7); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 8); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 9); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 10); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 11); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 12); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 13); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 14); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 15: + if (likely((values[15] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_oids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 15); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 16: + if (likely((values[16] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 16); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 17: + if (likely((values[17] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 17); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 18: + if (likely((values[18] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 18); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 19: + if (likely((values[19] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_oids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 19); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 20: + if (likely((values[20] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rating_dict)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 20); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 21: + if (likely((values[21] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_user_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 21); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 22: + if (likely((values[22] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_item_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 22); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 23: + if (likely((values[23] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_neg_item_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 23); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 24: + if (likely((values[24] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_indptr)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 24); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 25: + if (likely((values[25] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_p_user_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 25); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 26: + if (likely((values[26] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_earlier_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 26); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 27: + if (likely((values[27] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_later_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 27); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 28: + if (likely((values[28] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_aspect_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 28); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 29: + if (likely((values[29] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pair_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 29); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 30: + if (likely((values[30] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 30); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 31: + if (likely((values[31] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 31); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 32: + if (likely((values[32] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 32); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 33: + if (likely((values[33] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 33); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 34: + if (likely((values[34] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_I)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 34); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 35: + if (likely((values[35] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 35); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 36: + if (likely((values[36] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_O)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 36); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 37: + if (likely((values[37] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 37); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 38: + if (likely((values[38] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 38); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 39: + if (likely((values[39] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 39); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 40: + if (likely((values[40] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_U)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 40); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 41: + if (likely((values[41] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_I)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 41); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 42: + if (likely((values[42] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 42); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 43: + if (likely((values[43] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_O)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 43); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 44: + if (likely((values[44] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 44); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 45: + if (likely((values[45] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 45); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 46: + if (likely((values[46] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 46); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 47: + if (likely((values[47] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_u)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 47); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 48: + if (likely((values[48] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_i)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 48); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 49: + if (likely((values[49] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_a)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 49); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 50: + if (likely((values[50] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_o)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 50); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 51: + if (likely((values[51] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g1_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 51); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 52: + if (likely((values[52] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g2_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 52); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 53: + if (likely((values[53] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g3_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 53); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 54: + if (likely((values[54] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_u_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 54); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 55: + if (likely((values[55] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_i_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 55); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 56: + if (likely((values[56] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_a_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 56); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 57: + if (likely((values[57] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_o_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 57); __PYX_ERR(0, 482, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_fit_mter") < 0)) __PYX_ERR(0, 482, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 58)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + values[22] = __Pyx_Arg_VARARGS(__pyx_args, 22); + values[23] = __Pyx_Arg_VARARGS(__pyx_args, 23); + values[24] = __Pyx_Arg_VARARGS(__pyx_args, 24); + values[25] = __Pyx_Arg_VARARGS(__pyx_args, 25); + values[26] = __Pyx_Arg_VARARGS(__pyx_args, 26); + values[27] = __Pyx_Arg_VARARGS(__pyx_args, 27); + values[28] = __Pyx_Arg_VARARGS(__pyx_args, 28); + values[29] = __Pyx_Arg_VARARGS(__pyx_args, 29); + values[30] = __Pyx_Arg_VARARGS(__pyx_args, 30); + values[31] = __Pyx_Arg_VARARGS(__pyx_args, 31); + values[32] = __Pyx_Arg_VARARGS(__pyx_args, 32); + values[33] = __Pyx_Arg_VARARGS(__pyx_args, 33); + values[34] = __Pyx_Arg_VARARGS(__pyx_args, 34); + values[35] = __Pyx_Arg_VARARGS(__pyx_args, 35); + values[36] = __Pyx_Arg_VARARGS(__pyx_args, 36); + values[37] = __Pyx_Arg_VARARGS(__pyx_args, 37); + values[38] = __Pyx_Arg_VARARGS(__pyx_args, 38); + values[39] = __Pyx_Arg_VARARGS(__pyx_args, 39); + values[40] = __Pyx_Arg_VARARGS(__pyx_args, 40); + values[41] = __Pyx_Arg_VARARGS(__pyx_args, 41); + values[42] = __Pyx_Arg_VARARGS(__pyx_args, 42); + values[43] = __Pyx_Arg_VARARGS(__pyx_args, 43); + values[44] = __Pyx_Arg_VARARGS(__pyx_args, 44); + values[45] = __Pyx_Arg_VARARGS(__pyx_args, 45); + values[46] = __Pyx_Arg_VARARGS(__pyx_args, 46); + values[47] = __Pyx_Arg_VARARGS(__pyx_args, 47); + values[48] = __Pyx_Arg_VARARGS(__pyx_args, 48); + values[49] = __Pyx_Arg_VARARGS(__pyx_args, 49); + values[50] = __Pyx_Arg_VARARGS(__pyx_args, 50); + values[51] = __Pyx_Arg_VARARGS(__pyx_args, 51); + values[52] = __Pyx_Arg_VARARGS(__pyx_args, 52); + values[53] = __Pyx_Arg_VARARGS(__pyx_args, 53); + values[54] = __Pyx_Arg_VARARGS(__pyx_args, 54); + values[55] = __Pyx_Arg_VARARGS(__pyx_args, 55); + values[56] = __Pyx_Arg_VARARGS(__pyx_args, 56); + values[57] = __Pyx_Arg_VARARGS(__pyx_args, 57); + } + __pyx_v_self = values[0]; + __pyx_v_rng_pos_uia = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[1]); + __pyx_v_rng_pos_uao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[2]); + __pyx_v_rng_pos_iao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[3]); + __pyx_v_rng_pos_pair = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[4]); + __pyx_v_rng_pos = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[5]); + __pyx_v_rng_neg = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[6]); + __pyx_v_n_threads = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_n_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 493, __pyx_L3_error) + __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_iids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_YU = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_uids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_aids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_oids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YI = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_iids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_aids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_oids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_rating_dict = ((struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *)values[20]); + __pyx_v_user_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_user_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[22], PyBUF_WRITABLE); if (unlikely(!__pyx_v_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_neg_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[23], PyBUF_WRITABLE); if (unlikely(!__pyx_v_neg_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_indptr = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[24], PyBUF_WRITABLE); if (unlikely(!__pyx_v_indptr.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_p_user_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[25], PyBUF_WRITABLE); if (unlikely(!__pyx_v_p_user_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_earlier_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[26], PyBUF_WRITABLE); if (unlikely(!__pyx_v_earlier_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_later_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[27], PyBUF_WRITABLE); if (unlikely(!__pyx_v_later_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_aspect_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[28], PyBUF_WRITABLE); if (unlikely(!__pyx_v_aspect_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_pair_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[29], PyBUF_WRITABLE); if (unlikely(!__pyx_v_pair_counts.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[30], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G1.memview)) __PYX_ERR(0, 500, __pyx_L3_error) + __pyx_v_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[31], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G2.memview)) __PYX_ERR(0, 501, __pyx_L3_error) + __pyx_v_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[32], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G3.memview)) __PYX_ERR(0, 502, __pyx_L3_error) + __pyx_v_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[33], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U.memview)) __PYX_ERR(0, 503, __pyx_L3_error) + __pyx_v_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[34], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I.memview)) __PYX_ERR(0, 504, __pyx_L3_error) + __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[35], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 505, __pyx_L3_error) + __pyx_v_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[36], PyBUF_WRITABLE); if (unlikely(!__pyx_v_O.memview)) __PYX_ERR(0, 506, __pyx_L3_error) + __pyx_v_sgrad_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[37], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G1.memview)) __PYX_ERR(0, 507, __pyx_L3_error) + __pyx_v_sgrad_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[38], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G2.memview)) __PYX_ERR(0, 508, __pyx_L3_error) + __pyx_v_sgrad_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[39], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G3.memview)) __PYX_ERR(0, 509, __pyx_L3_error) + __pyx_v_sgrad_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[40], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_U.memview)) __PYX_ERR(0, 510, __pyx_L3_error) + __pyx_v_sgrad_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[41], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_I.memview)) __PYX_ERR(0, 511, __pyx_L3_error) + __pyx_v_sgrad_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[42], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_A.memview)) __PYX_ERR(0, 512, __pyx_L3_error) + __pyx_v_sgrad_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[43], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_O.memview)) __PYX_ERR(0, 513, __pyx_L3_error) + __pyx_v_del_g1 = ((PyArrayObject *)values[44]); + __pyx_v_del_g2 = ((PyArrayObject *)values[45]); + __pyx_v_del_g3 = ((PyArrayObject *)values[46]); + __pyx_v_del_u = ((PyArrayObject *)values[47]); + __pyx_v_del_i = ((PyArrayObject *)values[48]); + __pyx_v_del_a = ((PyArrayObject *)values[49]); + __pyx_v_del_o = ((PyArrayObject *)values[50]); + __pyx_v_del_g1_reg = ((PyArrayObject *)values[51]); + __pyx_v_del_g2_reg = ((PyArrayObject *)values[52]); + __pyx_v_del_g3_reg = ((PyArrayObject *)values[53]); + __pyx_v_del_u_reg = ((PyArrayObject *)values[54]); + __pyx_v_del_i_reg = ((PyArrayObject *)values[55]); + __pyx_v_del_a_reg = ((PyArrayObject *)values[56]); + __pyx_v_del_o_reg = ((PyArrayObject *)values[57]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, __pyx_nargs); __PYX_ERR(0, 482, __pyx_L3_error) + __pyx_L3_error:; + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_user_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_neg_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_indptr, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_p_user_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_earlier_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_later_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_aspect_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_pair_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_O, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_O, 1); + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); - - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(2, 4, __pyx_L1_error) - - /* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uia), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uia", 0))) __PYX_ERR(0, 487, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uao", 0))) __PYX_ERR(0, 488, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_iao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_iao", 0))) __PYX_ERR(0, 489, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_pair), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_pair", 0))) __PYX_ERR(0, 490, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos", 0))) __PYX_ERR(0, 491, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_neg), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_neg", 0))) __PYX_ERR(0, 492, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rating_dict), __pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict, 1, "rating_dict", 0))) __PYX_ERR(0, 497, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1), __pyx_ptype_5numpy_ndarray, 1, "del_g1", 0))) __PYX_ERR(0, 514, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2), __pyx_ptype_5numpy_ndarray, 1, "del_g2", 0))) __PYX_ERR(0, 515, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3), __pyx_ptype_5numpy_ndarray, 1, "del_g3", 0))) __PYX_ERR(0, 516, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u), __pyx_ptype_5numpy_ndarray, 1, "del_u", 0))) __PYX_ERR(0, 517, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i), __pyx_ptype_5numpy_ndarray, 1, "del_i", 0))) __PYX_ERR(0, 518, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a), __pyx_ptype_5numpy_ndarray, 1, "del_a", 0))) __PYX_ERR(0, 519, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o), __pyx_ptype_5numpy_ndarray, 1, "del_o", 0))) __PYX_ERR(0, 520, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g1_reg", 0))) __PYX_ERR(0, 521, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g2_reg", 0))) __PYX_ERR(0, 522, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g3_reg", 0))) __PYX_ERR(0, 523, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u_reg), __pyx_ptype_5numpy_ndarray, 1, "del_u_reg", 0))) __PYX_ERR(0, 524, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i_reg), __pyx_ptype_5numpy_ndarray, 1, "del_i_reg", 0))) __PYX_ERR(0, 525, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a_reg), __pyx_ptype_5numpy_ndarray, 1, "del_a_reg", 0))) __PYX_ERR(0, 526, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o_reg), __pyx_ptype_5numpy_ndarray, 1, "del_o_reg", 0))) __PYX_ERR(0, 527, __pyx_L1_error) + __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_22_fit_mter(__pyx_self, __pyx_v_self, __pyx_v_rng_pos_uia, __pyx_v_rng_pos_uao, __pyx_v_rng_pos_iao, __pyx_v_rng_pos_pair, __pyx_v_rng_pos, __pyx_v_rng_neg, __pyx_v_n_threads, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_iids, __pyx_v_X_aids, __pyx_v_YU, __pyx_v_YU_uids, __pyx_v_YU_aids, __pyx_v_YU_oids, __pyx_v_YI, __pyx_v_YI_iids, __pyx_v_YI_aids, __pyx_v_YI_oids, __pyx_v_rating_dict, __pyx_v_user_ids, __pyx_v_item_ids, __pyx_v_neg_item_ids, __pyx_v_indptr, __pyx_v_p_user_indices, __pyx_v_earlier_indices, __pyx_v_later_indices, __pyx_v_aspect_indices, __pyx_v_pair_counts, __pyx_v_G1, __pyx_v_G2, __pyx_v_G3, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_sgrad_G1, __pyx_v_sgrad_G2, __pyx_v_sgrad_G3, __pyx_v_sgrad_U, __pyx_v_sgrad_I, __pyx_v_sgrad_A, __pyx_v_sgrad_O, __pyx_v_del_g1, __pyx_v_del_g2, __pyx_v_del_g3, __pyx_v_del_u, __pyx_v_del_i, __pyx_v_del_a, __pyx_v_del_o, __pyx_v_del_g1_reg, __pyx_v_del_g2_reg, __pyx_v_del_g3_reg, __pyx_v_del_u_reg, __pyx_v_del_i_reg, __pyx_v_del_a_reg, __pyx_v_del_o_reg); /* function exit code */ + goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); + __pyx_L0:; + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_user_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_neg_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_indptr, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_p_user_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_earlier_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_later_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_aspect_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_pair_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_O, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_O, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "View.MemoryView":659 - * - * @cname('__pyx_memoryview_new') - * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< - * cdef memoryview result = memoryview(o, flags, dtype_is_object) - * result.typeinfo = typeinfo - */ - -static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_flags, int __pyx_v_dtype_is_object, __Pyx_TypeInfo *__pyx_v_typeinfo) { - struct __pyx_memoryview_obj *__pyx_v_result = 0; +static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_22_fit_mter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg, int __pyx_v_n_threads, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_iids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_YU, __Pyx_memviewslice __pyx_v_YU_uids, __Pyx_memviewslice __pyx_v_YU_aids, __Pyx_memviewslice __pyx_v_YU_oids, __Pyx_memviewslice __pyx_v_YI, __Pyx_memviewslice __pyx_v_YI_iids, __Pyx_memviewslice __pyx_v_YI_aids, __Pyx_memviewslice __pyx_v_YI_oids, struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict, __Pyx_memviewslice __pyx_v_user_ids, __Pyx_memviewslice __pyx_v_item_ids, __Pyx_memviewslice __pyx_v_neg_item_ids, __Pyx_memviewslice __pyx_v_indptr, __Pyx_memviewslice __pyx_v_p_user_indices, __Pyx_memviewslice __pyx_v_earlier_indices, __Pyx_memviewslice __pyx_v_later_indices, __Pyx_memviewslice __pyx_v_aspect_indices, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts, __Pyx_memviewslice __pyx_v_G1, __Pyx_memviewslice __pyx_v_G2, __Pyx_memviewslice __pyx_v_G3, __Pyx_memviewslice __pyx_v_U, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_O, __Pyx_memviewslice __pyx_v_sgrad_G1, __Pyx_memviewslice __pyx_v_sgrad_G2, __Pyx_memviewslice __pyx_v_sgrad_G3, __Pyx_memviewslice __pyx_v_sgrad_U, __Pyx_memviewslice __pyx_v_sgrad_I, __Pyx_memviewslice __pyx_v_sgrad_A, __Pyx_memviewslice __pyx_v_sgrad_O, PyArrayObject *__pyx_v_del_g1, PyArrayObject *__pyx_v_del_g2, PyArrayObject *__pyx_v_del_g3, PyArrayObject *__pyx_v_del_u, PyArrayObject *__pyx_v_del_i, PyArrayObject *__pyx_v_del_a, PyArrayObject *__pyx_v_del_o, PyArrayObject *__pyx_v_del_g1_reg, PyArrayObject *__pyx_v_del_g2_reg, PyArrayObject *__pyx_v_del_g3_reg, PyArrayObject *__pyx_v_del_u_reg, PyArrayObject *__pyx_v_del_i_reg, PyArrayObject *__pyx_v_del_a_reg, PyArrayObject *__pyx_v_del_o_reg) { + long __pyx_v_s; + long __pyx_v_correct; + long __pyx_v_skipped; + long __pyx_v_aspect_correct; + long __pyx_v_n_users; + long __pyx_v_n_items; + long __pyx_v_n_aspects; + CYTHON_UNUSED long __pyx_v_n_opinions; + long __pyx_v_n_user_factors; + long __pyx_v_n_item_factors; + long __pyx_v_n_aspect_factors; + long __pyx_v_n_opinion_factors; + CYTHON_UNUSED int __pyx_v_num_samples; + CYTHON_UNUSED int __pyx_v_num_bpr_samples; + CYTHON_UNUSED int __pyx_v_num_pair_samples; + CYTHON_UNUSED int __pyx_v__; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_v_k; + int __pyx_v_idx; + int __pyx_v_jdx; + int __pyx_v_u_idx; + int __pyx_v_i_idx; + int __pyx_v_a_idx; + int __pyx_v_o_idx; + int __pyx_v_j_idx; + int __pyx_v_thread_id; + double __pyx_v_z; + double __pyx_v_score; + double __pyx_v_i_score; + double __pyx_v_j_score; + double __pyx_v_pred; + double __pyx_v_i_ij; + double __pyx_v_a_ji; + double __pyx_v_loss; + double __pyx_v_bpr_loss; + double __pyx_v_aspect_bpr_loss; + double __pyx_v_del_sqerror; + double __pyx_v_del_bpr; + double __pyx_v_del_aspect_bpr; + double __pyx_v_eps; + double __pyx_v_lr; + double __pyx_v_ld_reg; + double __pyx_v_ld_bpr; + double __pyx_v_lambda_d; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a; + __Pyx_Buffer __pyx_pybuffer_del_a; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a_reg; + __Pyx_Buffer __pyx_pybuffer_del_a_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1; + __Pyx_Buffer __pyx_pybuffer_del_g1; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1_reg; + __Pyx_Buffer __pyx_pybuffer_del_g1_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2; + __Pyx_Buffer __pyx_pybuffer_del_g2; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2_reg; + __Pyx_Buffer __pyx_pybuffer_del_g2_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3; + __Pyx_Buffer __pyx_pybuffer_del_g3; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3_reg; + __Pyx_Buffer __pyx_pybuffer_del_g3_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i; + __Pyx_Buffer __pyx_pybuffer_del_i; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i_reg; + __Pyx_Buffer __pyx_pybuffer_del_i_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o; + __Pyx_Buffer __pyx_pybuffer_del_o; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o_reg; + __Pyx_Buffer __pyx_pybuffer_del_o_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u; + __Pyx_Buffer __pyx_pybuffer_del_u; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u_reg; + __Pyx_Buffer __pyx_pybuffer_del_u_reg; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("memoryview_cwrapper", 0); - - /* "View.MemoryView":660 - * @cname('__pyx_memoryview_new') - * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): - * cdef memoryview result = memoryview(o, flags, dtype_is_object) # <<<<<<<<<<<<<< - * result.typeinfo = typeinfo - * return result - */ - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 660, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 660, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 660, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_o); - __Pyx_GIVEREF(__pyx_v_o); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_o); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 660, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_result = ((struct __pyx_memoryview_obj *)__pyx_t_2); - __pyx_t_2 = 0; - - /* "View.MemoryView":661 - * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): - * cdef memoryview result = memoryview(o, flags, dtype_is_object) - * result.typeinfo = typeinfo # <<<<<<<<<<<<<< - * return result - * - */ - __pyx_v_result->typeinfo = __pyx_v_typeinfo; - - /* "View.MemoryView":662 - * cdef memoryview result = memoryview(o, flags, dtype_is_object) - * result.typeinfo = typeinfo - * return result # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_check') - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_result)); - __pyx_r = ((PyObject *)__pyx_v_result); - goto __pyx_L0; - - /* "View.MemoryView":659 - * - * @cname('__pyx_memoryview_new') - * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< - * cdef memoryview result = memoryview(o, flags, dtype_is_object) - * result.typeinfo = typeinfo - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":665 - * - * @cname('__pyx_memoryview_check') - * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< - * return isinstance(o, memoryview) - * - */ - -static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("memoryview_check", 0); - - /* "View.MemoryView":666 - * @cname('__pyx_memoryview_check') - * cdef inline bint memoryview_check(object o): - * return isinstance(o, memoryview) # <<<<<<<<<<<<<< - * - * cdef tuple _unellipsify(object index, int ndim): - */ - __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_o, __pyx_memoryview_type); - __pyx_r = __pyx_t_1; - goto __pyx_L0; - - /* "View.MemoryView":665 - * - * @cname('__pyx_memoryview_check') - * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< - * return isinstance(o, memoryview) - * - */ - - /* function exit code */ - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":668 - * return isinstance(o, memoryview) - * - * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< - * """ - * Replace all ellipses with full slices and fill incomplete indices with - */ - -static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) { - PyObject *__pyx_v_tup = NULL; - PyObject *__pyx_v_result = NULL; - int __pyx_v_have_slices; - int __pyx_v_seen_ellipsis; - CYTHON_UNUSED PyObject *__pyx_v_idx = NULL; - PyObject *__pyx_v_item = NULL; - Py_ssize_t __pyx_v_nslices; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - PyObject *__pyx_t_7 = NULL; - Py_ssize_t __pyx_t_8; - int __pyx_t_9; - int __pyx_t_10; - PyObject *__pyx_t_11 = NULL; + long __pyx_t_3; + int __pyx_t_4; + double __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + int __pyx_t_8; + Py_ssize_t __pyx_t_9; + long __pyx_t_10; + int __pyx_t_11; + long __pyx_t_12; + long __pyx_t_13; + int __pyx_t_14; + long __pyx_t_15; + long __pyx_t_16; + int __pyx_t_17; + Py_ssize_t __pyx_t_18; + Py_ssize_t __pyx_t_19; + Py_ssize_t __pyx_t_20; + Py_ssize_t __pyx_t_21; + Py_ssize_t __pyx_t_22; + Py_ssize_t __pyx_t_23; + Py_ssize_t __pyx_t_24; + Py_ssize_t __pyx_t_25; + bool __pyx_t_26; + int __pyx_t_27; + double __pyx_t_28; + long __pyx_t_29; + PyObject *__pyx_t_30 = NULL; + PyObject *__pyx_t_31 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_unellipsify", 0); - - /* "View.MemoryView":673 - * full slices. - * """ - * if not isinstance(index, tuple): # <<<<<<<<<<<<<< - * tup = (index,) - * else: - */ - __pyx_t_1 = PyTuple_Check(__pyx_v_index); - __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":674 - * """ - * if not isinstance(index, tuple): - * tup = (index,) # <<<<<<<<<<<<<< - * else: - * tup = index - */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 674, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_index); - __Pyx_GIVEREF(__pyx_v_index); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_index); - __pyx_v_tup = __pyx_t_3; - __pyx_t_3 = 0; - - /* "View.MemoryView":673 - * full slices. - * """ - * if not isinstance(index, tuple): # <<<<<<<<<<<<<< - * tup = (index,) - * else: - */ - goto __pyx_L3; + __Pyx_RefNannySetupContext("__pyx_fuse_1_1_fit_mter", 0); + __pyx_pybuffer_del_g1.pybuffer.buf = NULL; + __pyx_pybuffer_del_g1.refcount = 0; + __pyx_pybuffernd_del_g1.data = NULL; + __pyx_pybuffernd_del_g1.rcbuffer = &__pyx_pybuffer_del_g1; + __pyx_pybuffer_del_g2.pybuffer.buf = NULL; + __pyx_pybuffer_del_g2.refcount = 0; + __pyx_pybuffernd_del_g2.data = NULL; + __pyx_pybuffernd_del_g2.rcbuffer = &__pyx_pybuffer_del_g2; + __pyx_pybuffer_del_g3.pybuffer.buf = NULL; + __pyx_pybuffer_del_g3.refcount = 0; + __pyx_pybuffernd_del_g3.data = NULL; + __pyx_pybuffernd_del_g3.rcbuffer = &__pyx_pybuffer_del_g3; + __pyx_pybuffer_del_u.pybuffer.buf = NULL; + __pyx_pybuffer_del_u.refcount = 0; + __pyx_pybuffernd_del_u.data = NULL; + __pyx_pybuffernd_del_u.rcbuffer = &__pyx_pybuffer_del_u; + __pyx_pybuffer_del_i.pybuffer.buf = NULL; + __pyx_pybuffer_del_i.refcount = 0; + __pyx_pybuffernd_del_i.data = NULL; + __pyx_pybuffernd_del_i.rcbuffer = &__pyx_pybuffer_del_i; + __pyx_pybuffer_del_a.pybuffer.buf = NULL; + __pyx_pybuffer_del_a.refcount = 0; + __pyx_pybuffernd_del_a.data = NULL; + __pyx_pybuffernd_del_a.rcbuffer = &__pyx_pybuffer_del_a; + __pyx_pybuffer_del_o.pybuffer.buf = NULL; + __pyx_pybuffer_del_o.refcount = 0; + __pyx_pybuffernd_del_o.data = NULL; + __pyx_pybuffernd_del_o.rcbuffer = &__pyx_pybuffer_del_o; + __pyx_pybuffer_del_g1_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g1_reg.refcount = 0; + __pyx_pybuffernd_del_g1_reg.data = NULL; + __pyx_pybuffernd_del_g1_reg.rcbuffer = &__pyx_pybuffer_del_g1_reg; + __pyx_pybuffer_del_g2_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g2_reg.refcount = 0; + __pyx_pybuffernd_del_g2_reg.data = NULL; + __pyx_pybuffernd_del_g2_reg.rcbuffer = &__pyx_pybuffer_del_g2_reg; + __pyx_pybuffer_del_g3_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g3_reg.refcount = 0; + __pyx_pybuffernd_del_g3_reg.data = NULL; + __pyx_pybuffernd_del_g3_reg.rcbuffer = &__pyx_pybuffer_del_g3_reg; + __pyx_pybuffer_del_u_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_u_reg.refcount = 0; + __pyx_pybuffernd_del_u_reg.data = NULL; + __pyx_pybuffernd_del_u_reg.rcbuffer = &__pyx_pybuffer_del_u_reg; + __pyx_pybuffer_del_i_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_i_reg.refcount = 0; + __pyx_pybuffernd_del_i_reg.data = NULL; + __pyx_pybuffernd_del_i_reg.rcbuffer = &__pyx_pybuffer_del_i_reg; + __pyx_pybuffer_del_a_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_a_reg.refcount = 0; + __pyx_pybuffernd_del_a_reg.data = NULL; + __pyx_pybuffernd_del_a_reg.rcbuffer = &__pyx_pybuffer_del_a_reg; + __pyx_pybuffer_del_o_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_o_reg.refcount = 0; + __pyx_pybuffernd_del_o_reg.data = NULL; + __pyx_pybuffernd_del_o_reg.rcbuffer = &__pyx_pybuffer_del_o_reg; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - - /* "View.MemoryView":676 - * tup = (index,) - * else: - * tup = index # <<<<<<<<<<<<<< - * - * result = [] - */ - /*else*/ { - __Pyx_INCREF(__pyx_v_index); - __pyx_v_tup = __pyx_v_index; + __pyx_pybuffernd_del_g1.diminfo[0].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1.diminfo[0].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1.diminfo[1].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1.diminfo[1].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1.diminfo[2].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1.diminfo[2].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - __pyx_L3:; - - /* "View.MemoryView":678 - * tup = index - * - * result = [] # <<<<<<<<<<<<<< - * have_slices = False - * seen_ellipsis = False - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 678, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_result = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "View.MemoryView":679 - * - * result = [] - * have_slices = False # <<<<<<<<<<<<<< - * seen_ellipsis = False - * for idx, item in enumerate(tup): - */ - __pyx_v_have_slices = 0; - - /* "View.MemoryView":680 - * result = [] - * have_slices = False - * seen_ellipsis = False # <<<<<<<<<<<<<< - * for idx, item in enumerate(tup): - * if item is Ellipsis: - */ - __pyx_v_seen_ellipsis = 0; - - /* "View.MemoryView":681 - * have_slices = False - * seen_ellipsis = False - * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< - * if item is Ellipsis: - * if not seen_ellipsis: - */ - __Pyx_INCREF(__pyx_int_0); - __pyx_t_3 = __pyx_int_0; - if (likely(PyList_CheckExact(__pyx_v_tup)) || PyTuple_CheckExact(__pyx_v_tup)) { - __pyx_t_4 = __pyx_v_tup; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_tup); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 681, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 681, __pyx_L1_error) + __pyx_pybuffernd_del_g2.diminfo[0].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2.diminfo[0].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2.diminfo[1].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2.diminfo[1].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2.diminfo[2].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2.diminfo[2].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - for (;;) { - if (likely(!__pyx_t_6)) { - if (likely(PyList_CheckExact(__pyx_t_4))) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(2, 681, __pyx_L1_error) - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 681, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - #endif - } else { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(2, 681, __pyx_L1_error) - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 681, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - #endif - } - } else { - __pyx_t_7 = __pyx_t_6(__pyx_t_4); - if (unlikely(!__pyx_t_7)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(2, 681, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_7); - } - __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_7); - __pyx_t_7 = 0; - __Pyx_INCREF(__pyx_t_3); - __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_3); - __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 681, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); - __pyx_t_3 = __pyx_t_7; - __pyx_t_7 = 0; - - /* "View.MemoryView":682 - * seen_ellipsis = False - * for idx, item in enumerate(tup): - * if item is Ellipsis: # <<<<<<<<<<<<<< - * if not seen_ellipsis: - * result.extend([slice(None)] * (ndim - len(tup) + 1)) - */ - __pyx_t_2 = (__pyx_v_item == __pyx_builtin_Ellipsis); - __pyx_t_1 = (__pyx_t_2 != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":683 - * for idx, item in enumerate(tup): - * if item is Ellipsis: - * if not seen_ellipsis: # <<<<<<<<<<<<<< - * result.extend([slice(None)] * (ndim - len(tup) + 1)) - * seen_ellipsis = True - */ - __pyx_t_1 = ((!(__pyx_v_seen_ellipsis != 0)) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":684 - * if item is Ellipsis: - * if not seen_ellipsis: - * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< - * seen_ellipsis = True - * else: - */ - __pyx_t_8 = PyObject_Length(__pyx_v_tup); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(2, 684, __pyx_L1_error) - __pyx_t_7 = PyList_New(1 * ((((__pyx_v_ndim - __pyx_t_8) + 1)<0) ? 0:((__pyx_v_ndim - __pyx_t_8) + 1))); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 684, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - { Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < ((__pyx_v_ndim - __pyx_t_8) + 1); __pyx_temp++) { - __Pyx_INCREF(__pyx_slice__10); - __Pyx_GIVEREF(__pyx_slice__10); - PyList_SET_ITEM(__pyx_t_7, __pyx_temp, __pyx_slice__10); - } - } - __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_7); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 684, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "View.MemoryView":685 - * if not seen_ellipsis: - * result.extend([slice(None)] * (ndim - len(tup) + 1)) - * seen_ellipsis = True # <<<<<<<<<<<<<< - * else: - * result.append(slice(None)) - */ - __pyx_v_seen_ellipsis = 1; - - /* "View.MemoryView":683 - * for idx, item in enumerate(tup): - * if item is Ellipsis: - * if not seen_ellipsis: # <<<<<<<<<<<<<< - * result.extend([slice(None)] * (ndim - len(tup) + 1)) - * seen_ellipsis = True - */ - goto __pyx_L7; - } + __pyx_pybuffernd_del_g3.diminfo[0].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3.diminfo[0].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3.diminfo[1].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3.diminfo[1].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3.diminfo[2].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3.diminfo[2].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_u.diminfo[0].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u.diminfo[0].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u.diminfo[1].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u.diminfo[1].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_i.diminfo[0].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i.diminfo[0].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i.diminfo[1].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i.diminfo[1].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_a.diminfo[0].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a.diminfo[0].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a.diminfo[1].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a.diminfo[1].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_o.diminfo[0].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o.diminfo[0].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o.diminfo[1].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o.diminfo[1].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g1_reg.diminfo[0].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1_reg.diminfo[0].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1_reg.diminfo[1].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1_reg.diminfo[1].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1_reg.diminfo[2].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1_reg.diminfo[2].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g2_reg.diminfo[0].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2_reg.diminfo[0].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2_reg.diminfo[1].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2_reg.diminfo[1].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2_reg.diminfo[2].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2_reg.diminfo[2].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g3_reg.diminfo[0].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3_reg.diminfo[0].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3_reg.diminfo[1].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3_reg.diminfo[1].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3_reg.diminfo[2].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3_reg.diminfo[2].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_u_reg.diminfo[0].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u_reg.diminfo[0].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u_reg.diminfo[1].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u_reg.diminfo[1].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_i_reg.diminfo[0].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i_reg.diminfo[0].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i_reg.diminfo[1].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i_reg.diminfo[1].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_a_reg.diminfo[0].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a_reg.diminfo[0].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a_reg.diminfo[1].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a_reg.diminfo[1].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_o_reg.diminfo[0].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o_reg.diminfo[0].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o_reg.diminfo[1].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o_reg.diminfo[1].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[1]; - /* "View.MemoryView":687 - * seen_ellipsis = True - * else: - * result.append(slice(None)) # <<<<<<<<<<<<<< - * have_slices = True - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":531 + * """ + * cdef: + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 # <<<<<<<<<<<<<< + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items */ - /*else*/ { - __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_slice__10); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 687, __pyx_L1_error) - } - __pyx_L7:; + __pyx_v_correct = 0; + __pyx_v_skipped = 0; + __pyx_v_aspect_correct = 0; - /* "View.MemoryView":688 - * else: - * result.append(slice(None)) - * have_slices = True # <<<<<<<<<<<<<< - * else: - * if not isinstance(item, slice) and not PyIndex_Check(item): + /* "cornac/models/comparer/recom_comparer_sub.pyx":532 + * cdef: + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 + * long n_users = self.train_set.num_users # <<<<<<<<<<<<<< + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects */ - __pyx_v_have_slices = 1; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_n_users = __pyx_t_3; - /* "View.MemoryView":682 - * seen_ellipsis = False - * for idx, item in enumerate(tup): - * if item is Ellipsis: # <<<<<<<<<<<<<< - * if not seen_ellipsis: - * result.extend([slice(None)] * (ndim - len(tup) + 1)) + /* "cornac/models/comparer/recom_comparer_sub.pyx":533 + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items # <<<<<<<<<<<<<< + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions */ - goto __pyx_L6; - } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_items = __pyx_t_3; - /* "View.MemoryView":690 - * have_slices = True - * else: - * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< - * raise TypeError("Cannot index with type '%s'" % type(item)) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":534 + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors */ - /*else*/ { - __pyx_t_2 = PySlice_Check(__pyx_v_item); - __pyx_t_10 = ((!(__pyx_t_2 != 0)) != 0); - if (__pyx_t_10) { - } else { - __pyx_t_1 = __pyx_t_10; - goto __pyx_L9_bool_binop_done; - } - __pyx_t_10 = ((!(PyIndex_Check(__pyx_v_item) != 0)) != 0); - __pyx_t_1 = __pyx_t_10; - __pyx_L9_bool_binop_done:; - if (unlikely(__pyx_t_1)) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_aspects = __pyx_t_3; - /* "View.MemoryView":691 - * else: - * if not isinstance(item, slice) and not PyIndex_Check(item): - * raise TypeError("Cannot index with type '%s'" % type(item)) # <<<<<<<<<<<<<< - * - * have_slices = have_slices or isinstance(item, slice) + /* "cornac/models/comparer/recom_comparer_sub.pyx":535 + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions # <<<<<<<<<<<<<< + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors */ - __pyx_t_7 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_index_with_type_s, ((PyObject *)Py_TYPE(__pyx_v_item))); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 691, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 691, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_Raise(__pyx_t_11, 0, 0, 0); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __PYX_ERR(2, 691, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_opinions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_opinions = __pyx_t_3; - /* "View.MemoryView":690 - * have_slices = True - * else: - * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< - * raise TypeError("Cannot index with type '%s'" % type(item)) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":536 + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors # <<<<<<<<<<<<<< + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors */ - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_user_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 536, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 536, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_user_factors = __pyx_t_3; - /* "View.MemoryView":693 - * raise TypeError("Cannot index with type '%s'" % type(item)) - * - * have_slices = have_slices or isinstance(item, slice) # <<<<<<<<<<<<<< - * result.append(item) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":537 + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors # <<<<<<<<<<<<<< + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors */ - __pyx_t_10 = (__pyx_v_have_slices != 0); - if (!__pyx_t_10) { - } else { - __pyx_t_1 = __pyx_t_10; - goto __pyx_L11_bool_binop_done; - } - __pyx_t_10 = PySlice_Check(__pyx_v_item); - __pyx_t_2 = (__pyx_t_10 != 0); - __pyx_t_1 = __pyx_t_2; - __pyx_L11_bool_binop_done:; - __pyx_v_have_slices = __pyx_t_1; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_item_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 537, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_item_factors = __pyx_t_3; - /* "View.MemoryView":694 - * - * have_slices = have_slices or isinstance(item, slice) - * result.append(item) # <<<<<<<<<<<<<< - * - * nslices = ndim - len(result) + /* "cornac/models/comparer/recom_comparer_sub.pyx":538 + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors # <<<<<<<<<<<<<< + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples */ - __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_v_item); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 694, __pyx_L1_error) - } - __pyx_L6:; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_aspect_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 538, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_aspect_factors = __pyx_t_3; - /* "View.MemoryView":681 - * have_slices = False - * seen_ellipsis = False - * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< - * if item is Ellipsis: - * if not seen_ellipsis: + /* "cornac/models/comparer/recom_comparer_sub.pyx":539 + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors # <<<<<<<<<<<<<< + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples */ - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_opinion_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 539, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_opinion_factors = __pyx_t_3; - /* "View.MemoryView":696 - * result.append(item) - * - * nslices = ndim - len(result) # <<<<<<<<<<<<<< - * if nslices: - * result.extend([slice(None)] * nslices) + /* "cornac/models/comparer/recom_comparer_sub.pyx":540 + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples # <<<<<<<<<<<<<< + * int num_bpr_samples = self.n_bpr_samples + * int num_pair_samples = self.n_pair_samples */ - __pyx_t_5 = PyList_GET_SIZE(__pyx_v_result); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(2, 696, __pyx_L1_error) - __pyx_v_nslices = (__pyx_v_ndim - __pyx_t_5); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_element_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 540, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_samples = __pyx_t_4; - /* "View.MemoryView":697 - * - * nslices = ndim - len(result) - * if nslices: # <<<<<<<<<<<<<< - * result.extend([slice(None)] * nslices) + /* "cornac/models/comparer/recom_comparer_sub.pyx":541 + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples # <<<<<<<<<<<<<< + * int num_pair_samples = self.n_pair_samples * */ - __pyx_t_1 = (__pyx_v_nslices != 0); - if (__pyx_t_1) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 541, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_bpr_samples = __pyx_t_4; - /* "View.MemoryView":698 - * nslices = ndim - len(result) - * if nslices: - * result.extend([slice(None)] * nslices) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":542 + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples + * int num_pair_samples = self.n_pair_samples # <<<<<<<<<<<<<< * - * return have_slices or nslices, tuple(result) + * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id */ - __pyx_t_3 = PyList_New(1 * ((__pyx_v_nslices<0) ? 0:__pyx_v_nslices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 698, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - { Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < __pyx_v_nslices; __pyx_temp++) { - __Pyx_INCREF(__pyx_slice__10); - __Pyx_GIVEREF(__pyx_slice__10); - PyList_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_slice__10); - } - } - __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 698, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_pair_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 542, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_pair_samples = __pyx_t_4; - /* "View.MemoryView":697 - * - * nslices = ndim - len(result) - * if nslices: # <<<<<<<<<<<<<< - * result.extend([slice(None)] * nslices) + /* "cornac/models/comparer/recom_comparer_sub.pyx":546 + * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id + * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji + * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr # <<<<<<<<<<<<<< + * floating eps = 1e-9 * */ - } + __pyx_v_loss = 0.; + __pyx_v_bpr_loss = 0.; + __pyx_v_aspect_bpr_loss = 0.; - /* "View.MemoryView":700 - * result.extend([slice(None)] * nslices) - * - * return have_slices or nslices, tuple(result) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":547 + * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji + * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr + * floating eps = 1e-9 # <<<<<<<<<<<<<< * - * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * floating lr = self.lr */ - __Pyx_XDECREF(__pyx_r); - if (!__pyx_v_have_slices) { - } else { - __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_have_slices); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 700, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L14_bool_binop_done; - } - __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_nslices); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 700, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __pyx_t_4; - __pyx_t_4 = 0; - __pyx_L14_bool_binop_done:; - __pyx_t_4 = PyList_AsTuple(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 700, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 700, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_4); - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_r = ((PyObject*)__pyx_t_11); - __pyx_t_11 = 0; - goto __pyx_L0; + __pyx_v_eps = 1e-9; - /* "View.MemoryView":668 - * return isinstance(o, memoryview) + /* "cornac/models/comparer/recom_comparer_sub.pyx":549 + * floating eps = 1e-9 * - * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< - * """ - * Replace all ellipses with full slices and fill incomplete indices with + * floating lr = self.lr # <<<<<<<<<<<<<< + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 549, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lr = __pyx_t_5; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("View.MemoryView._unellipsify", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_tup); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_idx); - __Pyx_XDECREF(__pyx_v_item); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":702 - * return have_slices or nslices, tuple(result) + /* "cornac/models/comparer/recom_comparer_sub.pyx":550 * - * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< - * for suboffset in suboffsets[:ndim]: - * if suboffset >= 0: + * floating lr = self.lr + * floating ld_reg = self.lambda_reg # <<<<<<<<<<<<<< + * floating ld_bpr = self.lambda_bpr + * floating lambda_d = self.lambda_d */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_reg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 550, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 550, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_ld_reg = __pyx_t_5; -static PyObject *assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int __pyx_v_ndim) { - Py_ssize_t __pyx_v_suboffset; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - Py_ssize_t *__pyx_t_1; - Py_ssize_t *__pyx_t_2; - Py_ssize_t *__pyx_t_3; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("assert_direct_dimensions", 0); - - /* "View.MemoryView":703 + /* "cornac/models/comparer/recom_comparer_sub.pyx":551 + * floating lr = self.lr + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr # <<<<<<<<<<<<<< + * floating lambda_d = self.lambda_d * - * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): - * for suboffset in suboffsets[:ndim]: # <<<<<<<<<<<<<< - * if suboffset >= 0: - * raise ValueError("Indirect dimensions not supported") */ - __pyx_t_2 = (__pyx_v_suboffsets + __pyx_v_ndim); - for (__pyx_t_3 = __pyx_v_suboffsets; __pyx_t_3 < __pyx_t_2; __pyx_t_3++) { - __pyx_t_1 = __pyx_t_3; - __pyx_v_suboffset = (__pyx_t_1[0]); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_bpr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_ld_bpr = __pyx_t_5; - /* "View.MemoryView":704 - * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): - * for suboffset in suboffsets[:ndim]: - * if suboffset >= 0: # <<<<<<<<<<<<<< - * raise ValueError("Indirect dimensions not supported") + /* "cornac/models/comparer/recom_comparer_sub.pyx":552 + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr + * floating lambda_d = self.lambda_d # <<<<<<<<<<<<<< * + * del_g1.fill(0) */ - __pyx_t_4 = ((__pyx_v_suboffset >= 0) != 0); - if (unlikely(__pyx_t_4)) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_d = __pyx_t_5; - /* "View.MemoryView":705 - * for suboffset in suboffsets[:ndim]: - * if suboffset >= 0: - * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":554 + * floating lambda_d = self.lambda_d * + * del_g1.fill(0) # <<<<<<<<<<<<<< + * del_g2.fill(0) + * del_g3.fill(0) */ - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 705, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_Raise(__pyx_t_5, 0, 0, 0); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __PYX_ERR(2, 705, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":704 - * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): - * for suboffset in suboffsets[:ndim]: - * if suboffset >= 0: # <<<<<<<<<<<<<< - * raise ValueError("Indirect dimensions not supported") + /* "cornac/models/comparer/recom_comparer_sub.pyx":555 * + * del_g1.fill(0) + * del_g2.fill(0) # <<<<<<<<<<<<<< + * del_g3.fill(0) + * del_u.fill(0) */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; } } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":702 - * return have_slices or nslices, tuple(result) - * - * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< - * for suboffset in suboffsets[:ndim]: - * if suboffset >= 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":556 + * del_g1.fill(0) + * del_g2.fill(0) + * del_g3.fill(0) # <<<<<<<<<<<<<< + * del_u.fill(0) + * del_i.fill(0) */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.assert_direct_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":712 - * - * @cname('__pyx_memview_slice') - * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< - * cdef int new_ndim = 0, suboffset_dim = -1, dim - * cdef bint negative_step + /* "cornac/models/comparer/recom_comparer_sub.pyx":557 + * del_g2.fill(0) + * del_g3.fill(0) + * del_u.fill(0) # <<<<<<<<<<<<<< + * del_i.fill(0) + * del_a.fill(0) */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 557, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; -static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *__pyx_v_memview, PyObject *__pyx_v_indices) { - int __pyx_v_new_ndim; - int __pyx_v_suboffset_dim; - int __pyx_v_dim; - __Pyx_memviewslice __pyx_v_src; - __Pyx_memviewslice __pyx_v_dst; - __Pyx_memviewslice *__pyx_v_p_src; - struct __pyx_memoryviewslice_obj *__pyx_v_memviewsliceobj = 0; - __Pyx_memviewslice *__pyx_v_p_dst; - int *__pyx_v_p_suboffset_dim; - Py_ssize_t __pyx_v_start; - Py_ssize_t __pyx_v_stop; - Py_ssize_t __pyx_v_step; - int __pyx_v_have_start; - int __pyx_v_have_stop; - int __pyx_v_have_step; - PyObject *__pyx_v_index = NULL; - struct __pyx_memoryview_obj *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - struct __pyx_memoryview_obj *__pyx_t_4; - char *__pyx_t_5; - int __pyx_t_6; - Py_ssize_t __pyx_t_7; - PyObject *(*__pyx_t_8)(PyObject *); - PyObject *__pyx_t_9 = NULL; - Py_ssize_t __pyx_t_10; - int __pyx_t_11; - Py_ssize_t __pyx_t_12; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("memview_slice", 0); - - /* "View.MemoryView":713 - * @cname('__pyx_memview_slice') - * cdef memoryview memview_slice(memoryview memview, object indices): - * cdef int new_ndim = 0, suboffset_dim = -1, dim # <<<<<<<<<<<<<< - * cdef bint negative_step - * cdef __Pyx_memviewslice src, dst + /* "cornac/models/comparer/recom_comparer_sub.pyx":558 + * del_g3.fill(0) + * del_u.fill(0) + * del_i.fill(0) # <<<<<<<<<<<<<< + * del_a.fill(0) + * del_o.fill(0) */ - __pyx_v_new_ndim = 0; - __pyx_v_suboffset_dim = -1; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":720 - * - * - * memset(&dst, 0, sizeof(dst)) # <<<<<<<<<<<<<< - * - * cdef _memoryviewslice memviewsliceobj + /* "cornac/models/comparer/recom_comparer_sub.pyx":559 + * del_u.fill(0) + * del_i.fill(0) + * del_a.fill(0) # <<<<<<<<<<<<<< + * del_o.fill(0) + * del_g1_reg.fill(0) */ - (void)(memset((&__pyx_v_dst), 0, (sizeof(__pyx_v_dst)))); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 559, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 559, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":724 - * cdef _memoryviewslice memviewsliceobj - * - * assert memview.view.ndim > 0 # <<<<<<<<<<<<<< - * - * if isinstance(memview, _memoryviewslice): + /* "cornac/models/comparer/recom_comparer_sub.pyx":560 + * del_i.fill(0) + * del_a.fill(0) + * del_o.fill(0) # <<<<<<<<<<<<<< + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) */ - #ifndef CYTHON_WITHOUT_ASSERTIONS - if (unlikely(__pyx_assertions_enabled())) { - if (unlikely(!((__pyx_v_memview->view.ndim > 0) != 0))) { - PyErr_SetNone(PyExc_AssertionError); - __PYX_ERR(2, 724, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; } } - #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":726 - * assert memview.view.ndim > 0 - * - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * memviewsliceobj = memview - * p_src = &memviewsliceobj.from_slice + /* "cornac/models/comparer/recom_comparer_sub.pyx":561 + * del_a.fill(0) + * del_o.fill(0) + * del_g1_reg.fill(0) # <<<<<<<<<<<<<< + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) */ - __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":727 - * - * if isinstance(memview, _memoryviewslice): - * memviewsliceobj = memview # <<<<<<<<<<<<<< - * p_src = &memviewsliceobj.from_slice - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":562 + * del_o.fill(0) + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) # <<<<<<<<<<<<<< + * del_g3_reg.fill(0) + * del_u_reg.fill(0) */ - if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(2, 727, __pyx_L1_error) - __pyx_t_3 = ((PyObject *)__pyx_v_memview); - __Pyx_INCREF(__pyx_t_3); - __pyx_v_memviewsliceobj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); - __pyx_t_3 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 562, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":728 - * if isinstance(memview, _memoryviewslice): - * memviewsliceobj = memview - * p_src = &memviewsliceobj.from_slice # <<<<<<<<<<<<<< - * else: - * slice_copy(memview, &src) + /* "cornac/models/comparer/recom_comparer_sub.pyx":563 + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) # <<<<<<<<<<<<<< + * del_u_reg.fill(0) + * del_i_reg.fill(0) */ - __pyx_v_p_src = (&__pyx_v_memviewsliceobj->from_slice); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 563, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 563, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":726 - * assert memview.view.ndim > 0 - * - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * memviewsliceobj = memview - * p_src = &memviewsliceobj.from_slice + /* "cornac/models/comparer/recom_comparer_sub.pyx":564 + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) + * del_u_reg.fill(0) # <<<<<<<<<<<<<< + * del_i_reg.fill(0) + * del_a_reg.fill(0) */ - goto __pyx_L3; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":730 - * p_src = &memviewsliceobj.from_slice - * else: - * slice_copy(memview, &src) # <<<<<<<<<<<<<< - * p_src = &src - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":565 + * del_g3_reg.fill(0) + * del_u_reg.fill(0) + * del_i_reg.fill(0) # <<<<<<<<<<<<<< + * del_a_reg.fill(0) + * del_o_reg.fill(0) */ - /*else*/ { - __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_src)); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":731 - * else: - * slice_copy(memview, &src) - * p_src = &src # <<<<<<<<<<<<<< - * - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":566 + * del_u_reg.fill(0) + * del_i_reg.fill(0) + * del_a_reg.fill(0) # <<<<<<<<<<<<<< + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): */ - __pyx_v_p_src = (&__pyx_v_src); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 566, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } } - __pyx_L3:; + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":737 - * - * - * dst.memview = p_src.memview # <<<<<<<<<<<<<< - * dst.data = p_src.data - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":567 + * del_i_reg.fill(0) + * del_a_reg.fill(0) + * del_o_reg.fill(0) # <<<<<<<<<<<<<< + * with nogil, parallel(num_threads=n_threads): + * thread_id = get_thread_num() */ - __pyx_t_4 = __pyx_v_p_src->memview; - __pyx_v_dst.memview = __pyx_t_4; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":738 - * - * dst.memview = p_src.memview - * dst.data = p_src.data # <<<<<<<<<<<<<< - * - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":568 + * del_a_reg.fill(0) + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): */ - __pyx_t_5 = __pyx_v_p_src->data; - __pyx_v_dst.data = __pyx_t_5; + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel private(__pyx_v_thread_id) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_bpr_loss) reduction(+:__pyx_v_correct) reduction(+:__pyx_v_skipped) reduction(+:__pyx_v_aspect_bpr_loss) reduction(+:__pyx_v_aspect_correct) private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_7, __pyx_t_8, __pyx_t_9) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_n_threads) + #endif /* _OPENMP */ + { + #ifdef _OPENMP + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + Py_BEGIN_ALLOW_THREADS + #endif /* _OPENMP */ + /* Initialize private variables to invalid values */ + __pyx_v_thread_id = ((int)0xbad0bad0); - /* "View.MemoryView":743 - * - * - * cdef __Pyx_memviewslice *p_dst = &dst # <<<<<<<<<<<<<< - * cdef int *p_suboffset_dim = &suboffset_dim - * cdef Py_ssize_t start, stop, step + /* "cornac/models/comparer/recom_comparer_sub.pyx":569 + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): + * thread_id = get_thread_num() # <<<<<<<<<<<<<< + * for _ in prange(num_samples, schedule='guided'): + * # get user item aspect element */ - __pyx_v_p_dst = (&__pyx_v_dst); + __pyx_v_thread_id = recom_bpr::get_thread_num(); - /* "View.MemoryView":744 - * - * cdef __Pyx_memviewslice *p_dst = &dst - * cdef int *p_suboffset_dim = &suboffset_dim # <<<<<<<<<<<<<< - * cdef Py_ssize_t start, stop, step - * cdef bint have_start, have_stop, have_step + /* "cornac/models/comparer/recom_comparer_sub.pyx":570 + * with nogil, parallel(num_threads=n_threads): + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): # <<<<<<<<<<<<<< + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) */ - __pyx_v_p_suboffset_dim = (&__pyx_v_suboffset_dim); + __pyx_t_4 = __pyx_v_num_samples; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + double __pyx_parallel_temp2 = ((double)__PYX_NAN()); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + int __pyx_parallel_temp4 = ((int)0xbad0bad0); + int __pyx_parallel_temp5 = ((int)0xbad0bad0); + int __pyx_parallel_temp6 = ((int)0xbad0bad0); + int __pyx_parallel_temp7 = ((int)0xbad0bad0); + double __pyx_parallel_temp8 = ((double)__PYX_NAN()); + int __pyx_parallel_temp9 = ((int)0xbad0bad0); + double __pyx_parallel_temp10 = ((double)__PYX_NAN()); + double __pyx_parallel_temp11 = ((double)__PYX_NAN()); + int __pyx_parallel_temp12 = ((int)0xbad0bad0); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_8 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_8 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_del_sqerror) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_o_idx) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_score) lastprivate(__pyx_v_u_idx) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){ + if (__pyx_parallel_why < 2) + { + __pyx_v__ = (int)(0 + 1 * __pyx_t_7); + /* Initialize private variables to invalid values */ + __pyx_v_a_idx = ((int)0xbad0bad0); + __pyx_v_del_sqerror = ((double)__PYX_NAN()); + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_i_idx = ((int)0xbad0bad0); + __pyx_v_idx = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_o_idx = ((int)0xbad0bad0); + __pyx_v_pred = ((double)__PYX_NAN()); + __pyx_v_score = ((double)__PYX_NAN()); + __pyx_v_u_idx = ((int)0xbad0bad0); - /* "View.MemoryView":748 - * cdef bint have_start, have_stop, have_step - * - * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< - * if PyIndex_Check(index): - * slice_memviewslice( + /* "cornac/models/comparer/recom_comparer_sub.pyx":572 + * for _ in prange(num_samples, schedule='guided'): + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] */ - __pyx_t_6 = 0; - if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) { - __pyx_t_3 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0; - __pyx_t_8 = NULL; - } else { - __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 748, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 748, __pyx_L1_error) - } - for (;;) { - if (likely(!__pyx_t_8)) { - if (likely(PyList_CheckExact(__pyx_t_3))) { - if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(2, 748, __pyx_L1_error) - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 748, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - #endif - } else { - if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(2, 748, __pyx_L1_error) - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 748, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - #endif - } - } else { - __pyx_t_9 = __pyx_t_8(__pyx_t_3); - if (unlikely(!__pyx_t_9)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(2, 748, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_9); - } - __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_9); - __pyx_t_9 = 0; - __pyx_v_dim = __pyx_t_6; - __pyx_t_6 = (__pyx_t_6 + 1); + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uia->__pyx_vtab)->generate(__pyx_v_rng_pos_uia, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 572, __pyx_L12_error) + __pyx_v_idx = __pyx_t_3; - /* "View.MemoryView":749 - * - * for dim, index in enumerate(indices): - * if PyIndex_Check(index): # <<<<<<<<<<<<<< - * slice_memviewslice( - * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + /* "cornac/models/comparer/recom_comparer_sub.pyx":573 + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) + * u_idx = X_uids[idx] # <<<<<<<<<<<<<< + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] */ - __pyx_t_2 = (PyIndex_Check(__pyx_v_index) != 0); - if (__pyx_t_2) { + __pyx_t_9 = __pyx_v_idx; + __pyx_v_u_idx = (*((int *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_9 * __pyx_v_X_uids.strides[0]) ))); - /* "View.MemoryView":753 - * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], - * dim, new_ndim, p_suboffset_dim, - * index, 0, 0, # start, stop, step # <<<<<<<<<<<<<< - * 0, 0, 0, # have_{start,stop,step} - * False) + /* "cornac/models/comparer/recom_comparer_sub.pyx":574 + * idx = rng_pos_uia.generate(thread_id) + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] # <<<<<<<<<<<<<< + * a_idx = X_aids[idx] + * score = X[idx] */ - __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 753, __pyx_L1_error) + __pyx_t_9 = __pyx_v_idx; + __pyx_v_i_idx = (*((int *) ( /* dim=0 */ (__pyx_v_X_iids.data + __pyx_t_9 * __pyx_v_X_iids.strides[0]) ))); - /* "View.MemoryView":750 - * for dim, index in enumerate(indices): - * if PyIndex_Check(index): - * slice_memviewslice( # <<<<<<<<<<<<<< - * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], - * dim, new_ndim, p_suboffset_dim, + /* "cornac/models/comparer/recom_comparer_sub.pyx":575 + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] # <<<<<<<<<<<<<< + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) */ - __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_t_10, 0, 0, 0, 0, 0, 0); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 750, __pyx_L1_error) + __pyx_t_9 = __pyx_v_idx; + __pyx_v_a_idx = (*((int *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_9 * __pyx_v_X_aids.strides[0]) ))); - /* "View.MemoryView":749 - * - * for dim, index in enumerate(indices): - * if PyIndex_Check(index): # <<<<<<<<<<<<<< - * slice_memviewslice( - * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + /* "cornac/models/comparer/recom_comparer_sub.pyx":576 + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] + * score = X[idx] # <<<<<<<<<<<<<< + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * loss += (pred - score) * (pred - score) */ - goto __pyx_L6; - } + __pyx_t_9 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_9 * __pyx_v_X.strides[0]) ))); - /* "View.MemoryView":756 - * 0, 0, 0, # have_{start,stop,step} - * False) - * elif index is None: # <<<<<<<<<<<<<< - * p_dst.shape[new_ndim] = 1 - * p_dst.strides[new_ndim] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":577 + * a_idx = X_aids[idx] + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) + * */ - __pyx_t_2 = (__pyx_v_index == Py_None); - __pyx_t_1 = (__pyx_t_2 != 0); - if (__pyx_t_1) { + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 577, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; - /* "View.MemoryView":757 - * False) - * elif index is None: - * p_dst.shape[new_ndim] = 1 # <<<<<<<<<<<<<< - * p_dst.strides[new_ndim] = 0 - * p_dst.suboffsets[new_ndim] = -1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":578 + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< + * + * del_sqerror = 2 * (pred - score) */ - (__pyx_v_p_dst->shape[__pyx_v_new_ndim]) = 1; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "View.MemoryView":758 - * elif index is None: - * p_dst.shape[new_ndim] = 1 - * p_dst.strides[new_ndim] = 0 # <<<<<<<<<<<<<< - * p_dst.suboffsets[new_ndim] = -1 - * new_ndim += 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":580 + * loss += (pred - score) * (pred - score) + * + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * for i in range(n_user_factors): + * for j in range(n_item_factors): */ - (__pyx_v_p_dst->strides[__pyx_v_new_ndim]) = 0; + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "View.MemoryView":759 - * p_dst.shape[new_ndim] = 1 - * p_dst.strides[new_ndim] = 0 - * p_dst.suboffsets[new_ndim] = -1 # <<<<<<<<<<<<<< - * new_ndim += 1 - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":581 + * + * del_sqerror = 2 * (pred - score) + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): */ - (__pyx_v_p_dst->suboffsets[__pyx_v_new_ndim]) = -1L; + __pyx_t_3 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "View.MemoryView":760 - * p_dst.strides[new_ndim] = 0 - * p_dst.suboffsets[new_ndim] = -1 - * new_ndim += 1 # <<<<<<<<<<<<<< - * else: - * start = index.start or 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":582 + * del_sqerror = 2 * (pred - score) + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] */ - __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "View.MemoryView":756 - * 0, 0, 0, # have_{start,stop,step} - * False) - * elif index is None: # <<<<<<<<<<<<<< - * p_dst.shape[new_ndim] = 1 - * p_dst.strides[new_ndim] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":583 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] */ - goto __pyx_L6; - } + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* "View.MemoryView":762 - * new_ndim += 1 - * else: - * start = index.start or 0 # <<<<<<<<<<<<<< - * stop = index.stop or 0 - * step = index.step or 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":584 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] */ - /*else*/ { - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 762, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 762, __pyx_L1_error) - if (!__pyx_t_1) { - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } else { - __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 762, __pyx_L1_error) - __pyx_t_10 = __pyx_t_12; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L7_bool_binop_done; - } - __pyx_t_10 = 0; - __pyx_L7_bool_binop_done:; - __pyx_v_start = __pyx_t_10; + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_i_idx; + __pyx_t_20 = __pyx_v_j; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_k; + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_20 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":763 - * else: - * start = index.start or 0 - * stop = index.stop or 0 # <<<<<<<<<<<<<< - * step = index.step or 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":585 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 763, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 763, __pyx_L1_error) - if (!__pyx_t_1) { - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } else { - __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 763, __pyx_L1_error) - __pyx_t_10 = __pyx_t_12; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L9_bool_binop_done; - } - __pyx_t_10 = 0; - __pyx_L9_bool_binop_done:; - __pyx_v_stop = __pyx_t_10; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_i_idx; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":764 - * start = index.start or 0 - * stop = index.stop or 0 - * step = index.step or 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":586 + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] * - * have_start = index.start is not None */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 764, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 764, __pyx_L1_error) - if (!__pyx_t_1) { - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } else { - __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 764, __pyx_L1_error) - __pyx_t_10 = __pyx_t_12; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L11_bool_binop_done; - } - __pyx_t_10 = 0; - __pyx_L11_bool_binop_done:; - __pyx_v_step = __pyx_t_10; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_k; + __pyx_t_23 = __pyx_v_i_idx; + __pyx_t_24 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_25 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_20 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":766 - * step = index.step or 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":587 + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] # <<<<<<<<<<<<<< * - * have_start = index.start is not None # <<<<<<<<<<<<<< - * have_stop = index.stop is not None - * have_step = index.step is not None + * # get user aspect opinion element */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 766, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_1 = (__pyx_t_9 != Py_None); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_v_have_start = __pyx_t_1; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))); + } + } + } - /* "View.MemoryView":767 - * - * have_start = index.start is not None - * have_stop = index.stop is not None # <<<<<<<<<<<<<< - * have_step = index.step is not None + /* "cornac/models/comparer/recom_comparer_sub.pyx":590 * + * # get user aspect opinion element + * idx = rng_pos_uao.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 767, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_1 = (__pyx_t_9 != Py_None); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_v_have_stop = __pyx_t_1; + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uao->__pyx_vtab)->generate(__pyx_v_rng_pos_uao, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 590, __pyx_L12_error) + __pyx_v_idx = __pyx_t_3; - /* "View.MemoryView":768 - * have_start = index.start is not None - * have_stop = index.stop is not None - * have_step = index.step is not None # <<<<<<<<<<<<<< - * - * slice_memviewslice( + /* "cornac/models/comparer/recom_comparer_sub.pyx":591 + * # get user aspect opinion element + * idx = rng_pos_uao.generate(thread_id) + * u_idx = YU_uids[idx] # <<<<<<<<<<<<<< + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 768, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_1 = (__pyx_t_9 != Py_None); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_v_have_step = __pyx_t_1; + __pyx_t_25 = __pyx_v_idx; + __pyx_v_u_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YU_uids.data + __pyx_t_25 * __pyx_v_YU_uids.strides[0]) ))); - /* "View.MemoryView":770 - * have_step = index.step is not None - * - * slice_memviewslice( # <<<<<<<<<<<<<< - * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], - * dim, new_ndim, p_suboffset_dim, + /* "cornac/models/comparer/recom_comparer_sub.pyx":592 + * idx = rng_pos_uao.generate(thread_id) + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] # <<<<<<<<<<<<<< + * o_idx = YU_oids[idx] + * score = YU[idx] */ - __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_have_start, __pyx_v_have_stop, __pyx_v_have_step, 1); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 770, __pyx_L1_error) + __pyx_t_25 = __pyx_v_idx; + __pyx_v_a_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YU_aids.data + __pyx_t_25 * __pyx_v_YU_aids.strides[0]) ))); - /* "View.MemoryView":776 - * have_start, have_stop, have_step, - * True) - * new_ndim += 1 # <<<<<<<<<<<<<< - * - * if isinstance(memview, _memoryviewslice): + /* "cornac/models/comparer/recom_comparer_sub.pyx":593 + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] # <<<<<<<<<<<<<< + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) */ - __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); - } - __pyx_L6:; + __pyx_t_25 = __pyx_v_idx; + __pyx_v_o_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YU_oids.data + __pyx_t_25 * __pyx_v_YU_oids.strides[0]) ))); - /* "View.MemoryView":748 - * cdef bint have_start, have_stop, have_step - * - * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< - * if PyIndex_Check(index): - * slice_memviewslice( + /* "cornac/models/comparer/recom_comparer_sub.pyx":594 + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] + * score = YU[idx] # <<<<<<<<<<<<<< + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) */ - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_25 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_YU.data + __pyx_t_25 * __pyx_v_YU.strides[0]) ))); - /* "View.MemoryView":778 - * new_ndim += 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":595 + * o_idx = YU_oids[idx] + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) * - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * return memoryview_fromslice(dst, new_ndim, - * memviewsliceobj.to_object_func, */ - __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G2, __pyx_v_n_user_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_U, __pyx_v_A, __pyx_v_O, __pyx_v_u_idx, __pyx_v_a_idx, __pyx_v_o_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 595, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; - /* "View.MemoryView":779 + /* "cornac/models/comparer/recom_comparer_sub.pyx":596 + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< * - * if isinstance(memview, _memoryviewslice): - * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< - * memviewsliceobj.to_object_func, - * memviewsliceobj.to_dtype_func, + * del_sqerror = 2 * (pred - score) */ - __Pyx_XDECREF(((PyObject *)__pyx_r)); + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "View.MemoryView":780 - * if isinstance(memview, _memoryviewslice): - * return memoryview_fromslice(dst, new_ndim, - * memviewsliceobj.to_object_func, # <<<<<<<<<<<<<< - * memviewsliceobj.to_dtype_func, - * memview.dtype_is_object) + /* "cornac/models/comparer/recom_comparer_sub.pyx":598 + * loss += (pred - score) * (pred - score) + * + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * + * for i in range(n_user_factors): */ - if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(2, 780, __pyx_L1_error) } + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "View.MemoryView":781 - * return memoryview_fromslice(dst, new_ndim, - * memviewsliceobj.to_object_func, - * memviewsliceobj.to_dtype_func, # <<<<<<<<<<<<<< - * memview.dtype_is_object) - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":600 + * del_sqerror = 2 * (pred - score) + * + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): */ - if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(2, 781, __pyx_L1_error) } + __pyx_t_3 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "View.MemoryView":779 + /* "cornac/models/comparer/recom_comparer_sub.pyx":601 * - * if isinstance(memview, _memoryviewslice): - * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< - * memviewsliceobj.to_object_func, - * memviewsliceobj.to_dtype_func, + * for i in range(n_user_factors): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] */ - __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, __pyx_v_memviewsliceobj->to_object_func, __pyx_v_memviewsliceobj->to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 779, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(2, 779, __pyx_L1_error) - __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); - __pyx_t_3 = 0; - goto __pyx_L0; + __pyx_t_12 = __pyx_v_n_aspect_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "View.MemoryView":778 - * new_ndim += 1 - * - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * return memoryview_fromslice(dst, new_ndim, - * memviewsliceobj.to_object_func, + /* "cornac/models/comparer/recom_comparer_sub.pyx":602 + * for i in range(n_user_factors): + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] */ - } + __pyx_t_15 = __pyx_v_n_opinion_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* "View.MemoryView":784 - * memview.dtype_is_object) - * else: - * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< - * memview.dtype_is_object) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":603 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] */ - /*else*/ { - __Pyx_XDECREF(((PyObject *)__pyx_r)); + __pyx_t_25 = __pyx_v_u_idx; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_j; + __pyx_t_20 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":785 - * else: - * return memoryview_fromslice(dst, new_ndim, NULL, NULL, - * memview.dtype_is_object) # <<<<<<<<<<<<<< - * - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":604 + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] */ - __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, NULL, NULL, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 784, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_21 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_18 = __pyx_v_a_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_o_idx; + __pyx_t_24 = __pyx_v_k; + __pyx_t_23 = __pyx_v_u_idx; + __pyx_t_22 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_9 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_25 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":784 - * memview.dtype_is_object) - * else: - * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< - * memview.dtype_is_object) + /* "cornac/models/comparer/recom_comparer_sub.pyx":605 + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] * */ - if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(2, 784, __pyx_L1_error) - __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); - __pyx_t_3 = 0; - goto __pyx_L0; - } + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_18 = __pyx_v_u_idx; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + __pyx_t_22 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_24 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":712 + /* "cornac/models/comparer/recom_comparer_sub.pyx":606 + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< * - * @cname('__pyx_memview_slice') - * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< - * cdef int new_ndim = 0, suboffset_dim = -1, dim - * cdef bint negative_step + * # get item aspect opinion element */ + __pyx_t_21 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_18 = __pyx_v_u_idx; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_a_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_o_idx; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_24 * __pyx_v_A.strides[1]) )))); + } + } + } - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("View.MemoryView.memview_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_memviewsliceobj); - __Pyx_XDECREF(__pyx_v_index); - __Pyx_XGIVEREF((PyObject *)__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":809 + /* "cornac/models/comparer/recom_comparer_sub.pyx":609 * - * @cname('__pyx_memoryview_slice_memviewslice') - * cdef int slice_memviewslice( # <<<<<<<<<<<<<< - * __Pyx_memviewslice *dst, - * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, + * # get item aspect opinion element + * idx = rng_pos_iao.generate(thread_id) # <<<<<<<<<<<<<< + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] */ + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_iao->__pyx_vtab)->generate(__pyx_v_rng_pos_iao, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 609, __pyx_L12_error) + __pyx_v_idx = __pyx_t_3; -static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx_v_dst, Py_ssize_t __pyx_v_shape, Py_ssize_t __pyx_v_stride, Py_ssize_t __pyx_v_suboffset, int __pyx_v_dim, int __pyx_v_new_ndim, int *__pyx_v_suboffset_dim, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_stop, Py_ssize_t __pyx_v_step, int __pyx_v_have_start, int __pyx_v_have_stop, int __pyx_v_have_step, int __pyx_v_is_slice) { - Py_ssize_t __pyx_v_new_shape; - int __pyx_v_negative_step; - int __pyx_r; - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; + /* "cornac/models/comparer/recom_comparer_sub.pyx":610 + * # get item aspect opinion element + * idx = rng_pos_iao.generate(thread_id) + * i_idx = YI_iids[idx] # <<<<<<<<<<<<<< + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YI_iids.data + __pyx_t_24 * __pyx_v_YI_iids.strides[0]) ))); - /* "View.MemoryView":829 - * cdef bint negative_step - * - * if not is_slice: # <<<<<<<<<<<<<< - * - * if start < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":611 + * idx = rng_pos_iao.generate(thread_id) + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] # <<<<<<<<<<<<<< + * o_idx = YI_oids[idx] + * score = YI[idx] + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_a_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YI_aids.data + __pyx_t_24 * __pyx_v_YI_aids.strides[0]) ))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":612 + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] # <<<<<<<<<<<<<< + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) */ - __pyx_t_1 = ((!(__pyx_v_is_slice != 0)) != 0); - if (__pyx_t_1) { + __pyx_t_24 = __pyx_v_idx; + __pyx_v_o_idx = (*((int *) ( /* dim=0 */ (__pyx_v_YI_oids.data + __pyx_t_24 * __pyx_v_YI_oids.strides[0]) ))); - /* "View.MemoryView":831 - * if not is_slice: - * - * if start < 0: # <<<<<<<<<<<<<< - * start += shape - * if not 0 <= start < shape: + /* "cornac/models/comparer/recom_comparer_sub.pyx":613 + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] + * score = YI[idx] # <<<<<<<<<<<<<< + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) */ - __pyx_t_1 = ((__pyx_v_start < 0) != 0); - if (__pyx_t_1) { + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_YI.data + __pyx_t_24 * __pyx_v_YI.strides[0]) ))); - /* "View.MemoryView":832 + /* "cornac/models/comparer/recom_comparer_sub.pyx":614 + * o_idx = YI_oids[idx] + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) * - * if start < 0: - * start += shape # <<<<<<<<<<<<<< - * if not 0 <= start < shape: - * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) */ - __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G3, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_i_idx, __pyx_v_a_idx, __pyx_v_o_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 614, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; - /* "View.MemoryView":831 - * if not is_slice: + /* "cornac/models/comparer/recom_comparer_sub.pyx":615 + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< * - * if start < 0: # <<<<<<<<<<<<<< - * start += shape - * if not 0 <= start < shape: + * del_sqerror = 2 * (pred - score) */ - } + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "View.MemoryView":833 - * if start < 0: - * start += shape - * if not 0 <= start < shape: # <<<<<<<<<<<<<< - * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":617 + * loss += (pred - score) * (pred - score) + * + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): */ - __pyx_t_1 = (0 <= __pyx_v_start); - if (__pyx_t_1) { - __pyx_t_1 = (__pyx_v_start < __pyx_v_shape); - } - __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); - if (__pyx_t_2) { + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "View.MemoryView":834 - * start += shape - * if not 0 <= start < shape: - * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) # <<<<<<<<<<<<<< - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":618 * + * del_sqerror = 2 * (pred - score) + * for i in range(n_item_factors): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): */ - __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"Index out of bounds (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 834, __pyx_L1_error) + __pyx_t_3 = __pyx_v_n_item_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "View.MemoryView":833 - * if start < 0: - * start += shape - * if not 0 <= start < shape: # <<<<<<<<<<<<<< - * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":619 + * del_sqerror = 2 * (pred - score) + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] */ - } + __pyx_t_12 = __pyx_v_n_aspect_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "View.MemoryView":829 - * cdef bint negative_step - * - * if not is_slice: # <<<<<<<<<<<<<< - * - * if start < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":620 + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] */ - goto __pyx_L3; - } + __pyx_t_15 = __pyx_v_n_opinion_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* "View.MemoryView":837 - * else: - * - * negative_step = have_step != 0 and step < 0 # <<<<<<<<<<<<<< - * - * if have_step and step == 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":621 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] */ - /*else*/ { - __pyx_t_1 = ((__pyx_v_have_step != 0) != 0); - if (__pyx_t_1) { - } else { - __pyx_t_2 = __pyx_t_1; - goto __pyx_L6_bool_binop_done; - } - __pyx_t_1 = ((__pyx_v_step < 0) != 0); - __pyx_t_2 = __pyx_t_1; - __pyx_L6_bool_binop_done:; - __pyx_v_negative_step = __pyx_t_2; + __pyx_t_24 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_o_idx; + __pyx_t_20 = __pyx_v_k; + __pyx_t_21 = __pyx_v_i; + __pyx_t_22 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_24 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":839 - * negative_step = have_step != 0 and step < 0 - * - * if have_step and step == 0: # <<<<<<<<<<<<<< - * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":622 + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] */ - __pyx_t_1 = (__pyx_v_have_step != 0); - if (__pyx_t_1) { - } else { - __pyx_t_2 = __pyx_t_1; - goto __pyx_L9_bool_binop_done; - } - __pyx_t_1 = ((__pyx_v_step == 0) != 0); - __pyx_t_2 = __pyx_t_1; - __pyx_L9_bool_binop_done:; - if (__pyx_t_2) { + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_o_idx; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i_idx; + __pyx_t_21 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_23 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":840 - * - * if have_step and step == 0: - * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":623 + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] * */ - __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Step may not be zero (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 840, __pyx_L1_error) + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_o_idx; + __pyx_t_20 = __pyx_v_k; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_23 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":839 - * negative_step = have_step != 0 and step < 0 - * - * if have_step and step == 0: # <<<<<<<<<<<<<< - * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) + /* "cornac/models/comparer/recom_comparer_sub.pyx":624 + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< * + * for _ in prange(num_bpr_samples, schedule='guided'): */ - } + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_j; + __pyx_t_22 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); + } + } + } + goto __pyx_L33; + __pyx_L12_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L32; + __pyx_L32:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates12) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_a_idx; + __pyx_parallel_temp2 = __pyx_v_del_sqerror; + __pyx_parallel_temp3 = __pyx_v_i; + __pyx_parallel_temp4 = __pyx_v_i_idx; + __pyx_parallel_temp5 = __pyx_v_idx; + __pyx_parallel_temp6 = __pyx_v_j; + __pyx_parallel_temp7 = __pyx_v_k; + __pyx_parallel_temp8 = __pyx_v_loss; + __pyx_parallel_temp9 = __pyx_v_o_idx; + __pyx_parallel_temp10 = __pyx_v_pred; + __pyx_parallel_temp11 = __pyx_v_score; + __pyx_parallel_temp12 = __pyx_v_u_idx; + } + __pyx_L33:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_a_idx = __pyx_parallel_temp1; + __pyx_v_del_sqerror = __pyx_parallel_temp2; + __pyx_v_i = __pyx_parallel_temp3; + __pyx_v_i_idx = __pyx_parallel_temp4; + __pyx_v_idx = __pyx_parallel_temp5; + __pyx_v_j = __pyx_parallel_temp6; + __pyx_v_k = __pyx_parallel_temp7; + __pyx_v_loss = __pyx_parallel_temp8; + __pyx_v_o_idx = __pyx_parallel_temp9; + __pyx_v_pred = __pyx_parallel_temp10; + __pyx_v_score = __pyx_parallel_temp11; + __pyx_v_u_idx = __pyx_parallel_temp12; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } - /* "View.MemoryView":843 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":626 + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] * - * if have_start: # <<<<<<<<<<<<<< - * if start < 0: - * start += shape + * for _ in prange(num_bpr_samples, schedule='guided'): # <<<<<<<<<<<<<< + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] */ - __pyx_t_2 = (__pyx_v_have_start != 0); - if (__pyx_t_2) { + __pyx_t_8 = __pyx_v_num_bpr_samples; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + double __pyx_parallel_temp1 = ((double)__PYX_NAN()); + long __pyx_parallel_temp2 = ((long)0xbad0bad0); + double __pyx_parallel_temp3 = ((double)__PYX_NAN()); + int __pyx_parallel_temp4 = ((int)0xbad0bad0); + int __pyx_parallel_temp5 = ((int)0xbad0bad0); + double __pyx_parallel_temp6 = ((double)__PYX_NAN()); + double __pyx_parallel_temp7 = ((double)__PYX_NAN()); + int __pyx_parallel_temp8 = ((int)0xbad0bad0); + int __pyx_parallel_temp9 = ((int)0xbad0bad0); + int __pyx_parallel_temp10 = ((int)0xbad0bad0); + double __pyx_parallel_temp11 = ((double)__PYX_NAN()); + int __pyx_parallel_temp12 = ((int)0xbad0bad0); + int __pyx_parallel_temp13 = ((int)0xbad0bad0); + double __pyx_parallel_temp14 = ((double)__PYX_NAN()); + long __pyx_parallel_temp15 = ((long)0xbad0bad0); + long __pyx_parallel_temp16 = ((long)0xbad0bad0); + int __pyx_parallel_temp17 = ((int)0xbad0bad0); + double __pyx_parallel_temp18 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_4 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_4 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_del_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_i_ij) lastprivate(__pyx_v_i_score) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_j_score) lastprivate(__pyx_v_jdx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_s) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_4; __pyx_t_7++){ + if (__pyx_parallel_why < 2) + { + __pyx_v__ = (int)(0 + 1 * __pyx_t_7); + /* Initialize private variables to invalid values */ + __pyx_v_del_bpr = ((double)__PYX_NAN()); + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_i_idx = ((int)0xbad0bad0); + __pyx_v_i_ij = ((double)__PYX_NAN()); + __pyx_v_i_score = ((double)__PYX_NAN()); + __pyx_v_idx = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_j_idx = ((int)0xbad0bad0); + __pyx_v_j_score = ((double)__PYX_NAN()); + __pyx_v_jdx = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_pred = ((double)__PYX_NAN()); + __pyx_v_s = ((long)0xbad0bad0); + __pyx_v_u_idx = ((int)0xbad0bad0); + __pyx_v_z = ((double)__PYX_NAN()); - /* "View.MemoryView":844 + /* "cornac/models/comparer/recom_comparer_sub.pyx":627 * - * if have_start: - * if start < 0: # <<<<<<<<<<<<<< - * start += shape - * if start < 0: - */ - __pyx_t_2 = ((__pyx_v_start < 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":845 - * if have_start: - * if start < 0: - * start += shape # <<<<<<<<<<<<<< - * if start < 0: - * start = 0 + * for _ in prange(num_bpr_samples, schedule='guided'): + * idx = rng_pos.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] */ - __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos->__pyx_vtab)->generate(__pyx_v_rng_pos, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 627, __pyx_L36_error) + __pyx_v_idx = __pyx_t_3; - /* "View.MemoryView":846 - * if start < 0: - * start += shape - * if start < 0: # <<<<<<<<<<<<<< - * start = 0 - * elif start >= shape: + /* "cornac/models/comparer/recom_comparer_sub.pyx":628 + * for _ in prange(num_bpr_samples, schedule='guided'): + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] # <<<<<<<<<<<<<< + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) */ - __pyx_t_2 = ((__pyx_v_start < 0) != 0); - if (__pyx_t_2) { + __pyx_t_23 = __pyx_v_idx; + __pyx_v_u_idx = (*((int *) ( /* dim=0 */ (__pyx_v_user_ids.data + __pyx_t_23 * __pyx_v_user_ids.strides[0]) ))); - /* "View.MemoryView":847 - * start += shape - * if start < 0: - * start = 0 # <<<<<<<<<<<<<< - * elif start >= shape: - * if negative_step: + /* "cornac/models/comparer/recom_comparer_sub.pyx":629 + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] # <<<<<<<<<<<<<< + * jdx = rng_neg.generate(thread_id) + * j_idx = neg_item_ids[jdx] */ - __pyx_v_start = 0; + __pyx_t_23 = __pyx_v_idx; + __pyx_v_i_idx = (*((int *) ( /* dim=0 */ (__pyx_v_item_ids.data + __pyx_t_23 * __pyx_v_item_ids.strides[0]) ))); - /* "View.MemoryView":846 - * if start < 0: - * start += shape - * if start < 0: # <<<<<<<<<<<<<< - * start = 0 - * elif start >= shape: + /* "cornac/models/comparer/recom_comparer_sub.pyx":630 + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) # <<<<<<<<<<<<<< + * j_idx = neg_item_ids[jdx] + * */ - } + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_neg->__pyx_vtab)->generate(__pyx_v_rng_neg, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 630, __pyx_L36_error) + __pyx_v_jdx = __pyx_t_3; - /* "View.MemoryView":844 + /* "cornac/models/comparer/recom_comparer_sub.pyx":631 + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) + * j_idx = neg_item_ids[jdx] # <<<<<<<<<<<<<< * - * if have_start: - * if start < 0: # <<<<<<<<<<<<<< - * start += shape - * if start < 0: + * s = 1 */ - goto __pyx_L12; - } + __pyx_t_23 = __pyx_v_jdx; + __pyx_v_j_idx = (*((int *) ( /* dim=0 */ (__pyx_v_neg_item_ids.data + __pyx_t_23 * __pyx_v_neg_item_ids.strides[0]) ))); - /* "View.MemoryView":848 - * if start < 0: - * start = 0 - * elif start >= shape: # <<<<<<<<<<<<<< - * if negative_step: - * start = shape - 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":633 + * j_idx = neg_item_ids[jdx] + * + * s = 1 # <<<<<<<<<<<<<< + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): */ - __pyx_t_2 = ((__pyx_v_start >= __pyx_v_shape) != 0); - if (__pyx_t_2) { + __pyx_v_s = 1; - /* "View.MemoryView":849 - * start = 0 - * elif start >= shape: - * if negative_step: # <<<<<<<<<<<<<< - * start = shape - 1 - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":635 + * s = 1 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] */ - __pyx_t_2 = (__pyx_v_negative_step != 0); - if (__pyx_t_2) { + __pyx_t_26 = __pyx_fuse_1__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero(__pyx_v_indptr, __pyx_v_item_ids, __pyx_v_u_idx, __pyx_v_j_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 635, __pyx_L36_error) + __pyx_t_27 = (__pyx_t_26 != 0); + if (__pyx_t_27) { - /* "View.MemoryView":850 - * elif start >= shape: - * if negative_step: - * start = shape - 1 # <<<<<<<<<<<<<< - * else: - * start = shape + /* "cornac/models/comparer/recom_comparer_sub.pyx":636 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] # <<<<<<<<<<<<<< + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: */ - __pyx_v_start = (__pyx_v_shape - 1); + __pyx_t_11 = __pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_i_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 636, __pyx_L36_error) + __pyx_v_i_score = (__pyx_v_rating_dict->my_map[__pyx_t_11]); - /* "View.MemoryView":849 - * start = 0 - * elif start >= shape: - * if negative_step: # <<<<<<<<<<<<<< - * start = shape - 1 - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":637 + * if has_non_zero(indptr, item_ids, u_idx, j_idx): + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] # <<<<<<<<<<<<<< + * if i_score == j_score: + * skipped += 1 */ - goto __pyx_L14; - } + __pyx_t_11 = __pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_j_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 637, __pyx_L36_error) + __pyx_v_j_score = (__pyx_v_rating_dict->my_map[__pyx_t_11]); - /* "View.MemoryView":852 - * start = shape - 1 - * else: - * start = shape # <<<<<<<<<<<<<< - * else: - * if negative_step: + /* "cornac/models/comparer/recom_comparer_sub.pyx":638 + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: # <<<<<<<<<<<<<< + * skipped += 1 + * continue */ - /*else*/ { - __pyx_v_start = __pyx_v_shape; - } - __pyx_L14:; + __pyx_t_27 = (__pyx_v_i_score == __pyx_v_j_score); + if (__pyx_t_27) { - /* "View.MemoryView":848 - * if start < 0: - * start = 0 - * elif start >= shape: # <<<<<<<<<<<<<< - * if negative_step: - * start = shape - 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":639 + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: + * skipped += 1 # <<<<<<<<<<<<<< + * continue + * elif i_score < j_score: */ - } - __pyx_L12:; + __pyx_v_skipped = (__pyx_v_skipped + 1); - /* "View.MemoryView":843 - * - * - * if have_start: # <<<<<<<<<<<<<< - * if start < 0: - * start += shape + /* "cornac/models/comparer/recom_comparer_sub.pyx":640 + * if i_score == j_score: + * skipped += 1 + * continue # <<<<<<<<<<<<<< + * elif i_score < j_score: + * s = -1 */ - goto __pyx_L11; - } + goto __pyx_L34_continue; - /* "View.MemoryView":854 - * start = shape - * else: - * if negative_step: # <<<<<<<<<<<<<< - * start = shape - 1 - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":638 + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: # <<<<<<<<<<<<<< + * skipped += 1 + * continue */ - /*else*/ { - __pyx_t_2 = (__pyx_v_negative_step != 0); - if (__pyx_t_2) { + } - /* "View.MemoryView":855 - * else: - * if negative_step: - * start = shape - 1 # <<<<<<<<<<<<<< - * else: - * start = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":641 + * skipped += 1 + * continue + * elif i_score < j_score: # <<<<<<<<<<<<<< + * s = -1 + * */ - __pyx_v_start = (__pyx_v_shape - 1); + __pyx_t_27 = (__pyx_v_i_score < __pyx_v_j_score); + if (__pyx_t_27) { - /* "View.MemoryView":854 - * start = shape - * else: - * if negative_step: # <<<<<<<<<<<<<< - * start = shape - 1 - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":642 + * continue + * elif i_score < j_score: + * s = -1 # <<<<<<<<<<<<<< + * + * pred = ( */ - goto __pyx_L15; - } + __pyx_v_s = -1L; - /* "View.MemoryView":857 - * start = shape - 1 - * else: - * start = 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":641 + * skipped += 1 + * continue + * elif i_score < j_score: # <<<<<<<<<<<<<< + * s = -1 * - * if have_stop: */ - /*else*/ { - __pyx_v_start = 0; - } - __pyx_L15:; - } - __pyx_L11:; + } - /* "View.MemoryView":859 - * start = 0 - * - * if have_stop: # <<<<<<<<<<<<<< - * if stop < 0: - * stop += shape + /* "cornac/models/comparer/recom_comparer_sub.pyx":635 + * s = 1 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] */ - __pyx_t_2 = (__pyx_v_have_stop != 0); - if (__pyx_t_2) { + } - /* "View.MemoryView":860 + /* "cornac/models/comparer/recom_comparer_sub.pyx":645 * - * if have_stop: - * if stop < 0: # <<<<<<<<<<<<<< - * stop += shape - * if stop < 0: + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) # <<<<<<<<<<<<<< + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s */ - __pyx_t_2 = ((__pyx_v_stop < 0) != 0); - if (__pyx_t_2) { + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_n_aspects); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 645, __pyx_L36_error) - /* "View.MemoryView":861 - * if have_stop: - * if stop < 0: - * stop += shape # <<<<<<<<<<<<<< - * if stop < 0: - * stop = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":646 + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) # <<<<<<<<<<<<<< + * ) * s + * z = (1.0 / (1.0 + exp(pred))) */ - __pyx_v_stop = (__pyx_v_stop + __pyx_v_shape); + __pyx_t_28 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_n_aspects); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 646, __pyx_L36_error) - /* "View.MemoryView":862 - * if stop < 0: - * stop += shape - * if stop < 0: # <<<<<<<<<<<<<< - * stop = 0 - * elif stop > shape: + /* "cornac/models/comparer/recom_comparer_sub.pyx":647 + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s # <<<<<<<<<<<<<< + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: */ - __pyx_t_2 = ((__pyx_v_stop < 0) != 0); - if (__pyx_t_2) { + __pyx_v_pred = ((__pyx_t_5 - __pyx_t_28) * __pyx_v_s); - /* "View.MemoryView":863 - * stop += shape - * if stop < 0: - * stop = 0 # <<<<<<<<<<<<<< - * elif stop > shape: - * stop = shape + /* "cornac/models/comparer/recom_comparer_sub.pyx":648 + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s + * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< + * if z < .5: + * correct += 1 */ - __pyx_v_stop = 0; + __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); - /* "View.MemoryView":862 - * if stop < 0: - * stop += shape - * if stop < 0: # <<<<<<<<<<<<<< - * stop = 0 - * elif stop > shape: + /* "cornac/models/comparer/recom_comparer_sub.pyx":649 + * ) * s + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * correct += 1 + * del_bpr = ld_bpr * z * s */ - } + __pyx_t_27 = (__pyx_v_z < .5); + if (__pyx_t_27) { - /* "View.MemoryView":860 + /* "cornac/models/comparer/recom_comparer_sub.pyx":650 + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: + * correct += 1 # <<<<<<<<<<<<<< + * del_bpr = ld_bpr * z * s * - * if have_stop: - * if stop < 0: # <<<<<<<<<<<<<< - * stop += shape - * if stop < 0: */ - goto __pyx_L17; - } + __pyx_v_correct = (__pyx_v_correct + 1); - /* "View.MemoryView":864 - * if stop < 0: - * stop = 0 - * elif stop > shape: # <<<<<<<<<<<<<< - * stop = shape - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":649 + * ) * s + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * correct += 1 + * del_bpr = ld_bpr * z * s */ - __pyx_t_2 = ((__pyx_v_stop > __pyx_v_shape) != 0); - if (__pyx_t_2) { + } - /* "View.MemoryView":865 - * stop = 0 - * elif stop > shape: - * stop = shape # <<<<<<<<<<<<<< - * else: - * if negative_step: + /* "cornac/models/comparer/recom_comparer_sub.pyx":651 + * if z < .5: + * correct += 1 + * del_bpr = ld_bpr * z * s # <<<<<<<<<<<<<< + * + * bpr_loss += log(1 / (1 + exp(-pred))) */ - __pyx_v_stop = __pyx_v_shape; + __pyx_v_del_bpr = ((__pyx_v_ld_bpr * __pyx_v_z) * __pyx_v_s); - /* "View.MemoryView":864 - * if stop < 0: - * stop = 0 - * elif stop > shape: # <<<<<<<<<<<<<< - * stop = shape - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":653 + * del_bpr = ld_bpr * z * s + * + * bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< + * + * for i in range(n_user_factors): */ - } - __pyx_L17:; + __pyx_v_bpr_loss = (__pyx_v_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); - /* "View.MemoryView":859 - * start = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":655 + * bpr_loss += log(1 / (1 + exp(-pred))) * - * if have_stop: # <<<<<<<<<<<<<< - * if stop < 0: - * stop += shape + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] */ - goto __pyx_L16; - } + __pyx_t_3 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "View.MemoryView":867 - * stop = shape - * else: - * if negative_step: # <<<<<<<<<<<<<< - * stop = -1 - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":656 + * + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): */ - /*else*/ { - __pyx_t_2 = (__pyx_v_negative_step != 0); - if (__pyx_t_2) { + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "View.MemoryView":868 - * else: - * if negative_step: - * stop = -1 # <<<<<<<<<<<<<< - * else: - * stop = shape + /* "cornac/models/comparer/recom_comparer_sub.pyx":657 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] */ - __pyx_v_stop = -1L; + __pyx_t_23 = __pyx_v_i_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_j_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_v_i_ij = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); - /* "View.MemoryView":867 - * stop = shape - * else: - * if negative_step: # <<<<<<<<<<<<<< - * stop = -1 - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":658 + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] */ - goto __pyx_L19; - } + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* "View.MemoryView":870 - * stop = -1 - * else: - * stop = shape # <<<<<<<<<<<<<< - * - * if not have_step: + /* "cornac/models/comparer/recom_comparer_sub.pyx":659 + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] */ - /*else*/ { - __pyx_v_stop = __pyx_v_shape; - } - __pyx_L19:; - } - __pyx_L16:; + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_n_aspects; + __pyx_t_23 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":872 - * stop = shape - * - * if not have_step: # <<<<<<<<<<<<<< - * step = 1 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":660 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] */ - __pyx_t_2 = ((!(__pyx_v_have_step != 0)) != 0); - if (__pyx_t_2) { + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_n_aspects; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_i_ij) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":873 - * - * if not have_step: - * step = 1 # <<<<<<<<<<<<<< - * - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":661 + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij */ - __pyx_v_step = 1; + __pyx_t_20 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_18 = __pyx_v_n_aspects; + __pyx_t_19 = __pyx_v_k; + __pyx_t_21 = __pyx_v_i_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":872 - * stop = shape - * - * if not have_step: # <<<<<<<<<<<<<< - * step = 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":662 + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij * */ - } + __pyx_t_19 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_n_aspects; + __pyx_t_20 = __pyx_v_k; + __pyx_t_22 = __pyx_v_j_idx; + __pyx_t_21 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_18 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":877 - * - * with cython.cdivision(True): - * new_shape = (stop - start) // step # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":663 + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij # <<<<<<<<<<<<<< * - * if (stop - start) - step * new_shape: + * for _ in prange(num_pair_samples, schedule='guided'): */ - __pyx_v_new_shape = ((__pyx_v_stop - __pyx_v_start) / __pyx_v_step); + __pyx_t_20 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_18 = __pyx_v_n_aspects; + __pyx_t_19 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij); + } + } + } + goto __pyx_L48; + __pyx_L34_continue:; + goto __pyx_L48; + __pyx_L36_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L47; + __pyx_L47:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates13) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_bpr_loss; + __pyx_parallel_temp2 = __pyx_v_correct; + __pyx_parallel_temp3 = __pyx_v_del_bpr; + __pyx_parallel_temp4 = __pyx_v_i; + __pyx_parallel_temp5 = __pyx_v_i_idx; + __pyx_parallel_temp6 = __pyx_v_i_ij; + __pyx_parallel_temp7 = __pyx_v_i_score; + __pyx_parallel_temp8 = __pyx_v_idx; + __pyx_parallel_temp9 = __pyx_v_j; + __pyx_parallel_temp10 = __pyx_v_j_idx; + __pyx_parallel_temp11 = __pyx_v_j_score; + __pyx_parallel_temp12 = __pyx_v_jdx; + __pyx_parallel_temp13 = __pyx_v_k; + __pyx_parallel_temp14 = __pyx_v_pred; + __pyx_parallel_temp15 = __pyx_v_s; + __pyx_parallel_temp16 = __pyx_v_skipped; + __pyx_parallel_temp17 = __pyx_v_u_idx; + __pyx_parallel_temp18 = __pyx_v_z; + } + __pyx_L48:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_bpr_loss = __pyx_parallel_temp1; + __pyx_v_correct = __pyx_parallel_temp2; + __pyx_v_del_bpr = __pyx_parallel_temp3; + __pyx_v_i = __pyx_parallel_temp4; + __pyx_v_i_idx = __pyx_parallel_temp5; + __pyx_v_i_ij = __pyx_parallel_temp6; + __pyx_v_i_score = __pyx_parallel_temp7; + __pyx_v_idx = __pyx_parallel_temp8; + __pyx_v_j = __pyx_parallel_temp9; + __pyx_v_j_idx = __pyx_parallel_temp10; + __pyx_v_j_score = __pyx_parallel_temp11; + __pyx_v_jdx = __pyx_parallel_temp12; + __pyx_v_k = __pyx_parallel_temp13; + __pyx_v_pred = __pyx_parallel_temp14; + __pyx_v_s = __pyx_parallel_temp15; + __pyx_v_skipped = __pyx_parallel_temp16; + __pyx_v_u_idx = __pyx_parallel_temp17; + __pyx_v_z = __pyx_parallel_temp18; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } - /* "View.MemoryView":879 - * new_shape = (stop - start) // step - * - * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< - * new_shape += 1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":665 + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij * + * for _ in prange(num_pair_samples, schedule='guided'): # <<<<<<<<<<<<<< + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] */ - __pyx_t_2 = (((__pyx_v_stop - __pyx_v_start) - (__pyx_v_step * __pyx_v_new_shape)) != 0); - if (__pyx_t_2) { + __pyx_t_4 = __pyx_v_num_pair_samples; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + double __pyx_parallel_temp2 = ((double)__PYX_NAN()); + double __pyx_parallel_temp3 = ((double)__PYX_NAN()); + long __pyx_parallel_temp4 = ((long)0xbad0bad0); + double __pyx_parallel_temp5 = ((double)__PYX_NAN()); + int __pyx_parallel_temp6 = ((int)0xbad0bad0); + int __pyx_parallel_temp7 = ((int)0xbad0bad0); + int __pyx_parallel_temp8 = ((int)0xbad0bad0); + int __pyx_parallel_temp9 = ((int)0xbad0bad0); + int __pyx_parallel_temp10 = ((int)0xbad0bad0); + int __pyx_parallel_temp11 = ((int)0xbad0bad0); + double __pyx_parallel_temp12 = ((double)__PYX_NAN()); + int __pyx_parallel_temp13 = ((int)0xbad0bad0); + double __pyx_parallel_temp14 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_8 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_8 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_a_ji) lastprivate(__pyx_v_del_aspect_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){ + if (__pyx_parallel_why < 2) + { + __pyx_v__ = (int)(0 + 1 * __pyx_t_7); + /* Initialize private variables to invalid values */ + __pyx_v_a_idx = ((int)0xbad0bad0); + __pyx_v_a_ji = ((double)__PYX_NAN()); + __pyx_v_del_aspect_bpr = ((double)__PYX_NAN()); + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_i_idx = ((int)0xbad0bad0); + __pyx_v_idx = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_j_idx = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_pred = ((double)__PYX_NAN()); + __pyx_v_u_idx = ((int)0xbad0bad0); + __pyx_v_z = ((double)__PYX_NAN()); - /* "View.MemoryView":880 - * - * if (stop - start) - step * new_shape: - * new_shape += 1 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":666 * - * if new_shape < 0: + * for _ in prange(num_pair_samples, schedule='guided'): + * idx = rng_pos_pair.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] */ - __pyx_v_new_shape = (__pyx_v_new_shape + 1); + __pyx_t_3 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_pair->__pyx_vtab)->generate(__pyx_v_rng_pos_pair, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 666, __pyx_L51_error) + __pyx_v_idx = __pyx_t_3; - /* "View.MemoryView":879 - * new_shape = (stop - start) // step - * - * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< - * new_shape += 1 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":667 + * for _ in prange(num_pair_samples, schedule='guided'): + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] # <<<<<<<<<<<<<< + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] */ - } + __pyx_t_23 = __pyx_v_idx; + __pyx_v_u_idx = (*((int *) ( /* dim=0 */ (__pyx_v_p_user_indices.data + __pyx_t_23 * __pyx_v_p_user_indices.strides[0]) ))); - /* "View.MemoryView":882 - * new_shape += 1 - * - * if new_shape < 0: # <<<<<<<<<<<<<< - * new_shape = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":668 + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] # <<<<<<<<<<<<<< + * j_idx = later_indices[idx] + * a_idx = aspect_indices[idx] */ - __pyx_t_2 = ((__pyx_v_new_shape < 0) != 0); - if (__pyx_t_2) { + __pyx_t_23 = __pyx_v_idx; + __pyx_v_i_idx = (*((int *) ( /* dim=0 */ (__pyx_v_earlier_indices.data + __pyx_t_23 * __pyx_v_earlier_indices.strides[0]) ))); - /* "View.MemoryView":883 - * - * if new_shape < 0: - * new_shape = 0 # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":669 + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] # <<<<<<<<<<<<<< + * a_idx = aspect_indices[idx] * */ - __pyx_v_new_shape = 0; + __pyx_t_23 = __pyx_v_idx; + __pyx_v_j_idx = (*((int *) ( /* dim=0 */ (__pyx_v_later_indices.data + __pyx_t_23 * __pyx_v_later_indices.strides[0]) ))); - /* "View.MemoryView":882 - * new_shape += 1 - * - * if new_shape < 0: # <<<<<<<<<<<<<< - * new_shape = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":670 + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] + * a_idx = aspect_indices[idx] # <<<<<<<<<<<<<< * + * pred = ( */ - } + __pyx_t_23 = __pyx_v_idx; + __pyx_v_a_idx = (*((int *) ( /* dim=0 */ (__pyx_v_aspect_indices.data + __pyx_t_23 * __pyx_v_aspect_indices.strides[0]) ))); - /* "View.MemoryView":886 + /* "cornac/models/comparer/recom_comparer_sub.pyx":673 * - * - * dst.strides[new_ndim] = stride * step # <<<<<<<<<<<<<< - * dst.shape[new_ndim] = new_shape - * dst.suboffsets[new_ndim] = suboffset + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) # <<<<<<<<<<<<<< + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * ) */ - (__pyx_v_dst->strides[__pyx_v_new_ndim]) = (__pyx_v_stride * __pyx_v_step); + __pyx_t_28 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 673, __pyx_L51_error) - /* "View.MemoryView":887 - * - * dst.strides[new_ndim] = stride * step - * dst.shape[new_ndim] = new_shape # <<<<<<<<<<<<<< - * dst.suboffsets[new_ndim] = suboffset + /* "cornac/models/comparer/recom_comparer_sub.pyx":674 + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< + * ) * */ - (__pyx_v_dst->shape[__pyx_v_new_ndim]) = __pyx_v_new_shape; + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 674, __pyx_L51_error) + __pyx_v_pred = (__pyx_t_28 - __pyx_t_5); - /* "View.MemoryView":888 - * dst.strides[new_ndim] = stride * step - * dst.shape[new_ndim] = new_shape - * dst.suboffsets[new_ndim] = suboffset # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":677 + * ) * + * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< + * if z < .5: + * aspect_correct += 1 */ - (__pyx_v_dst->suboffsets[__pyx_v_new_ndim]) = __pyx_v_suboffset; - } - __pyx_L3:; + __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); - /* "View.MemoryView":891 + /* "cornac/models/comparer/recom_comparer_sub.pyx":678 * + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * aspect_correct += 1 * - * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< - * dst.data += start * stride - * else: */ - __pyx_t_2 = (((__pyx_v_suboffset_dim[0]) < 0) != 0); - if (__pyx_t_2) { + __pyx_t_27 = (__pyx_v_z < .5); + if (__pyx_t_27) { - /* "View.MemoryView":892 + /* "cornac/models/comparer/recom_comparer_sub.pyx":679 + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: + * aspect_correct += 1 # <<<<<<<<<<<<<< * - * if suboffset_dim[0] < 0: - * dst.data += start * stride # <<<<<<<<<<<<<< - * else: - * dst.suboffsets[suboffset_dim[0]] += start * stride + * del_aspect_bpr = lambda_d * z */ - __pyx_v_dst->data = (__pyx_v_dst->data + (__pyx_v_start * __pyx_v_stride)); + __pyx_v_aspect_correct = (__pyx_v_aspect_correct + 1); - /* "View.MemoryView":891 + /* "cornac/models/comparer/recom_comparer_sub.pyx":678 * + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * aspect_correct += 1 * - * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< - * dst.data += start * stride - * else: */ - goto __pyx_L23; - } + } - /* "View.MemoryView":894 - * dst.data += start * stride - * else: - * dst.suboffsets[suboffset_dim[0]] += start * stride # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":681 + * aspect_correct += 1 * - * if suboffset >= 0: + * del_aspect_bpr = lambda_d * z # <<<<<<<<<<<<<< + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): */ - /*else*/ { - __pyx_t_3 = (__pyx_v_suboffset_dim[0]); - (__pyx_v_dst->suboffsets[__pyx_t_3]) = ((__pyx_v_dst->suboffsets[__pyx_t_3]) + (__pyx_v_start * __pyx_v_stride)); - } - __pyx_L23:; + __pyx_v_del_aspect_bpr = (__pyx_v_lambda_d * __pyx_v_z); - /* "View.MemoryView":896 - * dst.suboffsets[suboffset_dim[0]] += start * stride + /* "cornac/models/comparer/recom_comparer_sub.pyx":682 * - * if suboffset >= 0: # <<<<<<<<<<<<<< - * if not is_slice: - * if new_ndim == 0: + * del_aspect_bpr = lambda_d * z + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< + * for i in range(n_user_factors): + * for j in range(n_item_factors): */ - __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); - if (__pyx_t_2) { + __pyx_v_aspect_bpr_loss = (__pyx_v_aspect_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); - /* "View.MemoryView":897 - * - * if suboffset >= 0: - * if not is_slice: # <<<<<<<<<<<<<< - * if new_ndim == 0: - * dst.data = ( dst.data)[0] + suboffset + /* "cornac/models/comparer/recom_comparer_sub.pyx":683 + * del_aspect_bpr = lambda_d * z + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] */ - __pyx_t_2 = ((!(__pyx_v_is_slice != 0)) != 0); - if (__pyx_t_2) { + __pyx_t_3 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_3; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "View.MemoryView":898 - * if suboffset >= 0: - * if not is_slice: - * if new_ndim == 0: # <<<<<<<<<<<<<< - * dst.data = ( dst.data)[0] + suboffset - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":684 + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): */ - __pyx_t_2 = ((__pyx_v_new_ndim == 0) != 0); - if (__pyx_t_2) { + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "View.MemoryView":899 - * if not is_slice: - * if new_ndim == 0: - * dst.data = ( dst.data)[0] + suboffset # <<<<<<<<<<<<<< - * else: - * _err_dim(IndexError, "All dimensions preceding dimension %d " + /* "cornac/models/comparer/recom_comparer_sub.pyx":685 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] */ - __pyx_v_dst->data = ((((char **)__pyx_v_dst->data)[0]) + __pyx_v_suboffset); + __pyx_t_23 = __pyx_v_j_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_v_a_ji = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); - /* "View.MemoryView":898 - * if suboffset >= 0: - * if not is_slice: - * if new_ndim == 0: # <<<<<<<<<<<<<< - * dst.data = ( dst.data)[0] + suboffset - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":686 + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] */ - goto __pyx_L26; - } + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* "View.MemoryView":901 - * dst.data = ( dst.data)[0] + suboffset - * else: - * _err_dim(IndexError, "All dimensions preceding dimension %d " # <<<<<<<<<<<<<< - * "must be indexed and not sliced", dim) - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":687 + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] */ - /*else*/ { + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":902 - * else: - * _err_dim(IndexError, "All dimensions preceding dimension %d " - * "must be indexed and not sliced", dim) # <<<<<<<<<<<<<< - * else: - * suboffset_dim[0] = new_ndim + /* "cornac/models/comparer/recom_comparer_sub.pyx":688 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] */ - __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"All dimensions preceding dimension %d must be indexed and not sliced"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 901, __pyx_L1_error) - } - __pyx_L26:; + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_20 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_a_ji) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":897 - * - * if suboffset >= 0: - * if not is_slice: # <<<<<<<<<<<<<< - * if new_ndim == 0: - * dst.data = ( dst.data)[0] + suboffset + /* "cornac/models/comparer/recom_comparer_sub.pyx":689 + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji */ - goto __pyx_L25; - } + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_20 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_k; + __pyx_t_21 = __pyx_v_j_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_20 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":904 - * "must be indexed and not sliced", dim) - * else: - * suboffset_dim[0] = new_ndim # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":690 + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji * - * return 0 */ - /*else*/ { - (__pyx_v_suboffset_dim[0]) = __pyx_v_new_ndim; - } - __pyx_L25:; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i_idx; + __pyx_t_21 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_20 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":896 - * dst.suboffsets[suboffset_dim[0]] += start * stride + /* "cornac/models/comparer/recom_comparer_sub.pyx":691 + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji # <<<<<<<<<<<<<< * - * if suboffset >= 0: # <<<<<<<<<<<<<< - * if not is_slice: - * if new_ndim == 0: + * # update params with AdaGrad */ - } + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_20 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji); + } + } + } + goto __pyx_L61; + __pyx_L51_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L60; + __pyx_L60:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates14) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_a_idx; + __pyx_parallel_temp2 = __pyx_v_a_ji; + __pyx_parallel_temp3 = __pyx_v_aspect_bpr_loss; + __pyx_parallel_temp4 = __pyx_v_aspect_correct; + __pyx_parallel_temp5 = __pyx_v_del_aspect_bpr; + __pyx_parallel_temp6 = __pyx_v_i; + __pyx_parallel_temp7 = __pyx_v_i_idx; + __pyx_parallel_temp8 = __pyx_v_idx; + __pyx_parallel_temp9 = __pyx_v_j; + __pyx_parallel_temp10 = __pyx_v_j_idx; + __pyx_parallel_temp11 = __pyx_v_k; + __pyx_parallel_temp12 = __pyx_v_pred; + __pyx_parallel_temp13 = __pyx_v_u_idx; + __pyx_parallel_temp14 = __pyx_v_z; + } + __pyx_L61:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_a_idx = __pyx_parallel_temp1; + __pyx_v_a_ji = __pyx_parallel_temp2; + __pyx_v_aspect_bpr_loss = __pyx_parallel_temp3; + __pyx_v_aspect_correct = __pyx_parallel_temp4; + __pyx_v_del_aspect_bpr = __pyx_parallel_temp5; + __pyx_v_i = __pyx_parallel_temp6; + __pyx_v_i_idx = __pyx_parallel_temp7; + __pyx_v_idx = __pyx_parallel_temp8; + __pyx_v_j = __pyx_parallel_temp9; + __pyx_v_j_idx = __pyx_parallel_temp10; + __pyx_v_k = __pyx_parallel_temp11; + __pyx_v_pred = __pyx_parallel_temp12; + __pyx_v_u_idx = __pyx_parallel_temp13; + __pyx_v_z = __pyx_parallel_temp14; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } + goto __pyx_L63; + __pyx_L8_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L63; + __pyx_L63:; + #ifdef _OPENMP + Py_END_ALLOW_THREADS + #else +{ +#ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #endif /* _OPENMP */ + /* Clean up any temporaries */ + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + #ifndef _OPENMP +} +#endif /* _OPENMP */ + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L4_error; + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif + } - /* "View.MemoryView":906 - * suboffset_dim[0] = new_ndim - * - * return 0 # <<<<<<<<<<<<<< - * - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":568 + * del_a_reg.fill(0) + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): */ - __pyx_r = 0; - goto __pyx_L0; + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L5; + } + __pyx_L4_error: { + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L1_error; + } + __pyx_L5:; + } + } - /* "View.MemoryView":809 + /* "cornac/models/comparer/recom_comparer_sub.pyx":694 * - * @cname('__pyx_memoryview_slice_memviewslice') - * cdef int slice_memviewslice( # <<<<<<<<<<<<<< - * __Pyx_memviewslice *dst, - * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): */ - - /* function exit code */ - __pyx_L1_error:; { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_AddTraceback("View.MemoryView.slice_memviewslice", __pyx_clineno, __pyx_lineno, __pyx_filename); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_r = -1; - __pyx_L0:; - return __pyx_r; -} + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel private(__pyx_t_10, __pyx_t_12, __pyx_t_13, __pyx_t_15, __pyx_t_16, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_27, __pyx_t_29, __pyx_t_3, __pyx_t_7, __pyx_t_8, __pyx_t_9) num_threads(__pyx_v_n_threads) + #endif /* _OPENMP */ + { -/* "View.MemoryView":912 - * - * @cname('__pyx_pybuffer_index') - * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< - * Py_ssize_t dim) except NULL: - * cdef Py_ssize_t shape, stride, suboffset = -1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":695 + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): + * for i in prange(n_user_factors, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_users): + * if del_u[j, i] != 0: */ + __pyx_t_3 = __pyx_v_n_user_factors; + { + __pyx_t_12 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_12 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_12; __pyx_t_10++){ + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_10); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); -static char *__pyx_pybuffer_index(Py_buffer *__pyx_v_view, char *__pyx_v_bufp, Py_ssize_t __pyx_v_index, Py_ssize_t __pyx_v_dim) { - Py_ssize_t __pyx_v_shape; - Py_ssize_t __pyx_v_stride; - Py_ssize_t __pyx_v_suboffset; - Py_ssize_t __pyx_v_itemsize; - char *__pyx_v_resultp; - char *__pyx_r; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("pybuffer_index", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":696 + * with nogil, parallel(num_threads=n_threads): + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): # <<<<<<<<<<<<<< + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + */ + __pyx_t_13 = __pyx_v_n_users; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { + __pyx_v_j = __pyx_t_8; - /* "View.MemoryView":914 - * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, - * Py_ssize_t dim) except NULL: - * cdef Py_ssize_t shape, stride, suboffset = -1 # <<<<<<<<<<<<<< - * cdef Py_ssize_t itemsize = view.itemsize - * cdef char *resultp + /* "cornac/models/comparer/recom_comparer_sub.pyx":697 + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): + * if del_u[j, i] != 0: # <<<<<<<<<<<<<< + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] */ - __pyx_v_suboffset = -1L; + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":915 - * Py_ssize_t dim) except NULL: - * cdef Py_ssize_t shape, stride, suboffset = -1 - * cdef Py_ssize_t itemsize = view.itemsize # <<<<<<<<<<<<<< - * cdef char *resultp - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":698 + * for j in range(n_users): + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] # <<<<<<<<<<<<<< + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] */ - __pyx_t_1 = __pyx_v_view->itemsize; - __pyx_v_itemsize = __pyx_t_1; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_u_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) ))))); - /* "View.MemoryView":918 - * cdef char *resultp - * - * if view.ndim == 0: # <<<<<<<<<<<<<< - * shape = view.len / itemsize - * stride = itemsize + /* "cornac/models/comparer/recom_comparer_sub.pyx":697 + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): + * if del_u[j, i] != 0: # <<<<<<<<<<<<<< + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] */ - __pyx_t_2 = ((__pyx_v_view->ndim == 0) != 0); - if (__pyx_t_2) { + } - /* "View.MemoryView":919 - * - * if view.ndim == 0: - * shape = view.len / itemsize # <<<<<<<<<<<<<< - * stride = itemsize - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":699 + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] # <<<<<<<<<<<<<< + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: */ - if (unlikely(__pyx_v_itemsize == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); - __PYX_ERR(2, 919, __pyx_L1_error) - } - else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_view->len))) { - PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); - __PYX_ERR(2, 919, __pyx_L1_error) - } - __pyx_v_shape = __Pyx_div_Py_ssize_t(__pyx_v_view->len, __pyx_v_itemsize); + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_19 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_U.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)))); - /* "View.MemoryView":920 - * if view.ndim == 0: - * shape = view.len / itemsize - * stride = itemsize # <<<<<<<<<<<<<< - * else: - * shape = view.shape[dim] + /* "cornac/models/comparer/recom_comparer_sub.pyx":700 + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] # <<<<<<<<<<<<<< + * if U[j, i] < 0: + * U[j, i] = 0 */ - __pyx_v_stride = __pyx_v_itemsize; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_24 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_U.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[1].strides))); - /* "View.MemoryView":918 - * cdef char *resultp + /* "cornac/models/comparer/recom_comparer_sub.pyx":701 + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: # <<<<<<<<<<<<<< + * U[j, i] = 0 * - * if view.ndim == 0: # <<<<<<<<<<<<<< - * shape = view.len / itemsize - * stride = itemsize */ - goto __pyx_L3; - } + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_27 = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":922 - * stride = itemsize - * else: - * shape = view.shape[dim] # <<<<<<<<<<<<<< - * stride = view.strides[dim] - * if view.suboffsets != NULL: + /* "cornac/models/comparer/recom_comparer_sub.pyx":702 + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: + * U[j, i] = 0 # <<<<<<<<<<<<<< + * + * for j in range(n_item_factors): */ - /*else*/ { - __pyx_v_shape = (__pyx_v_view->shape[__pyx_v_dim]); + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )) = 0.0; - /* "View.MemoryView":923 - * else: - * shape = view.shape[dim] - * stride = view.strides[dim] # <<<<<<<<<<<<<< - * if view.suboffsets != NULL: - * suboffset = view.suboffsets[dim] + /* "cornac/models/comparer/recom_comparer_sub.pyx":701 + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: # <<<<<<<<<<<<<< + * U[j, i] = 0 + * */ - __pyx_v_stride = (__pyx_v_view->strides[__pyx_v_dim]); + } + } - /* "View.MemoryView":924 - * shape = view.shape[dim] - * stride = view.strides[dim] - * if view.suboffsets != NULL: # <<<<<<<<<<<<<< - * suboffset = view.suboffsets[dim] + /* "cornac/models/comparer/recom_comparer_sub.pyx":704 + * U[j, i] = 0 * + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: */ - __pyx_t_2 = ((__pyx_v_view->suboffsets != NULL) != 0); - if (__pyx_t_2) { + __pyx_t_13 = __pyx_v_n_item_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { + __pyx_v_j = __pyx_t_8; - /* "View.MemoryView":925 - * stride = view.strides[dim] - * if view.suboffsets != NULL: - * suboffset = view.suboffsets[dim] # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":705 * - * if index < 0: + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] */ - __pyx_v_suboffset = (__pyx_v_view->suboffsets[__pyx_v_dim]); + __pyx_t_16 = __pyx_v_n_aspect_factors; + __pyx_t_29 = __pyx_t_16; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_29; __pyx_t_7+=1) { + __pyx_v_k = __pyx_t_7; - /* "View.MemoryView":924 - * shape = view.shape[dim] - * stride = view.strides[dim] - * if view.suboffsets != NULL: # <<<<<<<<<<<<<< - * suboffset = view.suboffsets[dim] - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":706 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] */ - } - } - __pyx_L3:; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":927 - * suboffset = view.suboffsets[dim] - * - * if index < 0: # <<<<<<<<<<<<<< - * index += view.shape[dim] - * if index < 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":707 + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] */ - __pyx_t_2 = ((__pyx_v_index < 0) != 0); - if (__pyx_t_2) { + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) ))))); - /* "View.MemoryView":928 - * - * if index < 0: - * index += view.shape[dim] # <<<<<<<<<<<<<< - * if index < 0: - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + /* "cornac/models/comparer/recom_comparer_sub.pyx":706 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] */ - __pyx_v_index = (__pyx_v_index + (__pyx_v_view->shape[__pyx_v_dim])); + } - /* "View.MemoryView":929 - * if index < 0: - * index += view.shape[dim] - * if index < 0: # <<<<<<<<<<<<<< - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":708 + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: */ - __pyx_t_2 = ((__pyx_v_index < 0) != 0); - if (unlikely(__pyx_t_2)) { + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_22 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G1.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)))); - /* "View.MemoryView":930 - * index += view.shape[dim] - * if index < 0: - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< - * - * if index >= shape: + /* "cornac/models/comparer/recom_comparer_sub.pyx":709 + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< + * if G1[i, j, k] < 0: + * G1[i, j, k] = 0 */ - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 930, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 930, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 930, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(2, 930, __pyx_L1_error) + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_22 * __pyx_v_G1.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_23 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_25 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_9 * __pyx_v_sgrad_G1.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides))); - /* "View.MemoryView":929 - * if index < 0: - * index += view.shape[dim] - * if index < 0: # <<<<<<<<<<<<<< - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + /* "cornac/models/comparer/recom_comparer_sub.pyx":710 + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< + * G1[i, j, k] = 0 + * + */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = ((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_24 * __pyx_v_G1.strides[2]) ))) < 0.0); + if (__pyx_t_27) { + + /* "cornac/models/comparer/recom_comparer_sub.pyx":711 + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: + * G1[i, j, k] = 0 # <<<<<<<<<<<<<< * + * for j in range(n_aspect_factors): */ - } + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )) = 0.0; - /* "View.MemoryView":927 - * suboffset = view.suboffsets[dim] + /* "cornac/models/comparer/recom_comparer_sub.pyx":710 + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< + * G1[i, j, k] = 0 * - * if index < 0: # <<<<<<<<<<<<<< - * index += view.shape[dim] - * if index < 0: */ - } + } + } + } - /* "View.MemoryView":932 - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) - * - * if index >= shape: # <<<<<<<<<<<<<< - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + /* "cornac/models/comparer/recom_comparer_sub.pyx":713 + * G1[i, j, k] = 0 * + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: */ - __pyx_t_2 = ((__pyx_v_index >= __pyx_v_shape) != 0); - if (unlikely(__pyx_t_2)) { + __pyx_t_13 = __pyx_v_n_aspect_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { + __pyx_v_j = __pyx_t_8; - /* "View.MemoryView":933 - * - * if index >= shape: - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":714 * - * resultp = bufp + index * stride + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] */ - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 933, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 933, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 933, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(2, 933, __pyx_L1_error) + __pyx_t_16 = __pyx_v_n_opinion_factors; + __pyx_t_29 = __pyx_t_16; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_29; __pyx_t_7+=1) { + __pyx_v_k = __pyx_t_7; - /* "View.MemoryView":932 - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) - * - * if index >= shape: # <<<<<<<<<<<<<< - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":715 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] */ - } + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":935 - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) - * - * resultp = bufp + index * stride # <<<<<<<<<<<<<< - * if suboffset >= 0: - * resultp = ( resultp)[0] + suboffset + /* "cornac/models/comparer/recom_comparer_sub.pyx":716 + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] */ - __pyx_v_resultp = (__pyx_v_bufp + (__pyx_v_index * __pyx_v_stride)); + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) ))))); - /* "View.MemoryView":936 - * - * resultp = bufp + index * stride - * if suboffset >= 0: # <<<<<<<<<<<<<< - * resultp = ( resultp)[0] + suboffset - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":715 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] */ - __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); - if (__pyx_t_2) { + } - /* "View.MemoryView":937 - * resultp = bufp + index * stride - * if suboffset >= 0: - * resultp = ( resultp)[0] + suboffset # <<<<<<<<<<<<<< - * - * return resultp + /* "cornac/models/comparer/recom_comparer_sub.pyx":717 + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: */ - __pyx_v_resultp = ((((char **)__pyx_v_resultp)[0]) + __pyx_v_suboffset); + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_20 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_22 * __pyx_v_sgrad_G2.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)))); - /* "View.MemoryView":936 - * - * resultp = bufp + index * stride - * if suboffset >= 0: # <<<<<<<<<<<<<< - * resultp = ( resultp)[0] + suboffset - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":718 + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< + * if G2[i, j, k] < 0: + * G2[i, j, k] = 0 */ - } + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_22 * __pyx_v_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_G2.strides[1]) ) + __pyx_t_20 * __pyx_v_G2.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_24 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G2.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides))); - /* "View.MemoryView":939 - * resultp = ( resultp)[0] + suboffset - * - * return resultp # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":719 + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< + * G2[i, j, k] = 0 * */ - __pyx_r = __pyx_v_resultp; - goto __pyx_L0; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_27 = ((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_23 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":912 + /* "cornac/models/comparer/recom_comparer_sub.pyx":720 + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: + * G2[i, j, k] = 0 # <<<<<<<<<<<<<< * - * @cname('__pyx_pybuffer_index') - * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< - * Py_ssize_t dim) except NULL: - * cdef Py_ssize_t shape, stride, suboffset = -1 + * for i in prange(n_item_factors, schedule='guided'): */ + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) )) = 0.0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("View.MemoryView.pybuffer_index", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":945 - * - * @cname('__pyx_memslice_transpose') - * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< - * cdef int ndim = memslice.memview.view.ndim + /* "cornac/models/comparer/recom_comparer_sub.pyx":719 + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< + * G2[i, j, k] = 0 * */ + } + } + } + } + } + } + } -static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) { - int __pyx_v_ndim; - Py_ssize_t *__pyx_v_shape; - Py_ssize_t *__pyx_v_strides; - int __pyx_v_i; - int __pyx_v_j; - int __pyx_r; - int __pyx_t_1; - Py_ssize_t *__pyx_t_2; - long __pyx_t_3; - long __pyx_t_4; - Py_ssize_t __pyx_t_5; - Py_ssize_t __pyx_t_6; - int __pyx_t_7; - int __pyx_t_8; - int __pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - - /* "View.MemoryView":946 - * @cname('__pyx_memslice_transpose') - * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: - * cdef int ndim = memslice.memview.view.ndim # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":722 + * G2[i, j, k] = 0 * - * cdef Py_ssize_t *shape = memslice.shape + * for i in prange(n_item_factors, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_items): + * if del_i[j, i] != 0: */ - __pyx_t_1 = __pyx_v_memslice->memview->view.ndim; - __pyx_v_ndim = __pyx_t_1; + __pyx_t_12 = __pyx_v_n_item_factors; + { + __pyx_t_3 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_3 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_3; __pyx_t_10++){ + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_10); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); - /* "View.MemoryView":948 - * cdef int ndim = memslice.memview.view.ndim - * - * cdef Py_ssize_t *shape = memslice.shape # <<<<<<<<<<<<<< - * cdef Py_ssize_t *strides = memslice.strides + /* "cornac/models/comparer/recom_comparer_sub.pyx":723 * + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): # <<<<<<<<<<<<<< + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] */ - __pyx_t_2 = __pyx_v_memslice->shape; - __pyx_v_shape = __pyx_t_2; + __pyx_t_13 = __pyx_v_n_items; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { + __pyx_v_j = __pyx_t_8; - /* "View.MemoryView":949 - * - * cdef Py_ssize_t *shape = memslice.shape - * cdef Py_ssize_t *strides = memslice.strides # <<<<<<<<<<<<<< - * - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":724 + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): + * if del_i[j, i] != 0: # <<<<<<<<<<<<<< + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] */ - __pyx_t_2 = __pyx_v_memslice->strides; - __pyx_v_strides = __pyx_t_2; + __pyx_t_23 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":953 - * - * cdef int i, j - * for i in range(ndim / 2): # <<<<<<<<<<<<<< - * j = ndim - 1 - i - * strides[i], strides[j] = strides[j], strides[i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":725 + * for j in range(n_items): + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] # <<<<<<<<<<<<<< + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] */ - __pyx_t_3 = __Pyx_div_long(__pyx_v_ndim, 2); - __pyx_t_4 = __pyx_t_3; - for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) { - __pyx_v_i = __pyx_t_1; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) ))))); - /* "View.MemoryView":954 - * cdef int i, j - * for i in range(ndim / 2): - * j = ndim - 1 - i # <<<<<<<<<<<<<< - * strides[i], strides[j] = strides[j], strides[i] - * shape[i], shape[j] = shape[j], shape[i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":724 + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): + * if del_i[j, i] != 0: # <<<<<<<<<<<<<< + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] */ - __pyx_v_j = ((__pyx_v_ndim - 1) - __pyx_v_i); + } - /* "View.MemoryView":955 - * for i in range(ndim / 2): - * j = ndim - 1 - i - * strides[i], strides[j] = strides[j], strides[i] # <<<<<<<<<<<<<< - * shape[i], shape[j] = shape[j], shape[i] - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":726 + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] # <<<<<<<<<<<<<< + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: */ - __pyx_t_5 = (__pyx_v_strides[__pyx_v_j]); - __pyx_t_6 = (__pyx_v_strides[__pyx_v_i]); - (__pyx_v_strides[__pyx_v_i]) = __pyx_t_5; - (__pyx_v_strides[__pyx_v_j]) = __pyx_t_6; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_24 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_I.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)))); - /* "View.MemoryView":956 - * j = ndim - 1 - i - * strides[i], strides[j] = strides[j], strides[i] - * shape[i], shape[j] = shape[j], shape[i] # <<<<<<<<<<<<<< - * - * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: + /* "cornac/models/comparer/recom_comparer_sub.pyx":727 + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] # <<<<<<<<<<<<<< + * if I[j, i] < 0: + * I[j, i] = 0 */ - __pyx_t_6 = (__pyx_v_shape[__pyx_v_j]); - __pyx_t_5 = (__pyx_v_shape[__pyx_v_i]); - (__pyx_v_shape[__pyx_v_i]) = __pyx_t_6; - (__pyx_v_shape[__pyx_v_j]) = __pyx_t_5; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_25 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_I.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[1].strides))); - /* "View.MemoryView":958 - * shape[i], shape[j] = shape[j], shape[i] - * - * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< - * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + /* "cornac/models/comparer/recom_comparer_sub.pyx":728 + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: # <<<<<<<<<<<<<< + * I[j, i] = 0 * */ - __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_i]) >= 0) != 0); - if (!__pyx_t_8) { - } else { - __pyx_t_7 = __pyx_t_8; - goto __pyx_L6_bool_binop_done; - } - __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_j]) >= 0) != 0); - __pyx_t_7 = __pyx_t_8; - __pyx_L6_bool_binop_done:; - if (__pyx_t_7) { + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_27 = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_18 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":959 - * - * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: - * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":729 + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: + * I[j, i] = 0 # <<<<<<<<<<<<<< * - * return 1 + * for j in range(n_aspect_factors): */ - __pyx_t_9 = __pyx_memoryview_err(__pyx_builtin_ValueError, ((char *)"Cannot transpose memoryview with indirect dimensions")); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 959, __pyx_L1_error) + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )) = 0.0; - /* "View.MemoryView":958 - * shape[i], shape[j] = shape[j], shape[i] - * - * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< - * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + /* "cornac/models/comparer/recom_comparer_sub.pyx":728 + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: # <<<<<<<<<<<<<< + * I[j, i] = 0 * */ - } - } + } + } - /* "View.MemoryView":961 - * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") - * - * return 1 # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":731 + * I[j, i] = 0 * + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: */ - __pyx_r = 1; - goto __pyx_L0; + __pyx_t_13 = __pyx_v_n_aspect_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { + __pyx_v_j = __pyx_t_8; - /* "View.MemoryView":945 - * - * @cname('__pyx_memslice_transpose') - * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< - * cdef int ndim = memslice.memview.view.ndim + /* "cornac/models/comparer/recom_comparer_sub.pyx":732 * + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] */ + __pyx_t_16 = __pyx_v_n_opinion_factors; + __pyx_t_29 = __pyx_t_16; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_29; __pyx_t_7+=1) { + __pyx_v_k = __pyx_t_7; - /* function exit code */ - __pyx_L1_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_AddTraceback("View.MemoryView.transpose_memslice", __pyx_clineno, __pyx_lineno, __pyx_filename); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_r = 0; - __pyx_L0:; - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":733 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { -/* "View.MemoryView":978 - * cdef int (*to_dtype_func)(char *, object) except 0 - * - * def __dealloc__(self): # <<<<<<<<<<<<<< - * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":734 + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) ))))); -/* Python wrapper */ -static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); - __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":733 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + */ + } - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":735 + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: + */ + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_22 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G3.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)))); -static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__dealloc__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":736 + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< + * if G3[i, j, k] < 0: + * G3[i, j, k] = 0 + */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_G3.strides[1]) ) + __pyx_t_22 * __pyx_v_G3.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_23 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G3.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides))); - /* "View.MemoryView":979 - * - * def __dealloc__(self): - * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":737 + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< + * G3[i, j, k] = 0 * - * cdef convert_item_to_object(self, char *itemp): */ - __PYX_XDEC_MEMVIEW((&__pyx_v_self->from_slice), 1); + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_27 = ((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_19 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":978 - * cdef int (*to_dtype_func)(char *, object) except 0 - * - * def __dealloc__(self): # <<<<<<<<<<<<<< - * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + /* "cornac/models/comparer/recom_comparer_sub.pyx":738 + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: + * G3[i, j, k] = 0 # <<<<<<<<<<<<<< * + * for i in prange(n_aspects + 1, schedule='guided'): */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) )) = 0.0; - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "View.MemoryView":981 - * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + /* "cornac/models/comparer/recom_comparer_sub.pyx":737 + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< + * G3[i, j, k] = 0 * - * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< - * if self.to_object_func != NULL: - * return self.to_object_func(itemp) */ + } + } + } + } + } + } + } -static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("convert_item_to_object", 0); - - /* "View.MemoryView":982 + /* "cornac/models/comparer/recom_comparer_sub.pyx":740 + * G3[i, j, k] = 0 * - * cdef convert_item_to_object(self, char *itemp): - * if self.to_object_func != NULL: # <<<<<<<<<<<<<< - * return self.to_object_func(itemp) - * else: - */ - __pyx_t_1 = ((__pyx_v_self->to_object_func != NULL) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":983 - * cdef convert_item_to_object(self, char *itemp): - * if self.to_object_func != NULL: - * return self.to_object_func(itemp) # <<<<<<<<<<<<<< - * else: - * return memoryview.convert_item_to_object(self, itemp) + * for i in prange(n_aspects + 1, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __pyx_v_self->to_object_func(__pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 983, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; + __pyx_t_3 = (__pyx_v_n_aspects + 1); + { + __pyx_t_12 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_12 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_12; __pyx_t_10++){ + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_10); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* "View.MemoryView":982 + /* "cornac/models/comparer/recom_comparer_sub.pyx":741 * - * cdef convert_item_to_object(self, char *itemp): - * if self.to_object_func != NULL: # <<<<<<<<<<<<<< - * return self.to_object_func(itemp) - * else: + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] */ - } + __pyx_t_13 = __pyx_v_n_aspect_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { + __pyx_v_j = __pyx_t_8; - /* "View.MemoryView":985 - * return self.to_object_func(itemp) - * else: - * return memoryview.convert_item_to_object(self, itemp) # <<<<<<<<<<<<<< - * - * cdef assign_item_from_object(self, char *itemp, object value): + /* "cornac/models/comparer/recom_comparer_sub.pyx":742 + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: # <<<<<<<<<<<<<< + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __pyx_memoryview_convert_item_to_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 985, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - } + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":981 - * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) - * - * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< - * if self.to_object_func != NULL: - * return self.to_object_func(itemp) + /* "cornac/models/comparer/recom_comparer_sub.pyx":743 + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] # <<<<<<<<<<<<<< + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) ))))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView._memoryviewslice.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":742 + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: # <<<<<<<<<<<<<< + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + */ + } -/* "View.MemoryView":987 - * return memoryview.convert_item_to_object(self, itemp) - * - * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< - * if self.to_dtype_func != NULL: - * self.to_dtype_func(itemp, value) + /* "cornac/models/comparer/recom_comparer_sub.pyx":744 + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] # <<<<<<<<<<<<<< + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_23 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_A.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)))); -static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("assign_item_from_object", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":745 + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] # <<<<<<<<<<<<<< + * if A[i, j] < 0: + * A[i, j] = 0 + */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_24 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_A.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[1].strides))); - /* "View.MemoryView":988 + /* "cornac/models/comparer/recom_comparer_sub.pyx":746 + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: # <<<<<<<<<<<<<< + * A[i, j] = 0 * - * cdef assign_item_from_object(self, char *itemp, object value): - * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< - * self.to_dtype_func(itemp, value) - * else: */ - __pyx_t_1 = ((__pyx_v_self->to_dtype_func != NULL) != 0); - if (__pyx_t_1) { + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":989 - * cdef assign_item_from_object(self, char *itemp, object value): - * if self.to_dtype_func != NULL: - * self.to_dtype_func(itemp, value) # <<<<<<<<<<<<<< - * else: - * memoryview.assign_item_from_object(self, itemp, value) + /* "cornac/models/comparer/recom_comparer_sub.pyx":747 + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: + * A[i, j] = 0 # <<<<<<<<<<<<<< + * + * for i in prange(n_opinions, schedule='guided'): */ - __pyx_t_2 = __pyx_v_self->to_dtype_func(__pyx_v_itemp, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(2, 989, __pyx_L1_error) + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )) = 0.0; - /* "View.MemoryView":988 + /* "cornac/models/comparer/recom_comparer_sub.pyx":746 + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: # <<<<<<<<<<<<<< + * A[i, j] = 0 * - * cdef assign_item_from_object(self, char *itemp, object value): - * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< - * self.to_dtype_func(itemp, value) - * else: */ - goto __pyx_L3; - } + } + } + } + } + } + } - /* "View.MemoryView":991 - * self.to_dtype_func(itemp, value) - * else: - * memoryview.assign_item_from_object(self, itemp, value) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":749 + * A[i, j] = 0 * - * @property + * for i in prange(n_opinions, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: */ - /*else*/ { - __pyx_t_3 = __pyx_memoryview_assign_item_from_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 991, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - __pyx_L3:; + __pyx_t_12 = __pyx_v_n_opinions; + { + __pyx_t_3 = (__pyx_t_12 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_3 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_3; __pyx_t_10++){ + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_10); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* "View.MemoryView":987 - * return memoryview.convert_item_to_object(self, itemp) + /* "cornac/models/comparer/recom_comparer_sub.pyx":750 * - * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< - * if self.to_dtype_func != NULL: - * self.to_dtype_func(itemp, value) + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] */ + __pyx_t_13 = __pyx_v_n_opinion_factors; + __pyx_t_15 = __pyx_t_13; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_15; __pyx_t_8+=1) { + __pyx_v_j = __pyx_t_8; - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView._memoryviewslice.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":751 + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: # <<<<<<<<<<<<<< + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { -/* "View.MemoryView":994 - * - * @property - * def base(self): # <<<<<<<<<<<<<< - * return self.from_object - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":752 + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] # <<<<<<<<<<<<<< + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_o_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) ))))); -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + /* "cornac/models/comparer/recom_comparer_sub.pyx":751 + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: # <<<<<<<<<<<<<< + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + */ + } - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":753 + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] # <<<<<<<<<<<<<< + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: + */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_9 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_O.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)))); -static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":754 + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] # <<<<<<<<<<<<<< + * if O[i, j] < 0: + * O[i, j] = 0 + */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_23 * __pyx_v_O.strides[0]) ) + __pyx_t_9 * __pyx_v_O.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_25 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_O.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[1].strides))); - /* "View.MemoryView":995 - * @property - * def base(self): - * return self.from_object # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":755 + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: # <<<<<<<<<<<<<< + * O[i, j] = 0 * - * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->from_object); - __pyx_r = __pyx_v_self->from_object; - goto __pyx_L0; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_27 = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_19 * __pyx_v_O.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":994 - * - * @property - * def base(self): # <<<<<<<<<<<<<< - * return self.from_object + /* "cornac/models/comparer/recom_comparer_sub.pyx":756 + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: + * O[i, j] = 0 # <<<<<<<<<<<<<< * + * return correct, skipped, loss, bpr_loss */ + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )) = 0.0; - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): + /* "cornac/models/comparer/recom_comparer_sub.pyx":755 + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: # <<<<<<<<<<<<<< + * O[i, j] = 0 + * */ + } + } + } + } + } + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif + } -/* Python wrapper */ -static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf___pyx_memoryviewslice___reduce_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":694 + * + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): + */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L66; + } + __pyx_L66:; + } + } - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + /* "cornac/models/comparer/recom_comparer_sub.pyx":758 + * O[i, j] = 0 + * + * return correct, skipped, loss, bpr_loss # <<<<<<<<<<<<<< + * + * def rank(self, user_idx, item_indices=None): */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_correct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(2, 2, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v_skipped); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_30 = PyFloat_FromDouble(__pyx_v_bpr_loss); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_30); + __pyx_t_31 = PyTuple_New(4); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_31); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_31, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_31, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_31, 2, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_30); + PyTuple_SET_ITEM(__pyx_t_31, 3, __pyx_t_30); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_6 = 0; + __pyx_t_30 = 0; + __pyx_r = __pyx_t_31; + __pyx_t_31 = 0; + goto __pyx_L0; - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): + /* "cornac/models/comparer/recom_comparer_sub.pyx":482 + * return self + * + * @cython.cdivision(True) # <<<<<<<<<<<<<< + * @cython.boundscheck(False) + * @cython.wraparound(False) */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_30); + __Pyx_XDECREF(__pyx_t_31); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); + __pyx_L2:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - /* Python wrapper */ -static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_fuse_1_2__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_25_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_fuse_1_2__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_25_fit_mter = {"__pyx_fuse_1_2_fit_mter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1_2__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_25_fit_mter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_10_fit_mter}; +static PyObject *__pyx_fuse_1_2__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_25_fit_mter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos = 0; + struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg = 0; + int __pyx_v_n_threads; + __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YU_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_YI_oids = { 0, 0, { 0 }, { 0 }, { 0 } }; + struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict = 0; + __Pyx_memviewslice __pyx_v_user_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_neg_item_ids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_indptr = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_p_user_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_earlier_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_later_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_aspect_indices = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_I = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_O = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_G3 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_U = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_I = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_sgrad_O = { 0, 0, { 0 }, { 0 }, { 0 } }; + PyArrayObject *__pyx_v_del_g1 = 0; + PyArrayObject *__pyx_v_del_g2 = 0; + PyArrayObject *__pyx_v_del_g3 = 0; + PyArrayObject *__pyx_v_del_u = 0; + PyArrayObject *__pyx_v_del_i = 0; + PyArrayObject *__pyx_v_del_a = 0; + PyArrayObject *__pyx_v_del_o = 0; + PyArrayObject *__pyx_v_del_g1_reg = 0; + PyArrayObject *__pyx_v_del_g2_reg = 0; + PyArrayObject *__pyx_v_del_g3_reg = 0; + PyArrayObject *__pyx_v_del_u_reg = 0; + PyArrayObject *__pyx_v_del_i_reg = 0; + PyArrayObject *__pyx_v_del_a_reg = 0; + PyArrayObject *__pyx_v_del_o_reg = 0; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf___pyx_memoryviewslice_2__setstate_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + __Pyx_RefNannySetupContext("_fit_mter (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_rng_pos_uia,&__pyx_n_s_rng_pos_uao,&__pyx_n_s_rng_pos_iao,&__pyx_n_s_rng_pos_pair,&__pyx_n_s_rng_pos,&__pyx_n_s_rng_neg,&__pyx_n_s_n_threads,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_iids,&__pyx_n_s_X_aids,&__pyx_n_s_YU,&__pyx_n_s_YU_uids,&__pyx_n_s_YU_aids,&__pyx_n_s_YU_oids,&__pyx_n_s_YI,&__pyx_n_s_YI_iids,&__pyx_n_s_YI_aids,&__pyx_n_s_YI_oids,&__pyx_n_s_rating_dict,&__pyx_n_s_user_ids,&__pyx_n_s_item_ids,&__pyx_n_s_neg_item_ids,&__pyx_n_s_indptr,&__pyx_n_s_p_user_indices,&__pyx_n_s_earlier_indices,&__pyx_n_s_later_indices,&__pyx_n_s_aspect_indices,&__pyx_n_s_pair_counts,&__pyx_n_s_G1,&__pyx_n_s_G2,&__pyx_n_s_G3,&__pyx_n_s_U,&__pyx_n_s_I,&__pyx_n_s_A,&__pyx_n_s_O,&__pyx_n_s_sgrad_G1,&__pyx_n_s_sgrad_G2,&__pyx_n_s_sgrad_G3,&__pyx_n_s_sgrad_U,&__pyx_n_s_sgrad_I,&__pyx_n_s_sgrad_A,&__pyx_n_s_sgrad_O,&__pyx_n_s_del_g1,&__pyx_n_s_del_g2,&__pyx_n_s_del_g3,&__pyx_n_s_del_u,&__pyx_n_s_del_i,&__pyx_n_s_del_a,&__pyx_n_s_del_o,&__pyx_n_s_del_g1_reg,&__pyx_n_s_del_g2_reg,&__pyx_n_s_del_g3_reg,&__pyx_n_s_del_u_reg,&__pyx_n_s_del_i_reg,&__pyx_n_s_del_a_reg,&__pyx_n_s_del_o_reg,0}; + PyObject* values[58] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 58: values[57] = __Pyx_Arg_VARARGS(__pyx_args, 57); + CYTHON_FALLTHROUGH; + case 57: values[56] = __Pyx_Arg_VARARGS(__pyx_args, 56); + CYTHON_FALLTHROUGH; + case 56: values[55] = __Pyx_Arg_VARARGS(__pyx_args, 55); + CYTHON_FALLTHROUGH; + case 55: values[54] = __Pyx_Arg_VARARGS(__pyx_args, 54); + CYTHON_FALLTHROUGH; + case 54: values[53] = __Pyx_Arg_VARARGS(__pyx_args, 53); + CYTHON_FALLTHROUGH; + case 53: values[52] = __Pyx_Arg_VARARGS(__pyx_args, 52); + CYTHON_FALLTHROUGH; + case 52: values[51] = __Pyx_Arg_VARARGS(__pyx_args, 51); + CYTHON_FALLTHROUGH; + case 51: values[50] = __Pyx_Arg_VARARGS(__pyx_args, 50); + CYTHON_FALLTHROUGH; + case 50: values[49] = __Pyx_Arg_VARARGS(__pyx_args, 49); + CYTHON_FALLTHROUGH; + case 49: values[48] = __Pyx_Arg_VARARGS(__pyx_args, 48); + CYTHON_FALLTHROUGH; + case 48: values[47] = __Pyx_Arg_VARARGS(__pyx_args, 47); + CYTHON_FALLTHROUGH; + case 47: values[46] = __Pyx_Arg_VARARGS(__pyx_args, 46); + CYTHON_FALLTHROUGH; + case 46: values[45] = __Pyx_Arg_VARARGS(__pyx_args, 45); + CYTHON_FALLTHROUGH; + case 45: values[44] = __Pyx_Arg_VARARGS(__pyx_args, 44); + CYTHON_FALLTHROUGH; + case 44: values[43] = __Pyx_Arg_VARARGS(__pyx_args, 43); + CYTHON_FALLTHROUGH; + case 43: values[42] = __Pyx_Arg_VARARGS(__pyx_args, 42); + CYTHON_FALLTHROUGH; + case 42: values[41] = __Pyx_Arg_VARARGS(__pyx_args, 41); + CYTHON_FALLTHROUGH; + case 41: values[40] = __Pyx_Arg_VARARGS(__pyx_args, 40); + CYTHON_FALLTHROUGH; + case 40: values[39] = __Pyx_Arg_VARARGS(__pyx_args, 39); + CYTHON_FALLTHROUGH; + case 39: values[38] = __Pyx_Arg_VARARGS(__pyx_args, 38); + CYTHON_FALLTHROUGH; + case 38: values[37] = __Pyx_Arg_VARARGS(__pyx_args, 37); + CYTHON_FALLTHROUGH; + case 37: values[36] = __Pyx_Arg_VARARGS(__pyx_args, 36); + CYTHON_FALLTHROUGH; + case 36: values[35] = __Pyx_Arg_VARARGS(__pyx_args, 35); + CYTHON_FALLTHROUGH; + case 35: values[34] = __Pyx_Arg_VARARGS(__pyx_args, 34); + CYTHON_FALLTHROUGH; + case 34: values[33] = __Pyx_Arg_VARARGS(__pyx_args, 33); + CYTHON_FALLTHROUGH; + case 33: values[32] = __Pyx_Arg_VARARGS(__pyx_args, 32); + CYTHON_FALLTHROUGH; + case 32: values[31] = __Pyx_Arg_VARARGS(__pyx_args, 31); + CYTHON_FALLTHROUGH; + case 31: values[30] = __Pyx_Arg_VARARGS(__pyx_args, 30); + CYTHON_FALLTHROUGH; + case 30: values[29] = __Pyx_Arg_VARARGS(__pyx_args, 29); + CYTHON_FALLTHROUGH; + case 29: values[28] = __Pyx_Arg_VARARGS(__pyx_args, 28); + CYTHON_FALLTHROUGH; + case 28: values[27] = __Pyx_Arg_VARARGS(__pyx_args, 27); + CYTHON_FALLTHROUGH; + case 27: values[26] = __Pyx_Arg_VARARGS(__pyx_args, 26); + CYTHON_FALLTHROUGH; + case 26: values[25] = __Pyx_Arg_VARARGS(__pyx_args, 25); + CYTHON_FALLTHROUGH; + case 25: values[24] = __Pyx_Arg_VARARGS(__pyx_args, 24); + CYTHON_FALLTHROUGH; + case 24: values[23] = __Pyx_Arg_VARARGS(__pyx_args, 23); + CYTHON_FALLTHROUGH; + case 23: values[22] = __Pyx_Arg_VARARGS(__pyx_args, 22); + CYTHON_FALLTHROUGH; + case 22: values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + CYTHON_FALLTHROUGH; + case 21: values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + CYTHON_FALLTHROUGH; + case 20: values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + CYTHON_FALLTHROUGH; + case 19: values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + CYTHON_FALLTHROUGH; + case 18: values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + CYTHON_FALLTHROUGH; + case 17: values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + CYTHON_FALLTHROUGH; + case 16: values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_uia)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 1); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_uao)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 2); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_iao)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 3); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos_pair)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 4); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_pos)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 5); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rng_neg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 6); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_threads)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 7); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 8); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 9); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 10); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 11); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 12); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 13); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 14); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 15: + if (likely((values[15] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YU_oids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 15); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 16: + if (likely((values[16] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 16); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 17: + if (likely((values[17] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 17); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 18: + if (likely((values[18] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 18); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 19: + if (likely((values[19] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_YI_oids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 19); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 20: + if (likely((values[20] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rating_dict)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 20); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 21: + if (likely((values[21] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_user_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 21); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 22: + if (likely((values[22] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_item_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 22); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 23: + if (likely((values[23] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_neg_item_ids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 23); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 24: + if (likely((values[24] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_indptr)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 24); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 25: + if (likely((values[25] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_p_user_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 25); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 26: + if (likely((values[26] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_earlier_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 26); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 27: + if (likely((values[27] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_later_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 27); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 28: + if (likely((values[28] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_aspect_indices)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 28); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 29: + if (likely((values[29] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pair_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 29); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 30: + if (likely((values[30] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 30); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 31: + if (likely((values[31] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 31); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 32: + if (likely((values[32] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_G3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 32); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 33: + if (likely((values[33] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 33); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 34: + if (likely((values[34] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_I)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 34); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 35: + if (likely((values[35] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 35); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 36: + if (likely((values[36] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_O)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 36); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 37: + if (likely((values[37] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 37); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 38: + if (likely((values[38] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 38); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 39: + if (likely((values[39] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_G3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 39); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 40: + if (likely((values[40] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_U)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 40); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 41: + if (likely((values[41] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_I)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 41); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 42: + if (likely((values[42] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 42); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 43: + if (likely((values[43] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sgrad_O)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 43); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 44: + if (likely((values[44] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 44); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 45: + if (likely((values[45] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 45); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 46: + if (likely((values[46] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g3)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 46); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 47: + if (likely((values[47] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_u)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 47); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 48: + if (likely((values[48] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_i)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 48); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 49: + if (likely((values[49] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_a)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 49); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 50: + if (likely((values[50] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_o)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 50); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 51: + if (likely((values[51] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g1_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 51); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 52: + if (likely((values[52] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g2_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 52); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 53: + if (likely((values[53] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_g3_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 53); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 54: + if (likely((values[54] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_u_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 54); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 55: + if (likely((values[55] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_i_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 55); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 56: + if (likely((values[56] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_a_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 56); __PYX_ERR(0, 482, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 57: + if (likely((values[57] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_del_o_reg)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 482, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, 57); __PYX_ERR(0, 482, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_fit_mter") < 0)) __PYX_ERR(0, 482, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 58)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + values[22] = __Pyx_Arg_VARARGS(__pyx_args, 22); + values[23] = __Pyx_Arg_VARARGS(__pyx_args, 23); + values[24] = __Pyx_Arg_VARARGS(__pyx_args, 24); + values[25] = __Pyx_Arg_VARARGS(__pyx_args, 25); + values[26] = __Pyx_Arg_VARARGS(__pyx_args, 26); + values[27] = __Pyx_Arg_VARARGS(__pyx_args, 27); + values[28] = __Pyx_Arg_VARARGS(__pyx_args, 28); + values[29] = __Pyx_Arg_VARARGS(__pyx_args, 29); + values[30] = __Pyx_Arg_VARARGS(__pyx_args, 30); + values[31] = __Pyx_Arg_VARARGS(__pyx_args, 31); + values[32] = __Pyx_Arg_VARARGS(__pyx_args, 32); + values[33] = __Pyx_Arg_VARARGS(__pyx_args, 33); + values[34] = __Pyx_Arg_VARARGS(__pyx_args, 34); + values[35] = __Pyx_Arg_VARARGS(__pyx_args, 35); + values[36] = __Pyx_Arg_VARARGS(__pyx_args, 36); + values[37] = __Pyx_Arg_VARARGS(__pyx_args, 37); + values[38] = __Pyx_Arg_VARARGS(__pyx_args, 38); + values[39] = __Pyx_Arg_VARARGS(__pyx_args, 39); + values[40] = __Pyx_Arg_VARARGS(__pyx_args, 40); + values[41] = __Pyx_Arg_VARARGS(__pyx_args, 41); + values[42] = __Pyx_Arg_VARARGS(__pyx_args, 42); + values[43] = __Pyx_Arg_VARARGS(__pyx_args, 43); + values[44] = __Pyx_Arg_VARARGS(__pyx_args, 44); + values[45] = __Pyx_Arg_VARARGS(__pyx_args, 45); + values[46] = __Pyx_Arg_VARARGS(__pyx_args, 46); + values[47] = __Pyx_Arg_VARARGS(__pyx_args, 47); + values[48] = __Pyx_Arg_VARARGS(__pyx_args, 48); + values[49] = __Pyx_Arg_VARARGS(__pyx_args, 49); + values[50] = __Pyx_Arg_VARARGS(__pyx_args, 50); + values[51] = __Pyx_Arg_VARARGS(__pyx_args, 51); + values[52] = __Pyx_Arg_VARARGS(__pyx_args, 52); + values[53] = __Pyx_Arg_VARARGS(__pyx_args, 53); + values[54] = __Pyx_Arg_VARARGS(__pyx_args, 54); + values[55] = __Pyx_Arg_VARARGS(__pyx_args, 55); + values[56] = __Pyx_Arg_VARARGS(__pyx_args, 56); + values[57] = __Pyx_Arg_VARARGS(__pyx_args, 57); + } + __pyx_v_self = values[0]; + __pyx_v_rng_pos_uia = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[1]); + __pyx_v_rng_pos_uao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[2]); + __pyx_v_rng_pos_iao = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[3]); + __pyx_v_rng_pos_pair = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[4]); + __pyx_v_rng_pos = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[5]); + __pyx_v_rng_neg = ((struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *)values[6]); + __pyx_v_n_threads = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_n_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 493, __pyx_L3_error) + __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_iids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 494, __pyx_L3_error) + __pyx_v_YU = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_uids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_aids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YU_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YU_oids.memview)) __PYX_ERR(0, 495, __pyx_L3_error) + __pyx_v_YI = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_iids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_aids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_YI_oids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YI_oids.memview)) __PYX_ERR(0, 496, __pyx_L3_error) + __pyx_v_rating_dict = ((struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *)values[20]); + __pyx_v_user_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_user_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[22], PyBUF_WRITABLE); if (unlikely(!__pyx_v_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_neg_item_ids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[23], PyBUF_WRITABLE); if (unlikely(!__pyx_v_neg_item_ids.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_indptr = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[24], PyBUF_WRITABLE); if (unlikely(!__pyx_v_indptr.memview)) __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_v_p_user_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[25], PyBUF_WRITABLE); if (unlikely(!__pyx_v_p_user_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_earlier_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[26], PyBUF_WRITABLE); if (unlikely(!__pyx_v_earlier_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_later_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[27], PyBUF_WRITABLE); if (unlikely(!__pyx_v_later_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_aspect_indices = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[28], PyBUF_WRITABLE); if (unlikely(!__pyx_v_aspect_indices.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_pair_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[29], PyBUF_WRITABLE); if (unlikely(!__pyx_v_pair_counts.memview)) __PYX_ERR(0, 499, __pyx_L3_error) + __pyx_v_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[30], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G1.memview)) __PYX_ERR(0, 500, __pyx_L3_error) + __pyx_v_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[31], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G2.memview)) __PYX_ERR(0, 501, __pyx_L3_error) + __pyx_v_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[32], PyBUF_WRITABLE); if (unlikely(!__pyx_v_G3.memview)) __PYX_ERR(0, 502, __pyx_L3_error) + __pyx_v_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[33], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U.memview)) __PYX_ERR(0, 503, __pyx_L3_error) + __pyx_v_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[34], PyBUF_WRITABLE); if (unlikely(!__pyx_v_I.memview)) __PYX_ERR(0, 504, __pyx_L3_error) + __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[35], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 505, __pyx_L3_error) + __pyx_v_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[36], PyBUF_WRITABLE); if (unlikely(!__pyx_v_O.memview)) __PYX_ERR(0, 506, __pyx_L3_error) + __pyx_v_sgrad_G1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[37], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G1.memview)) __PYX_ERR(0, 507, __pyx_L3_error) + __pyx_v_sgrad_G2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[38], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G2.memview)) __PYX_ERR(0, 508, __pyx_L3_error) + __pyx_v_sgrad_G3 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(values[39], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_G3.memview)) __PYX_ERR(0, 509, __pyx_L3_error) + __pyx_v_sgrad_U = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[40], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_U.memview)) __PYX_ERR(0, 510, __pyx_L3_error) + __pyx_v_sgrad_I = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[41], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_I.memview)) __PYX_ERR(0, 511, __pyx_L3_error) + __pyx_v_sgrad_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[42], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_A.memview)) __PYX_ERR(0, 512, __pyx_L3_error) + __pyx_v_sgrad_O = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[43], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sgrad_O.memview)) __PYX_ERR(0, 513, __pyx_L3_error) + __pyx_v_del_g1 = ((PyArrayObject *)values[44]); + __pyx_v_del_g2 = ((PyArrayObject *)values[45]); + __pyx_v_del_g3 = ((PyArrayObject *)values[46]); + __pyx_v_del_u = ((PyArrayObject *)values[47]); + __pyx_v_del_i = ((PyArrayObject *)values[48]); + __pyx_v_del_a = ((PyArrayObject *)values[49]); + __pyx_v_del_o = ((PyArrayObject *)values[50]); + __pyx_v_del_g1_reg = ((PyArrayObject *)values[51]); + __pyx_v_del_g2_reg = ((PyArrayObject *)values[52]); + __pyx_v_del_g3_reg = ((PyArrayObject *)values[53]); + __pyx_v_del_u_reg = ((PyArrayObject *)values[54]); + __pyx_v_del_i_reg = ((PyArrayObject *)values[55]); + __pyx_v_del_a_reg = ((PyArrayObject *)values[56]); + __pyx_v_del_o_reg = ((PyArrayObject *)values[57]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_fit_mter", 1, 58, 58, __pyx_nargs); __PYX_ERR(0, 482, __pyx_L3_error) + __pyx_L3_error:; + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_user_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_neg_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_indptr, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_p_user_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_earlier_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_later_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_aspect_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_pair_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_O, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_O, 1); + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uia), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uia", 0))) __PYX_ERR(0, 487, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_uao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_uao", 0))) __PYX_ERR(0, 488, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_iao), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_iao", 0))) __PYX_ERR(0, 489, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos_pair), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos_pair", 0))) __PYX_ERR(0, 490, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_pos), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_pos", 0))) __PYX_ERR(0, 491, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rng_neg), __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector, 1, "rng_neg", 0))) __PYX_ERR(0, 492, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rating_dict), __pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict, 1, "rating_dict", 0))) __PYX_ERR(0, 497, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1), __pyx_ptype_5numpy_ndarray, 1, "del_g1", 0))) __PYX_ERR(0, 514, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2), __pyx_ptype_5numpy_ndarray, 1, "del_g2", 0))) __PYX_ERR(0, 515, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3), __pyx_ptype_5numpy_ndarray, 1, "del_g3", 0))) __PYX_ERR(0, 516, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u), __pyx_ptype_5numpy_ndarray, 1, "del_u", 0))) __PYX_ERR(0, 517, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i), __pyx_ptype_5numpy_ndarray, 1, "del_i", 0))) __PYX_ERR(0, 518, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a), __pyx_ptype_5numpy_ndarray, 1, "del_a", 0))) __PYX_ERR(0, 519, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o), __pyx_ptype_5numpy_ndarray, 1, "del_o", 0))) __PYX_ERR(0, 520, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g1_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g1_reg", 0))) __PYX_ERR(0, 521, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g2_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g2_reg", 0))) __PYX_ERR(0, 522, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_g3_reg), __pyx_ptype_5numpy_ndarray, 1, "del_g3_reg", 0))) __PYX_ERR(0, 523, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_u_reg), __pyx_ptype_5numpy_ndarray, 1, "del_u_reg", 0))) __PYX_ERR(0, 524, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_i_reg), __pyx_ptype_5numpy_ndarray, 1, "del_i_reg", 0))) __PYX_ERR(0, 525, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_a_reg), __pyx_ptype_5numpy_ndarray, 1, "del_a_reg", 0))) __PYX_ERR(0, 526, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_del_o_reg), __pyx_ptype_5numpy_ndarray, 1, "del_o_reg", 0))) __PYX_ERR(0, 527, __pyx_L1_error) + __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_24_fit_mter(__pyx_self, __pyx_v_self, __pyx_v_rng_pos_uia, __pyx_v_rng_pos_uao, __pyx_v_rng_pos_iao, __pyx_v_rng_pos_pair, __pyx_v_rng_pos, __pyx_v_rng_neg, __pyx_v_n_threads, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_iids, __pyx_v_X_aids, __pyx_v_YU, __pyx_v_YU_uids, __pyx_v_YU_aids, __pyx_v_YU_oids, __pyx_v_YI, __pyx_v_YI_iids, __pyx_v_YI_aids, __pyx_v_YI_oids, __pyx_v_rating_dict, __pyx_v_user_ids, __pyx_v_item_ids, __pyx_v_neg_item_ids, __pyx_v_indptr, __pyx_v_p_user_indices, __pyx_v_earlier_indices, __pyx_v_later_indices, __pyx_v_aspect_indices, __pyx_v_pair_counts, __pyx_v_G1, __pyx_v_G2, __pyx_v_G3, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_sgrad_G1, __pyx_v_sgrad_G2, __pyx_v_sgrad_G3, __pyx_v_sgrad_U, __pyx_v_sgrad_I, __pyx_v_sgrad_A, __pyx_v_sgrad_O, __pyx_v_del_g1, __pyx_v_del_g2, __pyx_v_del_g3, __pyx_v_del_u, __pyx_v_del_i, __pyx_v_del_a, __pyx_v_del_o, __pyx_v_del_g1_reg, __pyx_v_del_g2_reg, __pyx_v_del_g3_reg, __pyx_v_del_u_reg, __pyx_v_del_i_reg, __pyx_v_del_a_reg, __pyx_v_del_o_reg); /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YU_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_YI_oids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_user_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_neg_item_ids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_indptr, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_p_user_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_earlier_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_later_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_aspect_indices, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_pair_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_O, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_G3, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_U, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_I, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_sgrad_O, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_24_fit_mter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uia, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_uao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_iao, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos_pair, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_pos, struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector *__pyx_v_rng_neg, int __pyx_v_n_threads, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_iids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_YU, __Pyx_memviewslice __pyx_v_YU_uids, __Pyx_memviewslice __pyx_v_YU_aids, __Pyx_memviewslice __pyx_v_YU_oids, __Pyx_memviewslice __pyx_v_YI, __Pyx_memviewslice __pyx_v_YI_iids, __Pyx_memviewslice __pyx_v_YI_aids, __Pyx_memviewslice __pyx_v_YI_oids, struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict *__pyx_v_rating_dict, __Pyx_memviewslice __pyx_v_user_ids, __Pyx_memviewslice __pyx_v_item_ids, __Pyx_memviewslice __pyx_v_neg_item_ids, __Pyx_memviewslice __pyx_v_indptr, __Pyx_memviewslice __pyx_v_p_user_indices, __Pyx_memviewslice __pyx_v_earlier_indices, __Pyx_memviewslice __pyx_v_later_indices, __Pyx_memviewslice __pyx_v_aspect_indices, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_pair_counts, __Pyx_memviewslice __pyx_v_G1, __Pyx_memviewslice __pyx_v_G2, __Pyx_memviewslice __pyx_v_G3, __Pyx_memviewslice __pyx_v_U, __Pyx_memviewslice __pyx_v_I, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_O, __Pyx_memviewslice __pyx_v_sgrad_G1, __Pyx_memviewslice __pyx_v_sgrad_G2, __Pyx_memviewslice __pyx_v_sgrad_G3, __Pyx_memviewslice __pyx_v_sgrad_U, __Pyx_memviewslice __pyx_v_sgrad_I, __Pyx_memviewslice __pyx_v_sgrad_A, __Pyx_memviewslice __pyx_v_sgrad_O, PyArrayObject *__pyx_v_del_g1, PyArrayObject *__pyx_v_del_g2, PyArrayObject *__pyx_v_del_g3, PyArrayObject *__pyx_v_del_u, PyArrayObject *__pyx_v_del_i, PyArrayObject *__pyx_v_del_a, PyArrayObject *__pyx_v_del_o, PyArrayObject *__pyx_v_del_g1_reg, PyArrayObject *__pyx_v_del_g2_reg, PyArrayObject *__pyx_v_del_g3_reg, PyArrayObject *__pyx_v_del_u_reg, PyArrayObject *__pyx_v_del_i_reg, PyArrayObject *__pyx_v_del_a_reg, PyArrayObject *__pyx_v_del_o_reg) { + long __pyx_v_s; + long __pyx_v_correct; + long __pyx_v_skipped; + long __pyx_v_aspect_correct; + long __pyx_v_n_users; + long __pyx_v_n_items; + long __pyx_v_n_aspects; + CYTHON_UNUSED long __pyx_v_n_opinions; + long __pyx_v_n_user_factors; + long __pyx_v_n_item_factors; + long __pyx_v_n_aspect_factors; + long __pyx_v_n_opinion_factors; + CYTHON_UNUSED int __pyx_v_num_samples; + CYTHON_UNUSED int __pyx_v_num_bpr_samples; + CYTHON_UNUSED int __pyx_v_num_pair_samples; + CYTHON_UNUSED long __pyx_v__; + long __pyx_v_i; + long __pyx_v_j; + long __pyx_v_k; + long __pyx_v_idx; + long __pyx_v_jdx; + long __pyx_v_u_idx; + long __pyx_v_i_idx; + long __pyx_v_a_idx; + long __pyx_v_o_idx; + long __pyx_v_j_idx; + long __pyx_v_thread_id; + double __pyx_v_z; + double __pyx_v_score; + double __pyx_v_i_score; + double __pyx_v_j_score; + double __pyx_v_pred; + double __pyx_v_i_ij; + double __pyx_v_a_ji; + double __pyx_v_loss; + double __pyx_v_bpr_loss; + double __pyx_v_aspect_bpr_loss; + double __pyx_v_del_sqerror; + double __pyx_v_del_bpr; + double __pyx_v_del_aspect_bpr; + double __pyx_v_eps; + double __pyx_v_lr; + double __pyx_v_ld_reg; + double __pyx_v_ld_bpr; + double __pyx_v_lambda_d; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a; + __Pyx_Buffer __pyx_pybuffer_del_a; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_a_reg; + __Pyx_Buffer __pyx_pybuffer_del_a_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1; + __Pyx_Buffer __pyx_pybuffer_del_g1; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g1_reg; + __Pyx_Buffer __pyx_pybuffer_del_g1_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2; + __Pyx_Buffer __pyx_pybuffer_del_g2; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g2_reg; + __Pyx_Buffer __pyx_pybuffer_del_g2_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3; + __Pyx_Buffer __pyx_pybuffer_del_g3; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_g3_reg; + __Pyx_Buffer __pyx_pybuffer_del_g3_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i; + __Pyx_Buffer __pyx_pybuffer_del_i; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_i_reg; + __Pyx_Buffer __pyx_pybuffer_del_i_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o; + __Pyx_Buffer __pyx_pybuffer_del_o; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_o_reg; + __Pyx_Buffer __pyx_pybuffer_del_o_reg; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u; + __Pyx_Buffer __pyx_pybuffer_del_u; + __Pyx_LocalBuf_ND __pyx_pybuffernd_del_u_reg; + __Pyx_Buffer __pyx_pybuffer_del_u_reg; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); - - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(2, 4, __pyx_L1_error) - - /* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":1001 - * - * @cname('__pyx_memoryview_fromslice') - * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< - * int ndim, - * object (*to_object_func)(char *), - */ - -static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewslice, int __pyx_v_ndim, PyObject *(*__pyx_v_to_object_func)(char *), int (*__pyx_v_to_dtype_func)(char *, PyObject *), int __pyx_v_dtype_is_object) { - struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; - Py_ssize_t __pyx_v_suboffset; - PyObject *__pyx_v_length = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - __Pyx_TypeInfo *__pyx_t_4; - Py_buffer __pyx_t_5; - Py_ssize_t *__pyx_t_6; - Py_ssize_t *__pyx_t_7; - Py_ssize_t *__pyx_t_8; + long __pyx_t_3; + int __pyx_t_4; + double __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + long __pyx_t_7; + long __pyx_t_8; Py_ssize_t __pyx_t_9; + long __pyx_t_10; + long __pyx_t_11; + long __pyx_t_12; + long __pyx_t_13; + long __pyx_t_14; + long __pyx_t_15; + long __pyx_t_16; + long __pyx_t_17; + Py_ssize_t __pyx_t_18; + Py_ssize_t __pyx_t_19; + Py_ssize_t __pyx_t_20; + Py_ssize_t __pyx_t_21; + Py_ssize_t __pyx_t_22; + Py_ssize_t __pyx_t_23; + Py_ssize_t __pyx_t_24; + Py_ssize_t __pyx_t_25; + bool __pyx_t_26; + int __pyx_t_27; + int __pyx_t_28; + double __pyx_t_29; + PyObject *__pyx_t_30 = NULL; + PyObject *__pyx_t_31 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("memoryview_fromslice", 0); - - /* "View.MemoryView":1009 - * cdef _memoryviewslice result - * - * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< - * return None - * - */ - __pyx_t_1 = ((((PyObject *)__pyx_v_memviewslice.memview) == Py_None) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":1010 - * - * if memviewslice.memview == Py_None: - * return None # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - - /* "View.MemoryView":1009 - * cdef _memoryviewslice result - * - * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< - * return None - * - */ + __Pyx_RefNannySetupContext("__pyx_fuse_1_2_fit_mter", 0); + __pyx_pybuffer_del_g1.pybuffer.buf = NULL; + __pyx_pybuffer_del_g1.refcount = 0; + __pyx_pybuffernd_del_g1.data = NULL; + __pyx_pybuffernd_del_g1.rcbuffer = &__pyx_pybuffer_del_g1; + __pyx_pybuffer_del_g2.pybuffer.buf = NULL; + __pyx_pybuffer_del_g2.refcount = 0; + __pyx_pybuffernd_del_g2.data = NULL; + __pyx_pybuffernd_del_g2.rcbuffer = &__pyx_pybuffer_del_g2; + __pyx_pybuffer_del_g3.pybuffer.buf = NULL; + __pyx_pybuffer_del_g3.refcount = 0; + __pyx_pybuffernd_del_g3.data = NULL; + __pyx_pybuffernd_del_g3.rcbuffer = &__pyx_pybuffer_del_g3; + __pyx_pybuffer_del_u.pybuffer.buf = NULL; + __pyx_pybuffer_del_u.refcount = 0; + __pyx_pybuffernd_del_u.data = NULL; + __pyx_pybuffernd_del_u.rcbuffer = &__pyx_pybuffer_del_u; + __pyx_pybuffer_del_i.pybuffer.buf = NULL; + __pyx_pybuffer_del_i.refcount = 0; + __pyx_pybuffernd_del_i.data = NULL; + __pyx_pybuffernd_del_i.rcbuffer = &__pyx_pybuffer_del_i; + __pyx_pybuffer_del_a.pybuffer.buf = NULL; + __pyx_pybuffer_del_a.refcount = 0; + __pyx_pybuffernd_del_a.data = NULL; + __pyx_pybuffernd_del_a.rcbuffer = &__pyx_pybuffer_del_a; + __pyx_pybuffer_del_o.pybuffer.buf = NULL; + __pyx_pybuffer_del_o.refcount = 0; + __pyx_pybuffernd_del_o.data = NULL; + __pyx_pybuffernd_del_o.rcbuffer = &__pyx_pybuffer_del_o; + __pyx_pybuffer_del_g1_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g1_reg.refcount = 0; + __pyx_pybuffernd_del_g1_reg.data = NULL; + __pyx_pybuffernd_del_g1_reg.rcbuffer = &__pyx_pybuffer_del_g1_reg; + __pyx_pybuffer_del_g2_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g2_reg.refcount = 0; + __pyx_pybuffernd_del_g2_reg.data = NULL; + __pyx_pybuffernd_del_g2_reg.rcbuffer = &__pyx_pybuffer_del_g2_reg; + __pyx_pybuffer_del_g3_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_g3_reg.refcount = 0; + __pyx_pybuffernd_del_g3_reg.data = NULL; + __pyx_pybuffernd_del_g3_reg.rcbuffer = &__pyx_pybuffer_del_g3_reg; + __pyx_pybuffer_del_u_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_u_reg.refcount = 0; + __pyx_pybuffernd_del_u_reg.data = NULL; + __pyx_pybuffernd_del_u_reg.rcbuffer = &__pyx_pybuffer_del_u_reg; + __pyx_pybuffer_del_i_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_i_reg.refcount = 0; + __pyx_pybuffernd_del_i_reg.data = NULL; + __pyx_pybuffernd_del_i_reg.rcbuffer = &__pyx_pybuffer_del_i_reg; + __pyx_pybuffer_del_a_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_a_reg.refcount = 0; + __pyx_pybuffernd_del_a_reg.data = NULL; + __pyx_pybuffernd_del_a_reg.rcbuffer = &__pyx_pybuffer_del_a_reg; + __pyx_pybuffer_del_o_reg.pybuffer.buf = NULL; + __pyx_pybuffer_del_o_reg.refcount = 0; + __pyx_pybuffernd_del_o_reg.data = NULL; + __pyx_pybuffernd_del_o_reg.rcbuffer = &__pyx_pybuffer_del_o_reg; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - - /* "View.MemoryView":1015 - * - * - * result = _memoryviewslice(None, 0, dtype_is_object) # <<<<<<<<<<<<<< - * - * result.from_slice = memviewslice - */ - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1015, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1015, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None); - __Pyx_INCREF(__pyx_int_0); - __Pyx_GIVEREF(__pyx_int_0); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryviewslice_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1015, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2); - __pyx_t_2 = 0; - - /* "View.MemoryView":1017 - * result = _memoryviewslice(None, 0, dtype_is_object) - * - * result.from_slice = memviewslice # <<<<<<<<<<<<<< - * __PYX_INC_MEMVIEW(&memviewslice, 1) - * - */ - __pyx_v_result->from_slice = __pyx_v_memviewslice; - - /* "View.MemoryView":1018 - * - * result.from_slice = memviewslice - * __PYX_INC_MEMVIEW(&memviewslice, 1) # <<<<<<<<<<<<<< - * - * result.from_object = ( memviewslice.memview).base - */ - __PYX_INC_MEMVIEW((&__pyx_v_memviewslice), 1); - - /* "View.MemoryView":1020 - * __PYX_INC_MEMVIEW(&memviewslice, 1) - * - * result.from_object = ( memviewslice.memview).base # <<<<<<<<<<<<<< - * result.typeinfo = memviewslice.memview.typeinfo - * - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_memviewslice.memview), __pyx_n_s_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1020, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_v_result->from_object); - __Pyx_DECREF(__pyx_v_result->from_object); - __pyx_v_result->from_object = __pyx_t_2; - __pyx_t_2 = 0; - - /* "View.MemoryView":1021 - * - * result.from_object = ( memviewslice.memview).base - * result.typeinfo = memviewslice.memview.typeinfo # <<<<<<<<<<<<<< - * - * result.view = memviewslice.memview.view - */ - __pyx_t_4 = __pyx_v_memviewslice.memview->typeinfo; - __pyx_v_result->__pyx_base.typeinfo = __pyx_t_4; - - /* "View.MemoryView":1023 - * result.typeinfo = memviewslice.memview.typeinfo - * - * result.view = memviewslice.memview.view # <<<<<<<<<<<<<< - * result.view.buf = memviewslice.data - * result.view.ndim = ndim - */ - __pyx_t_5 = __pyx_v_memviewslice.memview->view; - __pyx_v_result->__pyx_base.view = __pyx_t_5; - - /* "View.MemoryView":1024 - * - * result.view = memviewslice.memview.view - * result.view.buf = memviewslice.data # <<<<<<<<<<<<<< - * result.view.ndim = ndim - * (<__pyx_buffer *> &result.view).obj = Py_None - */ - __pyx_v_result->__pyx_base.view.buf = ((void *)__pyx_v_memviewslice.data); - - /* "View.MemoryView":1025 - * result.view = memviewslice.memview.view - * result.view.buf = memviewslice.data - * result.view.ndim = ndim # <<<<<<<<<<<<<< - * (<__pyx_buffer *> &result.view).obj = Py_None - * Py_INCREF(Py_None) - */ - __pyx_v_result->__pyx_base.view.ndim = __pyx_v_ndim; - - /* "View.MemoryView":1026 - * result.view.buf = memviewslice.data - * result.view.ndim = ndim - * (<__pyx_buffer *> &result.view).obj = Py_None # <<<<<<<<<<<<<< - * Py_INCREF(Py_None) - * - */ - ((Py_buffer *)(&__pyx_v_result->__pyx_base.view))->obj = Py_None; - - /* "View.MemoryView":1027 - * result.view.ndim = ndim - * (<__pyx_buffer *> &result.view).obj = Py_None - * Py_INCREF(Py_None) # <<<<<<<<<<<<<< - * - * if (memviewslice.memview).flags & PyBUF_WRITABLE: - */ - Py_INCREF(Py_None); - - /* "View.MemoryView":1029 - * Py_INCREF(Py_None) - * - * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< - * result.flags = PyBUF_RECORDS - * else: - */ - __pyx_t_1 = ((((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->flags & PyBUF_WRITABLE) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":1030 - * - * if (memviewslice.memview).flags & PyBUF_WRITABLE: - * result.flags = PyBUF_RECORDS # <<<<<<<<<<<<<< - * else: - * result.flags = PyBUF_RECORDS_RO - */ - __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS; - - /* "View.MemoryView":1029 - * Py_INCREF(Py_None) - * - * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< - * result.flags = PyBUF_RECORDS - * else: - */ - goto __pyx_L4; + __pyx_pybuffernd_del_g1.diminfo[0].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1.diminfo[0].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1.diminfo[1].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1.diminfo[1].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1.diminfo[2].strides = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1.diminfo[2].shape = __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - - /* "View.MemoryView":1032 - * result.flags = PyBUF_RECORDS - * else: - * result.flags = PyBUF_RECORDS_RO # <<<<<<<<<<<<<< - * - * result.view.shape = result.from_slice.shape - */ - /*else*/ { - __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS_RO; + __pyx_pybuffernd_del_g2.diminfo[0].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2.diminfo[0].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2.diminfo[1].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2.diminfo[1].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2.diminfo[2].strides = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2.diminfo[2].shape = __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - __pyx_L4:; - - /* "View.MemoryView":1034 - * result.flags = PyBUF_RECORDS_RO - * - * result.view.shape = result.from_slice.shape # <<<<<<<<<<<<<< - * result.view.strides = result.from_slice.strides - * - */ - __pyx_v_result->__pyx_base.view.shape = ((Py_ssize_t *)__pyx_v_result->from_slice.shape); - - /* "View.MemoryView":1035 - * - * result.view.shape = result.from_slice.shape - * result.view.strides = result.from_slice.strides # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_result->__pyx_base.view.strides = ((Py_ssize_t *)__pyx_v_result->from_slice.strides); - - /* "View.MemoryView":1038 - * - * - * result.view.suboffsets = NULL # <<<<<<<<<<<<<< - * for suboffset in result.from_slice.suboffsets[:ndim]: - * if suboffset >= 0: - */ - __pyx_v_result->__pyx_base.view.suboffsets = NULL; - - /* "View.MemoryView":1039 - * - * result.view.suboffsets = NULL - * for suboffset in result.from_slice.suboffsets[:ndim]: # <<<<<<<<<<<<<< - * if suboffset >= 0: - * result.view.suboffsets = result.from_slice.suboffsets - */ - __pyx_t_7 = (__pyx_v_result->from_slice.suboffsets + __pyx_v_ndim); - for (__pyx_t_8 = __pyx_v_result->from_slice.suboffsets; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { - __pyx_t_6 = __pyx_t_8; - __pyx_v_suboffset = (__pyx_t_6[0]); - - /* "View.MemoryView":1040 - * result.view.suboffsets = NULL - * for suboffset in result.from_slice.suboffsets[:ndim]: - * if suboffset >= 0: # <<<<<<<<<<<<<< - * result.view.suboffsets = result.from_slice.suboffsets - * break - */ - __pyx_t_1 = ((__pyx_v_suboffset >= 0) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":1041 - * for suboffset in result.from_slice.suboffsets[:ndim]: - * if suboffset >= 0: - * result.view.suboffsets = result.from_slice.suboffsets # <<<<<<<<<<<<<< - * break - * - */ - __pyx_v_result->__pyx_base.view.suboffsets = ((Py_ssize_t *)__pyx_v_result->from_slice.suboffsets); - - /* "View.MemoryView":1042 - * if suboffset >= 0: - * result.view.suboffsets = result.from_slice.suboffsets - * break # <<<<<<<<<<<<<< - * - * result.view.len = result.view.itemsize - */ - goto __pyx_L6_break; - - /* "View.MemoryView":1040 - * result.view.suboffsets = NULL - * for suboffset in result.from_slice.suboffsets[:ndim]: - * if suboffset >= 0: # <<<<<<<<<<<<<< - * result.view.suboffsets = result.from_slice.suboffsets - * break - */ - } + __pyx_pybuffernd_del_g3.diminfo[0].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3.diminfo[0].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3.diminfo[1].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3.diminfo[1].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3.diminfo[2].strides = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3.diminfo[2].shape = __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } - __pyx_L6_break:; - - /* "View.MemoryView":1044 - * break - * - * result.view.len = result.view.itemsize # <<<<<<<<<<<<<< - * for length in result.view.shape[:ndim]: - * result.view.len *= length - */ - __pyx_t_9 = __pyx_v_result->__pyx_base.view.itemsize; - __pyx_v_result->__pyx_base.view.len = __pyx_t_9; - - /* "View.MemoryView":1045 - * - * result.view.len = result.view.itemsize - * for length in result.view.shape[:ndim]: # <<<<<<<<<<<<<< - * result.view.len *= length - * - */ - __pyx_t_7 = (__pyx_v_result->__pyx_base.view.shape + __pyx_v_ndim); - for (__pyx_t_8 = __pyx_v_result->__pyx_base.view.shape; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { - __pyx_t_6 = __pyx_t_8; - __pyx_t_2 = PyInt_FromSsize_t((__pyx_t_6[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1045, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_2); - __pyx_t_2 = 0; - - /* "View.MemoryView":1046 - * result.view.len = result.view.itemsize - * for length in result.view.shape[:ndim]: - * result.view.len *= length # <<<<<<<<<<<<<< - * - * result.to_object_func = to_object_func - */ - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_result->__pyx_base.view.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1046, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_2, __pyx_v_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1046, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 1046, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_result->__pyx_base.view.len = __pyx_t_9; + __pyx_pybuffernd_del_u.diminfo[0].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u.diminfo[0].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u.diminfo[1].strides = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u.diminfo[1].shape = __pyx_pybuffernd_del_u.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) } + __pyx_pybuffernd_del_i.diminfo[0].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i.diminfo[0].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i.diminfo[1].strides = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i.diminfo[1].shape = __pyx_pybuffernd_del_i.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_a.diminfo[0].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a.diminfo[0].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a.diminfo[1].strides = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a.diminfo[1].shape = __pyx_pybuffernd_del_a.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_o.diminfo[0].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o.diminfo[0].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o.diminfo[1].strides = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o.diminfo[1].shape = __pyx_pybuffernd_del_o.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g1_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g1_reg.diminfo[0].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g1_reg.diminfo[0].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g1_reg.diminfo[1].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g1_reg.diminfo[1].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g1_reg.diminfo[2].strides = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g1_reg.diminfo[2].shape = __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g2_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g2_reg.diminfo[0].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g2_reg.diminfo[0].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g2_reg.diminfo[1].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g2_reg.diminfo[1].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g2_reg.diminfo[2].strides = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g2_reg.diminfo[2].shape = __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_g3_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_g3_reg.diminfo[0].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_g3_reg.diminfo[0].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_g3_reg.diminfo[1].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_g3_reg.diminfo[1].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_del_g3_reg.diminfo[2].strides = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_del_g3_reg.diminfo[2].shape = __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_u_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_u_reg.diminfo[0].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_u_reg.diminfo[0].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_u_reg.diminfo[1].strides = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_u_reg.diminfo[1].shape = __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_i_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_i_reg.diminfo[0].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_i_reg.diminfo[0].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_i_reg.diminfo[1].strides = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_i_reg.diminfo[1].shape = __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_a_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_a_reg.diminfo[0].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_a_reg.diminfo[0].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_a_reg.diminfo[1].strides = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_a_reg.diminfo[1].shape = __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer, (PyObject*)__pyx_v_del_o_reg, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 482, __pyx_L1_error) + } + __pyx_pybuffernd_del_o_reg.diminfo[0].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_del_o_reg.diminfo[0].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_del_o_reg.diminfo[1].strides = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_del_o_reg.diminfo[1].shape = __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.shape[1]; - /* "View.MemoryView":1048 - * result.view.len *= length - * - * result.to_object_func = to_object_func # <<<<<<<<<<<<<< - * result.to_dtype_func = to_dtype_func - * - */ - __pyx_v_result->to_object_func = __pyx_v_to_object_func; - - /* "View.MemoryView":1049 - * - * result.to_object_func = to_object_func - * result.to_dtype_func = to_dtype_func # <<<<<<<<<<<<<< - * - * return result - */ - __pyx_v_result->to_dtype_func = __pyx_v_to_dtype_func; - - /* "View.MemoryView":1051 - * result.to_dtype_func = to_dtype_func - * - * return result # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_get_slice_from_memoryview') - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_result)); - __pyx_r = ((PyObject *)__pyx_v_result); - goto __pyx_L0; - - /* "View.MemoryView":1001 - * - * @cname('__pyx_memoryview_fromslice') - * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< - * int ndim, - * object (*to_object_func)(char *), - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview_fromslice", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_result); - __Pyx_XDECREF(__pyx_v_length); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":1054 - * - * @cname('__pyx_memoryview_get_slice_from_memoryview') - * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *mslice) except NULL: - * cdef _memoryviewslice obj + /* "cornac/models/comparer/recom_comparer_sub.pyx":531 + * """ + * cdef: + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 # <<<<<<<<<<<<<< + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items */ + __pyx_v_correct = 0; + __pyx_v_skipped = 0; + __pyx_v_aspect_correct = 0; -static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_mslice) { - struct __pyx_memoryviewslice_obj *__pyx_v_obj = 0; - __Pyx_memviewslice *__pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_slice_from_memview", 0); - - /* "View.MemoryView":1057 - * __Pyx_memviewslice *mslice) except NULL: - * cdef _memoryviewslice obj - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * obj = memview - * return &obj.from_slice + /* "cornac/models/comparer/recom_comparer_sub.pyx":532 + * cdef: + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 + * long n_users = self.train_set.num_users # <<<<<<<<<<<<<< + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects */ - __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_n_users = __pyx_t_3; - /* "View.MemoryView":1058 - * cdef _memoryviewslice obj - * if isinstance(memview, _memoryviewslice): - * obj = memview # <<<<<<<<<<<<<< - * return &obj.from_slice - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":533 + * long s, i_index, j_index, correct = 0, skipped = 0, aspect_correct = 0 + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items # <<<<<<<<<<<<<< + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions */ - if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(2, 1058, __pyx_L1_error) - __pyx_t_3 = ((PyObject *)__pyx_v_memview); - __Pyx_INCREF(__pyx_t_3); - __pyx_v_obj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); - __pyx_t_3 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_items = __pyx_t_3; - /* "View.MemoryView":1059 - * if isinstance(memview, _memoryviewslice): - * obj = memview - * return &obj.from_slice # <<<<<<<<<<<<<< - * else: - * slice_copy(memview, mslice) + /* "cornac/models/comparer/recom_comparer_sub.pyx":534 + * long n_users = self.train_set.num_users + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors */ - __pyx_r = (&__pyx_v_obj->from_slice); - goto __pyx_L0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_aspects = __pyx_t_3; - /* "View.MemoryView":1057 - * __Pyx_memviewslice *mslice) except NULL: - * cdef _memoryviewslice obj - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * obj = memview - * return &obj.from_slice + /* "cornac/models/comparer/recom_comparer_sub.pyx":535 + * long n_items = self.train_set.num_items + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions # <<<<<<<<<<<<<< + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors */ - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_opinions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 535, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_opinions = __pyx_t_3; - /* "View.MemoryView":1061 - * return &obj.from_slice - * else: - * slice_copy(memview, mslice) # <<<<<<<<<<<<<< - * return mslice - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":536 + * long n_aspects = self.train_set.sentiment.num_aspects + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors # <<<<<<<<<<<<<< + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors */ - /*else*/ { - __pyx_memoryview_slice_copy(__pyx_v_memview, __pyx_v_mslice); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_user_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 536, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 536, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_user_factors = __pyx_t_3; - /* "View.MemoryView":1062 - * else: - * slice_copy(memview, mslice) - * return mslice # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_slice_copy') + /* "cornac/models/comparer/recom_comparer_sub.pyx":537 + * long n_opinions = self.train_set.sentiment.num_opinions + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors # <<<<<<<<<<<<<< + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors */ - __pyx_r = __pyx_v_mslice; - goto __pyx_L0; - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_item_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 537, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_item_factors = __pyx_t_3; - /* "View.MemoryView":1054 - * - * @cname('__pyx_memoryview_get_slice_from_memoryview') - * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *mslice) except NULL: - * cdef _memoryviewslice obj + /* "cornac/models/comparer/recom_comparer_sub.pyx":538 + * long n_user_factors = self.n_user_factors + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors # <<<<<<<<<<<<<< + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_aspect_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 538, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_aspect_factors = __pyx_t_3; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_obj); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":1065 - * - * @cname('__pyx_memoryview_slice_copy') - * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< - * cdef int dim - * cdef (Py_ssize_t*) shape, strides, suboffsets + /* "cornac/models/comparer/recom_comparer_sub.pyx":539 + * long n_item_factors = self.n_item_factors + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors # <<<<<<<<<<<<<< + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_opinion_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 539, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_opinion_factors = __pyx_t_3; -static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_dst) { - int __pyx_v_dim; - Py_ssize_t *__pyx_v_shape; - Py_ssize_t *__pyx_v_strides; - Py_ssize_t *__pyx_v_suboffsets; - __Pyx_RefNannyDeclarations - Py_ssize_t *__pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - Py_ssize_t __pyx_t_5; - __Pyx_RefNannySetupContext("slice_copy", 0); + /* "cornac/models/comparer/recom_comparer_sub.pyx":540 + * long n_aspect_factors = self.n_aspect_factors + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples # <<<<<<<<<<<<<< + * int num_bpr_samples = self.n_bpr_samples + * int num_pair_samples = self.n_pair_samples + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_element_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 540, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_samples = __pyx_t_4; - /* "View.MemoryView":1069 - * cdef (Py_ssize_t*) shape, strides, suboffsets + /* "cornac/models/comparer/recom_comparer_sub.pyx":541 + * long n_opinion_factors = self.n_opinion_factors + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples # <<<<<<<<<<<<<< + * int num_pair_samples = self.n_pair_samples * - * shape = memview.view.shape # <<<<<<<<<<<<<< - * strides = memview.view.strides - * suboffsets = memview.view.suboffsets */ - __pyx_t_1 = __pyx_v_memview->view.shape; - __pyx_v_shape = __pyx_t_1; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_bpr_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 541, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_bpr_samples = __pyx_t_4; - /* "View.MemoryView":1070 - * - * shape = memview.view.shape - * strides = memview.view.strides # <<<<<<<<<<<<<< - * suboffsets = memview.view.suboffsets + /* "cornac/models/comparer/recom_comparer_sub.pyx":542 + * int num_samples = self.n_element_samples + * int num_bpr_samples = self.n_bpr_samples + * int num_pair_samples = self.n_pair_samples # <<<<<<<<<<<<<< * + * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id */ - __pyx_t_1 = __pyx_v_memview->view.strides; - __pyx_v_strides = __pyx_t_1; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_pair_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 542, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_pair_samples = __pyx_t_4; - /* "View.MemoryView":1071 - * shape = memview.view.shape - * strides = memview.view.strides - * suboffsets = memview.view.suboffsets # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":546 + * integral _, i, j, k, idx, jdx, u_idx, i_idx, a_idx, o_idx, j_idx, thread_id + * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji + * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr # <<<<<<<<<<<<<< + * floating eps = 1e-9 * - * dst.memview = <__pyx_memoryview *> memview */ - __pyx_t_1 = __pyx_v_memview->view.suboffsets; - __pyx_v_suboffsets = __pyx_t_1; + __pyx_v_loss = 0.; + __pyx_v_bpr_loss = 0.; + __pyx_v_aspect_bpr_loss = 0.; - /* "View.MemoryView":1073 - * suboffsets = memview.view.suboffsets - * - * dst.memview = <__pyx_memoryview *> memview # <<<<<<<<<<<<<< - * dst.data = memview.view.buf + /* "cornac/models/comparer/recom_comparer_sub.pyx":547 + * floating z, score, i_score, j_score, pred, temp, i_ij, a_ji + * floating loss = 0., bpr_loss = 0., aspect_bpr_loss = 0., del_sqerror, del_bpr, del_aspect_bpr + * floating eps = 1e-9 # <<<<<<<<<<<<<< * + * floating lr = self.lr */ - __pyx_v_dst->memview = ((struct __pyx_memoryview_obj *)__pyx_v_memview); + __pyx_v_eps = 1e-9; - /* "View.MemoryView":1074 - * - * dst.memview = <__pyx_memoryview *> memview - * dst.data = memview.view.buf # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":549 + * floating eps = 1e-9 * - * for dim in range(memview.view.ndim): + * floating lr = self.lr # <<<<<<<<<<<<<< + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr */ - __pyx_v_dst->data = ((char *)__pyx_v_memview->view.buf); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 549, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lr = __pyx_t_5; - /* "View.MemoryView":1076 - * dst.data = memview.view.buf + /* "cornac/models/comparer/recom_comparer_sub.pyx":550 * - * for dim in range(memview.view.ndim): # <<<<<<<<<<<<<< - * dst.shape[dim] = shape[dim] - * dst.strides[dim] = strides[dim] + * floating lr = self.lr + * floating ld_reg = self.lambda_reg # <<<<<<<<<<<<<< + * floating ld_bpr = self.lambda_bpr + * floating lambda_d = self.lambda_d */ - __pyx_t_2 = __pyx_v_memview->view.ndim; - __pyx_t_3 = __pyx_t_2; - for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { - __pyx_v_dim = __pyx_t_4; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_reg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 550, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 550, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_ld_reg = __pyx_t_5; - /* "View.MemoryView":1077 + /* "cornac/models/comparer/recom_comparer_sub.pyx":551 + * floating lr = self.lr + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr # <<<<<<<<<<<<<< + * floating lambda_d = self.lambda_d * - * for dim in range(memview.view.ndim): - * dst.shape[dim] = shape[dim] # <<<<<<<<<<<<<< - * dst.strides[dim] = strides[dim] - * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 */ - (__pyx_v_dst->shape[__pyx_v_dim]) = (__pyx_v_shape[__pyx_v_dim]); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_bpr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_ld_bpr = __pyx_t_5; - /* "View.MemoryView":1078 - * for dim in range(memview.view.ndim): - * dst.shape[dim] = shape[dim] - * dst.strides[dim] = strides[dim] # <<<<<<<<<<<<<< - * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":552 + * floating ld_reg = self.lambda_reg + * floating ld_bpr = self.lambda_bpr + * floating lambda_d = self.lambda_d # <<<<<<<<<<<<<< * + * del_g1.fill(0) */ - (__pyx_v_dst->strides[__pyx_v_dim]) = (__pyx_v_strides[__pyx_v_dim]); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_d = __pyx_t_5; - /* "View.MemoryView":1079 - * dst.shape[dim] = shape[dim] - * dst.strides[dim] = strides[dim] - * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":554 + * floating lambda_d = self.lambda_d * - * @cname('__pyx_memoryview_copy_object') + * del_g1.fill(0) # <<<<<<<<<<<<<< + * del_g2.fill(0) + * del_g3.fill(0) */ - if ((__pyx_v_suboffsets != 0)) { - __pyx_t_5 = (__pyx_v_suboffsets[__pyx_v_dim]); - } else { - __pyx_t_5 = -1L; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; } - (__pyx_v_dst->suboffsets[__pyx_v_dim]) = __pyx_t_5; } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1065 - * - * @cname('__pyx_memoryview_slice_copy') - * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< - * cdef int dim - * cdef (Py_ssize_t*) shape, strides, suboffsets - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "View.MemoryView":1082 - * - * @cname('__pyx_memoryview_copy_object') - * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< - * "Create a new memoryview object" - * cdef __Pyx_memviewslice memviewslice - */ - -static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *__pyx_v_memview) { - __Pyx_memviewslice __pyx_v_memviewslice; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("memoryview_copy", 0); - - /* "View.MemoryView":1085 - * "Create a new memoryview object" - * cdef __Pyx_memviewslice memviewslice - * slice_copy(memview, &memviewslice) # <<<<<<<<<<<<<< - * return memoryview_copy_from_slice(memview, &memviewslice) - * - */ - __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_memviewslice)); - - /* "View.MemoryView":1086 - * cdef __Pyx_memviewslice memviewslice - * slice_copy(memview, &memviewslice) - * return memoryview_copy_from_slice(memview, &memviewslice) # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_copy_object_from_slice') - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __pyx_memoryview_copy_object_from_slice(__pyx_v_memview, (&__pyx_v_memviewslice)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1086, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "View.MemoryView":1082 + /* "cornac/models/comparer/recom_comparer_sub.pyx":555 * - * @cname('__pyx_memoryview_copy_object') - * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< - * "Create a new memoryview object" - * cdef __Pyx_memviewslice memviewslice + * del_g1.fill(0) + * del_g2.fill(0) # <<<<<<<<<<<<<< + * del_g3.fill(0) + * del_u.fill(0) */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview_copy", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":1089 - * - * @cname('__pyx_memoryview_copy_object_from_slice') - * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< - * """ - * Create a new memoryview object from a given memoryview object and slice. + /* "cornac/models/comparer/recom_comparer_sub.pyx":556 + * del_g1.fill(0) + * del_g2.fill(0) + * del_g3.fill(0) # <<<<<<<<<<<<<< + * del_u.fill(0) + * del_i.fill(0) */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; -static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_memviewslice) { - PyObject *(*__pyx_v_to_object_func)(char *); - int (*__pyx_v_to_dtype_func)(char *, PyObject *); - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *(*__pyx_t_3)(char *); - int (*__pyx_t_4)(char *, PyObject *); - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("memoryview_copy_from_slice", 0); - - /* "View.MemoryView":1096 - * cdef int (*to_dtype_func)(char *, object) except 0 - * - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * to_object_func = (<_memoryviewslice> memview).to_object_func - * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + /* "cornac/models/comparer/recom_comparer_sub.pyx":557 + * del_g2.fill(0) + * del_g3.fill(0) + * del_u.fill(0) # <<<<<<<<<<<<<< + * del_i.fill(0) + * del_a.fill(0) */ - __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 557, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1097 - * - * if isinstance(memview, _memoryviewslice): - * to_object_func = (<_memoryviewslice> memview).to_object_func # <<<<<<<<<<<<<< - * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":558 + * del_g3.fill(0) + * del_u.fill(0) + * del_i.fill(0) # <<<<<<<<<<<<<< + * del_a.fill(0) + * del_o.fill(0) */ - __pyx_t_3 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_object_func; - __pyx_v_to_object_func = __pyx_t_3; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1098 - * if isinstance(memview, _memoryviewslice): - * to_object_func = (<_memoryviewslice> memview).to_object_func - * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func # <<<<<<<<<<<<<< - * else: - * to_object_func = NULL + /* "cornac/models/comparer/recom_comparer_sub.pyx":559 + * del_u.fill(0) + * del_i.fill(0) + * del_a.fill(0) # <<<<<<<<<<<<<< + * del_o.fill(0) + * del_g1_reg.fill(0) */ - __pyx_t_4 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_dtype_func; - __pyx_v_to_dtype_func = __pyx_t_4; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 559, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 559, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1096 - * cdef int (*to_dtype_func)(char *, object) except 0 - * - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * to_object_func = (<_memoryviewslice> memview).to_object_func - * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + /* "cornac/models/comparer/recom_comparer_sub.pyx":560 + * del_i.fill(0) + * del_a.fill(0) + * del_o.fill(0) # <<<<<<<<<<<<<< + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) */ - goto __pyx_L3; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1100 - * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func - * else: - * to_object_func = NULL # <<<<<<<<<<<<<< - * to_dtype_func = NULL - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":561 + * del_a.fill(0) + * del_o.fill(0) + * del_g1_reg.fill(0) # <<<<<<<<<<<<<< + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) */ - /*else*/ { - __pyx_v_to_object_func = NULL; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g1_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1101 - * else: - * to_object_func = NULL - * to_dtype_func = NULL # <<<<<<<<<<<<<< - * - * return memoryview_fromslice(memviewslice[0], memview.view.ndim, + /* "cornac/models/comparer/recom_comparer_sub.pyx":562 + * del_o.fill(0) + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) # <<<<<<<<<<<<<< + * del_g3_reg.fill(0) + * del_u_reg.fill(0) */ - __pyx_v_to_dtype_func = NULL; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g2_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 562, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } } - __pyx_L3:; + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1103 - * to_dtype_func = NULL - * - * return memoryview_fromslice(memviewslice[0], memview.view.ndim, # <<<<<<<<<<<<<< - * to_object_func, to_dtype_func, - * memview.dtype_is_object) + /* "cornac/models/comparer/recom_comparer_sub.pyx":563 + * del_g1_reg.fill(0) + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) # <<<<<<<<<<<<<< + * del_u_reg.fill(0) + * del_i_reg.fill(0) */ - __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_g3_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 563, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 563, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1105 - * return memoryview_fromslice(memviewslice[0], memview.view.ndim, - * to_object_func, to_dtype_func, - * memview.dtype_is_object) # <<<<<<<<<<<<<< - * - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":564 + * del_g2_reg.fill(0) + * del_g3_reg.fill(0) + * del_u_reg.fill(0) # <<<<<<<<<<<<<< + * del_i_reg.fill(0) + * del_a_reg.fill(0) */ - __pyx_t_5 = __pyx_memoryview_fromslice((__pyx_v_memviewslice[0]), __pyx_v_memview->view.ndim, __pyx_v_to_object_func, __pyx_v_to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1103, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_u_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1089 - * - * @cname('__pyx_memoryview_copy_object_from_slice') - * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< - * """ - * Create a new memoryview object from a given memoryview object and slice. + /* "cornac/models/comparer/recom_comparer_sub.pyx":565 + * del_g3_reg.fill(0) + * del_u_reg.fill(0) + * del_i_reg.fill(0) # <<<<<<<<<<<<<< + * del_a_reg.fill(0) + * del_o_reg.fill(0) */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_i_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.memoryview_copy_from_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":1111 - * - * - * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< - * if arg < 0: - * return -arg + /* "cornac/models/comparer/recom_comparer_sub.pyx":566 + * del_u_reg.fill(0) + * del_i_reg.fill(0) + * del_a_reg.fill(0) # <<<<<<<<<<<<<< + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_a_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 566, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; -static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) { - Py_ssize_t __pyx_r; - int __pyx_t_1; - - /* "View.MemoryView":1112 - * - * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: - * if arg < 0: # <<<<<<<<<<<<<< - * return -arg - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":567 + * del_i_reg.fill(0) + * del_a_reg.fill(0) + * del_o_reg.fill(0) # <<<<<<<<<<<<<< + * with nogil, parallel(num_threads=n_threads): + * thread_id = get_thread_num() */ - __pyx_t_1 = ((__pyx_v_arg < 0) != 0); - if (__pyx_t_1) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_del_o_reg), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1113 - * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: - * if arg < 0: - * return -arg # <<<<<<<<<<<<<< - * else: - * return arg + /* "cornac/models/comparer/recom_comparer_sub.pyx":568 + * del_a_reg.fill(0) + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): */ - __pyx_r = (-__pyx_v_arg); - goto __pyx_L0; + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel private(__pyx_v_thread_id) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_bpr_loss) reduction(+:__pyx_v_correct) reduction(+:__pyx_v_skipped) reduction(+:__pyx_v_aspect_bpr_loss) reduction(+:__pyx_v_aspect_correct) private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_7, __pyx_t_8, __pyx_t_9) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_n_threads) + #endif /* _OPENMP */ + { + #ifdef _OPENMP + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + Py_BEGIN_ALLOW_THREADS + #endif /* _OPENMP */ + /* Initialize private variables to invalid values */ + __pyx_v_thread_id = ((long)0xbad0bad0); - /* "View.MemoryView":1112 - * - * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: - * if arg < 0: # <<<<<<<<<<<<<< - * return -arg - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":569 + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): + * thread_id = get_thread_num() # <<<<<<<<<<<<<< + * for _ in prange(num_samples, schedule='guided'): + * # get user item aspect element */ - } + __pyx_v_thread_id = recom_bpr::get_thread_num(); - /* "View.MemoryView":1115 - * return -arg - * else: - * return arg # <<<<<<<<<<<<<< - * - * @cname('__pyx_get_best_slice_order') + /* "cornac/models/comparer/recom_comparer_sub.pyx":570 + * with nogil, parallel(num_threads=n_threads): + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): # <<<<<<<<<<<<<< + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) */ - /*else*/ { - __pyx_r = __pyx_v_arg; - goto __pyx_L0; - } + __pyx_t_4 = __pyx_v_num_samples; + { + long __pyx_parallel_temp0 = ((long)0xbad0bad0); + long __pyx_parallel_temp1 = ((long)0xbad0bad0); + double __pyx_parallel_temp2 = ((double)__PYX_NAN()); + long __pyx_parallel_temp3 = ((long)0xbad0bad0); + long __pyx_parallel_temp4 = ((long)0xbad0bad0); + long __pyx_parallel_temp5 = ((long)0xbad0bad0); + long __pyx_parallel_temp6 = ((long)0xbad0bad0); + long __pyx_parallel_temp7 = ((long)0xbad0bad0); + double __pyx_parallel_temp8 = ((double)__PYX_NAN()); + long __pyx_parallel_temp9 = ((long)0xbad0bad0); + double __pyx_parallel_temp10 = ((double)__PYX_NAN()); + double __pyx_parallel_temp11 = ((double)__PYX_NAN()); + long __pyx_parallel_temp12 = ((long)0xbad0bad0); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_7 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_7 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_del_sqerror) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_o_idx) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_score) lastprivate(__pyx_v_u_idx) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_7; __pyx_t_3++){ + if (__pyx_parallel_why < 2) + { + __pyx_v__ = (long)(0 + 1 * __pyx_t_3); + /* Initialize private variables to invalid values */ + __pyx_v_a_idx = ((long)0xbad0bad0); + __pyx_v_del_sqerror = ((double)__PYX_NAN()); + __pyx_v_i = ((long)0xbad0bad0); + __pyx_v_i_idx = ((long)0xbad0bad0); + __pyx_v_idx = ((long)0xbad0bad0); + __pyx_v_j = ((long)0xbad0bad0); + __pyx_v_k = ((long)0xbad0bad0); + __pyx_v_o_idx = ((long)0xbad0bad0); + __pyx_v_pred = ((double)__PYX_NAN()); + __pyx_v_score = ((double)__PYX_NAN()); + __pyx_v_u_idx = ((long)0xbad0bad0); - /* "View.MemoryView":1111 - * - * - * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< - * if arg < 0: - * return -arg + /* "cornac/models/comparer/recom_comparer_sub.pyx":572 + * for _ in prange(num_samples, schedule='guided'): + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] */ + __pyx_t_8 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uia->__pyx_vtab)->generate(__pyx_v_rng_pos_uia, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 572, __pyx_L12_error) + __pyx_v_idx = __pyx_t_8; - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":1118 - * - * @cname('__pyx_get_best_slice_order') - * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< - * """ - * Figure out the best memory access order for a given slice. + /* "cornac/models/comparer/recom_comparer_sub.pyx":573 + * # get user item aspect element + * idx = rng_pos_uia.generate(thread_id) + * u_idx = X_uids[idx] # <<<<<<<<<<<<<< + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] */ + __pyx_t_9 = __pyx_v_idx; + __pyx_v_u_idx = (*((long *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_9 * __pyx_v_X_uids.strides[0]) ))); -static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim) { - int __pyx_v_i; - Py_ssize_t __pyx_v_c_stride; - Py_ssize_t __pyx_v_f_stride; - char __pyx_r; - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; + /* "cornac/models/comparer/recom_comparer_sub.pyx":574 + * idx = rng_pos_uia.generate(thread_id) + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] # <<<<<<<<<<<<<< + * a_idx = X_aids[idx] + * score = X[idx] + */ + __pyx_t_9 = __pyx_v_idx; + __pyx_v_i_idx = (*((long *) ( /* dim=0 */ (__pyx_v_X_iids.data + __pyx_t_9 * __pyx_v_X_iids.strides[0]) ))); - /* "View.MemoryView":1123 - * """ - * cdef int i - * cdef Py_ssize_t c_stride = 0 # <<<<<<<<<<<<<< - * cdef Py_ssize_t f_stride = 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":575 + * u_idx = X_uids[idx] + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] # <<<<<<<<<<<<<< + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) */ - __pyx_v_c_stride = 0; + __pyx_t_9 = __pyx_v_idx; + __pyx_v_a_idx = (*((long *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_9 * __pyx_v_X_aids.strides[0]) ))); - /* "View.MemoryView":1124 - * cdef int i - * cdef Py_ssize_t c_stride = 0 - * cdef Py_ssize_t f_stride = 0 # <<<<<<<<<<<<<< - * - * for i in range(ndim - 1, -1, -1): + /* "cornac/models/comparer/recom_comparer_sub.pyx":576 + * i_idx = X_iids[idx] + * a_idx = X_aids[idx] + * score = X[idx] # <<<<<<<<<<<<<< + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * loss += (pred - score) * (pred - score) */ - __pyx_v_f_stride = 0; + __pyx_t_9 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_9 * __pyx_v_X.strides[0]) ))); - /* "View.MemoryView":1126 - * cdef Py_ssize_t f_stride = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":577 + * a_idx = X_aids[idx] + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) * - * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< - * if mslice.shape[i] > 1: - * c_stride = mslice.strides[i] */ - for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { - __pyx_v_i = __pyx_t_1; + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 577, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; - /* "View.MemoryView":1127 + /* "cornac/models/comparer/recom_comparer_sub.pyx":578 + * score = X[idx] + * pred = get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< * - * for i in range(ndim - 1, -1, -1): - * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< - * c_stride = mslice.strides[i] - * break + * del_sqerror = 2 * (pred - score) */ - __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); - if (__pyx_t_2) { + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "View.MemoryView":1128 - * for i in range(ndim - 1, -1, -1): - * if mslice.shape[i] > 1: - * c_stride = mslice.strides[i] # <<<<<<<<<<<<<< - * break + /* "cornac/models/comparer/recom_comparer_sub.pyx":580 + * loss += (pred - score) * (pred - score) * + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * for i in range(n_user_factors): + * for j in range(n_item_factors): */ - __pyx_v_c_stride = (__pyx_v_mslice->strides[__pyx_v_i]); + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "View.MemoryView":1129 - * if mslice.shape[i] > 1: - * c_stride = mslice.strides[i] - * break # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":581 * - * for i in range(ndim): + * del_sqerror = 2 * (pred - score) + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): */ - goto __pyx_L4_break; + __pyx_t_8 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_8; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "View.MemoryView":1127 - * - * for i in range(ndim - 1, -1, -1): - * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< - * c_stride = mslice.strides[i] - * break + /* "cornac/models/comparer/recom_comparer_sub.pyx":582 + * del_sqerror = 2 * (pred - score) + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] */ - } - } - __pyx_L4_break:; + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "View.MemoryView":1131 - * break - * - * for i in range(ndim): # <<<<<<<<<<<<<< - * if mslice.shape[i] > 1: - * f_stride = mslice.strides[i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":583 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] */ - __pyx_t_1 = __pyx_v_ndim; - __pyx_t_3 = __pyx_t_1; - for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { - __pyx_v_i = __pyx_t_4; + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* "View.MemoryView":1132 - * - * for i in range(ndim): - * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< - * f_stride = mslice.strides[i] - * break + /* "cornac/models/comparer/recom_comparer_sub.pyx":584 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] */ - __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); - if (__pyx_t_2) { + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_i_idx; + __pyx_t_20 = __pyx_v_j; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_k; + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_20 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":1133 - * for i in range(ndim): - * if mslice.shape[i] > 1: - * f_stride = mslice.strides[i] # <<<<<<<<<<<<<< - * break - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":585 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] */ - __pyx_v_f_stride = (__pyx_v_mslice->strides[__pyx_v_i]); + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_i_idx; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":1134 - * if mslice.shape[i] > 1: - * f_stride = mslice.strides[i] - * break # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":586 + * del_g1[i, j, k] += del_sqerror * U[u_idx, i] * I[i_idx, j] * A[a_idx, k] + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] * - * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): */ - goto __pyx_L7_break; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_k; + __pyx_t_23 = __pyx_v_i_idx; + __pyx_t_24 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_25 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_20 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_21 * __pyx_v_A.strides[0]) ) + __pyx_t_22 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":1132 + /* "cornac/models/comparer/recom_comparer_sub.pyx":587 + * del_u[u_idx, i] += del_sqerror * G1[i, j, k] * I[i_idx, j] * A[a_idx, k] + * del_i[i_idx, j] += del_sqerror * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] += del_sqerror * G1[i, j, k] * U[u_idx, i] * I[i_idx, j] # <<<<<<<<<<<<<< * - * for i in range(ndim): - * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< - * f_stride = mslice.strides[i] - * break + * # get user aspect opinion element */ - } - } - __pyx_L7_break:; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_22 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_19 * __pyx_v_U.strides[0]) ) + __pyx_t_18 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))); + } + } + } - /* "View.MemoryView":1136 - * break + /* "cornac/models/comparer/recom_comparer_sub.pyx":590 * - * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< - * return 'C' - * else: + * # get user aspect opinion element + * idx = rng_pos_uao.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] */ - __pyx_t_2 = ((abs_py_ssize_t(__pyx_v_c_stride) <= abs_py_ssize_t(__pyx_v_f_stride)) != 0); - if (__pyx_t_2) { + __pyx_t_8 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_uao->__pyx_vtab)->generate(__pyx_v_rng_pos_uao, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 590, __pyx_L12_error) + __pyx_v_idx = __pyx_t_8; - /* "View.MemoryView":1137 - * - * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): - * return 'C' # <<<<<<<<<<<<<< - * else: - * return 'F' + /* "cornac/models/comparer/recom_comparer_sub.pyx":591 + * # get user aspect opinion element + * idx = rng_pos_uao.generate(thread_id) + * u_idx = YU_uids[idx] # <<<<<<<<<<<<<< + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] */ - __pyx_r = 'C'; - goto __pyx_L0; + __pyx_t_25 = __pyx_v_idx; + __pyx_v_u_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YU_uids.data + __pyx_t_25 * __pyx_v_YU_uids.strides[0]) ))); - /* "View.MemoryView":1136 - * break - * - * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< - * return 'C' - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":592 + * idx = rng_pos_uao.generate(thread_id) + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] # <<<<<<<<<<<<<< + * o_idx = YU_oids[idx] + * score = YU[idx] */ - } + __pyx_t_25 = __pyx_v_idx; + __pyx_v_a_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YU_aids.data + __pyx_t_25 * __pyx_v_YU_aids.strides[0]) ))); - /* "View.MemoryView":1139 - * return 'C' - * else: - * return 'F' # <<<<<<<<<<<<<< - * - * @cython.cdivision(True) + /* "cornac/models/comparer/recom_comparer_sub.pyx":593 + * u_idx = YU_uids[idx] + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] # <<<<<<<<<<<<<< + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) */ - /*else*/ { - __pyx_r = 'F'; - goto __pyx_L0; - } + __pyx_t_25 = __pyx_v_idx; + __pyx_v_o_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YU_oids.data + __pyx_t_25 * __pyx_v_YU_oids.strides[0]) ))); - /* "View.MemoryView":1118 - * - * @cname('__pyx_get_best_slice_order') - * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< - * """ - * Figure out the best memory access order for a given slice. + /* "cornac/models/comparer/recom_comparer_sub.pyx":594 + * a_idx = YU_aids[idx] + * o_idx = YU_oids[idx] + * score = YU[idx] # <<<<<<<<<<<<<< + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) */ + __pyx_t_25 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_YU.data + __pyx_t_25 * __pyx_v_YU.strides[0]) ))); - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":1142 + /* "cornac/models/comparer/recom_comparer_sub.pyx":595 + * o_idx = YU_oids[idx] + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) * - * @cython.cdivision(True) - * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< - * char *dst_data, Py_ssize_t *dst_strides, - * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, */ + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G2, __pyx_v_n_user_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_U, __pyx_v_A, __pyx_v_O, __pyx_v_u_idx, __pyx_v_a_idx, __pyx_v_o_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 595, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; -static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t *__pyx_v_src_strides, char *__pyx_v_dst_data, Py_ssize_t *__pyx_v_dst_strides, Py_ssize_t *__pyx_v_src_shape, Py_ssize_t *__pyx_v_dst_shape, int __pyx_v_ndim, size_t __pyx_v_itemsize) { - CYTHON_UNUSED Py_ssize_t __pyx_v_i; - CYTHON_UNUSED Py_ssize_t __pyx_v_src_extent; - Py_ssize_t __pyx_v_dst_extent; - Py_ssize_t __pyx_v_src_stride; - Py_ssize_t __pyx_v_dst_stride; - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - Py_ssize_t __pyx_t_4; - Py_ssize_t __pyx_t_5; - Py_ssize_t __pyx_t_6; - - /* "View.MemoryView":1149 + /* "cornac/models/comparer/recom_comparer_sub.pyx":596 + * score = YU[idx] + * pred = get_score(G2, n_user_factors, n_aspect_factors, n_opinion_factors, U, A, O, u_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< * - * cdef Py_ssize_t i - * cdef Py_ssize_t src_extent = src_shape[0] # <<<<<<<<<<<<<< - * cdef Py_ssize_t dst_extent = dst_shape[0] - * cdef Py_ssize_t src_stride = src_strides[0] + * del_sqerror = 2 * (pred - score) */ - __pyx_v_src_extent = (__pyx_v_src_shape[0]); + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "View.MemoryView":1150 - * cdef Py_ssize_t i - * cdef Py_ssize_t src_extent = src_shape[0] - * cdef Py_ssize_t dst_extent = dst_shape[0] # <<<<<<<<<<<<<< - * cdef Py_ssize_t src_stride = src_strides[0] - * cdef Py_ssize_t dst_stride = dst_strides[0] + /* "cornac/models/comparer/recom_comparer_sub.pyx":598 + * loss += (pred - score) * (pred - score) + * + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * + * for i in range(n_user_factors): */ - __pyx_v_dst_extent = (__pyx_v_dst_shape[0]); + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "View.MemoryView":1151 - * cdef Py_ssize_t src_extent = src_shape[0] - * cdef Py_ssize_t dst_extent = dst_shape[0] - * cdef Py_ssize_t src_stride = src_strides[0] # <<<<<<<<<<<<<< - * cdef Py_ssize_t dst_stride = dst_strides[0] + /* "cornac/models/comparer/recom_comparer_sub.pyx":600 + * del_sqerror = 2 * (pred - score) * + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): */ - __pyx_v_src_stride = (__pyx_v_src_strides[0]); + __pyx_t_8 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_8; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "View.MemoryView":1152 - * cdef Py_ssize_t dst_extent = dst_shape[0] - * cdef Py_ssize_t src_stride = src_strides[0] - * cdef Py_ssize_t dst_stride = dst_strides[0] # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":601 * - * if ndim == 1: + * for i in range(n_user_factors): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] */ - __pyx_v_dst_stride = (__pyx_v_dst_strides[0]); + __pyx_t_12 = __pyx_v_n_aspect_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "View.MemoryView":1154 - * cdef Py_ssize_t dst_stride = dst_strides[0] - * - * if ndim == 1: # <<<<<<<<<<<<<< - * if (src_stride > 0 and dst_stride > 0 and - * src_stride == itemsize == dst_stride): + /* "cornac/models/comparer/recom_comparer_sub.pyx":602 + * for i in range(n_user_factors): + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] */ - __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); - if (__pyx_t_1) { + __pyx_t_15 = __pyx_v_n_opinion_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* "View.MemoryView":1155 - * - * if ndim == 1: - * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< - * src_stride == itemsize == dst_stride): - * memcpy(dst_data, src_data, itemsize * dst_extent) + /* "cornac/models/comparer/recom_comparer_sub.pyx":603 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] */ - __pyx_t_2 = ((__pyx_v_src_stride > 0) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L5_bool_binop_done; - } - __pyx_t_2 = ((__pyx_v_dst_stride > 0) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L5_bool_binop_done; - } + __pyx_t_25 = __pyx_v_u_idx; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_j; + __pyx_t_20 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":1156 - * if ndim == 1: - * if (src_stride > 0 and dst_stride > 0 and - * src_stride == itemsize == dst_stride): # <<<<<<<<<<<<<< - * memcpy(dst_data, src_data, itemsize * dst_extent) - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":604 + * for k in range(n_opinion_factors): + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] */ - __pyx_t_2 = (((size_t)__pyx_v_src_stride) == __pyx_v_itemsize); - if (__pyx_t_2) { - __pyx_t_2 = (__pyx_v_itemsize == ((size_t)__pyx_v_dst_stride)); - } - __pyx_t_3 = (__pyx_t_2 != 0); - __pyx_t_1 = __pyx_t_3; - __pyx_L5_bool_binop_done:; + __pyx_t_21 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_18 = __pyx_v_a_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_o_idx; + __pyx_t_24 = __pyx_v_k; + __pyx_t_23 = __pyx_v_u_idx; + __pyx_t_22 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_u.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_9 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_25 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":1155 + /* "cornac/models/comparer/recom_comparer_sub.pyx":605 + * del_g2[i, j, k] += del_sqerror * U[u_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] * - * if ndim == 1: - * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< - * src_stride == itemsize == dst_stride): - * memcpy(dst_data, src_data, itemsize * dst_extent) */ - if (__pyx_t_1) { + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_18 = __pyx_v_u_idx; + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + __pyx_t_22 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_24 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_20 * __pyx_v_O.strides[0]) ) + __pyx_t_21 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":1157 - * if (src_stride > 0 and dst_stride > 0 and - * src_stride == itemsize == dst_stride): - * memcpy(dst_data, src_data, itemsize * dst_extent) # <<<<<<<<<<<<<< - * else: - * for i in range(dst_extent): + /* "cornac/models/comparer/recom_comparer_sub.pyx":606 + * del_u[u_idx, i] += del_sqerror * G2[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G2[i, j, k] * U[u_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G2[i, j, k] * U[u_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< + * + * # get item aspect opinion element */ - (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, (__pyx_v_itemsize * __pyx_v_dst_extent))); + __pyx_t_21 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_18 = __pyx_v_u_idx; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_a_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_o_idx; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_21 * __pyx_v_G2.strides[0]) ) + __pyx_t_20 * __pyx_v_G2.strides[1]) ) + __pyx_t_19 * __pyx_v_G2.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_24 * __pyx_v_A.strides[1]) )))); + } + } + } - /* "View.MemoryView":1155 + /* "cornac/models/comparer/recom_comparer_sub.pyx":609 * - * if ndim == 1: - * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< - * src_stride == itemsize == dst_stride): - * memcpy(dst_data, src_data, itemsize * dst_extent) + * # get item aspect opinion element + * idx = rng_pos_iao.generate(thread_id) # <<<<<<<<<<<<<< + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] */ - goto __pyx_L4; - } + __pyx_t_8 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_iao->__pyx_vtab)->generate(__pyx_v_rng_pos_iao, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 609, __pyx_L12_error) + __pyx_v_idx = __pyx_t_8; - /* "View.MemoryView":1159 - * memcpy(dst_data, src_data, itemsize * dst_extent) - * else: - * for i in range(dst_extent): # <<<<<<<<<<<<<< - * memcpy(dst_data, src_data, itemsize) - * src_data += src_stride - */ - /*else*/ { - __pyx_t_4 = __pyx_v_dst_extent; - __pyx_t_5 = __pyx_t_4; - for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { - __pyx_v_i = __pyx_t_6; - - /* "View.MemoryView":1160 - * else: - * for i in range(dst_extent): - * memcpy(dst_data, src_data, itemsize) # <<<<<<<<<<<<<< - * src_data += src_stride - * dst_data += dst_stride + /* "cornac/models/comparer/recom_comparer_sub.pyx":610 + * # get item aspect opinion element + * idx = rng_pos_iao.generate(thread_id) + * i_idx = YI_iids[idx] # <<<<<<<<<<<<<< + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] */ - (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, __pyx_v_itemsize)); + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YI_iids.data + __pyx_t_24 * __pyx_v_YI_iids.strides[0]) ))); - /* "View.MemoryView":1161 - * for i in range(dst_extent): - * memcpy(dst_data, src_data, itemsize) - * src_data += src_stride # <<<<<<<<<<<<<< - * dst_data += dst_stride - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":611 + * idx = rng_pos_iao.generate(thread_id) + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] # <<<<<<<<<<<<<< + * o_idx = YI_oids[idx] + * score = YI[idx] */ - __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); + __pyx_t_24 = __pyx_v_idx; + __pyx_v_a_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YI_aids.data + __pyx_t_24 * __pyx_v_YI_aids.strides[0]) ))); - /* "View.MemoryView":1162 - * memcpy(dst_data, src_data, itemsize) - * src_data += src_stride - * dst_data += dst_stride # <<<<<<<<<<<<<< - * else: - * for i in range(dst_extent): + /* "cornac/models/comparer/recom_comparer_sub.pyx":612 + * i_idx = YI_iids[idx] + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] # <<<<<<<<<<<<<< + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) */ - __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); - } - } - __pyx_L4:; + __pyx_t_24 = __pyx_v_idx; + __pyx_v_o_idx = (*((long *) ( /* dim=0 */ (__pyx_v_YI_oids.data + __pyx_t_24 * __pyx_v_YI_oids.strides[0]) ))); - /* "View.MemoryView":1154 - * cdef Py_ssize_t dst_stride = dst_strides[0] - * - * if ndim == 1: # <<<<<<<<<<<<<< - * if (src_stride > 0 and dst_stride > 0 and - * src_stride == itemsize == dst_stride): + /* "cornac/models/comparer/recom_comparer_sub.pyx":613 + * a_idx = YI_aids[idx] + * o_idx = YI_oids[idx] + * score = YI[idx] # <<<<<<<<<<<<<< + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) */ - goto __pyx_L3; - } + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_YI.data + __pyx_t_24 * __pyx_v_YI.strides[0]) ))); - /* "View.MemoryView":1164 - * dst_data += dst_stride - * else: - * for i in range(dst_extent): # <<<<<<<<<<<<<< - * _copy_strided_to_strided(src_data, src_strides + 1, - * dst_data, dst_strides + 1, + /* "cornac/models/comparer/recom_comparer_sub.pyx":614 + * o_idx = YI_oids[idx] + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) # <<<<<<<<<<<<<< + * loss += (pred - score) * (pred - score) + * */ - /*else*/ { - __pyx_t_4 = __pyx_v_dst_extent; - __pyx_t_5 = __pyx_t_4; - for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { - __pyx_v_i = __pyx_t_6; + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G3, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_n_opinion_factors, __pyx_v_I, __pyx_v_A, __pyx_v_O, __pyx_v_i_idx, __pyx_v_a_idx, __pyx_v_o_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 614, __pyx_L12_error) + __pyx_v_pred = __pyx_t_5; - /* "View.MemoryView":1165 - * else: - * for i in range(dst_extent): - * _copy_strided_to_strided(src_data, src_strides + 1, # <<<<<<<<<<<<<< - * dst_data, dst_strides + 1, - * src_shape + 1, dst_shape + 1, + /* "cornac/models/comparer/recom_comparer_sub.pyx":615 + * score = YI[idx] + * pred = get_score(G3, n_item_factors, n_aspect_factors, n_opinion_factors, I, A, O, i_idx, a_idx, o_idx) + * loss += (pred - score) * (pred - score) # <<<<<<<<<<<<<< + * + * del_sqerror = 2 * (pred - score) */ - _copy_strided_to_strided(__pyx_v_src_data, (__pyx_v_src_strides + 1), __pyx_v_dst_data, (__pyx_v_dst_strides + 1), (__pyx_v_src_shape + 1), (__pyx_v_dst_shape + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize); + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_pred - __pyx_v_score) * (__pyx_v_pred - __pyx_v_score))); - /* "View.MemoryView":1169 - * src_shape + 1, dst_shape + 1, - * ndim - 1, itemsize) - * src_data += src_stride # <<<<<<<<<<<<<< - * dst_data += dst_stride + /* "cornac/models/comparer/recom_comparer_sub.pyx":617 + * loss += (pred - score) * (pred - score) * + * del_sqerror = 2 * (pred - score) # <<<<<<<<<<<<<< + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): */ - __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); + __pyx_v_del_sqerror = (2.0 * (__pyx_v_pred - __pyx_v_score)); - /* "View.MemoryView":1170 - * ndim - 1, itemsize) - * src_data += src_stride - * dst_data += dst_stride # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":618 * - * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, + * del_sqerror = 2 * (pred - score) + * for i in range(n_item_factors): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): */ - __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); - } - } - __pyx_L3:; + __pyx_t_8 = __pyx_v_n_item_factors; + __pyx_t_10 = __pyx_t_8; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "View.MemoryView":1142 - * - * @cython.cdivision(True) - * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< - * char *dst_data, Py_ssize_t *dst_strides, - * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, + /* "cornac/models/comparer/recom_comparer_sub.pyx":619 + * del_sqerror = 2 * (pred - score) + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] */ + __pyx_t_12 = __pyx_v_n_aspect_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* function exit code */ -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":620 + * for i in range(n_item_factors): + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + */ + __pyx_t_15 = __pyx_v_n_opinion_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; -/* "View.MemoryView":1172 - * dst_data += dst_stride - * - * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *dst, - * int ndim, size_t itemsize) nogil: + /* "cornac/models/comparer/recom_comparer_sub.pyx":621 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] */ + __pyx_t_24 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_o_idx; + __pyx_t_20 = __pyx_v_k; + __pyx_t_21 = __pyx_v_i; + __pyx_t_22 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_24 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); -static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + /* "cornac/models/comparer/recom_comparer_sub.pyx":622 + * for k in range(n_opinion_factors): + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] + */ + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_o_idx; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i_idx; + __pyx_t_21 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_23 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":1175 - * __Pyx_memviewslice *dst, - * int ndim, size_t itemsize) nogil: - * _copy_strided_to_strided(src.data, src.strides, dst.data, dst.strides, # <<<<<<<<<<<<<< - * src.shape, dst.shape, ndim, itemsize) + /* "cornac/models/comparer/recom_comparer_sub.pyx":623 + * del_g3[i, j, k] += del_sqerror * I[i_idx, i] * A[a_idx, j] * O[o_idx, k] + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] # <<<<<<<<<<<<<< + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] * */ - _copy_strided_to_strided(__pyx_v_src->data, __pyx_v_src->strides, __pyx_v_dst->data, __pyx_v_dst->strides, __pyx_v_src->shape, __pyx_v_dst->shape, __pyx_v_ndim, __pyx_v_itemsize); + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_o_idx; + __pyx_t_20 = __pyx_v_k; + __pyx_t_21 = __pyx_v_a_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_a.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_23 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_20 * __pyx_v_O.strides[1]) )))); - /* "View.MemoryView":1172 - * dst_data += dst_stride + /* "cornac/models/comparer/recom_comparer_sub.pyx":624 + * del_i[i_idx, i] += del_sqerror * G3[i, j, k] * A[a_idx, j] * O[o_idx, k] + * del_a[a_idx, j] += del_sqerror * G3[i, j, k] * I[i_idx, i] * O[o_idx, k] + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] # <<<<<<<<<<<<<< * - * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *dst, - * int ndim, size_t itemsize) nogil: + * for _ in prange(num_bpr_samples, schedule='guided'): */ + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_j; + __pyx_t_22 = __pyx_v_o_idx; + __pyx_t_21 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_o.diminfo[1].strides) += (((__pyx_v_del_sqerror * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_19 * __pyx_v_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_G3.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_25 * __pyx_v_I.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); + } + } + } + goto __pyx_L33; + __pyx_L12_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L32; + __pyx_L32:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates15) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_a_idx; + __pyx_parallel_temp2 = __pyx_v_del_sqerror; + __pyx_parallel_temp3 = __pyx_v_i; + __pyx_parallel_temp4 = __pyx_v_i_idx; + __pyx_parallel_temp5 = __pyx_v_idx; + __pyx_parallel_temp6 = __pyx_v_j; + __pyx_parallel_temp7 = __pyx_v_k; + __pyx_parallel_temp8 = __pyx_v_loss; + __pyx_parallel_temp9 = __pyx_v_o_idx; + __pyx_parallel_temp10 = __pyx_v_pred; + __pyx_parallel_temp11 = __pyx_v_score; + __pyx_parallel_temp12 = __pyx_v_u_idx; + } + __pyx_L33:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_a_idx = __pyx_parallel_temp1; + __pyx_v_del_sqerror = __pyx_parallel_temp2; + __pyx_v_i = __pyx_parallel_temp3; + __pyx_v_i_idx = __pyx_parallel_temp4; + __pyx_v_idx = __pyx_parallel_temp5; + __pyx_v_j = __pyx_parallel_temp6; + __pyx_v_k = __pyx_parallel_temp7; + __pyx_v_loss = __pyx_parallel_temp8; + __pyx_v_o_idx = __pyx_parallel_temp9; + __pyx_v_pred = __pyx_parallel_temp10; + __pyx_v_score = __pyx_parallel_temp11; + __pyx_v_u_idx = __pyx_parallel_temp12; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } - /* function exit code */ -} - -/* "View.MemoryView":1179 + /* "cornac/models/comparer/recom_comparer_sub.pyx":626 + * del_o[o_idx, k] += del_sqerror * G3[i, j, k] * I[i_idx, i] * A[a_idx, j] * - * @cname('__pyx_memoryview_slice_get_size') - * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< - * "Return the size of the memory occupied by the slice in number of bytes" - * cdef Py_ssize_t shape, size = src.memview.view.itemsize + * for _ in prange(num_bpr_samples, schedule='guided'): # <<<<<<<<<<<<<< + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] */ + __pyx_t_4 = __pyx_v_num_bpr_samples; + { + long __pyx_parallel_temp0 = ((long)0xbad0bad0); + double __pyx_parallel_temp1 = ((double)__PYX_NAN()); + long __pyx_parallel_temp2 = ((long)0xbad0bad0); + double __pyx_parallel_temp3 = ((double)__PYX_NAN()); + long __pyx_parallel_temp4 = ((long)0xbad0bad0); + long __pyx_parallel_temp5 = ((long)0xbad0bad0); + double __pyx_parallel_temp6 = ((double)__PYX_NAN()); + double __pyx_parallel_temp7 = ((double)__PYX_NAN()); + long __pyx_parallel_temp8 = ((long)0xbad0bad0); + long __pyx_parallel_temp9 = ((long)0xbad0bad0); + long __pyx_parallel_temp10 = ((long)0xbad0bad0); + double __pyx_parallel_temp11 = ((double)__PYX_NAN()); + long __pyx_parallel_temp12 = ((long)0xbad0bad0); + long __pyx_parallel_temp13 = ((long)0xbad0bad0); + double __pyx_parallel_temp14 = ((double)__PYX_NAN()); + long __pyx_parallel_temp15 = ((long)0xbad0bad0); + long __pyx_parallel_temp16 = ((long)0xbad0bad0); + long __pyx_parallel_temp17 = ((long)0xbad0bad0); + double __pyx_parallel_temp18 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_3 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_3 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_del_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_i_ij) lastprivate(__pyx_v_i_score) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_j_score) lastprivate(__pyx_v_jdx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_s) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_3; __pyx_t_7++){ + if (__pyx_parallel_why < 2) + { + __pyx_v__ = (long)(0 + 1 * __pyx_t_7); + /* Initialize private variables to invalid values */ + __pyx_v_del_bpr = ((double)__PYX_NAN()); + __pyx_v_i = ((long)0xbad0bad0); + __pyx_v_i_idx = ((long)0xbad0bad0); + __pyx_v_i_ij = ((double)__PYX_NAN()); + __pyx_v_i_score = ((double)__PYX_NAN()); + __pyx_v_idx = ((long)0xbad0bad0); + __pyx_v_j = ((long)0xbad0bad0); + __pyx_v_j_idx = ((long)0xbad0bad0); + __pyx_v_j_score = ((double)__PYX_NAN()); + __pyx_v_jdx = ((long)0xbad0bad0); + __pyx_v_k = ((long)0xbad0bad0); + __pyx_v_pred = ((double)__PYX_NAN()); + __pyx_v_s = ((long)0xbad0bad0); + __pyx_v_u_idx = ((long)0xbad0bad0); + __pyx_v_z = ((double)__PYX_NAN()); -static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) { - Py_ssize_t __pyx_v_shape; - Py_ssize_t __pyx_v_size; - Py_ssize_t __pyx_r; - Py_ssize_t __pyx_t_1; - Py_ssize_t *__pyx_t_2; - Py_ssize_t *__pyx_t_3; - Py_ssize_t *__pyx_t_4; - - /* "View.MemoryView":1181 - * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: - * "Return the size of the memory occupied by the slice in number of bytes" - * cdef Py_ssize_t shape, size = src.memview.view.itemsize # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":627 * - * for shape in src.shape[:ndim]: + * for _ in prange(num_bpr_samples, schedule='guided'): + * idx = rng_pos.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] */ - __pyx_t_1 = __pyx_v_src->memview->view.itemsize; - __pyx_v_size = __pyx_t_1; + __pyx_t_8 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos->__pyx_vtab)->generate(__pyx_v_rng_pos, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 627, __pyx_L36_error) + __pyx_v_idx = __pyx_t_8; - /* "View.MemoryView":1183 - * cdef Py_ssize_t shape, size = src.memview.view.itemsize - * - * for shape in src.shape[:ndim]: # <<<<<<<<<<<<<< - * size *= shape - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":628 + * for _ in prange(num_bpr_samples, schedule='guided'): + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] # <<<<<<<<<<<<<< + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) */ - __pyx_t_3 = (__pyx_v_src->shape + __pyx_v_ndim); - for (__pyx_t_4 = __pyx_v_src->shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { - __pyx_t_2 = __pyx_t_4; - __pyx_v_shape = (__pyx_t_2[0]); + __pyx_t_23 = __pyx_v_idx; + __pyx_v_u_idx = (*((long *) ( /* dim=0 */ (__pyx_v_user_ids.data + __pyx_t_23 * __pyx_v_user_ids.strides[0]) ))); - /* "View.MemoryView":1184 - * - * for shape in src.shape[:ndim]: - * size *= shape # <<<<<<<<<<<<<< - * - * return size + /* "cornac/models/comparer/recom_comparer_sub.pyx":629 + * idx = rng_pos.generate(thread_id) + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] # <<<<<<<<<<<<<< + * jdx = rng_neg.generate(thread_id) + * j_idx = neg_item_ids[jdx] */ - __pyx_v_size = (__pyx_v_size * __pyx_v_shape); - } + __pyx_t_23 = __pyx_v_idx; + __pyx_v_i_idx = (*((long *) ( /* dim=0 */ (__pyx_v_item_ids.data + __pyx_t_23 * __pyx_v_item_ids.strides[0]) ))); - /* "View.MemoryView":1186 - * size *= shape - * - * return size # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":630 + * u_idx = user_ids[idx] + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) # <<<<<<<<<<<<<< + * j_idx = neg_item_ids[jdx] * - * @cname('__pyx_fill_contig_strides_array') */ - __pyx_r = __pyx_v_size; - goto __pyx_L0; + __pyx_t_8 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_neg->__pyx_vtab)->generate(__pyx_v_rng_neg, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 630, __pyx_L36_error) + __pyx_v_jdx = __pyx_t_8; - /* "View.MemoryView":1179 + /* "cornac/models/comparer/recom_comparer_sub.pyx":631 + * i_idx = item_ids[idx] + * jdx = rng_neg.generate(thread_id) + * j_idx = neg_item_ids[jdx] # <<<<<<<<<<<<<< * - * @cname('__pyx_memoryview_slice_get_size') - * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< - * "Return the size of the memory occupied by the slice in number of bytes" - * cdef Py_ssize_t shape, size = src.memview.view.itemsize + * s = 1 */ + __pyx_t_23 = __pyx_v_jdx; + __pyx_v_j_idx = (*((long *) ( /* dim=0 */ (__pyx_v_neg_item_ids.data + __pyx_t_23 * __pyx_v_neg_item_ids.strides[0]) ))); - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":1189 + /* "cornac/models/comparer/recom_comparer_sub.pyx":633 + * j_idx = neg_item_ids[jdx] * - * @cname('__pyx_fill_contig_strides_array') - * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< - * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, - * int ndim, char order) nogil: + * s = 1 # <<<<<<<<<<<<<< + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): */ + __pyx_v_s = 1; -static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, Py_ssize_t __pyx_v_stride, int __pyx_v_ndim, char __pyx_v_order) { - int __pyx_v_idx; - Py_ssize_t __pyx_r; - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - - /* "View.MemoryView":1198 - * cdef int idx - * - * if order == 'F': # <<<<<<<<<<<<<< - * for idx in range(ndim): - * strides[idx] = stride + /* "cornac/models/comparer/recom_comparer_sub.pyx":635 + * s = 1 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] */ - __pyx_t_1 = ((__pyx_v_order == 'F') != 0); - if (__pyx_t_1) { + __pyx_t_26 = __pyx_fuse_2__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero(__pyx_v_indptr, __pyx_v_item_ids, __pyx_v_u_idx, __pyx_v_j_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 635, __pyx_L36_error) + __pyx_t_27 = (__pyx_t_26 != 0); + if (__pyx_t_27) { - /* "View.MemoryView":1199 - * - * if order == 'F': - * for idx in range(ndim): # <<<<<<<<<<<<<< - * strides[idx] = stride - * stride *= shape[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":636 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] # <<<<<<<<<<<<<< + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: */ - __pyx_t_2 = __pyx_v_ndim; - __pyx_t_3 = __pyx_t_2; - for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { - __pyx_v_idx = __pyx_t_4; + __pyx_t_28 = __pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_i_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 636, __pyx_L36_error) + __pyx_v_i_score = (__pyx_v_rating_dict->my_map[__pyx_t_28]); - /* "View.MemoryView":1200 - * if order == 'F': - * for idx in range(ndim): - * strides[idx] = stride # <<<<<<<<<<<<<< - * stride *= shape[idx] - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":637 + * if has_non_zero(indptr, item_ids, u_idx, j_idx): + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] # <<<<<<<<<<<<<< + * if i_score == j_score: + * skipped += 1 */ - (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; + __pyx_t_28 = __pyx_f_6cornac_6models_4mter_10recom_mter_get_key(__pyx_v_u_idx, __pyx_v_j_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 637, __pyx_L36_error) + __pyx_v_j_score = (__pyx_v_rating_dict->my_map[__pyx_t_28]); - /* "View.MemoryView":1201 - * for idx in range(ndim): - * strides[idx] = stride - * stride *= shape[idx] # <<<<<<<<<<<<<< - * else: - * for idx in range(ndim - 1, -1, -1): + /* "cornac/models/comparer/recom_comparer_sub.pyx":638 + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: # <<<<<<<<<<<<<< + * skipped += 1 + * continue */ - __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); - } + __pyx_t_27 = (__pyx_v_i_score == __pyx_v_j_score); + if (__pyx_t_27) { - /* "View.MemoryView":1198 - * cdef int idx - * - * if order == 'F': # <<<<<<<<<<<<<< - * for idx in range(ndim): - * strides[idx] = stride + /* "cornac/models/comparer/recom_comparer_sub.pyx":639 + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: + * skipped += 1 # <<<<<<<<<<<<<< + * continue + * elif i_score < j_score: */ - goto __pyx_L3; - } + __pyx_v_skipped = (__pyx_v_skipped + 1); - /* "View.MemoryView":1203 - * stride *= shape[idx] - * else: - * for idx in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< - * strides[idx] = stride - * stride *= shape[idx] + /* "cornac/models/comparer/recom_comparer_sub.pyx":640 + * if i_score == j_score: + * skipped += 1 + * continue # <<<<<<<<<<<<<< + * elif i_score < j_score: + * s = -1 */ - /*else*/ { - for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) { - __pyx_v_idx = __pyx_t_2; + goto __pyx_L34_continue; - /* "View.MemoryView":1204 - * else: - * for idx in range(ndim - 1, -1, -1): - * strides[idx] = stride # <<<<<<<<<<<<<< - * stride *= shape[idx] - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":638 + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + * if i_score == j_score: # <<<<<<<<<<<<<< + * skipped += 1 + * continue */ - (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; + } - /* "View.MemoryView":1205 - * for idx in range(ndim - 1, -1, -1): - * strides[idx] = stride - * stride *= shape[idx] # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":641 + * skipped += 1 + * continue + * elif i_score < j_score: # <<<<<<<<<<<<<< + * s = -1 * - * return stride */ - __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); - } - } - __pyx_L3:; + __pyx_t_27 = (__pyx_v_i_score < __pyx_v_j_score); + if (__pyx_t_27) { - /* "View.MemoryView":1207 - * stride *= shape[idx] - * - * return stride # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":642 + * continue + * elif i_score < j_score: + * s = -1 # <<<<<<<<<<<<<< * - * @cname('__pyx_memoryview_copy_data_to_temp') + * pred = ( */ - __pyx_r = __pyx_v_stride; - goto __pyx_L0; + __pyx_v_s = -1L; - /* "View.MemoryView":1189 + /* "cornac/models/comparer/recom_comparer_sub.pyx":641 + * skipped += 1 + * continue + * elif i_score < j_score: # <<<<<<<<<<<<<< + * s = -1 * - * @cname('__pyx_fill_contig_strides_array') - * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< - * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, - * int ndim, char order) nogil: */ + } - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":635 + * s = 1 + * # if the user has rated the item j, change sign if item j > item i + * if has_non_zero(indptr, item_ids, u_idx, j_idx): # <<<<<<<<<<<<<< + * i_score = rating_dict.my_map[get_key(u_idx, i_idx)] + * j_score = rating_dict.my_map[get_key(u_idx, j_idx)] + */ + } -/* "View.MemoryView":1210 + /* "cornac/models/comparer/recom_comparer_sub.pyx":645 * - * @cname('__pyx_memoryview_copy_data_to_temp') - * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *tmpslice, - * char order, + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) # <<<<<<<<<<<<<< + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s */ + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_n_aspects); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 645, __pyx_L36_error) -static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_tmpslice, char __pyx_v_order, int __pyx_v_ndim) { - int __pyx_v_i; - void *__pyx_v_result; - size_t __pyx_v_itemsize; - size_t __pyx_v_size; - void *__pyx_r; - Py_ssize_t __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - struct __pyx_memoryview_obj *__pyx_t_4; - int __pyx_t_5; - int __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; + /* "cornac/models/comparer/recom_comparer_sub.pyx":646 + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) # <<<<<<<<<<<<<< + * ) * s + * z = (1.0 / (1.0 + exp(pred))) + */ + __pyx_t_29 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_n_aspects); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 646, __pyx_L36_error) - /* "View.MemoryView":1221 - * cdef void *result - * - * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< - * cdef size_t size = slice_get_size(src, ndim) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":647 + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, n_aspects) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s # <<<<<<<<<<<<<< + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: */ - __pyx_t_1 = __pyx_v_src->memview->view.itemsize; - __pyx_v_itemsize = __pyx_t_1; + __pyx_v_pred = ((__pyx_t_5 - __pyx_t_29) * __pyx_v_s); - /* "View.MemoryView":1222 - * - * cdef size_t itemsize = src.memview.view.itemsize - * cdef size_t size = slice_get_size(src, ndim) # <<<<<<<<<<<<<< - * - * result = malloc(size) + /* "cornac/models/comparer/recom_comparer_sub.pyx":648 + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, n_aspects) + * ) * s + * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< + * if z < .5: + * correct += 1 */ - __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim); + __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); - /* "View.MemoryView":1224 - * cdef size_t size = slice_get_size(src, ndim) - * - * result = malloc(size) # <<<<<<<<<<<<<< - * if not result: - * _err(MemoryError, NULL) + /* "cornac/models/comparer/recom_comparer_sub.pyx":649 + * ) * s + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * correct += 1 + * del_bpr = ld_bpr * z * s */ - __pyx_v_result = malloc(__pyx_v_size); + __pyx_t_27 = (__pyx_v_z < .5); + if (__pyx_t_27) { - /* "View.MemoryView":1225 - * - * result = malloc(size) - * if not result: # <<<<<<<<<<<<<< - * _err(MemoryError, NULL) + /* "cornac/models/comparer/recom_comparer_sub.pyx":650 + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: + * correct += 1 # <<<<<<<<<<<<<< + * del_bpr = ld_bpr * z * s * */ - __pyx_t_2 = ((!(__pyx_v_result != 0)) != 0); - if (__pyx_t_2) { + __pyx_v_correct = (__pyx_v_correct + 1); - /* "View.MemoryView":1226 - * result = malloc(size) - * if not result: - * _err(MemoryError, NULL) # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":649 + * ) * s + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * correct += 1 + * del_bpr = ld_bpr * z * s + */ + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":651 + * if z < .5: + * correct += 1 + * del_bpr = ld_bpr * z * s # <<<<<<<<<<<<<< * + * bpr_loss += log(1 / (1 + exp(-pred))) */ - __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 1226, __pyx_L1_error) + __pyx_v_del_bpr = ((__pyx_v_ld_bpr * __pyx_v_z) * __pyx_v_s); - /* "View.MemoryView":1225 + /* "cornac/models/comparer/recom_comparer_sub.pyx":653 + * del_bpr = ld_bpr * z * s * - * result = malloc(size) - * if not result: # <<<<<<<<<<<<<< - * _err(MemoryError, NULL) + * bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< * + * for i in range(n_user_factors): */ - } + __pyx_v_bpr_loss = (__pyx_v_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); - /* "View.MemoryView":1229 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":655 + * bpr_loss += log(1 / (1 + exp(-pred))) * - * tmpslice.data = result # <<<<<<<<<<<<<< - * tmpslice.memview = src.memview - * for i in range(ndim): + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] */ - __pyx_v_tmpslice->data = ((char *)__pyx_v_result); + __pyx_t_8 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_8; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; - /* "View.MemoryView":1230 + /* "cornac/models/comparer/recom_comparer_sub.pyx":656 * - * tmpslice.data = result - * tmpslice.memview = src.memview # <<<<<<<<<<<<<< - * for i in range(ndim): - * tmpslice.shape[i] = src.shape[i] + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): */ - __pyx_t_4 = __pyx_v_src->memview; - __pyx_v_tmpslice->memview = __pyx_t_4; + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; - /* "View.MemoryView":1231 - * tmpslice.data = result - * tmpslice.memview = src.memview - * for i in range(ndim): # <<<<<<<<<<<<<< - * tmpslice.shape[i] = src.shape[i] - * tmpslice.suboffsets[i] = -1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":657 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] */ - __pyx_t_3 = __pyx_v_ndim; - __pyx_t_5 = __pyx_t_3; - for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { - __pyx_v_i = __pyx_t_6; + __pyx_t_23 = __pyx_v_i_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_j_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_v_i_ij = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); - /* "View.MemoryView":1232 - * tmpslice.memview = src.memview - * for i in range(ndim): - * tmpslice.shape[i] = src.shape[i] # <<<<<<<<<<<<<< - * tmpslice.suboffsets[i] = -1 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":658 + * for j in range(n_item_factors): + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] */ - (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]); + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* "View.MemoryView":1233 - * for i in range(ndim): - * tmpslice.shape[i] = src.shape[i] - * tmpslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< - * - * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, + /* "cornac/models/comparer/recom_comparer_sub.pyx":659 + * i_ij = I[i_idx, j] - I[j_idx, j] + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] */ - (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L; - } + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_n_aspects; + __pyx_t_23 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":1235 - * tmpslice.suboffsets[i] = -1 - * - * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, # <<<<<<<<<<<<<< - * ndim, order) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":660 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] */ - (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order)); + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_n_aspects; + __pyx_t_20 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_18 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_i_ij) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":1239 - * - * - * for i in range(ndim): # <<<<<<<<<<<<<< - * if tmpslice.shape[i] == 1: - * tmpslice.strides[i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":661 + * del_g1[i, j, k] -= del_bpr * U[u_idx, i] * i_ij * A[n_aspects, k] + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij */ - __pyx_t_3 = __pyx_v_ndim; - __pyx_t_5 = __pyx_t_3; - for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { - __pyx_v_i = __pyx_t_6; + __pyx_t_20 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_18 = __pyx_v_n_aspects; + __pyx_t_19 = __pyx_v_k; + __pyx_t_21 = __pyx_v_i_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":1240 - * - * for i in range(ndim): - * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< - * tmpslice.strides[i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":662 + * del_u[u_idx, i] -= del_bpr * G1[i, j, k] * i_ij * A[n_aspects, k] + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] # <<<<<<<<<<<<<< + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij * */ - __pyx_t_2 = (((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1) != 0); - if (__pyx_t_2) { + __pyx_t_19 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_n_aspects; + __pyx_t_20 = __pyx_v_k; + __pyx_t_22 = __pyx_v_j_idx; + __pyx_t_21 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_18 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_20 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":1241 - * for i in range(ndim): - * if tmpslice.shape[i] == 1: - * tmpslice.strides[i] = 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":663 + * del_i[i_idx, j] -= del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_i[j_idx, j] += del_bpr * G1[i, j, k] * U[u_idx, i] * A[n_aspects, k] + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij # <<<<<<<<<<<<<< * - * if slice_is_contig(src[0], order, ndim): + * for _ in prange(num_pair_samples, schedule='guided'): */ - (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0; + __pyx_t_20 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_18 = __pyx_v_n_aspects; + __pyx_t_19 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_i_ij); + } + } + } + goto __pyx_L48; + __pyx_L34_continue:; + goto __pyx_L48; + __pyx_L36_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L47; + __pyx_L47:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates16) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_bpr_loss; + __pyx_parallel_temp2 = __pyx_v_correct; + __pyx_parallel_temp3 = __pyx_v_del_bpr; + __pyx_parallel_temp4 = __pyx_v_i; + __pyx_parallel_temp5 = __pyx_v_i_idx; + __pyx_parallel_temp6 = __pyx_v_i_ij; + __pyx_parallel_temp7 = __pyx_v_i_score; + __pyx_parallel_temp8 = __pyx_v_idx; + __pyx_parallel_temp9 = __pyx_v_j; + __pyx_parallel_temp10 = __pyx_v_j_idx; + __pyx_parallel_temp11 = __pyx_v_j_score; + __pyx_parallel_temp12 = __pyx_v_jdx; + __pyx_parallel_temp13 = __pyx_v_k; + __pyx_parallel_temp14 = __pyx_v_pred; + __pyx_parallel_temp15 = __pyx_v_s; + __pyx_parallel_temp16 = __pyx_v_skipped; + __pyx_parallel_temp17 = __pyx_v_u_idx; + __pyx_parallel_temp18 = __pyx_v_z; + } + __pyx_L48:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_bpr_loss = __pyx_parallel_temp1; + __pyx_v_correct = __pyx_parallel_temp2; + __pyx_v_del_bpr = __pyx_parallel_temp3; + __pyx_v_i = __pyx_parallel_temp4; + __pyx_v_i_idx = __pyx_parallel_temp5; + __pyx_v_i_ij = __pyx_parallel_temp6; + __pyx_v_i_score = __pyx_parallel_temp7; + __pyx_v_idx = __pyx_parallel_temp8; + __pyx_v_j = __pyx_parallel_temp9; + __pyx_v_j_idx = __pyx_parallel_temp10; + __pyx_v_j_score = __pyx_parallel_temp11; + __pyx_v_jdx = __pyx_parallel_temp12; + __pyx_v_k = __pyx_parallel_temp13; + __pyx_v_pred = __pyx_parallel_temp14; + __pyx_v_s = __pyx_parallel_temp15; + __pyx_v_skipped = __pyx_parallel_temp16; + __pyx_v_u_idx = __pyx_parallel_temp17; + __pyx_v_z = __pyx_parallel_temp18; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } - /* "View.MemoryView":1240 - * - * for i in range(ndim): - * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< - * tmpslice.strides[i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":665 + * del_a[n_aspects, k] -= del_bpr * G1[i, j, k] * U[u_idx, i] * i_ij * + * for _ in prange(num_pair_samples, schedule='guided'): # <<<<<<<<<<<<<< + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] */ - } - } + __pyx_t_4 = __pyx_v_num_pair_samples; + { + long __pyx_parallel_temp0 = ((long)0xbad0bad0); + long __pyx_parallel_temp1 = ((long)0xbad0bad0); + double __pyx_parallel_temp2 = ((double)__PYX_NAN()); + double __pyx_parallel_temp3 = ((double)__PYX_NAN()); + long __pyx_parallel_temp4 = ((long)0xbad0bad0); + double __pyx_parallel_temp5 = ((double)__PYX_NAN()); + long __pyx_parallel_temp6 = ((long)0xbad0bad0); + long __pyx_parallel_temp7 = ((long)0xbad0bad0); + long __pyx_parallel_temp8 = ((long)0xbad0bad0); + long __pyx_parallel_temp9 = ((long)0xbad0bad0); + long __pyx_parallel_temp10 = ((long)0xbad0bad0); + long __pyx_parallel_temp11 = ((long)0xbad0bad0); + double __pyx_parallel_temp12 = ((double)__PYX_NAN()); + long __pyx_parallel_temp13 = ((long)0xbad0bad0); + double __pyx_parallel_temp14 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_7 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_7 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v__) lastprivate(__pyx_v__) lastprivate(__pyx_v_a_idx) lastprivate(__pyx_v_a_ji) lastprivate(__pyx_v_del_aspect_bpr) lastprivate(__pyx_v_i) lastprivate(__pyx_v_i_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_j_idx) lastprivate(__pyx_v_k) lastprivate(__pyx_v_pred) lastprivate(__pyx_v_u_idx) lastprivate(__pyx_v_z) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_7; __pyx_t_3++){ + if (__pyx_parallel_why < 2) + { + __pyx_v__ = (long)(0 + 1 * __pyx_t_3); + /* Initialize private variables to invalid values */ + __pyx_v_a_idx = ((long)0xbad0bad0); + __pyx_v_a_ji = ((double)__PYX_NAN()); + __pyx_v_del_aspect_bpr = ((double)__PYX_NAN()); + __pyx_v_i = ((long)0xbad0bad0); + __pyx_v_i_idx = ((long)0xbad0bad0); + __pyx_v_idx = ((long)0xbad0bad0); + __pyx_v_j = ((long)0xbad0bad0); + __pyx_v_j_idx = ((long)0xbad0bad0); + __pyx_v_k = ((long)0xbad0bad0); + __pyx_v_pred = ((double)__PYX_NAN()); + __pyx_v_u_idx = ((long)0xbad0bad0); + __pyx_v_z = ((double)__PYX_NAN()); - /* "View.MemoryView":1243 - * tmpslice.strides[i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":666 * - * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< - * memcpy(result, src.data, size) - * else: + * for _ in prange(num_pair_samples, schedule='guided'): + * idx = rng_pos_pair.generate(thread_id) # <<<<<<<<<<<<<< + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] */ - __pyx_t_2 = (__pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim) != 0); - if (__pyx_t_2) { + __pyx_t_8 = ((struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector *)__pyx_v_rng_pos_pair->__pyx_vtab)->generate(__pyx_v_rng_pos_pair, __pyx_v_thread_id); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 666, __pyx_L51_error) + __pyx_v_idx = __pyx_t_8; - /* "View.MemoryView":1244 - * - * if slice_is_contig(src[0], order, ndim): - * memcpy(result, src.data, size) # <<<<<<<<<<<<<< - * else: - * copy_strided_to_strided(src, tmpslice, ndim, itemsize) + /* "cornac/models/comparer/recom_comparer_sub.pyx":667 + * for _ in prange(num_pair_samples, schedule='guided'): + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] # <<<<<<<<<<<<<< + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] */ - (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size)); + __pyx_t_23 = __pyx_v_idx; + __pyx_v_u_idx = (*((long *) ( /* dim=0 */ (__pyx_v_p_user_indices.data + __pyx_t_23 * __pyx_v_p_user_indices.strides[0]) ))); - /* "View.MemoryView":1243 - * tmpslice.strides[i] = 0 - * - * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< - * memcpy(result, src.data, size) - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":668 + * idx = rng_pos_pair.generate(thread_id) + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] # <<<<<<<<<<<<<< + * j_idx = later_indices[idx] + * a_idx = aspect_indices[idx] */ - goto __pyx_L9; - } + __pyx_t_23 = __pyx_v_idx; + __pyx_v_i_idx = (*((long *) ( /* dim=0 */ (__pyx_v_earlier_indices.data + __pyx_t_23 * __pyx_v_earlier_indices.strides[0]) ))); - /* "View.MemoryView":1246 - * memcpy(result, src.data, size) - * else: - * copy_strided_to_strided(src, tmpslice, ndim, itemsize) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":669 + * u_idx = p_user_indices[idx] + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] # <<<<<<<<<<<<<< + * a_idx = aspect_indices[idx] * - * return result */ - /*else*/ { - copy_strided_to_strided(__pyx_v_src, __pyx_v_tmpslice, __pyx_v_ndim, __pyx_v_itemsize); - } - __pyx_L9:; + __pyx_t_23 = __pyx_v_idx; + __pyx_v_j_idx = (*((long *) ( /* dim=0 */ (__pyx_v_later_indices.data + __pyx_t_23 * __pyx_v_later_indices.strides[0]) ))); - /* "View.MemoryView":1248 - * copy_strided_to_strided(src, tmpslice, ndim, itemsize) - * - * return result # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":670 + * i_idx = earlier_indices[idx] + * j_idx = later_indices[idx] + * a_idx = aspect_indices[idx] # <<<<<<<<<<<<<< * + * pred = ( */ - __pyx_r = __pyx_v_result; - goto __pyx_L0; + __pyx_t_23 = __pyx_v_idx; + __pyx_v_a_idx = (*((long *) ( /* dim=0 */ (__pyx_v_aspect_indices.data + __pyx_t_23 * __pyx_v_aspect_indices.strides[0]) ))); - /* "View.MemoryView":1210 + /* "cornac/models/comparer/recom_comparer_sub.pyx":673 * - * @cname('__pyx_memoryview_copy_data_to_temp') - * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *tmpslice, - * char order, + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) # <<<<<<<<<<<<<< + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) + * ) */ + __pyx_t_29 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_j_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 673, __pyx_L51_error) - /* function exit code */ - __pyx_L1_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_AddTraceback("View.MemoryView.copy_data_to_temp", __pyx_clineno, __pyx_lineno, __pyx_filename); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_r = NULL; - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":1253 + /* "cornac/models/comparer/recom_comparer_sub.pyx":674 + * pred = ( + * get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, j_idx, a_idx) + * - get_score(G1, n_user_factors, n_item_factors, n_aspect_factors, U, I, A, u_idx, i_idx, a_idx) # <<<<<<<<<<<<<< + * ) * - * @cname('__pyx_memoryview_err_extents') - * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< - * Py_ssize_t extent2) except -1 with gil: - * raise ValueError("got differing extents in dimension %d (got %d and %d)" % */ + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score(__pyx_v_G1, __pyx_v_n_user_factors, __pyx_v_n_item_factors, __pyx_v_n_aspect_factors, __pyx_v_U, __pyx_v_I, __pyx_v_A, __pyx_v_u_idx, __pyx_v_i_idx, __pyx_v_a_idx); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 674, __pyx_L51_error) + __pyx_v_pred = (__pyx_t_29 - __pyx_t_5); -static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent1, Py_ssize_t __pyx_v_extent2) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_RefNannySetupContext("_err_extents", 0); - - /* "View.MemoryView":1256 - * Py_ssize_t extent2) except -1 with gil: - * raise ValueError("got differing extents in dimension %d (got %d and %d)" % - * (i, extent1, extent2)) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":677 + * ) * - * @cname('__pyx_memoryview_err_dim') + * z = (1.0 / (1.0 + exp(pred))) # <<<<<<<<<<<<<< + * if z < .5: + * aspect_correct += 1 */ - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_3 = 0; + __pyx_v_z = (1.0 / (1.0 + exp(__pyx_v_pred))); - /* "View.MemoryView":1255 - * cdef int _err_extents(int i, Py_ssize_t extent1, - * Py_ssize_t extent2) except -1 with gil: - * raise ValueError("got differing extents in dimension %d (got %d and %d)" % # <<<<<<<<<<<<<< - * (i, extent1, extent2)) + /* "cornac/models/comparer/recom_comparer_sub.pyx":678 + * + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * aspect_correct += 1 * */ - __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __PYX_ERR(2, 1255, __pyx_L1_error) + __pyx_t_27 = (__pyx_v_z < .5); + if (__pyx_t_27) { - /* "View.MemoryView":1253 + /* "cornac/models/comparer/recom_comparer_sub.pyx":679 + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: + * aspect_correct += 1 # <<<<<<<<<<<<<< * - * @cname('__pyx_memoryview_err_extents') - * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< - * Py_ssize_t extent2) except -1 with gil: - * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + * del_aspect_bpr = lambda_d * z */ + __pyx_v_aspect_correct = (__pyx_v_aspect_correct + 1); - /* 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("View.MemoryView._err_extents", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __Pyx_RefNannyFinishContext(); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - return __pyx_r; -} - -/* "View.MemoryView":1259 + /* "cornac/models/comparer/recom_comparer_sub.pyx":678 * - * @cname('__pyx_memoryview_err_dim') - * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< - * raise error(msg.decode('ascii') % dim) + * z = (1.0 / (1.0 + exp(pred))) + * if z < .5: # <<<<<<<<<<<<<< + * aspect_correct += 1 * */ + } -static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg, int __pyx_v_dim) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_RefNannySetupContext("_err_dim", 0); - __Pyx_INCREF(__pyx_v_error); - - /* "View.MemoryView":1260 - * @cname('__pyx_memoryview_err_dim') - * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: - * raise error(msg.decode('ascii') % dim) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":681 + * aspect_correct += 1 * - * @cname('__pyx_memoryview_err') + * del_aspect_bpr = lambda_d * z # <<<<<<<<<<<<<< + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): */ - __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_INCREF(__pyx_v_error); - __pyx_t_3 = __pyx_v_error; __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(2, 1260, __pyx_L1_error) + __pyx_v_del_aspect_bpr = (__pyx_v_lambda_d * __pyx_v_z); - /* "View.MemoryView":1259 - * - * @cname('__pyx_memoryview_err_dim') - * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< - * raise error(msg.decode('ascii') % dim) + /* "cornac/models/comparer/recom_comparer_sub.pyx":682 * + * del_aspect_bpr = lambda_d * z + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) # <<<<<<<<<<<<<< + * for i in range(n_user_factors): + * for j in range(n_item_factors): */ + __pyx_v_aspect_bpr_loss = (__pyx_v_aspect_bpr_loss + log((1.0 / (1.0 + exp((-__pyx_v_pred)))))); - /* 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("View.MemoryView._err_dim", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __Pyx_XDECREF(__pyx_v_error); - __Pyx_RefNannyFinishContext(); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":683 + * del_aspect_bpr = lambda_d * z + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): # <<<<<<<<<<<<<< + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] + */ + __pyx_t_8 = __pyx_v_n_user_factors; + __pyx_t_10 = __pyx_t_8; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; -/* "View.MemoryView":1263 - * - * @cname('__pyx_memoryview_err') - * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< - * if msg != NULL: - * raise error(msg.decode('ascii')) + /* "cornac/models/comparer/recom_comparer_sub.pyx":684 + * aspect_bpr_loss += log(1 / (1 + exp(-pred))) + * for i in range(n_user_factors): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): */ + __pyx_t_12 = __pyx_v_n_item_factors; + __pyx_t_13 = __pyx_t_12; + for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) { + __pyx_v_j = __pyx_t_14; -static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_RefNannySetupContext("_err", 0); - __Pyx_INCREF(__pyx_v_error); + /* "cornac/models/comparer/recom_comparer_sub.pyx":685 + * for i in range(n_user_factors): + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + */ + __pyx_t_23 = __pyx_v_j_idx; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i_idx; + __pyx_t_9 = __pyx_v_j; + __pyx_v_a_ji = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_23 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) ))) - (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_25 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) )))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":686 + * for j in range(n_item_factors): + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + */ + __pyx_t_15 = __pyx_v_n_aspect_factors; + __pyx_t_16 = __pyx_t_15; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { + __pyx_v_k = __pyx_t_17; - /* "View.MemoryView":1264 - * @cname('__pyx_memoryview_err') - * cdef int _err(object error, char *msg) except -1 with gil: - * if msg != NULL: # <<<<<<<<<<<<<< - * raise error(msg.decode('ascii')) - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":687 + * a_ji = I[j_idx, j] - I[i_idx, j] + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] */ - __pyx_t_1 = ((__pyx_v_msg != NULL) != 0); - if (unlikely(__pyx_t_1)) { + __pyx_t_9 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_a_idx; + __pyx_t_23 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1.diminfo[2].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":1265 - * cdef int _err(object error, char *msg) except -1 with gil: - * if msg != NULL: - * raise error(msg.decode('ascii')) # <<<<<<<<<<<<<< - * else: - * raise error + /* "cornac/models/comparer/recom_comparer_sub.pyx":688 + * for k in range(n_aspect_factors): + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] */ - __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1265, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_error); - __pyx_t_4 = __pyx_v_error; __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1265, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_2, 0, 0, 0); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __PYX_ERR(2, 1265, __pyx_L1_error) + __pyx_t_23 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_k; + __pyx_t_19 = __pyx_v_u_idx; + __pyx_t_20 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_del_u.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_23 * __pyx_v_G1.strides[0]) ) + __pyx_t_24 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * __pyx_v_a_ji) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":1264 - * @cname('__pyx_memoryview_err') - * cdef int _err(object error, char *msg) except -1 with gil: - * if msg != NULL: # <<<<<<<<<<<<<< - * raise error(msg.decode('ascii')) - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":689 + * del_g1[i, j, k] -= del_aspect_bpr * U[u_idx, i] * a_ji * A[a_idx, k] + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji */ - } + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_20 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_k; + __pyx_t_21 = __pyx_v_j_idx; + __pyx_t_22 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_20 * __pyx_v_A.strides[0]) ) + __pyx_t_19 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":1267 - * raise error(msg.decode('ascii')) - * else: - * raise error # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":690 + * del_u[u_idx, i] -= del_aspect_bpr * G1[i, j, k] * a_ji * A[a_idx, k] + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] # <<<<<<<<<<<<<< + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji * - * @cname('__pyx_memoryview_copy_contents') */ - /*else*/ { - __Pyx_Raise(__pyx_v_error, 0, 0, 0); - __PYX_ERR(2, 1267, __pyx_L1_error) - } + __pyx_t_19 = __pyx_v_i; + __pyx_t_20 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_25 = __pyx_v_i; + __pyx_t_9 = __pyx_v_a_idx; + __pyx_t_18 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i_idx; + __pyx_t_21 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_i.diminfo[1].strides) += (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_19 * __pyx_v_G1.strides[0]) ) + __pyx_t_20 * __pyx_v_G1.strides[1]) ) + __pyx_t_23 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )))); - /* "View.MemoryView":1263 + /* "cornac/models/comparer/recom_comparer_sub.pyx":691 + * del_i[j_idx, j] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_i[i_idx, j] += del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * A[a_idx, k] + * del_a[a_idx, k] -= del_aspect_bpr * G1[i, j, k] * U[u_idx, i] * a_ji # <<<<<<<<<<<<<< * - * @cname('__pyx_memoryview_err') - * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< - * if msg != NULL: - * raise error(msg.decode('ascii')) + * # update params with AdaGrad */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView._err", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __Pyx_XDECREF(__pyx_v_error); - __Pyx_RefNannyFinishContext(); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - return __pyx_r; + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_24 = __pyx_v_u_idx; + __pyx_t_23 = __pyx_v_i; + __pyx_t_20 = __pyx_v_a_idx; + __pyx_t_19 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides) -= (((__pyx_v_del_aspect_bpr * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_9 * __pyx_v_G1.strides[1]) ) + __pyx_t_25 * __pyx_v_G1.strides[2]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_24 * __pyx_v_U.strides[0]) ) + __pyx_t_23 * __pyx_v_U.strides[1]) )))) * __pyx_v_a_ji); + } + } + } + goto __pyx_L61; + __pyx_L51_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L60; + __pyx_L60:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates17) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v__; + __pyx_parallel_temp1 = __pyx_v_a_idx; + __pyx_parallel_temp2 = __pyx_v_a_ji; + __pyx_parallel_temp3 = __pyx_v_aspect_bpr_loss; + __pyx_parallel_temp4 = __pyx_v_aspect_correct; + __pyx_parallel_temp5 = __pyx_v_del_aspect_bpr; + __pyx_parallel_temp6 = __pyx_v_i; + __pyx_parallel_temp7 = __pyx_v_i_idx; + __pyx_parallel_temp8 = __pyx_v_idx; + __pyx_parallel_temp9 = __pyx_v_j; + __pyx_parallel_temp10 = __pyx_v_j_idx; + __pyx_parallel_temp11 = __pyx_v_k; + __pyx_parallel_temp12 = __pyx_v_pred; + __pyx_parallel_temp13 = __pyx_v_u_idx; + __pyx_parallel_temp14 = __pyx_v_z; + } + __pyx_L61:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v__ = __pyx_parallel_temp0; + __pyx_v_a_idx = __pyx_parallel_temp1; + __pyx_v_a_ji = __pyx_parallel_temp2; + __pyx_v_aspect_bpr_loss = __pyx_parallel_temp3; + __pyx_v_aspect_correct = __pyx_parallel_temp4; + __pyx_v_del_aspect_bpr = __pyx_parallel_temp5; + __pyx_v_i = __pyx_parallel_temp6; + __pyx_v_i_idx = __pyx_parallel_temp7; + __pyx_v_idx = __pyx_parallel_temp8; + __pyx_v_j = __pyx_parallel_temp9; + __pyx_v_j_idx = __pyx_parallel_temp10; + __pyx_v_k = __pyx_parallel_temp11; + __pyx_v_pred = __pyx_parallel_temp12; + __pyx_v_u_idx = __pyx_parallel_temp13; + __pyx_v_z = __pyx_parallel_temp14; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } + goto __pyx_L63; + __pyx_L8_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L63; + __pyx_L63:; + #ifdef _OPENMP + Py_END_ALLOW_THREADS + #else +{ +#ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #endif /* _OPENMP */ + /* Clean up any temporaries */ + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + #ifndef _OPENMP } +#endif /* _OPENMP */ + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L4_error; + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif + } -/* "View.MemoryView":1270 - * - * @cname('__pyx_memoryview_copy_contents') - * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice dst, - * int src_ndim, int dst_ndim, + /* "cornac/models/comparer/recom_comparer_sub.pyx":568 + * del_a_reg.fill(0) + * del_o_reg.fill(0) + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * thread_id = get_thread_num() + * for _ in prange(num_samples, schedule='guided'): */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L5; + } + __pyx_L4_error: { + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L1_error; + } + __pyx_L5:; + } + } -static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_memviewslice __pyx_v_dst, int __pyx_v_src_ndim, int __pyx_v_dst_ndim, int __pyx_v_dtype_is_object) { - void *__pyx_v_tmpdata; - size_t __pyx_v_itemsize; - int __pyx_v_i; - char __pyx_v_order; - int __pyx_v_broadcasting; - int __pyx_v_direct_copy; - __Pyx_memviewslice __pyx_v_tmp; - int __pyx_v_ndim; - int __pyx_r; - Py_ssize_t __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - int __pyx_t_5; - int __pyx_t_6; - void *__pyx_t_7; - int __pyx_t_8; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - - /* "View.MemoryView":1278 - * Check for overlapping memory and verify the shapes. - * """ - * cdef void *tmpdata = NULL # <<<<<<<<<<<<<< - * cdef size_t itemsize = src.memview.view.itemsize - * cdef int i + /* "cornac/models/comparer/recom_comparer_sub.pyx":694 + * + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): */ - __pyx_v_tmpdata = NULL; + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel private(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_27, __pyx_t_3, __pyx_t_7, __pyx_t_8, __pyx_t_9) num_threads(__pyx_v_n_threads) + #endif /* _OPENMP */ + { - /* "View.MemoryView":1279 - * """ - * cdef void *tmpdata = NULL - * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< - * cdef int i - * cdef char order = get_best_order(&src, src_ndim) + /* "cornac/models/comparer/recom_comparer_sub.pyx":695 + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): + * for i in prange(n_user_factors, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_users): + * if del_u[j, i] != 0: */ - __pyx_t_1 = __pyx_v_src.memview->view.itemsize; - __pyx_v_itemsize = __pyx_t_1; + __pyx_t_7 = __pyx_v_n_user_factors; + { + __pyx_t_8 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_8 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_8; __pyx_t_3++){ + { + __pyx_v_i = (long)(0 + 1 * __pyx_t_3); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((long)0xbad0bad0); + __pyx_v_k = ((long)0xbad0bad0); - /* "View.MemoryView":1281 - * cdef size_t itemsize = src.memview.view.itemsize - * cdef int i - * cdef char order = get_best_order(&src, src_ndim) # <<<<<<<<<<<<<< - * cdef bint broadcasting = False - * cdef bint direct_copy = False + /* "cornac/models/comparer/recom_comparer_sub.pyx":696 + * with nogil, parallel(num_threads=n_threads): + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): # <<<<<<<<<<<<<< + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] */ - __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim); + __pyx_t_10 = __pyx_v_n_users; + __pyx_t_11 = __pyx_t_10; + for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { + __pyx_v_j = __pyx_t_12; - /* "View.MemoryView":1282 - * cdef int i - * cdef char order = get_best_order(&src, src_ndim) - * cdef bint broadcasting = False # <<<<<<<<<<<<<< - * cdef bint direct_copy = False - * cdef __Pyx_memviewslice tmp + /* "cornac/models/comparer/recom_comparer_sub.pyx":697 + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): + * if del_u[j, i] != 0: # <<<<<<<<<<<<<< + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] */ - __pyx_v_broadcasting = 0; + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":1283 - * cdef char order = get_best_order(&src, src_ndim) - * cdef bint broadcasting = False - * cdef bint direct_copy = False # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice tmp - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":698 + * for j in range(n_users): + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] # <<<<<<<<<<<<<< + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] */ - __pyx_v_direct_copy = 0; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_u_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_u.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_u.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) ))))); - /* "View.MemoryView":1286 - * cdef __Pyx_memviewslice tmp - * - * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< - * broadcast_leading(&src, src_ndim, dst_ndim) - * elif dst_ndim < src_ndim: + /* "cornac/models/comparer/recom_comparer_sub.pyx":697 + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): + * if del_u[j, i] != 0: # <<<<<<<<<<<<<< + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] */ - __pyx_t_2 = ((__pyx_v_src_ndim < __pyx_v_dst_ndim) != 0); - if (__pyx_t_2) { + } - /* "View.MemoryView":1287 - * - * if src_ndim < dst_ndim: - * broadcast_leading(&src, src_ndim, dst_ndim) # <<<<<<<<<<<<<< - * elif dst_ndim < src_ndim: - * broadcast_leading(&dst, dst_ndim, src_ndim) + /* "cornac/models/comparer/recom_comparer_sub.pyx":699 + * if del_u[j, i] != 0: + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] # <<<<<<<<<<<<<< + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: */ - __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim); + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_19 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_U.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_u_reg.diminfo[1].strides)))); - /* "View.MemoryView":1286 - * cdef __Pyx_memviewslice tmp - * - * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< - * broadcast_leading(&src, src_ndim, dst_ndim) - * elif dst_ndim < src_ndim: + /* "cornac/models/comparer/recom_comparer_sub.pyx":700 + * del_u_reg[j, i] += del_u[j, i] + ld_reg * U[j, i] + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] # <<<<<<<<<<<<<< + * if U[j, i] < 0: + * U[j, i] = 0 */ - goto __pyx_L3; - } + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_18 * __pyx_v_U.strides[0]) ) + __pyx_t_19 * __pyx_v_U.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_U.data + __pyx_t_24 * __pyx_v_sgrad_U.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_U.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_u_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_u_reg.diminfo[1].strides))); - /* "View.MemoryView":1288 - * if src_ndim < dst_ndim: - * broadcast_leading(&src, src_ndim, dst_ndim) - * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< - * broadcast_leading(&dst, dst_ndim, src_ndim) + /* "cornac/models/comparer/recom_comparer_sub.pyx":701 + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: # <<<<<<<<<<<<<< + * U[j, i] = 0 * */ - __pyx_t_2 = ((__pyx_v_dst_ndim < __pyx_v_src_ndim) != 0); - if (__pyx_t_2) { + __pyx_t_9 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_27 = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_9 * __pyx_v_U.strides[0]) ) + __pyx_t_25 * __pyx_v_U.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":1289 - * broadcast_leading(&src, src_ndim, dst_ndim) - * elif dst_ndim < src_ndim: - * broadcast_leading(&dst, dst_ndim, src_ndim) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":702 + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: + * U[j, i] = 0 # <<<<<<<<<<<<<< * - * cdef int ndim = max(src_ndim, dst_ndim) + * for j in range(n_item_factors): */ - __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim); + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_25 * __pyx_v_U.strides[0]) ) + __pyx_t_9 * __pyx_v_U.strides[1]) )) = 0.0; - /* "View.MemoryView":1288 - * if src_ndim < dst_ndim: - * broadcast_leading(&src, src_ndim, dst_ndim) - * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< - * broadcast_leading(&dst, dst_ndim, src_ndim) + /* "cornac/models/comparer/recom_comparer_sub.pyx":701 + * sgrad_U[j, i] += eps + del_u_reg[j, i] * del_u_reg[j, i] + * U[j, i] -= (lr / sqrt(sgrad_U[j, i])) * del_u_reg[j, i] + * if U[j, i] < 0: # <<<<<<<<<<<<<< + * U[j, i] = 0 * */ - } - __pyx_L3:; + } + } - /* "View.MemoryView":1291 - * broadcast_leading(&dst, dst_ndim, src_ndim) - * - * cdef int ndim = max(src_ndim, dst_ndim) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":704 + * U[j, i] = 0 * - * for i in range(ndim): + * for j in range(n_item_factors): # <<<<<<<<<<<<<< + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: */ - __pyx_t_3 = __pyx_v_dst_ndim; - __pyx_t_4 = __pyx_v_src_ndim; - if (((__pyx_t_3 > __pyx_t_4) != 0)) { - __pyx_t_5 = __pyx_t_3; - } else { - __pyx_t_5 = __pyx_t_4; - } - __pyx_v_ndim = __pyx_t_5; + __pyx_t_10 = __pyx_v_n_item_factors; + __pyx_t_11 = __pyx_t_10; + for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { + __pyx_v_j = __pyx_t_12; - /* "View.MemoryView":1293 - * cdef int ndim = max(src_ndim, dst_ndim) + /* "cornac/models/comparer/recom_comparer_sub.pyx":705 * - * for i in range(ndim): # <<<<<<<<<<<<<< - * if src.shape[i] != dst.shape[i]: - * if src.shape[i] == 1: + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): # <<<<<<<<<<<<<< + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] */ - __pyx_t_5 = __pyx_v_ndim; - __pyx_t_3 = __pyx_t_5; - for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { - __pyx_v_i = __pyx_t_4; + __pyx_t_13 = __pyx_v_n_aspect_factors; + __pyx_t_14 = __pyx_t_13; + for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { + __pyx_v_k = __pyx_t_15; - /* "View.MemoryView":1294 - * - * for i in range(ndim): - * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< - * if src.shape[i] == 1: - * broadcasting = True + /* "cornac/models/comparer/recom_comparer_sub.pyx":706 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] */ - __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])) != 0); - if (__pyx_t_2) { + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":1295 - * for i in range(ndim): - * if src.shape[i] != dst.shape[i]: - * if src.shape[i] == 1: # <<<<<<<<<<<<<< - * broadcasting = True - * src.strides[i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":707 + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] */ - __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) == 1) != 0); - if (__pyx_t_2) { + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g1.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g1.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) ))))); - /* "View.MemoryView":1296 - * if src.shape[i] != dst.shape[i]: - * if src.shape[i] == 1: - * broadcasting = True # <<<<<<<<<<<<<< - * src.strides[i] = 0 - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":706 + * for j in range(n_item_factors): + * for k in range(n_aspect_factors): + * if del_g1[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] */ - __pyx_v_broadcasting = 1; + } - /* "View.MemoryView":1297 - * if src.shape[i] == 1: - * broadcasting = True - * src.strides[i] = 0 # <<<<<<<<<<<<<< - * else: - * _err_extents(i, dst.shape[i], src.shape[i]) + /* "cornac/models/comparer/recom_comparer_sub.pyx":708 + * if del_g1[i, j, k] != 0: + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: */ - (__pyx_v_src.strides[__pyx_v_i]) = 0; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_22 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G1.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides)))); - /* "View.MemoryView":1295 - * for i in range(ndim): - * if src.shape[i] != dst.shape[i]: - * if src.shape[i] == 1: # <<<<<<<<<<<<<< - * broadcasting = True - * src.strides[i] = 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":709 + * del_g1_reg[i, j, k] += del_g1[i, j, k] + ld_reg * G1[i, j, k] + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] # <<<<<<<<<<<<<< + * if G1[i, j, k] < 0: + * G1[i, j, k] = 0 */ - goto __pyx_L7; - } + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_20 * __pyx_v_G1.strides[0]) ) + __pyx_t_21 * __pyx_v_G1.strides[1]) ) + __pyx_t_22 * __pyx_v_G1.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G1.data + __pyx_t_23 * __pyx_v_sgrad_G1.strides[0]) ) + __pyx_t_25 * __pyx_v_sgrad_G1.strides[1]) ) + __pyx_t_9 * __pyx_v_sgrad_G1.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g1_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g1_reg.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g1_reg.diminfo[2].strides))); - /* "View.MemoryView":1299 - * src.strides[i] = 0 - * else: - * _err_extents(i, dst.shape[i], src.shape[i]) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":710 + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< + * G1[i, j, k] = 0 * - * if src.suboffsets[i] >= 0: */ - /*else*/ { - __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 1299, __pyx_L1_error) - } - __pyx_L7:; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = ((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_18 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_24 * __pyx_v_G1.strides[2]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":1294 + /* "cornac/models/comparer/recom_comparer_sub.pyx":711 + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: + * G1[i, j, k] = 0 # <<<<<<<<<<<<<< * - * for i in range(ndim): - * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< - * if src.shape[i] == 1: - * broadcasting = True + * for j in range(n_aspect_factors): */ - } + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G1.data + __pyx_t_24 * __pyx_v_G1.strides[0]) ) + __pyx_t_19 * __pyx_v_G1.strides[1]) ) + __pyx_t_18 * __pyx_v_G1.strides[2]) )) = 0.0; - /* "View.MemoryView":1301 - * _err_extents(i, dst.shape[i], src.shape[i]) - * - * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< - * _err_dim(ValueError, "Dimension %d is not direct", i) + /* "cornac/models/comparer/recom_comparer_sub.pyx":710 + * sgrad_G1[i, j, k] += eps + del_g1_reg[i, j, k] * del_g1_reg[i, j, k] + * G1[i, j, k] -= (lr / sqrt(sgrad_G1[i, j, k])) * del_g1_reg[i, j, k] + * if G1[i, j, k] < 0: # <<<<<<<<<<<<<< + * G1[i, j, k] = 0 * */ - __pyx_t_2 = (((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0) != 0); - if (__pyx_t_2) { + } + } + } - /* "View.MemoryView":1302 - * - * if src.suboffsets[i] >= 0: - * _err_dim(ValueError, "Dimension %d is not direct", i) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":713 + * G1[i, j, k] = 0 * - * if slices_overlap(&src, &dst, ndim, itemsize): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: */ - __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 1302, __pyx_L1_error) + __pyx_t_10 = __pyx_v_n_aspect_factors; + __pyx_t_11 = __pyx_t_10; + for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { + __pyx_v_j = __pyx_t_12; - /* "View.MemoryView":1301 - * _err_extents(i, dst.shape[i], src.shape[i]) - * - * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< - * _err_dim(ValueError, "Dimension %d is not direct", i) + /* "cornac/models/comparer/recom_comparer_sub.pyx":714 * + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] */ - } - } + __pyx_t_13 = __pyx_v_n_opinion_factors; + __pyx_t_14 = __pyx_t_13; + for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { + __pyx_v_k = __pyx_t_15; - /* "View.MemoryView":1304 - * _err_dim(ValueError, "Dimension %d is not direct", i) - * - * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< - * - * if not slice_is_contig(src, order, ndim): + /* "cornac/models/comparer/recom_comparer_sub.pyx":715 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] */ - __pyx_t_2 = (__pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize) != 0); - if (__pyx_t_2) { + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":1306 - * if slices_overlap(&src, &dst, ndim, itemsize): - * - * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< - * order = get_best_order(&dst, ndim) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":716 + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] */ - __pyx_t_2 = ((!(__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim) != 0)) != 0); - if (__pyx_t_2) { + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_g2.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g2.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) ))))); - /* "View.MemoryView":1307 - * - * if not slice_is_contig(src, order, ndim): - * order = get_best_order(&dst, ndim) # <<<<<<<<<<<<<< - * - * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) + /* "cornac/models/comparer/recom_comparer_sub.pyx":715 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g2[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] */ - __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim); + } - /* "View.MemoryView":1306 - * if slices_overlap(&src, &dst, ndim, itemsize): - * - * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< - * order = get_best_order(&dst, ndim) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":717 + * if del_g2[i, j, k] != 0: + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: */ - } + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_20 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_22 * __pyx_v_sgrad_G2.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_24, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides)))); - /* "View.MemoryView":1309 - * order = get_best_order(&dst, ndim) - * - * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) # <<<<<<<<<<<<<< - * src = tmp - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":718 + * del_g2_reg[i, j, k] += del_g2[i, j, k] + ld_reg * G2[i, j, k] + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] # <<<<<<<<<<<<<< + * if G2[i, j, k] < 0: + * G2[i, j, k] = 0 */ - __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(2, 1309, __pyx_L1_error) - __pyx_v_tmpdata = __pyx_t_7; + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_22 * __pyx_v_G2.strides[0]) ) + __pyx_t_21 * __pyx_v_G2.strides[1]) ) + __pyx_t_20 * __pyx_v_G2.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G2.data + __pyx_t_24 * __pyx_v_sgrad_G2.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_G2.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G2.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_g2_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_g2_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g2_reg.diminfo[2].strides))); - /* "View.MemoryView":1310 - * - * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) - * src = tmp # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":719 + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< + * G2[i, j, k] = 0 * - * if not broadcasting: */ - __pyx_v_src = __pyx_v_tmp; + __pyx_t_23 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_k; + __pyx_t_27 = ((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_23 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_9 * __pyx_v_G2.strides[2]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":1304 - * _err_dim(ValueError, "Dimension %d is not direct", i) - * - * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":720 + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: + * G2[i, j, k] = 0 # <<<<<<<<<<<<<< * - * if not slice_is_contig(src, order, ndim): + * for i in prange(n_item_factors, schedule='guided'): */ - } + __pyx_t_9 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G2.data + __pyx_t_9 * __pyx_v_G2.strides[0]) ) + __pyx_t_25 * __pyx_v_G2.strides[1]) ) + __pyx_t_23 * __pyx_v_G2.strides[2]) )) = 0.0; - /* "View.MemoryView":1312 - * src = tmp - * - * if not broadcasting: # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":719 + * sgrad_G2[i, j, k] += eps + del_g2_reg[i, j, k] * del_g2_reg[i, j, k] + * G2[i, j, k] -= (lr / sqrt(sgrad_G2[i, j, k])) * del_g2_reg[i, j, k] + * if G2[i, j, k] < 0: # <<<<<<<<<<<<<< + * G2[i, j, k] = 0 * */ - __pyx_t_2 = ((!(__pyx_v_broadcasting != 0)) != 0); - if (__pyx_t_2) { + } + } + } + } + } + } + } - /* "View.MemoryView":1315 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":722 + * G2[i, j, k] = 0 * - * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< - * direct_copy = slice_is_contig(dst, 'C', ndim) - * elif slice_is_contig(src, 'F', ndim): + * for i in prange(n_item_factors, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_items): + * if del_i[j, i] != 0: */ - __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim) != 0); - if (__pyx_t_2) { + __pyx_t_8 = __pyx_v_n_item_factors; + { + __pyx_t_7 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_7 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_7; __pyx_t_3++){ + { + __pyx_v_i = (long)(0 + 1 * __pyx_t_3); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((long)0xbad0bad0); + __pyx_v_k = ((long)0xbad0bad0); - /* "View.MemoryView":1316 + /* "cornac/models/comparer/recom_comparer_sub.pyx":723 * - * if slice_is_contig(src, 'C', ndim): - * direct_copy = slice_is_contig(dst, 'C', ndim) # <<<<<<<<<<<<<< - * elif slice_is_contig(src, 'F', ndim): - * direct_copy = slice_is_contig(dst, 'F', ndim) + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): # <<<<<<<<<<<<<< + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] */ - __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim); + __pyx_t_10 = __pyx_v_n_items; + __pyx_t_11 = __pyx_t_10; + for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { + __pyx_v_j = __pyx_t_12; - /* "View.MemoryView":1315 - * - * - * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< - * direct_copy = slice_is_contig(dst, 'C', ndim) - * elif slice_is_contig(src, 'F', ndim): + /* "cornac/models/comparer/recom_comparer_sub.pyx":724 + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): + * if del_i[j, i] != 0: # <<<<<<<<<<<<<< + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] */ - goto __pyx_L12; - } + __pyx_t_23 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":1317 - * if slice_is_contig(src, 'C', ndim): - * direct_copy = slice_is_contig(dst, 'C', ndim) - * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< - * direct_copy = slice_is_contig(dst, 'F', ndim) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":725 + * for j in range(n_items): + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] # <<<<<<<<<<<<<< + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] */ - __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim) != 0); - if (__pyx_t_2) { + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_i_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_i.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_i.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) ))))); - /* "View.MemoryView":1318 - * direct_copy = slice_is_contig(dst, 'C', ndim) - * elif slice_is_contig(src, 'F', ndim): - * direct_copy = slice_is_contig(dst, 'F', ndim) # <<<<<<<<<<<<<< - * - * if direct_copy: + /* "cornac/models/comparer/recom_comparer_sub.pyx":724 + * for i in prange(n_item_factors, schedule='guided'): + * for j in range(n_items): + * if del_i[j, i] != 0: # <<<<<<<<<<<<<< + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] */ - __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim); + } - /* "View.MemoryView":1317 - * if slice_is_contig(src, 'C', ndim): - * direct_copy = slice_is_contig(dst, 'C', ndim) - * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< - * direct_copy = slice_is_contig(dst, 'F', ndim) - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":726 + * if del_i[j, i] != 0: + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] # <<<<<<<<<<<<<< + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: */ - } - __pyx_L12:; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_24 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_I.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_i_reg.diminfo[1].strides)))); - /* "View.MemoryView":1320 - * direct_copy = slice_is_contig(dst, 'F', ndim) - * - * if direct_copy: # <<<<<<<<<<<<<< - * - * refcount_copying(&dst, dtype_is_object, ndim, False) + /* "cornac/models/comparer/recom_comparer_sub.pyx":727 + * del_i_reg[j, i] += del_i[j, i] + ld_reg * I[j, i] + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] # <<<<<<<<<<<<<< + * if I[j, i] < 0: + * I[j, i] = 0 */ - __pyx_t_2 = (__pyx_v_direct_copy != 0); - if (__pyx_t_2) { + __pyx_t_25 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_19 * __pyx_v_I.strides[0]) ) + __pyx_t_24 * __pyx_v_I.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_I.data + __pyx_t_25 * __pyx_v_sgrad_I.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_I.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_i_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_i_reg.diminfo[1].strides))); - /* "View.MemoryView":1322 - * if direct_copy: + /* "cornac/models/comparer/recom_comparer_sub.pyx":728 + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: # <<<<<<<<<<<<<< + * I[j, i] = 0 * - * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< - * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) - * refcount_copying(&dst, dtype_is_object, ndim, True) */ - __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_27 = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_18 * __pyx_v_I.strides[0]) ) + __pyx_t_9 * __pyx_v_I.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":1323 + /* "cornac/models/comparer/recom_comparer_sub.pyx":729 + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: + * I[j, i] = 0 # <<<<<<<<<<<<<< * - * refcount_copying(&dst, dtype_is_object, ndim, False) - * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) # <<<<<<<<<<<<<< - * refcount_copying(&dst, dtype_is_object, ndim, True) - * free(tmpdata) + * for j in range(n_aspect_factors): */ - (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim))); + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_I.data + __pyx_t_9 * __pyx_v_I.strides[0]) ) + __pyx_t_18 * __pyx_v_I.strides[1]) )) = 0.0; - /* "View.MemoryView":1324 - * refcount_copying(&dst, dtype_is_object, ndim, False) - * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) - * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< - * free(tmpdata) - * return 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":728 + * sgrad_I[j, i] += eps + del_i_reg[j, i] * del_i_reg[j, i] + * I[j, i] -= (lr / sqrt(sgrad_I[j, i])) * del_i_reg[j, i] + * if I[j, i] < 0: # <<<<<<<<<<<<<< + * I[j, i] = 0 + * */ - __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + } + } - /* "View.MemoryView":1325 - * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) - * refcount_copying(&dst, dtype_is_object, ndim, True) - * free(tmpdata) # <<<<<<<<<<<<<< - * return 0 + /* "cornac/models/comparer/recom_comparer_sub.pyx":731 + * I[j, i] = 0 * + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: */ - free(__pyx_v_tmpdata); + __pyx_t_10 = __pyx_v_n_aspect_factors; + __pyx_t_11 = __pyx_t_10; + for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { + __pyx_v_j = __pyx_t_12; - /* "View.MemoryView":1326 - * refcount_copying(&dst, dtype_is_object, ndim, True) - * free(tmpdata) - * return 0 # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":732 * - * if order == 'F' == get_best_order(&dst, ndim): + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] */ - __pyx_r = 0; - goto __pyx_L0; + __pyx_t_13 = __pyx_v_n_opinion_factors; + __pyx_t_14 = __pyx_t_13; + for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { + __pyx_v_k = __pyx_t_15; - /* "View.MemoryView":1320 - * direct_copy = slice_is_contig(dst, 'F', ndim) - * - * if direct_copy: # <<<<<<<<<<<<<< - * - * refcount_copying(&dst, dtype_is_object, ndim, False) + /* "cornac/models/comparer/recom_comparer_sub.pyx":733 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] */ - } + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_27 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[2].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":1312 - * src = tmp - * - * if not broadcasting: # <<<<<<<<<<<<<< - * - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":734 + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] # <<<<<<<<<<<<<< + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] */ - } + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides) += ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_g3.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3.diminfo[1].strides, __pyx_t_18, __pyx_pybuffernd_del_g3.diminfo[2].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) ))))); - /* "View.MemoryView":1328 - * return 0 - * - * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< - * - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":733 + * for j in range(n_aspect_factors): + * for k in range(n_opinion_factors): + * if del_g3[i, j, k] != 0: # <<<<<<<<<<<<<< + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] */ - __pyx_t_2 = (__pyx_v_order == 'F'); - if (__pyx_t_2) { - __pyx_t_2 = ('F' == __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim)); - } - __pyx_t_8 = (__pyx_t_2 != 0); - if (__pyx_t_8) { + } - /* "View.MemoryView":1331 - * - * - * transpose_memslice(&src) # <<<<<<<<<<<<<< - * transpose_memslice(&dst) + /* "cornac/models/comparer/recom_comparer_sub.pyx":735 + * if del_g3[i, j, k] != 0: + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: + */ + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_18 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_23 = __pyx_v_k; + __pyx_t_22 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_20 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_22 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_20 * __pyx_v_sgrad_G3.strides[2]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides)))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":736 + * del_g3_reg[i, j, k] += del_g3[i, j, k] + ld_reg * G3[i, j, k] + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] # <<<<<<<<<<<<<< + * if G3[i, j, k] < 0: + * G3[i, j, k] = 0 + */ + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_18 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + __pyx_t_20 = __pyx_v_i; + __pyx_t_21 = __pyx_v_j; + __pyx_t_22 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_20 * __pyx_v_G3.strides[0]) ) + __pyx_t_21 * __pyx_v_G3.strides[1]) ) + __pyx_t_22 * __pyx_v_G3.strides[2]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_G3.data + __pyx_t_23 * __pyx_v_sgrad_G3.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_G3.strides[1]) ) + __pyx_t_18 * __pyx_v_sgrad_G3.strides[2]) ))))) * (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_g3_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_g3_reg.diminfo[1].strides, __pyx_t_19, __pyx_pybuffernd_del_g3_reg.diminfo[2].strides))); + + /* "cornac/models/comparer/recom_comparer_sub.pyx":737 + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< + * G3[i, j, k] = 0 * */ - __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(2, 1331, __pyx_L1_error) + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_27 = ((*((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_19 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_25 * __pyx_v_G3.strides[2]) ))) < 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":1332 - * - * transpose_memslice(&src) - * transpose_memslice(&dst) # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":738 + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: + * G3[i, j, k] = 0 # <<<<<<<<<<<<<< * - * refcount_copying(&dst, dtype_is_object, ndim, False) + * for i in prange(n_aspects + 1, schedule='guided'): */ - __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(2, 1332, __pyx_L1_error) + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_19 = __pyx_v_k; + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_G3.data + __pyx_t_25 * __pyx_v_G3.strides[0]) ) + __pyx_t_24 * __pyx_v_G3.strides[1]) ) + __pyx_t_19 * __pyx_v_G3.strides[2]) )) = 0.0; - /* "View.MemoryView":1328 - * return 0 - * - * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":737 + * sgrad_G3[i, j, k] += eps + del_g3_reg[i, j, k] * del_g3_reg[i, j, k] + * G3[i, j, k] -= (lr / sqrt(sgrad_G3[i, j, k])) * del_g3_reg[i, j, k] + * if G3[i, j, k] < 0: # <<<<<<<<<<<<<< + * G3[i, j, k] = 0 * */ - } + } + } + } + } + } + } + } - /* "View.MemoryView":1334 - * transpose_memslice(&dst) + /* "cornac/models/comparer/recom_comparer_sub.pyx":740 + * G3[i, j, k] = 0 * - * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< - * copy_strided_to_strided(&src, &dst, ndim, itemsize) - * refcount_copying(&dst, dtype_is_object, ndim, True) + * for i in prange(n_aspects + 1, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: */ - __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + __pyx_t_7 = (__pyx_v_n_aspects + 1); + { + __pyx_t_8 = (__pyx_t_7 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_8 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_8; __pyx_t_3++){ + { + __pyx_v_i = (long)(0 + 1 * __pyx_t_3); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((long)0xbad0bad0); - /* "View.MemoryView":1335 - * - * refcount_copying(&dst, dtype_is_object, ndim, False) - * copy_strided_to_strided(&src, &dst, ndim, itemsize) # <<<<<<<<<<<<<< - * refcount_copying(&dst, dtype_is_object, ndim, True) + /* "cornac/models/comparer/recom_comparer_sub.pyx":741 * + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): # <<<<<<<<<<<<<< + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] */ - copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize); + __pyx_t_10 = __pyx_v_n_aspect_factors; + __pyx_t_11 = __pyx_t_10; + for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { + __pyx_v_j = __pyx_t_12; - /* "View.MemoryView":1336 - * refcount_copying(&dst, dtype_is_object, ndim, False) - * copy_strided_to_strided(&src, &dst, ndim, itemsize) - * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< - * - * free(tmpdata) + /* "cornac/models/comparer/recom_comparer_sub.pyx":742 + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: # <<<<<<<<<<<<<< + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] */ - __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":1338 - * refcount_copying(&dst, dtype_is_object, ndim, True) - * - * free(tmpdata) # <<<<<<<<<<<<<< - * return 0 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":743 + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] # <<<<<<<<<<<<<< + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] */ - free(__pyx_v_tmpdata); + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_del_a_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_a.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_a.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) ))))); - /* "View.MemoryView":1339 - * - * free(tmpdata) - * return 0 # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_broadcast_leading') + /* "cornac/models/comparer/recom_comparer_sub.pyx":742 + * for i in prange(n_aspects + 1, schedule='guided'): + * for j in range(n_aspect_factors): + * if del_a[i, j] != 0: # <<<<<<<<<<<<<< + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] */ - __pyx_r = 0; - goto __pyx_L0; + } - /* "View.MemoryView":1270 - * - * @cname('__pyx_memoryview_copy_contents') - * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice dst, - * int src_ndim, int dst_ndim, + /* "cornac/models/comparer/recom_comparer_sub.pyx":744 + * if del_a[i, j] != 0: + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] # <<<<<<<<<<<<<< + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_23 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_9 * __pyx_v_sgrad_A.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_a_reg.diminfo[1].strides)))); - /* function exit code */ - __pyx_L1_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_AddTraceback("View.MemoryView.memoryview_copy_contents", __pyx_clineno, __pyx_lineno, __pyx_filename); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_r = -1; - __pyx_L0:; - return __pyx_r; -} + /* "cornac/models/comparer/recom_comparer_sub.pyx":745 + * del_a_reg[i, j] += del_a[i, j] + ld_reg * A[i, j] + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] # <<<<<<<<<<<<<< + * if A[i, j] < 0: + * A[i, j] = 0 + */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_9 * __pyx_v_A.strides[0]) ) + __pyx_t_23 * __pyx_v_A.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_A.data + __pyx_t_24 * __pyx_v_sgrad_A.strides[0]) ) + __pyx_t_19 * __pyx_v_sgrad_A.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_a_reg.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_a_reg.diminfo[1].strides))); -/* "View.MemoryView":1342 + /* "cornac/models/comparer/recom_comparer_sub.pyx":746 + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: # <<<<<<<<<<<<<< + * A[i, j] = 0 * - * @cname('__pyx_memoryview_broadcast_leading') - * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< - * int ndim, - * int ndim_other) nogil: */ + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_18 * __pyx_v_A.strides[0]) ) + __pyx_t_25 * __pyx_v_A.strides[1]) ))) < 0.0); + if (__pyx_t_27) { -static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim, int __pyx_v_ndim_other) { - int __pyx_v_i; - int __pyx_v_offset; - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - - /* "View.MemoryView":1346 - * int ndim_other) nogil: - * cdef int i - * cdef int offset = ndim_other - ndim # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":747 + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: + * A[i, j] = 0 # <<<<<<<<<<<<<< * - * for i in range(ndim - 1, -1, -1): + * for i in prange(n_opinions, schedule='guided'): */ - __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim); + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_25 * __pyx_v_A.strides[0]) ) + __pyx_t_18 * __pyx_v_A.strides[1]) )) = 0.0; - /* "View.MemoryView":1348 - * cdef int offset = ndim_other - ndim + /* "cornac/models/comparer/recom_comparer_sub.pyx":746 + * sgrad_A[i, j] += eps + del_a_reg[i, j] * del_a_reg[i, j] + * A[i, j] -= (lr / sqrt(sgrad_A[i, j])) * del_a_reg[i, j] + * if A[i, j] < 0: # <<<<<<<<<<<<<< + * A[i, j] = 0 * - * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< - * mslice.shape[i + offset] = mslice.shape[i] - * mslice.strides[i + offset] = mslice.strides[i] */ - for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { - __pyx_v_i = __pyx_t_1; + } + } + } + } + } + } - /* "View.MemoryView":1349 + /* "cornac/models/comparer/recom_comparer_sub.pyx":749 + * A[i, j] = 0 * - * for i in range(ndim - 1, -1, -1): - * mslice.shape[i + offset] = mslice.shape[i] # <<<<<<<<<<<<<< - * mslice.strides[i + offset] = mslice.strides[i] - * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + * for i in prange(n_opinions, schedule='guided'): # <<<<<<<<<<<<<< + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: */ - (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]); + __pyx_t_8 = __pyx_v_n_opinions; + { + __pyx_t_7 = (__pyx_t_8 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_7 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) schedule(guided) + #endif /* _OPENMP */ + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_7; __pyx_t_3++){ + { + __pyx_v_i = (long)(0 + 1 * __pyx_t_3); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((long)0xbad0bad0); - /* "View.MemoryView":1350 - * for i in range(ndim - 1, -1, -1): - * mslice.shape[i + offset] = mslice.shape[i] - * mslice.strides[i + offset] = mslice.strides[i] # <<<<<<<<<<<<<< - * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + /* "cornac/models/comparer/recom_comparer_sub.pyx":750 * + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): # <<<<<<<<<<<<<< + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] */ - (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]); + __pyx_t_10 = __pyx_v_n_opinion_factors; + __pyx_t_11 = __pyx_t_10; + for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { + __pyx_v_j = __pyx_t_12; - /* "View.MemoryView":1351 - * mslice.shape[i + offset] = mslice.shape[i] - * mslice.strides[i + offset] = mslice.strides[i] - * mslice.suboffsets[i + offset] = mslice.suboffsets[i] # <<<<<<<<<<<<<< - * - * for i in range(offset): + /* "cornac/models/comparer/recom_comparer_sub.pyx":751 + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: # <<<<<<<<<<<<<< + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] */ - (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]); - } + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[1].strides)) != 0.0); + if (__pyx_t_27) { - /* "View.MemoryView":1353 - * mslice.suboffsets[i + offset] = mslice.suboffsets[i] - * - * for i in range(offset): # <<<<<<<<<<<<<< - * mslice.shape[i] = 1 - * mslice.strides[i] = mslice.strides[0] + /* "cornac/models/comparer/recom_comparer_sub.pyx":752 + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] # <<<<<<<<<<<<<< + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] */ - __pyx_t_1 = __pyx_v_offset; - __pyx_t_2 = __pyx_t_1; - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { - __pyx_v_i = __pyx_t_3; + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_del_o_reg.diminfo[1].strides) += ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_del_o.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_del_o.diminfo[1].strides)) + (__pyx_v_ld_reg * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) ))))); - /* "View.MemoryView":1354 - * - * for i in range(offset): - * mslice.shape[i] = 1 # <<<<<<<<<<<<<< - * mslice.strides[i] = mslice.strides[0] - * mslice.suboffsets[i] = -1 + /* "cornac/models/comparer/recom_comparer_sub.pyx":751 + * for i in prange(n_opinions, schedule='guided'): + * for j in range(n_opinion_factors): + * if del_o[i, j] != 0: # <<<<<<<<<<<<<< + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] */ - (__pyx_v_mslice->shape[__pyx_v_i]) = 1; + } - /* "View.MemoryView":1355 - * for i in range(offset): - * mslice.shape[i] = 1 - * mslice.strides[i] = mslice.strides[0] # <<<<<<<<<<<<<< - * mslice.suboffsets[i] = -1 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":753 + * if del_o[i, j] != 0: + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] # <<<<<<<<<<<<<< + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: */ - (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]); + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_18 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_9 = __pyx_v_i; + __pyx_t_23 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_9 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_23 * __pyx_v_sgrad_O.strides[1]) )) += (__pyx_v_eps + ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_del_o_reg.diminfo[1].strides)))); - /* "View.MemoryView":1356 - * mslice.shape[i] = 1 - * mslice.strides[i] = mslice.strides[0] - * mslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< - * - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":754 + * del_o_reg[i, j] += del_o[i, j] + ld_reg * O[i, j] + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] # <<<<<<<<<<<<<< + * if O[i, j] < 0: + * O[i, j] = 0 */ - (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L; - } + __pyx_t_25 = __pyx_v_i; + __pyx_t_18 = __pyx_v_j; + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_23 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_23 * __pyx_v_O.strides[0]) ) + __pyx_t_9 * __pyx_v_O.strides[1]) )) -= ((__pyx_v_lr / sqrt((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_sgrad_O.data + __pyx_t_25 * __pyx_v_sgrad_O.strides[0]) ) + __pyx_t_18 * __pyx_v_sgrad_O.strides[1]) ))))) * (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_del_o_reg.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_del_o_reg.diminfo[1].strides))); - /* "View.MemoryView":1342 + /* "cornac/models/comparer/recom_comparer_sub.pyx":755 + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: # <<<<<<<<<<<<<< + * O[i, j] = 0 * - * @cname('__pyx_memoryview_broadcast_leading') - * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< - * int ndim, - * int ndim_other) nogil: */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_19 = __pyx_v_j; + __pyx_t_27 = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_24 * __pyx_v_O.strides[0]) ) + __pyx_t_19 * __pyx_v_O.strides[1]) ))) < 0.0); + if (__pyx_t_27) { - /* function exit code */ -} - -/* "View.MemoryView":1364 - * - * @cname('__pyx_memoryview_refcount_copying') - * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< - * int ndim, bint inc) nogil: + /* "cornac/models/comparer/recom_comparer_sub.pyx":756 + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: + * O[i, j] = 0 # <<<<<<<<<<<<<< * + * return correct, skipped, loss, bpr_loss */ + __pyx_t_19 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_O.data + __pyx_t_19 * __pyx_v_O.strides[0]) ) + __pyx_t_24 * __pyx_v_O.strides[1]) )) = 0.0; -static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) { - int __pyx_t_1; - - /* "View.MemoryView":1368 - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":755 + * sgrad_O[i, j] += eps + del_o_reg[i, j] * del_o_reg[i, j] + * O[i, j] -= (lr / sqrt(sgrad_O[i, j])) * del_o_reg[i, j] + * if O[i, j] < 0: # <<<<<<<<<<<<<< + * O[i, j] = 0 * - * if dtype_is_object: # <<<<<<<<<<<<<< - * refcount_objects_in_slice_with_gil(dst.data, dst.shape, - * dst.strides, ndim, inc) */ - __pyx_t_1 = (__pyx_v_dtype_is_object != 0); - if (__pyx_t_1) { + } + } + } + } + } + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif + } - /* "View.MemoryView":1369 - * - * if dtype_is_object: - * refcount_objects_in_slice_with_gil(dst.data, dst.shape, # <<<<<<<<<<<<<< - * dst.strides, ndim, inc) + /* "cornac/models/comparer/recom_comparer_sub.pyx":694 * + * # update params with AdaGrad + * with nogil, parallel(num_threads=n_threads): # <<<<<<<<<<<<<< + * for i in prange(n_user_factors, schedule='guided'): + * for j in range(n_users): */ - __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc); + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L66; + } + __pyx_L66:; + } + } - /* "View.MemoryView":1368 + /* "cornac/models/comparer/recom_comparer_sub.pyx":758 + * O[i, j] = 0 * + * return correct, skipped, loss, bpr_loss # <<<<<<<<<<<<<< * - * if dtype_is_object: # <<<<<<<<<<<<<< - * refcount_objects_in_slice_with_gil(dst.data, dst.shape, - * dst.strides, ndim, inc) + * def rank(self, user_idx, item_indices=None): */ - } + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_correct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v_skipped); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_30 = PyFloat_FromDouble(__pyx_v_bpr_loss); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_30); + __pyx_t_31 = PyTuple_New(4); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 758, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_31); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_31, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_31, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_31, 2, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_30); + PyTuple_SET_ITEM(__pyx_t_31, 3, __pyx_t_30); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_6 = 0; + __pyx_t_30 = 0; + __pyx_r = __pyx_t_31; + __pyx_t_31 = 0; + goto __pyx_L0; - /* "View.MemoryView":1364 - * - * @cname('__pyx_memoryview_refcount_copying') - * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< - * int ndim, bint inc) nogil: + /* "cornac/models/comparer/recom_comparer_sub.pyx":482 + * return self * + * @cython.cdivision(True) # <<<<<<<<<<<<<< + * @cython.boundscheck(False) + * @cython.wraparound(False) */ /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_30); + __Pyx_XDECREF(__pyx_t_31); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub._fit_mter", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_a_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g1_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g2_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_g3_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_i_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_o_reg.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_del_u_reg.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -/* "View.MemoryView":1373 +/* "cornac/models/comparer/recom_comparer_sub.pyx":760 + * return correct, skipped, loss, bpr_loss * - * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') - * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, - * bint inc) with gil: + * def rank(self, user_idx, item_indices=None): # <<<<<<<<<<<<<< + * if self.alpha > 0 and self.n_top_aspects > 0: + * n_items = self.train_set.num_items */ -static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { - __Pyx_RefNannyDeclarations - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); +/* Python wrapper */ +static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_13rank(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_13rank = {"rank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_13rank, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_13rank(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_user_idx = 0; + PyObject *__pyx_v_item_indices = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #endif - __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0); - - /* "View.MemoryView":1376 - * Py_ssize_t *strides, int ndim, - * bint inc) with gil: - * refcount_objects_in_slice(data, shape, strides, ndim, inc) # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_refcount_objects_in_slice') - */ - __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc); - - /* "View.MemoryView":1373 - * - * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') - * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, - * bint inc) with gil: - */ + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("rank (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_user_idx,&__pyx_n_s_item_indices,0}; + PyObject* values[3] = {0,0,0}; + values[2] = ((PyObject *)((PyObject *)Py_None)); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 760, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_user_idx)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 760, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("rank", 0, 2, 3, 1); __PYX_ERR(0, 760, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_item_indices); + if (value) { values[2] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 760, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rank") < 0)) __PYX_ERR(0, 760, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_self = values[0]; + __pyx_v_user_idx = values[1]; + __pyx_v_item_indices = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("rank", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 760, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.rank", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_12rank(__pyx_self, __pyx_v_self, __pyx_v_user_idx, __pyx_v_item_indices); /* function exit code */ __Pyx_RefNannyFinishContext(); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif + return __pyx_r; } -/* "View.MemoryView":1379 - * - * @cname('__pyx_memoryview_refcount_objects_in_slice') - * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, bint inc): - * cdef Py_ssize_t i - */ - -static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { - CYTHON_UNUSED Py_ssize_t __pyx_v_i; +static PyObject *__pyx_pf_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_12rank(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_user_idx, PyObject *__pyx_v_item_indices) { + PyObject *__pyx_v_n_items = NULL; + PyObject *__pyx_v_n_top_aspects = NULL; + PyObject *__pyx_v_ts1 = NULL; + PyObject *__pyx_v_ts2 = NULL; + PyObject *__pyx_v_ts3 = NULL; + PyObject *__pyx_v_top_aspect_scores = NULL; + PyObject *__pyx_v_known_item_scores = NULL; + PyObject *__pyx_v_all_item_scores = NULL; + PyObject *__pyx_v_item_scores = NULL; + PyObject *__pyx_v_item_rank = NULL; + PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - Py_ssize_t __pyx_t_2; - Py_ssize_t __pyx_t_3; + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; int __pyx_t_4; - __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0); - - /* "View.MemoryView":1383 - * cdef Py_ssize_t i - * - * for i in range(shape[0]): # <<<<<<<<<<<<<< - * if ndim == 1: - * if inc: - */ - __pyx_t_1 = (__pyx_v_shape[0]); - __pyx_t_2 = __pyx_t_1; - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { - __pyx_v_i = __pyx_t_3; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + Py_ssize_t __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("rank", 0); - /* "View.MemoryView":1384 + /* "cornac/models/comparer/recom_comparer_sub.pyx":761 * - * for i in range(shape[0]): - * if ndim == 1: # <<<<<<<<<<<<<< - * if inc: - * Py_INCREF(( data)[0]) + * def rank(self, user_idx, item_indices=None): + * if self.alpha > 0 and self.n_top_aspects > 0: # <<<<<<<<<<<<<< + * n_items = self.train_set.num_items + * n_top_aspects = min(self.n_top_aspects, self.train_set.sentiment.num_aspects) */ - __pyx_t_4 = ((__pyx_v_ndim == 1) != 0); - if (__pyx_t_4) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_alpha); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 761, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 761, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_4) { + } else { + __pyx_t_1 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_top_aspects); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 761, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 761, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_1 = __pyx_t_4; + __pyx_L4_bool_binop_done:; + if (__pyx_t_1) { - /* "View.MemoryView":1385 - * for i in range(shape[0]): - * if ndim == 1: - * if inc: # <<<<<<<<<<<<<< - * Py_INCREF(( data)[0]) - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":762 + * def rank(self, user_idx, item_indices=None): + * if self.alpha > 0 and self.n_top_aspects > 0: + * n_items = self.train_set.num_items # <<<<<<<<<<<<<< + * n_top_aspects = min(self.n_top_aspects, self.train_set.sentiment.num_aspects) + * ts1 = np.einsum("abc,a->bc", self.G1, self.U[user_idx]) */ - __pyx_t_4 = (__pyx_v_inc != 0); - if (__pyx_t_4) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_n_items = __pyx_t_3; + __pyx_t_3 = 0; - /* "View.MemoryView":1386 - * if ndim == 1: - * if inc: - * Py_INCREF(( data)[0]) # <<<<<<<<<<<<<< - * else: - * Py_DECREF(( data)[0]) + /* "cornac/models/comparer/recom_comparer_sub.pyx":763 + * if self.alpha > 0 and self.n_top_aspects > 0: + * n_items = self.train_set.num_items + * n_top_aspects = min(self.n_top_aspects, self.train_set.sentiment.num_aspects) # <<<<<<<<<<<<<< + * ts1 = np.einsum("abc,a->bc", self.G1, self.U[user_idx]) + * ts2 = np.einsum("bc,Mb->Mc", ts1, self.I) */ - Py_INCREF((((PyObject **)__pyx_v_data)[0])); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 763, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 763, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 763, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_n_top_aspects); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 763, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 763, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 763, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_1) { + __Pyx_INCREF(__pyx_t_3); + __pyx_t_5 = __pyx_t_3; + } else { + __Pyx_INCREF(__pyx_t_2); + __pyx_t_5 = __pyx_t_2; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __pyx_t_5; + __Pyx_INCREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_n_top_aspects = __pyx_t_3; + __pyx_t_3 = 0; - /* "View.MemoryView":1385 - * for i in range(shape[0]): - * if ndim == 1: - * if inc: # <<<<<<<<<<<<<< - * Py_INCREF(( data)[0]) - * else: + /* "cornac/models/comparer/recom_comparer_sub.pyx":764 + * n_items = self.train_set.num_items + * n_top_aspects = min(self.n_top_aspects, self.train_set.sentiment.num_aspects) + * ts1 = np.einsum("abc,a->bc", self.G1, self.U[user_idx]) # <<<<<<<<<<<<<< + * ts2 = np.einsum("bc,Mb->Mc", ts1, self.I) + * ts3 = np.einsum("Mc,Nc->MN", ts2, self.A) */ - goto __pyx_L6; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_einsum); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_G1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_v_user_idx); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_8 = 1; } + } + { + PyObject *__pyx_callargs[4] = {__pyx_t_6, __pyx_kp_u_abc_a_bc, __pyx_t_5, __pyx_t_7}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 3+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_ts1 = __pyx_t_3; + __pyx_t_3 = 0; - /* "View.MemoryView":1388 - * Py_INCREF(( data)[0]) - * else: - * Py_DECREF(( data)[0]) # <<<<<<<<<<<<<< - * else: - * refcount_objects_in_slice(data, shape + 1, strides + 1, + /* "cornac/models/comparer/recom_comparer_sub.pyx":765 + * n_top_aspects = min(self.n_top_aspects, self.train_set.sentiment.num_aspects) + * ts1 = np.einsum("abc,a->bc", self.G1, self.U[user_idx]) + * ts2 = np.einsum("bc,Mb->Mc", ts1, self.I) # <<<<<<<<<<<<<< + * ts3 = np.einsum("Mc,Nc->MN", ts2, self.A) + * top_aspect_scores = ts3[ */ - /*else*/ { - Py_DECREF((((PyObject **)__pyx_v_data)[0])); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_einsum); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_I); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_8 = 1; } - __pyx_L6:; - - /* "View.MemoryView":1384 - * - * for i in range(shape[0]): - * if ndim == 1: # <<<<<<<<<<<<<< - * if inc: - * Py_INCREF(( data)[0]) - */ - goto __pyx_L5; } - - /* "View.MemoryView":1390 - * Py_DECREF(( data)[0]) - * else: - * refcount_objects_in_slice(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< - * ndim - 1, inc) - * - */ - /*else*/ { - - /* "View.MemoryView":1391 - * else: - * refcount_objects_in_slice(data, shape + 1, strides + 1, - * ndim - 1, inc) # <<<<<<<<<<<<<< - * - * data += strides[0] - */ - __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_inc); + { + PyObject *__pyx_callargs[4] = {__pyx_t_5, __pyx_kp_u_bc_Mb_Mc, __pyx_v_ts1, __pyx_t_2}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_8, 3+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } - __pyx_L5:; - - /* "View.MemoryView":1393 - * ndim - 1, inc) - * - * data += strides[0] # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_data = (__pyx_v_data + (__pyx_v_strides[0])); - } + __pyx_v_ts2 = __pyx_t_3; + __pyx_t_3 = 0; - /* "View.MemoryView":1379 - * - * @cname('__pyx_memoryview_refcount_objects_in_slice') - * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, bint inc): - * cdef Py_ssize_t i + /* "cornac/models/comparer/recom_comparer_sub.pyx":766 + * ts1 = np.einsum("abc,a->bc", self.G1, self.U[user_idx]) + * ts2 = np.einsum("bc,Mb->Mc", ts1, self.I) + * ts3 = np.einsum("Mc,Nc->MN", ts2, self.A) # <<<<<<<<<<<<<< + * top_aspect_scores = ts3[ + * np.repeat(range(n_items), n_top_aspects).reshape( */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_einsum); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_A); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_5 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && 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); + __pyx_t_8 = 1; + } + } + { + PyObject *__pyx_callargs[4] = {__pyx_t_5, __pyx_kp_u_Mc_Nc_MN, __pyx_v_ts2, __pyx_t_7}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 3+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_ts3 = __pyx_t_3; + __pyx_t_3 = 0; - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "View.MemoryView":1399 - * - * @cname('__pyx_memoryview_slice_assign_scalar') - * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< - * size_t itemsize, void *item, - * bint dtype_is_object) nogil: + /* "cornac/models/comparer/recom_comparer_sub.pyx":768 + * ts3 = np.einsum("Mc,Nc->MN", ts2, self.A) + * top_aspect_scores = ts3[ + * np.repeat(range(n_items), n_top_aspects).reshape( # <<<<<<<<<<<<<< + * n_items, n_top_aspects + * ), */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 768, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_repeat); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 768, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_n_items); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 768, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + { + PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_7, __pyx_v_n_top_aspects}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 768, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_reshape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 768, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; -static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) { - - /* "View.MemoryView":1402 - * size_t itemsize, void *item, - * bint dtype_is_object) nogil: - * refcount_copying(dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< - * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, - * itemsize, item) + /* "cornac/models/comparer/recom_comparer_sub.pyx":769 + * top_aspect_scores = ts3[ + * np.repeat(range(n_items), n_top_aspects).reshape( + * n_items, n_top_aspects # <<<<<<<<<<<<<< + * ), + * ts3[:, :-1].argsort(axis=1)[::-1][:, :n_top_aspects], */ - __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + { + PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_n_items, __pyx_v_n_top_aspects}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 768, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } - /* "View.MemoryView":1403 - * bint dtype_is_object) nogil: - * refcount_copying(dst, dtype_is_object, ndim, False) - * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, # <<<<<<<<<<<<<< - * itemsize, item) - * refcount_copying(dst, dtype_is_object, ndim, True) + /* "cornac/models/comparer/recom_comparer_sub.pyx":771 + * n_items, n_top_aspects + * ), + * ts3[:, :-1].argsort(axis=1)[::-1][:, :n_top_aspects], # <<<<<<<<<<<<<< + * ] + * known_item_scores = ( */ - __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item); + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_ts3, __pyx_tuple__20); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 771, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_argsort); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 771, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 771, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_axis, __pyx_int_1) < 0) __PYX_ERR(0, 771, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 771, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_slice__21); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 771, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = PySlice_New(Py_None, __pyx_v_n_top_aspects, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 771, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 771, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_slice__5); + __Pyx_GIVEREF(__pyx_slice__5); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_slice__5); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 771, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":1405 - * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, - * itemsize, item) - * refcount_copying(dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< - * - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":767 + * ts2 = np.einsum("bc,Mb->Mc", ts1, self.I) + * ts3 = np.einsum("Mc,Nc->MN", ts2, self.A) + * top_aspect_scores = ts3[ # <<<<<<<<<<<<<< + * np.repeat(range(n_items), n_top_aspects).reshape( + * n_items, n_top_aspects */ - __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 767, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7); + __pyx_t_3 = 0; + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_ts3, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 767, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_top_aspect_scores = __pyx_t_7; + __pyx_t_7 = 0; - /* "View.MemoryView":1399 + /* "cornac/models/comparer/recom_comparer_sub.pyx":774 + * ] + * known_item_scores = ( + * self.alpha * top_aspect_scores.mean(axis=1) + (1 - self.alpha) * ts3[:, -1] # <<<<<<<<<<<<<< + * ) * - * @cname('__pyx_memoryview_slice_assign_scalar') - * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< - * size_t itemsize, void *item, - * bint dtype_is_object) nogil: */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_alpha); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 774, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_top_aspect_scores, __pyx_n_s_mean); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 774, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 774, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_axis, __pyx_int_1) < 0) __PYX_ERR(0, 774, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 774, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_Multiply(__pyx_t_7, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 774, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_alpha); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 774, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = __Pyx_PyInt_SubtractCObj(__pyx_int_1, __pyx_t_5, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 774, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_ts3, __pyx_tuple__22); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 774, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = PyNumber_Multiply(__pyx_t_7, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 774, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 774, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_known_item_scores = __pyx_t_5; + __pyx_t_5 = 0; - /* function exit code */ -} - -/* "View.MemoryView":1409 - * - * @cname('__pyx_memoryview__slice_assign_scalar') - * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, - * size_t itemsize, void *item) nogil: + /* "cornac/models/comparer/recom_comparer_sub.pyx":779 + * # check if the returned scores also cover unknown items + * # if not, all unknown items will be given the MIN score + * if len(known_item_scores) == self.train_set.total_items: # <<<<<<<<<<<<<< + * all_item_scores = known_item_scores + * else: */ + __pyx_t_9 = PyObject_Length(__pyx_v_known_item_scores); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 779, __pyx_L1_error) + __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_total_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyObject_RichCompare(__pyx_t_5, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_1) { -static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item) { - CYTHON_UNUSED Py_ssize_t __pyx_v_i; - Py_ssize_t __pyx_v_stride; - Py_ssize_t __pyx_v_extent; - int __pyx_t_1; - Py_ssize_t __pyx_t_2; - Py_ssize_t __pyx_t_3; - Py_ssize_t __pyx_t_4; - - /* "View.MemoryView":1413 - * size_t itemsize, void *item) nogil: - * cdef Py_ssize_t i - * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<< - * cdef Py_ssize_t extent = shape[0] - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":780 + * # if not, all unknown items will be given the MIN score + * if len(known_item_scores) == self.train_set.total_items: + * all_item_scores = known_item_scores # <<<<<<<<<<<<<< + * else: + * all_item_scores = np.ones(self.train_set.total_items) * np.min( */ - __pyx_v_stride = (__pyx_v_strides[0]); + __Pyx_INCREF(__pyx_v_known_item_scores); + __pyx_v_all_item_scores = __pyx_v_known_item_scores; - /* "View.MemoryView":1414 - * cdef Py_ssize_t i - * cdef Py_ssize_t stride = strides[0] - * cdef Py_ssize_t extent = shape[0] # <<<<<<<<<<<<<< - * - * if ndim == 1: + /* "cornac/models/comparer/recom_comparer_sub.pyx":779 + * # check if the returned scores also cover unknown items + * # if not, all unknown items will be given the MIN score + * if len(known_item_scores) == self.train_set.total_items: # <<<<<<<<<<<<<< + * all_item_scores = known_item_scores + * else: */ - __pyx_v_extent = (__pyx_v_shape[0]); + goto __pyx_L6; + } - /* "View.MemoryView":1416 - * cdef Py_ssize_t extent = shape[0] - * - * if ndim == 1: # <<<<<<<<<<<<<< - * for i in range(extent): - * memcpy(data, item, itemsize) + /* "cornac/models/comparer/recom_comparer_sub.pyx":782 + * all_item_scores = known_item_scores + * else: + * all_item_scores = np.ones(self.train_set.total_items) * np.min( # <<<<<<<<<<<<<< + * known_item_scores + * ) */ - __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); - if (__pyx_t_1) { + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_total_items); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_min_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "View.MemoryView":1417 - * - * if ndim == 1: - * for i in range(extent): # <<<<<<<<<<<<<< - * memcpy(data, item, itemsize) - * data += stride + /* "cornac/models/comparer/recom_comparer_sub.pyx":783 + * else: + * all_item_scores = np.ones(self.train_set.total_items) * np.min( + * known_item_scores # <<<<<<<<<<<<<< + * ) + * all_item_scores[: self.train_set.num_items] = known_item_scores */ - __pyx_t_2 = __pyx_v_extent; - __pyx_t_3 = __pyx_t_2; - for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { - __pyx_v_i = __pyx_t_4; - - /* "View.MemoryView":1418 - * if ndim == 1: - * for i in range(extent): - * memcpy(data, item, itemsize) # <<<<<<<<<<<<<< - * data += stride - * else: + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_known_item_scores}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + + /* "cornac/models/comparer/recom_comparer_sub.pyx":782 + * all_item_scores = known_item_scores + * else: + * all_item_scores = np.ones(self.train_set.total_items) * np.min( # <<<<<<<<<<<<<< + * known_item_scores + * ) */ - (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize)); + __pyx_t_3 = PyNumber_Multiply(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_all_item_scores = __pyx_t_3; + __pyx_t_3 = 0; - /* "View.MemoryView":1419 - * for i in range(extent): - * memcpy(data, item, itemsize) - * data += stride # <<<<<<<<<<<<<< - * else: - * for i in range(extent): + /* "cornac/models/comparer/recom_comparer_sub.pyx":785 + * known_item_scores + * ) + * all_item_scores[: self.train_set.num_items] = known_item_scores # <<<<<<<<<<<<<< + * + * # rank items based on their scores */ - __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 785, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_num_items); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 785, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__Pyx_PyObject_SetSlice(__pyx_v_all_item_scores, __pyx_v_known_item_scores, 0, 0, NULL, &__pyx_t_5, NULL, 0, 0, 1) < 0) __PYX_ERR(0, 785, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } + __pyx_L6:; - /* "View.MemoryView":1416 - * cdef Py_ssize_t extent = shape[0] + /* "cornac/models/comparer/recom_comparer_sub.pyx":788 * - * if ndim == 1: # <<<<<<<<<<<<<< - * for i in range(extent): - * memcpy(data, item, itemsize) + * # rank items based on their scores + * if item_indices is None: # <<<<<<<<<<<<<< + * item_scores = all_item_scores[: self.train_set.num_items] + * item_rank = item_scores.argsort()[::-1] */ - goto __pyx_L3; - } + __pyx_t_1 = (__pyx_v_item_indices == Py_None); + if (__pyx_t_1) { - /* "View.MemoryView":1421 - * data += stride - * else: - * for i in range(extent): # <<<<<<<<<<<<<< - * _slice_assign_scalar(data, shape + 1, strides + 1, - * ndim - 1, itemsize, item) + /* "cornac/models/comparer/recom_comparer_sub.pyx":789 + * # rank items based on their scores + * if item_indices is None: + * item_scores = all_item_scores[: self.train_set.num_items] # <<<<<<<<<<<<<< + * item_rank = item_scores.argsort()[::-1] + * else: */ - /*else*/ { - __pyx_t_2 = __pyx_v_extent; - __pyx_t_3 = __pyx_t_2; - for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { - __pyx_v_i = __pyx_t_4; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 789, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_num_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 789, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetSlice(__pyx_v_all_item_scores, 0, 0, NULL, &__pyx_t_3, NULL, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 789, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_item_scores = __pyx_t_5; + __pyx_t_5 = 0; - /* "View.MemoryView":1422 - * else: - * for i in range(extent): - * _slice_assign_scalar(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< - * ndim - 1, itemsize, item) - * data += stride + /* "cornac/models/comparer/recom_comparer_sub.pyx":790 + * if item_indices is None: + * item_scores = all_item_scores[: self.train_set.num_items] + * item_rank = item_scores.argsort()[::-1] # <<<<<<<<<<<<<< + * else: + * item_scores = all_item_scores[item_indices] */ - __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_item_scores, __pyx_n_s_argsort); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 790, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_2, }; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 790, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_slice__21); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 790, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_item_rank = __pyx_t_3; + __pyx_t_3 = 0; - /* "View.MemoryView":1424 - * _slice_assign_scalar(data, shape + 1, strides + 1, - * ndim - 1, itemsize, item) - * data += stride # <<<<<<<<<<<<<< - * + /* "cornac/models/comparer/recom_comparer_sub.pyx":788 * + * # rank items based on their scores + * if item_indices is None: # <<<<<<<<<<<<<< + * item_scores = all_item_scores[: self.train_set.num_items] + * item_rank = item_scores.argsort()[::-1] */ - __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + goto __pyx_L7; } - } - __pyx_L3:; - /* "View.MemoryView":1409 + /* "cornac/models/comparer/recom_comparer_sub.pyx":792 + * item_rank = item_scores.argsort()[::-1] + * else: + * item_scores = all_item_scores[item_indices] # <<<<<<<<<<<<<< + * item_rank = np.array(item_indices)[item_scores.argsort()[::-1]] * - * @cname('__pyx_memoryview__slice_assign_scalar') - * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, - * size_t itemsize, void *item) nogil: */ + /*else*/ { + __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_all_item_scores, __pyx_v_item_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 792, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_item_scores = __pyx_t_3; + __pyx_t_3 = 0; - /* function exit code */ -} - -/* "(tree fragment)":1 - * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result + /* "cornac/models/comparer/recom_comparer_sub.pyx":793 + * else: + * item_scores = all_item_scores[item_indices] + * item_rank = np.array(item_indices)[item_scores.argsort()[::-1]] # <<<<<<<<<<<<<< + * + * return item_rank, item_scores */ - -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum = {"__pyx_unpickle_Enum", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v___pyx_type = 0; - long __pyx_v___pyx_checksum; - PyObject *__pyx_v___pyx_state = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__pyx_unpickle_Enum (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error) + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 793, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && 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); + __pyx_t_8 = 1; } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error) + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_item_indices}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 793, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_item_scores, __pyx_n_s_argsort); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 793, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; } } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_Enum") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) + { + PyObject *__pyx_callargs[1] = {__pyx_t_7, }; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } - } 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_t_5 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_slice__21); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 793, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_item_rank = __pyx_t_2; + __pyx_t_2 = 0; } - __pyx_v___pyx_type = values[0]; - __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) - __pyx_v___pyx_state = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_v___pyx_PickleError = 0; - PyObject *__pyx_v___pyx_result = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_Enum", 0); - - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum not in (0xb068931, 0x82a3537, 0x6ae9995): # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb068931, 0x82a3537, 0x6ae9995) = (name))" % __pyx_checksum) - */ - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__34, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - - /* "(tree fragment)":5 - * cdef object __pyx_result - * if __pyx_checksum not in (0xb068931, 0x82a3537, 0x6ae9995): - * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb068931, 0x82a3537, 0x6ae9995) = (name))" % __pyx_checksum) - * __pyx_result = Enum.__new__(__pyx_type) - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_PickleError); - __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError); - __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_1); - __pyx_v___pyx_PickleError = __pyx_t_1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_L7:; - /* "(tree fragment)":6 - * if __pyx_checksum not in (0xb068931, 0x82a3537, 0x6ae9995): - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb068931, 0x82a3537, 0x6ae9995) = (name))" % __pyx_checksum) # <<<<<<<<<<<<<< - * __pyx_result = Enum.__new__(__pyx_type) - * if __pyx_state is not None: + /* "cornac/models/comparer/recom_comparer_sub.pyx":795 + * item_rank = np.array(item_indices)[item_scores.argsort()[::-1]] + * + * return item_rank, item_scores # <<<<<<<<<<<<<< + * return super().rank(user_idx, item_indices) */ - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __PYX_ERR(2, 6, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 795, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_item_rank); + __Pyx_GIVEREF(__pyx_v_item_rank); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_item_rank); + __Pyx_INCREF(__pyx_v_item_scores); + __Pyx_GIVEREF(__pyx_v_item_scores); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_item_scores); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum not in (0xb068931, 0x82a3537, 0x6ae9995): # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb068931, 0x82a3537, 0x6ae9995) = (name))" % __pyx_checksum) + /* "cornac/models/comparer/recom_comparer_sub.pyx":761 + * + * def rank(self, user_idx, item_indices=None): + * if self.alpha > 0 and self.n_top_aspects > 0: # <<<<<<<<<<<<<< + * n_items = self.train_set.num_items + * n_top_aspects = min(self.n_top_aspects, self.train_set.sentiment.num_aspects) */ } - /* "(tree fragment)":7 - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb068931, 0x82a3537, 0x6ae9995) = (name))" % __pyx_checksum) - * __pyx_result = Enum.__new__(__pyx_type) # <<<<<<<<<<<<<< - * if __pyx_state is not None: - * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + /* "cornac/models/comparer/recom_comparer_sub.pyx":796 + * + * return item_rank, item_scores + * return super().rank(user_idx, item_indices) # <<<<<<<<<<<<<< */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_MemviewEnum_type), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_5 = __Pyx_CyFunction_GetClassObj(__pyx_self); + if (!__pyx_t_5) { PyErr_SetString(PyExc_SystemError, "super(): empty __class__ cell"); __PYX_ERR(0, 796, __pyx_L1_error) } + __Pyx_INCREF(__pyx_t_5); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 796, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); + __Pyx_INCREF(__pyx_v_self); + __Pyx_GIVEREF(__pyx_v_self); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self); + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 796, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_rank); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 796, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; } } - __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result = __pyx_t_4; - __pyx_t_4 = 0; - - /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb068931, 0x82a3537, 0x6ae9995) = (name))" % __pyx_checksum) - * __pyx_result = Enum.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) - * return __pyx_result - */ - __pyx_t_3 = (__pyx_v___pyx_state != Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); - if (__pyx_t_2) { - - /* "(tree fragment)":9 - * __pyx_result = Enum.__new__(__pyx_type) - * if __pyx_state is not None: - * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< - * return __pyx_result - * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): - */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error) - __pyx_t_4 = __pyx_unpickle_Enum__set_state(((struct __pyx_MemviewEnum_obj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb068931, 0x82a3537, 0x6ae9995) = (name))" % __pyx_checksum) - * __pyx_result = Enum.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) - * return __pyx_result - */ + { + PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_v_user_idx, __pyx_v_item_indices}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 796, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - - /* "(tree fragment)":10 - * if __pyx_state is not None: - * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) - * return __pyx_result # <<<<<<<<<<<<<< - * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): - * __pyx_result.name = __pyx_state[0] - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v___pyx_result); - __pyx_r = __pyx_v___pyx_result; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; goto __pyx_L0; - /* "(tree fragment)":1 - * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result + /* "cornac/models/comparer/recom_comparer_sub.pyx":760 + * return correct, skipped, loss, bpr_loss + * + * def rank(self, user_idx, item_indices=None): # <<<<<<<<<<<<<< + * if self.alpha > 0 and self.n_top_aspects > 0: + * n_items = self.train_set.num_items */ /* function exit code */ __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v___pyx_PickleError); - __Pyx_XDECREF(__pyx_v___pyx_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":11 - * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.name = __pyx_state[0] - * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): - */ - -static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - Py_ssize_t __pyx_t_3; - int __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_Enum__set_state", 0); - - /* "(tree fragment)":12 - * return __pyx_result - * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): - * __pyx_result.name = __pyx_state[0] # <<<<<<<<<<<<<< - * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[1]) - */ - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(2, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->name); - __Pyx_DECREF(__pyx_v___pyx_result->name); - __pyx_v___pyx_result->name = __pyx_t_1; - __pyx_t_1 = 0; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): - * __pyx_result.name = __pyx_state[0] - * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[1]) - */ - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(2, 13, __pyx_L1_error) - } - __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_4 = ((__pyx_t_3 > 1) != 0); - if (__pyx_t_4) { - } else { - __pyx_t_2 = __pyx_t_4; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_5 = (__pyx_t_4 != 0); - __pyx_t_2 = __pyx_t_5; - __pyx_L4_bool_binop_done:; - if (__pyx_t_2) { - - /* "(tree fragment)":14 - * __pyx_result.name = __pyx_state[0] - * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<< - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(2, 14, __pyx_L1_error) - } - __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): - * __pyx_result.name = __pyx_state[0] - * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[1]) - */ - } - - /* "(tree fragment)":11 - * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.name = __pyx_state[0] - * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): - */ - - /* 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_6); __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; + __Pyx_AddTraceback("cornac.models.comparer.recom_comparer_sub.ComparERSub.rank", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; + __Pyx_XDECREF(__pyx_v_n_items); + __Pyx_XDECREF(__pyx_v_n_top_aspects); + __Pyx_XDECREF(__pyx_v_ts1); + __Pyx_XDECREF(__pyx_v_ts2); + __Pyx_XDECREF(__pyx_v_ts3); + __Pyx_XDECREF(__pyx_v_top_aspect_scores); + __Pyx_XDECREF(__pyx_v_known_item_scores); + __Pyx_XDECREF(__pyx_v_all_item_scores); + __Pyx_XDECREF(__pyx_v_item_scores); + __Pyx_XDECREF(__pyx_v_item_rank); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; @@ -54077,12 +61312,17 @@ static struct __pyx_vtabstruct_array __pyx_vtable_array; static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k) { struct __pyx_array_obj *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_array_obj *)o); p->__pyx_vtab = __pyx_vtabptr_array; p->mode = ((PyObject*)Py_None); Py_INCREF(Py_None); @@ -54097,8 +61337,10 @@ static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k) { static void __pyx_tp_dealloc_array(PyObject *o) { struct __pyx_array_obj *p = (struct __pyx_array_obj *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_array) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif { @@ -54126,8 +61368,11 @@ static int __pyx_mp_ass_subscript_array(PyObject *o, PyObject *i, PyObject *v) { return __pyx_array___setitem__(o, i, v); } else { + __Pyx_TypeName o_type_name; + o_type_name = __Pyx_PyType_GetName(Py_TYPE(o)); PyErr_Format(PyExc_NotImplementedError, - "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); + "Subscript deletion not supported by " __Pyx_FMT_TYPENAME, o_type_name); + __Pyx_DECREF_TypeName(o_type_name); return -1; } } @@ -54147,8 +61392,8 @@ static PyObject *__pyx_getprop___pyx_array_memview(PyObject *o, CYTHON_UNUSED vo static PyMethodDef __pyx_methods_array[] = { {"__getattr__", (PyCFunction)__pyx_array___getattr__, METH_O|METH_COEXIST, 0}, - {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_array_1__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_array_3__setstate_cython__, METH_O, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw___pyx_array_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw___pyx_array_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; @@ -54156,6 +61401,50 @@ static struct PyGetSetDef __pyx_getsets_array[] = { {(char *)"memview", __pyx_getprop___pyx_array_memview, 0, (char *)0, 0}, {0, 0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +#if !CYTHON_COMPILING_IN_LIMITED_API + +static PyBufferProcs __pyx_tp_as_buffer_array = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + __pyx_array_getbuffer, /*bf_getbuffer*/ + 0, /*bf_releasebuffer*/ +}; +#endif +static PyType_Slot __pyx_type___pyx_array_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_array}, + {Py_sq_length, (void *)__pyx_array___len__}, + {Py_sq_item, (void *)__pyx_sq_item_array}, + {Py_mp_length, (void *)__pyx_array___len__}, + {Py_mp_subscript, (void *)__pyx_array___getitem__}, + {Py_mp_ass_subscript, (void *)__pyx_mp_ass_subscript_array}, + {Py_tp_getattro, (void *)__pyx_tp_getattro_array}, + #if defined(Py_bf_getbuffer) + {Py_bf_getbuffer, (void *)__pyx_array_getbuffer}, + #endif + {Py_tp_methods, (void *)__pyx_methods_array}, + {Py_tp_getset, (void *)__pyx_getsets_array}, + {Py_tp_new, (void *)__pyx_tp_new_array}, + {0, 0}, +}; +static PyType_Spec __pyx_type___pyx_array_spec = { + "cornac.models.comparer.recom_comparer_sub.array", + sizeof(struct __pyx_array_obj), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_SEQUENCE, + __pyx_type___pyx_array_slots, +}; +#else static PySequenceMethods __pyx_tp_as_sequence_array = { __pyx_array___len__, /*sq_length*/ @@ -54195,7 +61484,7 @@ static PyBufferProcs __pyx_tp_as_buffer_array = { static PyTypeObject __pyx_type___pyx_array = { PyVarObject_HEAD_INIT(0, 0) - "cornac.models.comparer.recom_comparer_sub.array", /*tp_name*/ + "cornac.models.comparer.recom_comparer_sub.""array", /*tp_name*/ sizeof(struct __pyx_array_obj), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_array, /*tp_dealloc*/ @@ -54223,7 +61512,7 @@ static PyTypeObject __pyx_type___pyx_array = { __pyx_tp_getattro_array, /*tp_getattro*/ 0, /*tp_setattro*/ &__pyx_tp_as_buffer_array, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_SEQUENCE, /*tp_flags*/ 0, /*tp_doc*/ 0, /*tp_traverse*/ 0, /*tp_clear*/ @@ -54238,7 +61527,9 @@ static PyTypeObject __pyx_type___pyx_array = { 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif 0, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_array, /*tp_new*/ @@ -54252,28 +61543,41 @@ static PyTypeObject __pyx_type___pyx_array = { 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif #endif #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, /*tp_pypy_flags*/ #endif }; +#endif static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { struct __pyx_MemviewEnum_obj *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_MemviewEnum_obj *)o); p->name = Py_None; Py_INCREF(Py_None); return o; @@ -54282,8 +61586,10 @@ static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, C static void __pyx_tp_dealloc_Enum(PyObject *o) { struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_Enum) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); @@ -54309,15 +61615,39 @@ static int __pyx_tp_clear_Enum(PyObject *o) { return 0; } +static PyObject *__pyx_specialmethod___pyx_MemviewEnum___repr__(PyObject *self, CYTHON_UNUSED PyObject *arg) { + return __pyx_MemviewEnum___repr__(self); +} + static PyMethodDef __pyx_methods_Enum[] = { - {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_1__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_3__setstate_cython__, METH_O, 0}, + {"__repr__", (PyCFunction)__pyx_specialmethod___pyx_MemviewEnum___repr__, METH_NOARGS|METH_COEXIST, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw___pyx_MemviewEnum_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw___pyx_MemviewEnum_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type___pyx_MemviewEnum_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_Enum}, + {Py_tp_repr, (void *)__pyx_MemviewEnum___repr__}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_Enum}, + {Py_tp_clear, (void *)__pyx_tp_clear_Enum}, + {Py_tp_methods, (void *)__pyx_methods_Enum}, + {Py_tp_init, (void *)__pyx_MemviewEnum___init__}, + {Py_tp_new, (void *)__pyx_tp_new_Enum}, + {0, 0}, +}; +static PyType_Spec __pyx_type___pyx_MemviewEnum_spec = { + "cornac.models.comparer.recom_comparer_sub.Enum", + sizeof(struct __pyx_MemviewEnum_obj), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type___pyx_MemviewEnum_slots, +}; +#else static PyTypeObject __pyx_type___pyx_MemviewEnum = { PyVarObject_HEAD_INIT(0, 0) - "cornac.models.comparer.recom_comparer_sub.Enum", /*tp_name*/ + "cornac.models.comparer.recom_comparer_sub.""Enum", /*tp_name*/ sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_Enum, /*tp_dealloc*/ @@ -54360,7 +61690,9 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = { 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif __pyx_MemviewEnum___init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_Enum, /*tp_new*/ @@ -54374,29 +61706,42 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = { 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif #endif #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, /*tp_pypy_flags*/ #endif }; +#endif static struct __pyx_vtabstruct_memoryview __pyx_vtable_memoryview; static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k) { struct __pyx_memoryview_obj *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_memoryview_obj *)o); p->__pyx_vtab = __pyx_vtabptr_memoryview; p->obj = Py_None; Py_INCREF(Py_None); @@ -54413,8 +61758,10 @@ static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject static void __pyx_tp_dealloc_memoryview(PyObject *o) { struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_memoryview) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); @@ -54478,8 +61825,11 @@ static int __pyx_mp_ass_subscript_memoryview(PyObject *o, PyObject *i, PyObject return __pyx_memoryview___setitem__(o, i, v); } else { + __Pyx_TypeName o_type_name; + o_type_name = __Pyx_PyType_GetName(Py_TYPE(o)); PyErr_Format(PyExc_NotImplementedError, - "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); + "Subscript deletion not supported by " __Pyx_FMT_TYPENAME, o_type_name); + __Pyx_DECREF_TypeName(o_type_name); return -1; } } @@ -54520,13 +61870,18 @@ static PyObject *__pyx_getprop___pyx_memoryview_size(PyObject *o, CYTHON_UNUSED return __pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(o); } +static PyObject *__pyx_specialmethod___pyx_memoryview___repr__(PyObject *self, CYTHON_UNUSED PyObject *arg) { + return __pyx_memoryview___repr__(self); +} + static PyMethodDef __pyx_methods_memoryview[] = { - {"is_c_contig", (PyCFunction)__pyx_memoryview_is_c_contig, METH_NOARGS, 0}, - {"is_f_contig", (PyCFunction)__pyx_memoryview_is_f_contig, METH_NOARGS, 0}, - {"copy", (PyCFunction)__pyx_memoryview_copy, METH_NOARGS, 0}, - {"copy_fortran", (PyCFunction)__pyx_memoryview_copy_fortran, METH_NOARGS, 0}, - {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_1__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_3__setstate_cython__, METH_O, 0}, + {"__repr__", (PyCFunction)__pyx_specialmethod___pyx_memoryview___repr__, METH_NOARGS|METH_COEXIST, 0}, + {"is_c_contig", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_memoryview_is_c_contig, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"is_f_contig", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_memoryview_is_f_contig, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"copy", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_memoryview_copy, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"copy_fortran", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_memoryview_copy_fortran, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw___pyx_memoryview_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw___pyx_memoryview_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; @@ -54542,6 +61897,53 @@ static struct PyGetSetDef __pyx_getsets_memoryview[] = { {(char *)"size", __pyx_getprop___pyx_memoryview_size, 0, (char *)0, 0}, {0, 0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +#if !CYTHON_COMPILING_IN_LIMITED_API + +static PyBufferProcs __pyx_tp_as_buffer_memoryview = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + __pyx_memoryview_getbuffer, /*bf_getbuffer*/ + 0, /*bf_releasebuffer*/ +}; +#endif +static PyType_Slot __pyx_type___pyx_memoryview_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_memoryview}, + {Py_tp_repr, (void *)__pyx_memoryview___repr__}, + {Py_sq_length, (void *)__pyx_memoryview___len__}, + {Py_sq_item, (void *)__pyx_sq_item_memoryview}, + {Py_mp_length, (void *)__pyx_memoryview___len__}, + {Py_mp_subscript, (void *)__pyx_memoryview___getitem__}, + {Py_mp_ass_subscript, (void *)__pyx_mp_ass_subscript_memoryview}, + {Py_tp_str, (void *)__pyx_memoryview___str__}, + #if defined(Py_bf_getbuffer) + {Py_bf_getbuffer, (void *)__pyx_memoryview_getbuffer}, + #endif + {Py_tp_traverse, (void *)__pyx_tp_traverse_memoryview}, + {Py_tp_clear, (void *)__pyx_tp_clear_memoryview}, + {Py_tp_methods, (void *)__pyx_methods_memoryview}, + {Py_tp_getset, (void *)__pyx_getsets_memoryview}, + {Py_tp_new, (void *)__pyx_tp_new_memoryview}, + {0, 0}, +}; +static PyType_Spec __pyx_type___pyx_memoryview_spec = { + "cornac.models.comparer.recom_comparer_sub.memoryview", + sizeof(struct __pyx_memoryview_obj), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type___pyx_memoryview_slots, +}; +#else static PySequenceMethods __pyx_tp_as_sequence_memoryview = { __pyx_memoryview___len__, /*sq_length*/ @@ -54581,7 +61983,7 @@ static PyBufferProcs __pyx_tp_as_buffer_memoryview = { static PyTypeObject __pyx_type___pyx_memoryview = { PyVarObject_HEAD_INIT(0, 0) - "cornac.models.comparer.recom_comparer_sub.memoryview", /*tp_name*/ + "cornac.models.comparer.recom_comparer_sub.""memoryview", /*tp_name*/ sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_memoryview, /*tp_dealloc*/ @@ -54624,7 +62026,9 @@ static PyTypeObject __pyx_type___pyx_memoryview = { 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif 0, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_memoryview, /*tp_new*/ @@ -54638,18 +62042,26 @@ static PyTypeObject __pyx_type___pyx_memoryview = { 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif #endif #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, /*tp_pypy_flags*/ #endif }; +#endif static struct __pyx_vtabstruct__memoryviewslice __pyx_vtable__memoryviewslice; static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k) { @@ -54658,6 +62070,7 @@ static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyO if (unlikely(!o)) return 0; p = ((struct __pyx_memoryviewslice_obj *)o); p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_memoryview*)__pyx_vtabptr__memoryviewslice; + new((void*)&(p->from_slice)) __Pyx_memviewslice(); p->from_object = Py_None; Py_INCREF(Py_None); p->from_slice.memview = NULL; return o; @@ -54666,8 +62079,10 @@ static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyO static void __pyx_tp_dealloc__memoryviewslice(PyObject *o) { struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc__memoryviewslice) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); @@ -54679,6 +62094,7 @@ static void __pyx_tp_dealloc__memoryviewslice(PyObject *o) { __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); PyErr_Restore(etype, eval, etb); } + __Pyx_call_destructor(p->from_slice); Py_CLEAR(p->from_object); PyObject_GC_Track(o); __pyx_tp_dealloc_memoryview(o); @@ -54701,28 +62117,37 @@ static int __pyx_tp_clear__memoryviewslice(PyObject *o) { tmp = ((PyObject*)p->from_object); p->from_object = Py_None; Py_INCREF(Py_None); Py_XDECREF(tmp); - __PYX_XDEC_MEMVIEW(&p->from_slice, 1); + __PYX_XCLEAR_MEMVIEW(&p->from_slice, 1); return 0; } -static PyObject *__pyx_getprop___pyx_memoryviewslice_base(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(o); -} - static PyMethodDef __pyx_methods__memoryviewslice[] = { - {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_1__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_3__setstate_cython__, METH_O, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw___pyx_memoryviewslice_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw___pyx_memoryviewslice_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; - -static struct PyGetSetDef __pyx_getsets__memoryviewslice[] = { - {(char *)"base", __pyx_getprop___pyx_memoryviewslice_base, 0, (char *)0, 0}, - {0, 0, 0, 0, 0} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type___pyx_memoryviewslice_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc__memoryviewslice}, + {Py_tp_doc, (void *)PyDoc_STR("Internal class for passing memoryview slices to Python")}, + {Py_tp_traverse, (void *)__pyx_tp_traverse__memoryviewslice}, + {Py_tp_clear, (void *)__pyx_tp_clear__memoryviewslice}, + {Py_tp_methods, (void *)__pyx_methods__memoryviewslice}, + {Py_tp_new, (void *)__pyx_tp_new__memoryviewslice}, + {0, 0}, +}; +static PyType_Spec __pyx_type___pyx_memoryviewslice_spec = { + "cornac.models.comparer.recom_comparer_sub._memoryviewslice", + sizeof(struct __pyx_memoryviewslice_obj), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_SEQUENCE, + __pyx_type___pyx_memoryviewslice_slots, }; +#else static PyTypeObject __pyx_type___pyx_memoryviewslice = { PyVarObject_HEAD_INIT(0, 0) - "cornac.models.comparer.recom_comparer_sub._memoryviewslice", /*tp_name*/ + "cornac.models.comparer.recom_comparer_sub.""_memoryviewslice", /*tp_name*/ sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc__memoryviewslice, /*tp_dealloc*/ @@ -54740,7 +62165,7 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = { #if PY_MAJOR_VERSION >= 3 0, /*tp_as_async*/ #endif - #if CYTHON_COMPILING_IN_PYPY + #if CYTHON_COMPILING_IN_PYPY || 0 __pyx_memoryview___repr__, /*tp_repr*/ #else 0, /*tp_repr*/ @@ -54750,7 +62175,7 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = { 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ - #if CYTHON_COMPILING_IN_PYPY + #if CYTHON_COMPILING_IN_PYPY || 0 __pyx_memoryview___str__, /*tp_str*/ #else 0, /*tp_str*/ @@ -54758,8 +62183,8 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = { 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - "Internal class for passing memoryview slices to Python", /*tp_doc*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_SEQUENCE, /*tp_flags*/ + PyDoc_STR("Internal class for passing memoryview slices to Python"), /*tp_doc*/ __pyx_tp_traverse__memoryviewslice, /*tp_traverse*/ __pyx_tp_clear__memoryviewslice, /*tp_clear*/ 0, /*tp_richcompare*/ @@ -54768,12 +62193,14 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = { 0, /*tp_iternext*/ __pyx_methods__memoryviewslice, /*tp_methods*/ 0, /*tp_members*/ - __pyx_getsets__memoryviewslice, /*tp_getset*/ + 0, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif 0, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new__memoryviewslice, /*tp_new*/ @@ -54787,54 +62214,30 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = { 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif #endif #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, /*tp_pypy_flags*/ #endif }; +#endif static PyMethodDef __pyx_methods[] = { {0, 0, 0, 0} }; - -#if PY_MAJOR_VERSION >= 3 -#if CYTHON_PEP489_MULTI_PHASE_INIT -static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ -static int __pyx_pymod_exec_recom_comparer_sub(PyObject* module); /*proto*/ -static PyModuleDef_Slot __pyx_moduledef_slots[] = { - {Py_mod_create, (void*)__pyx_pymod_create}, - {Py_mod_exec, (void*)__pyx_pymod_exec_recom_comparer_sub}, - {0, NULL} -}; -#endif - -static struct PyModuleDef __pyx_moduledef = { - PyModuleDef_HEAD_INIT, - "recom_comparer_sub", - 0, /* m_doc */ - #if CYTHON_PEP489_MULTI_PHASE_INIT - 0, /* m_size */ - #else - -1, /* m_size */ - #endif - __pyx_methods /* m_methods */, - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_moduledef_slots, /* m_slots */ - #else - NULL, /* m_reload */ - #endif - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif #ifndef CYTHON_SMALL_CODE #if defined(__clang__) #define CYTHON_SMALL_CODE @@ -54844,743 +62247,750 @@ static struct PyModuleDef __pyx_moduledef = { #define CYTHON_SMALL_CODE #endif #endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_u_2f, __pyx_k_2f, sizeof(__pyx_k_2f), 0, 1, 0, 0}, - {&__pyx_kp_u_2f_2, __pyx_k_2f_2, sizeof(__pyx_k_2f_2), 0, 1, 0, 0}, - {&__pyx_kp_u_2f_3, __pyx_k_2f_3, sizeof(__pyx_k_2f_3), 0, 1, 0, 0}, - {&__pyx_n_s_A, __pyx_k_A, sizeof(__pyx_k_A), 0, 0, 1, 1}, - {&__pyx_n_s_ASCII, __pyx_k_ASCII, sizeof(__pyx_k_ASCII), 0, 0, 1, 1}, - {&__pyx_kp_s_Buffer_view_does_not_expose_stri, __pyx_k_Buffer_view_does_not_expose_stri, sizeof(__pyx_k_Buffer_view_does_not_expose_stri), 0, 0, 1, 0}, - {&__pyx_kp_u_Building_chrono_purchared_items, __pyx_k_Building_chrono_purchared_items, sizeof(__pyx_k_Building_chrono_purchared_items), 0, 1, 0, 0}, - {&__pyx_kp_u_Building_data_completed_in_d_s, __pyx_k_Building_data_completed_in_d_s, sizeof(__pyx_k_Building_data_completed_in_d_s), 0, 1, 0, 0}, - {&__pyx_kp_u_Building_data_started, __pyx_k_Building_data_started, sizeof(__pyx_k_Building_data_started), 0, 1, 0, 0}, - {&__pyx_kp_u_Building_item_aspect_quality_mat, __pyx_k_Building_item_aspect_quality_mat, sizeof(__pyx_k_Building_item_aspect_quality_mat), 0, 1, 0, 0}, - {&__pyx_kp_s_Can_only_create_a_buffer_that_is, __pyx_k_Can_only_create_a_buffer_that_is, sizeof(__pyx_k_Can_only_create_a_buffer_that_is), 0, 0, 1, 0}, - {&__pyx_kp_s_Cannot_assign_to_read_only_memor, __pyx_k_Cannot_assign_to_read_only_memor, sizeof(__pyx_k_Cannot_assign_to_read_only_memor), 0, 0, 1, 0}, - {&__pyx_kp_s_Cannot_create_writable_memory_vi, __pyx_k_Cannot_create_writable_memory_vi, sizeof(__pyx_k_Cannot_create_writable_memory_vi), 0, 0, 1, 0}, - {&__pyx_kp_s_Cannot_index_with_type_s, __pyx_k_Cannot_index_with_type_s, sizeof(__pyx_k_Cannot_index_with_type_s), 0, 0, 1, 0}, - {&__pyx_n_s_ComparERSub, __pyx_k_ComparERSub, sizeof(__pyx_k_ComparERSub), 0, 0, 1, 1}, - {&__pyx_n_u_ComparERSub, __pyx_k_ComparERSub, sizeof(__pyx_k_ComparERSub), 0, 1, 0, 1}, - {&__pyx_n_s_ComparERSub___init, __pyx_k_ComparERSub___init, sizeof(__pyx_k_ComparERSub___init), 0, 0, 1, 1}, - {&__pyx_n_s_ComparERSub__build_chrono_purcha, __pyx_k_ComparERSub__build_chrono_purcha, sizeof(__pyx_k_ComparERSub__build_chrono_purcha), 0, 0, 1, 1}, - {&__pyx_n_s_ComparERSub__build_data, __pyx_k_ComparERSub__build_data, sizeof(__pyx_k_ComparERSub__build_data), 0, 0, 1, 1}, - {&__pyx_n_s_ComparERSub__build_item_quality, __pyx_k_ComparERSub__build_item_quality, sizeof(__pyx_k_ComparERSub__build_item_quality), 0, 0, 1, 1}, - {&__pyx_n_s_ComparERSub__fit_mter, __pyx_k_ComparERSub__fit_mter, sizeof(__pyx_k_ComparERSub__fit_mter), 0, 0, 1, 1}, - {&__pyx_n_s_ComparERSub_fit, __pyx_k_ComparERSub_fit, sizeof(__pyx_k_ComparERSub_fit), 0, 0, 1, 1}, - {&__pyx_n_s_ComparERSub_rank, __pyx_k_ComparERSub_rank, sizeof(__pyx_k_ComparERSub_rank), 0, 0, 1, 1}, - {&__pyx_kp_u_Compute_X, __pyx_k_Compute_X, sizeof(__pyx_k_Compute_X), 0, 1, 0, 0}, - {&__pyx_kp_u_Compute_YI, __pyx_k_Compute_YI, sizeof(__pyx_k_Compute_YI), 0, 1, 0, 0}, - {&__pyx_kp_u_Compute_YU, __pyx_k_Compute_YU, sizeof(__pyx_k_Compute_YU), 0, 1, 0, 0}, - {&__pyx_kp_u_Count_aspects, __pyx_k_Count_aspects, sizeof(__pyx_k_Count_aspects), 0, 1, 0, 0}, - {&__pyx_n_s_Counter, __pyx_k_Counter, sizeof(__pyx_k_Counter), 0, 0, 1, 1}, - {&__pyx_n_s_Ellipsis, __pyx_k_Ellipsis, sizeof(__pyx_k_Ellipsis), 0, 0, 1, 1}, - {&__pyx_kp_s_Empty_shape_tuple_for_cython_arr, __pyx_k_Empty_shape_tuple_for_cython_arr, sizeof(__pyx_k_Empty_shape_tuple_for_cython_arr), 0, 0, 1, 0}, - {&__pyx_kp_u_Enumerate_index, __pyx_k_Enumerate_index, sizeof(__pyx_k_Enumerate_index), 0, 1, 0, 0}, - {&__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_k_Expected_at_least_d_argument_s_g, sizeof(__pyx_k_Expected_at_least_d_argument_s_g), 0, 0, 1, 0}, - {&__pyx_kp_s_Explainable_Recommendation_with, __pyx_k_Explainable_Recommendation_with, sizeof(__pyx_k_Explainable_Recommendation_with), 0, 0, 1, 0}, - {&__pyx_kp_s_Function_call_with_ambiguous_arg, __pyx_k_Function_call_with_ambiguous_arg, sizeof(__pyx_k_Function_call_with_ambiguous_arg), 0, 0, 1, 0}, - {&__pyx_n_s_G1, __pyx_k_G1, sizeof(__pyx_k_G1), 0, 0, 1, 1}, - {&__pyx_n_s_G2, __pyx_k_G2, sizeof(__pyx_k_G2), 0, 0, 1, 1}, - {&__pyx_n_s_G3, __pyx_k_G3, sizeof(__pyx_k_G3), 0, 0, 1, 1}, - {&__pyx_kp_u_Get_purchased_pairs, __pyx_k_Get_purchased_pairs, sizeof(__pyx_k_Get_purchased_pairs), 0, 1, 0, 0}, - {&__pyx_kp_u_Get_skyline_aspects, __pyx_k_Get_skyline_aspects, sizeof(__pyx_k_Get_skyline_aspects), 0, 1, 0, 0}, - {&__pyx_n_s_I, __pyx_k_I, sizeof(__pyx_k_I), 0, 0, 1, 1}, - {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, - {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_k_Incompatible_checksums_0x_x_vs_0, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0), 0, 0, 1, 0}, - {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1}, - {&__pyx_kp_s_Indirect_dimensions_not_supporte, __pyx_k_Indirect_dimensions_not_supporte, sizeof(__pyx_k_Indirect_dimensions_not_supporte), 0, 0, 1, 0}, - {&__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_k_Invalid_mode_expected_c_or_fortr, sizeof(__pyx_k_Invalid_mode_expected_c_or_fortr), 0, 0, 1, 0}, - {&__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_k_Invalid_shape_in_axis_d_d, sizeof(__pyx_k_Invalid_shape_in_axis_d_d), 0, 0, 1, 0}, - {&__pyx_n_s_MTER, __pyx_k_MTER, sizeof(__pyx_k_MTER), 0, 0, 1, 1}, - {&__pyx_kp_u_Mc_Nc_MN, __pyx_k_Mc_Nc_MN, sizeof(__pyx_k_Mc_Nc_MN), 0, 1, 0, 0}, - {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1}, - {&__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_k_MemoryView_of_r_at_0x_x, sizeof(__pyx_k_MemoryView_of_r_at_0x_x), 0, 0, 1, 0}, - {&__pyx_kp_s_MemoryView_of_r_object, __pyx_k_MemoryView_of_r_object, sizeof(__pyx_k_MemoryView_of_r_object), 0, 0, 1, 0}, - {&__pyx_kp_s_No_matching_signature_found, __pyx_k_No_matching_signature_found, sizeof(__pyx_k_No_matching_signature_found), 0, 0, 1, 0}, - {&__pyx_n_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1}, - {&__pyx_n_s_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 1, 1}, - {&__pyx_kp_u_Optimization_finished, __pyx_k_Optimization_finished, sizeof(__pyx_k_Optimization_finished), 0, 1, 0, 0}, - {&__pyx_n_s_OrderedDict, __pyx_k_OrderedDict, sizeof(__pyx_k_OrderedDict), 0, 0, 1, 1}, - {&__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_k_Out_of_bounds_on_buffer_access_a, sizeof(__pyx_k_Out_of_bounds_on_buffer_access_a), 0, 0, 1, 0}, - {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, - {&__pyx_n_s_Recommender, __pyx_k_Recommender, sizeof(__pyx_k_Recommender), 0, 0, 1, 1}, - {&__pyx_n_s_ScoreException, __pyx_k_ScoreException, sizeof(__pyx_k_ScoreException), 0, 0, 1, 1}, - {&__pyx_kp_u_Statistics_aspect_pairs, __pyx_k_Statistics_aspect_pairs, sizeof(__pyx_k_Statistics_aspect_pairs), 0, 1, 0, 0}, - {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, - {&__pyx_n_s_U, __pyx_k_U, sizeof(__pyx_k_U), 0, 0, 1, 1}, - {&__pyx_kp_s_Unable_to_convert_item_to_object, __pyx_k_Unable_to_convert_item_to_object, sizeof(__pyx_k_Unable_to_convert_item_to_object), 0, 0, 1, 0}, - {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, - {&__pyx_n_s_View_MemoryView, __pyx_k_View_MemoryView, sizeof(__pyx_k_View_MemoryView), 0, 0, 1, 1}, - {&__pyx_n_s_X, __pyx_k_X, sizeof(__pyx_k_X), 0, 0, 1, 1}, - {&__pyx_n_s_X_aids, __pyx_k_X_aids, sizeof(__pyx_k_X_aids), 0, 0, 1, 1}, - {&__pyx_n_s_X_iids, __pyx_k_X_iids, sizeof(__pyx_k_X_iids), 0, 0, 1, 1}, - {&__pyx_n_s_X_uids, __pyx_k_X_uids, sizeof(__pyx_k_X_uids), 0, 0, 1, 1}, - {&__pyx_n_s_Y, __pyx_k_Y, sizeof(__pyx_k_Y), 0, 0, 1, 1}, - {&__pyx_n_s_YI, __pyx_k_YI, sizeof(__pyx_k_YI), 0, 0, 1, 1}, - {&__pyx_n_s_YI_aids, __pyx_k_YI_aids, sizeof(__pyx_k_YI_aids), 0, 0, 1, 1}, - {&__pyx_n_s_YI_iids, __pyx_k_YI_iids, sizeof(__pyx_k_YI_iids), 0, 0, 1, 1}, - {&__pyx_n_s_YI_oids, __pyx_k_YI_oids, sizeof(__pyx_k_YI_oids), 0, 0, 1, 1}, - {&__pyx_n_s_YU, __pyx_k_YU, sizeof(__pyx_k_YU), 0, 0, 1, 1}, - {&__pyx_n_s_YU_aids, __pyx_k_YU_aids, sizeof(__pyx_k_YU_aids), 0, 0, 1, 1}, - {&__pyx_n_s_YU_oids, __pyx_k_YU_oids, sizeof(__pyx_k_YU_oids), 0, 0, 1, 1}, - {&__pyx_n_s_YU_uids, __pyx_k_YU_uids, sizeof(__pyx_k_YU_uids), 0, 0, 1, 1}, - {&__pyx_kp_u__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 1, 0, 0}, - {&__pyx_kp_u__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 1, 0, 0}, - {&__pyx_n_s__35, __pyx_k__35, sizeof(__pyx_k__35), 0, 0, 1, 1}, - {&__pyx_n_s__39, __pyx_k__39, sizeof(__pyx_k__39), 0, 0, 1, 1}, - {&__pyx_kp_s__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 0, 1, 0}, - {&__pyx_kp_s__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 0, 1, 0}, - {&__pyx_n_s_a_idx, __pyx_k_a_idx, sizeof(__pyx_k_a_idx), 0, 0, 1, 1}, - {&__pyx_n_s_a_ji, __pyx_k_a_ji, sizeof(__pyx_k_a_ji), 0, 0, 1, 1}, - {&__pyx_kp_u_abc_a_bc, __pyx_k_abc_a_bc, sizeof(__pyx_k_abc_a_bc), 0, 1, 0, 0}, - {&__pyx_n_s_aid, __pyx_k_aid, sizeof(__pyx_k_aid), 0, 0, 1, 1}, - {&__pyx_n_s_allocate_buffer, __pyx_k_allocate_buffer, sizeof(__pyx_k_allocate_buffer), 0, 0, 1, 1}, - {&__pyx_n_s_alpha, __pyx_k_alpha, sizeof(__pyx_k_alpha), 0, 0, 1, 1}, - {&__pyx_n_s_append, __pyx_k_append, sizeof(__pyx_k_append), 0, 0, 1, 1}, - {&__pyx_n_s_arange, __pyx_k_arange, sizeof(__pyx_k_arange), 0, 0, 1, 1}, - {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, - {&__pyx_n_s_argsort, __pyx_k_argsort, sizeof(__pyx_k_argsort), 0, 0, 1, 1}, - {&__pyx_n_s_array, __pyx_k_array, sizeof(__pyx_k_array), 0, 0, 1, 1}, - {&__pyx_n_s_asarray, __pyx_k_asarray, sizeof(__pyx_k_asarray), 0, 0, 1, 1}, - {&__pyx_n_s_aspect_bpr_loss, __pyx_k_aspect_bpr_loss, sizeof(__pyx_k_aspect_bpr_loss), 0, 0, 1, 1}, - {&__pyx_n_s_aspect_correct, __pyx_k_aspect_correct, sizeof(__pyx_k_aspect_correct), 0, 0, 1, 1}, - {&__pyx_n_s_aspect_idx, __pyx_k_aspect_idx, sizeof(__pyx_k_aspect_idx), 0, 0, 1, 1}, - {&__pyx_n_s_aspect_indices, __pyx_k_aspect_indices, sizeof(__pyx_k_aspect_indices), 0, 0, 1, 1}, - {&__pyx_n_s_astype, __pyx_k_astype, sizeof(__pyx_k_astype), 0, 0, 1, 1}, - {&__pyx_kp_u_avg, __pyx_k_avg, sizeof(__pyx_k_avg), 0, 1, 0, 0}, - {&__pyx_n_s_avg_sentiment, __pyx_k_avg_sentiment, sizeof(__pyx_k_avg_sentiment), 0, 0, 1, 1}, - {&__pyx_n_s_axis, __pyx_k_axis, sizeof(__pyx_k_axis), 0, 0, 1, 1}, - {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1}, - {&__pyx_kp_u_bc_Mb_Mc, __pyx_k_bc_Mb_Mc, sizeof(__pyx_k_bc_Mb_Mc), 0, 1, 0, 0}, - {&__pyx_n_s_bpr_loss, __pyx_k_bpr_loss, sizeof(__pyx_k_bpr_loss), 0, 0, 1, 1}, - {&__pyx_n_u_bpr_loss, __pyx_k_bpr_loss, sizeof(__pyx_k_bpr_loss), 0, 1, 0, 1}, - {&__pyx_n_s_build_chrono_purchased_pairs, __pyx_k_build_chrono_purchased_pairs, sizeof(__pyx_k_build_chrono_purchased_pairs), 0, 0, 1, 1}, - {&__pyx_n_s_build_data, __pyx_k_build_data, sizeof(__pyx_k_build_data), 0, 0, 1, 1}, - {&__pyx_n_s_build_item_quality_matrix, __pyx_k_build_item_quality_matrix, sizeof(__pyx_k_build_item_quality_matrix), 0, 0, 1, 1}, - {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1}, - {&__pyx_n_u_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 1, 0, 1}, - {&__pyx_n_s_chrono_purchased_pairs, __pyx_k_chrono_purchased_pairs, sizeof(__pyx_k_chrono_purchased_pairs), 0, 0, 1, 1}, - {&__pyx_n_s_chrono_user_data, __pyx_k_chrono_user_data, sizeof(__pyx_k_chrono_user_data), 0, 0, 1, 1}, - {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1}, - {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, - {&__pyx_n_s_collections, __pyx_k_collections, sizeof(__pyx_k_collections), 0, 0, 1, 1}, - {&__pyx_n_s_combinations, __pyx_k_combinations, sizeof(__pyx_k_combinations), 0, 0, 1, 1}, - {&__pyx_n_s_common_aspect_counts, __pyx_k_common_aspect_counts, sizeof(__pyx_k_common_aspect_counts), 0, 0, 1, 1}, - {&__pyx_kp_u_comparable_pairs, __pyx_k_comparable_pairs, sizeof(__pyx_k_comparable_pairs), 0, 1, 0, 0}, - {&__pyx_n_s_compute_attention_score, __pyx_k_compute_attention_score, sizeof(__pyx_k_compute_attention_score), 0, 0, 1, 1}, - {&__pyx_n_s_compute_quality_score, __pyx_k_compute_quality_score, sizeof(__pyx_k_compute_quality_score), 0, 0, 1, 1}, - {&__pyx_kp_s_contiguous_and_direct, __pyx_k_contiguous_and_direct, sizeof(__pyx_k_contiguous_and_direct), 0, 0, 1, 0}, - {&__pyx_kp_s_contiguous_and_indirect, __pyx_k_contiguous_and_indirect, sizeof(__pyx_k_contiguous_and_indirect), 0, 0, 1, 0}, - {&__pyx_n_s_cornac_models_comparer_recom_com, __pyx_k_cornac_models_comparer_recom_com, sizeof(__pyx_k_cornac_models_comparer_recom_com), 0, 0, 1, 1}, - {&__pyx_kp_s_cornac_models_comparer_recom_com_2, __pyx_k_cornac_models_comparer_recom_com_2, sizeof(__pyx_k_cornac_models_comparer_recom_com_2), 0, 0, 1, 0}, - {&__pyx_n_s_correct, __pyx_k_correct, sizeof(__pyx_k_correct), 0, 0, 1, 1}, - {&__pyx_n_u_correct, __pyx_k_correct, sizeof(__pyx_k_correct), 0, 1, 0, 1}, - {&__pyx_n_s_count, __pyx_k_count, sizeof(__pyx_k_count), 0, 0, 1, 1}, - {&__pyx_n_s_counted_pairs, __pyx_k_counted_pairs, sizeof(__pyx_k_counted_pairs), 0, 0, 1, 1}, - {&__pyx_n_s_csr_matrix, __pyx_k_csr_matrix, sizeof(__pyx_k_csr_matrix), 0, 0, 1, 1}, - {&__pyx_n_u_d, __pyx_k_d, sizeof(__pyx_k_d), 0, 1, 0, 1}, - {&__pyx_n_s_data_set, __pyx_k_data_set, sizeof(__pyx_k_data_set), 0, 0, 1, 1}, - {&__pyx_n_s_defaults, __pyx_k_defaults, sizeof(__pyx_k_defaults), 0, 0, 1, 1}, - {&__pyx_n_s_del_a, __pyx_k_del_a, sizeof(__pyx_k_del_a), 0, 0, 1, 1}, - {&__pyx_n_s_del_a_reg, __pyx_k_del_a_reg, sizeof(__pyx_k_del_a_reg), 0, 0, 1, 1}, - {&__pyx_n_s_del_aspect_bpr, __pyx_k_del_aspect_bpr, sizeof(__pyx_k_del_aspect_bpr), 0, 0, 1, 1}, - {&__pyx_n_s_del_bpr, __pyx_k_del_bpr, sizeof(__pyx_k_del_bpr), 0, 0, 1, 1}, - {&__pyx_n_s_del_g1, __pyx_k_del_g1, sizeof(__pyx_k_del_g1), 0, 0, 1, 1}, - {&__pyx_n_s_del_g1_reg, __pyx_k_del_g1_reg, sizeof(__pyx_k_del_g1_reg), 0, 0, 1, 1}, - {&__pyx_n_s_del_g2, __pyx_k_del_g2, sizeof(__pyx_k_del_g2), 0, 0, 1, 1}, - {&__pyx_n_s_del_g2_reg, __pyx_k_del_g2_reg, sizeof(__pyx_k_del_g2_reg), 0, 0, 1, 1}, - {&__pyx_n_s_del_g3, __pyx_k_del_g3, sizeof(__pyx_k_del_g3), 0, 0, 1, 1}, - {&__pyx_n_s_del_g3_reg, __pyx_k_del_g3_reg, sizeof(__pyx_k_del_g3_reg), 0, 0, 1, 1}, - {&__pyx_n_s_del_i, __pyx_k_del_i, sizeof(__pyx_k_del_i), 0, 0, 1, 1}, - {&__pyx_n_s_del_i_reg, __pyx_k_del_i_reg, sizeof(__pyx_k_del_i_reg), 0, 0, 1, 1}, - {&__pyx_n_s_del_o, __pyx_k_del_o, sizeof(__pyx_k_del_o), 0, 0, 1, 1}, - {&__pyx_n_s_del_o_reg, __pyx_k_del_o_reg, sizeof(__pyx_k_del_o_reg), 0, 0, 1, 1}, - {&__pyx_n_s_del_sqerror, __pyx_k_del_sqerror, sizeof(__pyx_k_del_sqerror), 0, 0, 1, 1}, - {&__pyx_n_s_del_u, __pyx_k_del_u, sizeof(__pyx_k_del_u), 0, 0, 1, 1}, - {&__pyx_n_s_del_u_reg, __pyx_k_del_u_reg, sizeof(__pyx_k_del_u_reg), 0, 0, 1, 1}, - {&__pyx_n_s_desc, __pyx_k_desc, sizeof(__pyx_k_desc), 0, 0, 1, 1}, - {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, - {&__pyx_n_s_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 0, 1, 1}, - {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, - {&__pyx_n_s_double, __pyx_k_double, sizeof(__pyx_k_double), 0, 0, 1, 1}, - {&__pyx_kp_s_double_int, __pyx_k_double_int, sizeof(__pyx_k_double_int), 0, 0, 1, 0}, - {&__pyx_kp_s_double_long, __pyx_k_double_long, sizeof(__pyx_k_double_long), 0, 0, 1, 0}, - {&__pyx_kp_s_double_short, __pyx_k_double_short, sizeof(__pyx_k_double_short), 0, 0, 1, 0}, - {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, - {&__pyx_n_s_dtype_is_object, __pyx_k_dtype_is_object, sizeof(__pyx_k_dtype_is_object), 0, 0, 1, 1}, - {&__pyx_n_s_earlier_indices, __pyx_k_earlier_indices, sizeof(__pyx_k_earlier_indices), 0, 0, 1, 1}, - {&__pyx_n_s_earlier_item_idx, __pyx_k_earlier_item_idx, sizeof(__pyx_k_earlier_item_idx), 0, 0, 1, 1}, - {&__pyx_kp_u_earlier_later_pairs, __pyx_k_earlier_later_pairs, sizeof(__pyx_k_earlier_later_pairs), 0, 1, 0, 0}, - {&__pyx_n_s_ediff1d, __pyx_k_ediff1d, sizeof(__pyx_k_ediff1d), 0, 0, 1, 1}, - {&__pyx_n_s_einsum, __pyx_k_einsum, sizeof(__pyx_k_einsum), 0, 0, 1, 1}, - {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1}, - {&__pyx_n_s_enter, __pyx_k_enter, sizeof(__pyx_k_enter), 0, 0, 1, 1}, - {&__pyx_n_s_enum_window, __pyx_k_enum_window, sizeof(__pyx_k_enum_window), 0, 0, 1, 1}, - {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1}, - {&__pyx_n_s_epoch, __pyx_k_epoch, sizeof(__pyx_k_epoch), 0, 0, 1, 1}, - {&__pyx_n_s_eps, __pyx_k_eps, sizeof(__pyx_k_eps), 0, 0, 1, 1}, - {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, - {&__pyx_n_s_exception, __pyx_k_exception, sizeof(__pyx_k_exception), 0, 0, 1, 1}, - {&__pyx_n_s_exit, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1}, - {&__pyx_n_s_fill, __pyx_k_fill, sizeof(__pyx_k_fill), 0, 0, 1, 1}, - {&__pyx_n_s_fit, __pyx_k_fit, sizeof(__pyx_k_fit), 0, 0, 1, 1}, - {&__pyx_n_s_fit_mter, __pyx_k_fit_mter, sizeof(__pyx_k_fit_mter), 0, 0, 1, 1}, - {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1}, - {&__pyx_n_s_flatten, __pyx_k_flatten, sizeof(__pyx_k_flatten), 0, 0, 1, 1}, - {&__pyx_n_s_float, __pyx_k_float, sizeof(__pyx_k_float), 0, 0, 1, 1}, - {&__pyx_n_s_float32, __pyx_k_float32, sizeof(__pyx_k_float32), 0, 0, 1, 1}, - {&__pyx_n_s_float64, __pyx_k_float64, sizeof(__pyx_k_float64), 0, 0, 1, 1}, - {&__pyx_kp_s_float_int, __pyx_k_float_int, sizeof(__pyx_k_float_int), 0, 0, 1, 0}, - {&__pyx_kp_s_float_long, __pyx_k_float_long, sizeof(__pyx_k_float_long), 0, 0, 1, 0}, - {&__pyx_kp_s_float_short, __pyx_k_float_short, sizeof(__pyx_k_float_short), 0, 0, 1, 0}, - {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, - {&__pyx_n_s_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 0, 1, 1}, - {&__pyx_n_u_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 1, 0, 1}, - {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, - {&__pyx_n_s_get_rng, __pyx_k_get_rng, sizeof(__pyx_k_get_rng), 0, 0, 1, 1}, - {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, - {&__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 0, 1, 0}, - {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, - {&__pyx_n_s_i_idx, __pyx_k_i_idx, sizeof(__pyx_k_i_idx), 0, 0, 1, 1}, - {&__pyx_n_s_i_ij, __pyx_k_i_ij, sizeof(__pyx_k_i_ij), 0, 0, 1, 1}, - {&__pyx_n_s_i_index, __pyx_k_i_index, sizeof(__pyx_k_i_index), 0, 0, 1, 1}, - {&__pyx_n_s_i_indices, __pyx_k_i_indices, sizeof(__pyx_k_i_indices), 0, 0, 1, 1}, - {&__pyx_n_s_i_score, __pyx_k_i_score, sizeof(__pyx_k_i_score), 0, 0, 1, 1}, - {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, - {&__pyx_n_s_idx, __pyx_k_idx, sizeof(__pyx_k_idx), 0, 0, 1, 1}, - {&__pyx_n_s_iid, __pyx_k_iid, sizeof(__pyx_k_iid), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_indices, __pyx_k_indices, sizeof(__pyx_k_indices), 0, 0, 1, 1}, - {&__pyx_n_s_indptr, __pyx_k_indptr, sizeof(__pyx_k_indptr), 0, 0, 1, 1}, - {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1}, - {&__pyx_n_s_init_2, __pyx_k_init_2, sizeof(__pyx_k_init_2), 0, 0, 1, 1}, - {&__pyx_n_s_init_params, __pyx_k_init_params, sizeof(__pyx_k_init_params), 0, 0, 1, 1}, - {&__pyx_n_s_int, __pyx_k_int, sizeof(__pyx_k_int), 0, 0, 1, 1}, - {&__pyx_n_s_int32, __pyx_k_int32, sizeof(__pyx_k_int32), 0, 0, 1, 1}, - {&__pyx_n_s_intp, __pyx_k_intp, sizeof(__pyx_k_intp), 0, 0, 1, 1}, - {&__pyx_n_s_is_unk_item, __pyx_k_is_unk_item, sizeof(__pyx_k_is_unk_item), 0, 0, 1, 1}, - {&__pyx_n_s_is_unk_user, __pyx_k_is_unk_user, sizeof(__pyx_k_is_unk_user), 0, 0, 1, 1}, - {&__pyx_n_s_item_aspect_count, __pyx_k_item_aspect_count, sizeof(__pyx_k_item_aspect_count), 0, 0, 1, 1}, - {&__pyx_n_s_item_aspect_opinion, __pyx_k_item_aspect_opinion, sizeof(__pyx_k_item_aspect_opinion), 0, 0, 1, 1}, - {&__pyx_n_s_item_aspects, __pyx_k_item_aspects, sizeof(__pyx_k_item_aspects), 0, 0, 1, 1}, - {&__pyx_n_s_item_ids, __pyx_k_item_ids, sizeof(__pyx_k_item_ids), 0, 0, 1, 1}, - {&__pyx_n_s_item_rank, __pyx_k_item_rank, sizeof(__pyx_k_item_rank), 0, 0, 1, 1}, - {&__pyx_n_s_item_scores, __pyx_k_item_scores, sizeof(__pyx_k_item_scores), 0, 0, 1, 1}, - {&__pyx_n_s_item_sentiment, __pyx_k_item_sentiment, sizeof(__pyx_k_item_sentiment), 0, 0, 1, 1}, - {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1}, - {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1}, - {&__pyx_kp_s_itemsize_0_for_cython_array, __pyx_k_itemsize_0_for_cython_array, sizeof(__pyx_k_itemsize_0_for_cython_array), 0, 0, 1, 0}, - {&__pyx_n_s_itertools, __pyx_k_itertools, sizeof(__pyx_k_itertools), 0, 0, 1, 1}, - {&__pyx_n_s_j, __pyx_k_j, sizeof(__pyx_k_j), 0, 0, 1, 1}, - {&__pyx_n_s_j_idx, __pyx_k_j_idx, sizeof(__pyx_k_j_idx), 0, 0, 1, 1}, - {&__pyx_n_s_j_index, __pyx_k_j_index, sizeof(__pyx_k_j_index), 0, 0, 1, 1}, - {&__pyx_n_s_j_score, __pyx_k_j_score, sizeof(__pyx_k_j_score), 0, 0, 1, 1}, - {&__pyx_n_s_jdx, __pyx_k_jdx, sizeof(__pyx_k_jdx), 0, 0, 1, 1}, - {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1}, - {&__pyx_n_s_key, __pyx_k_key, sizeof(__pyx_k_key), 0, 0, 1, 1}, - {&__pyx_n_s_keys, __pyx_k_keys, sizeof(__pyx_k_keys), 0, 0, 1, 1}, - {&__pyx_n_s_kind, __pyx_k_kind, sizeof(__pyx_k_kind), 0, 0, 1, 1}, - {&__pyx_n_s_kwargs, __pyx_k_kwargs, sizeof(__pyx_k_kwargs), 0, 0, 1, 1}, - {&__pyx_n_s_lambda_bpr, __pyx_k_lambda_bpr, sizeof(__pyx_k_lambda_bpr), 0, 0, 1, 1}, - {&__pyx_n_s_lambda_d, __pyx_k_lambda_d, sizeof(__pyx_k_lambda_d), 0, 0, 1, 1}, - {&__pyx_n_s_lambda_reg, __pyx_k_lambda_reg, sizeof(__pyx_k_lambda_reg), 0, 0, 1, 1}, - {&__pyx_n_s_later_indices, __pyx_k_later_indices, sizeof(__pyx_k_later_indices), 0, 0, 1, 1}, - {&__pyx_n_s_later_item_idx, __pyx_k_later_item_idx, sizeof(__pyx_k_later_item_idx), 0, 0, 1, 1}, - {&__pyx_n_s_ld_bpr, __pyx_k_ld_bpr, sizeof(__pyx_k_ld_bpr), 0, 0, 1, 1}, - {&__pyx_n_s_ld_reg, __pyx_k_ld_reg, sizeof(__pyx_k_ld_reg), 0, 0, 1, 1}, - {&__pyx_n_s_long, __pyx_k_long, sizeof(__pyx_k_long), 0, 0, 1, 1}, - {&__pyx_n_s_loss, __pyx_k_loss, sizeof(__pyx_k_loss), 0, 0, 1, 1}, - {&__pyx_n_u_loss, __pyx_k_loss, sizeof(__pyx_k_loss), 0, 1, 0, 1}, - {&__pyx_n_s_lr, __pyx_k_lr, sizeof(__pyx_k_lr), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_map_aspect_id, __pyx_k_map_aspect_id, sizeof(__pyx_k_map_aspect_id), 0, 0, 1, 1}, - {&__pyx_n_s_map_iid, __pyx_k_map_iid, sizeof(__pyx_k_map_iid), 0, 0, 1, 1}, - {&__pyx_kp_u_max, __pyx_k_max, sizeof(__pyx_k_max), 0, 1, 0, 0}, - {&__pyx_n_s_max_2, __pyx_k_max_2, sizeof(__pyx_k_max_2), 0, 0, 1, 1}, - {&__pyx_n_s_max_iter, __pyx_k_max_iter, sizeof(__pyx_k_max_iter), 0, 0, 1, 1}, - {&__pyx_n_s_mean, __pyx_k_mean, sizeof(__pyx_k_mean), 0, 0, 1, 1}, - {&__pyx_n_s_memview, __pyx_k_memview, sizeof(__pyx_k_memview), 0, 0, 1, 1}, - {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, - {&__pyx_kp_u_min, __pyx_k_min, sizeof(__pyx_k_min), 0, 1, 0, 0}, - {&__pyx_n_s_min_2, __pyx_k_min_2, sizeof(__pyx_k_min_2), 0, 0, 1, 1}, - {&__pyx_n_s_min_common_freq, __pyx_k_min_common_freq, sizeof(__pyx_k_min_common_freq), 0, 0, 1, 1}, - {&__pyx_n_s_min_pair_freq, __pyx_k_min_pair_freq, sizeof(__pyx_k_min_pair_freq), 0, 0, 1, 1}, - {&__pyx_n_s_min_user_freq, __pyx_k_min_user_freq, sizeof(__pyx_k_min_user_freq), 0, 0, 1, 1}, - {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, - {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, - {&__pyx_n_s_most_common, __pyx_k_most_common, sizeof(__pyx_k_most_common), 0, 0, 1, 1}, - {&__pyx_n_s_mp, __pyx_k_mp, sizeof(__pyx_k_mp), 0, 0, 1, 1}, - {&__pyx_n_s_mter, __pyx_k_mter, sizeof(__pyx_k_mter), 0, 0, 1, 1}, - {&__pyx_n_s_multiprocessing, __pyx_k_multiprocessing, sizeof(__pyx_k_multiprocessing), 0, 0, 1, 1}, - {&__pyx_n_s_n_aspect_factors, __pyx_k_n_aspect_factors, sizeof(__pyx_k_n_aspect_factors), 0, 0, 1, 1}, - {&__pyx_n_s_n_aspects, __pyx_k_n_aspects, sizeof(__pyx_k_n_aspects), 0, 0, 1, 1}, - {&__pyx_n_s_n_bpr_samples, __pyx_k_n_bpr_samples, sizeof(__pyx_k_n_bpr_samples), 0, 0, 1, 1}, - {&__pyx_n_s_n_element_samples, __pyx_k_n_element_samples, sizeof(__pyx_k_n_element_samples), 0, 0, 1, 1}, - {&__pyx_n_s_n_item_factors, __pyx_k_n_item_factors, sizeof(__pyx_k_n_item_factors), 0, 0, 1, 1}, - {&__pyx_n_s_n_items, __pyx_k_n_items, sizeof(__pyx_k_n_items), 0, 0, 1, 1}, - {&__pyx_n_s_n_opinion_factors, __pyx_k_n_opinion_factors, sizeof(__pyx_k_n_opinion_factors), 0, 0, 1, 1}, - {&__pyx_n_s_n_opinions, __pyx_k_n_opinions, sizeof(__pyx_k_n_opinions), 0, 0, 1, 1}, - {&__pyx_n_s_n_pair_samples, __pyx_k_n_pair_samples, sizeof(__pyx_k_n_pair_samples), 0, 0, 1, 1}, - {&__pyx_n_s_n_threads, __pyx_k_n_threads, sizeof(__pyx_k_n_threads), 0, 0, 1, 1}, - {&__pyx_n_s_n_top_aspects, __pyx_k_n_top_aspects, sizeof(__pyx_k_n_top_aspects), 0, 0, 1, 1}, - {&__pyx_n_s_n_user_factors, __pyx_k_n_user_factors, sizeof(__pyx_k_n_user_factors), 0, 0, 1, 1}, - {&__pyx_n_s_n_users, __pyx_k_n_users, sizeof(__pyx_k_n_users), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1}, - {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 1}, - {&__pyx_n_s_neg_item_ids, __pyx_k_neg_item_ids, sizeof(__pyx_k_neg_item_ids), 0, 0, 1, 1}, - {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, - {&__pyx_kp_s_no_default___reduce___due_to_non, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0}, - {&__pyx_kp_u_not_dominated_pairs, __pyx_k_not_dominated_pairs, sizeof(__pyx_k_not_dominated_pairs), 0, 1, 0, 0}, - {&__pyx_n_s_not_dominated_pairs_2, __pyx_k_not_dominated_pairs_2, sizeof(__pyx_k_not_dominated_pairs_2), 0, 0, 1, 1}, - {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, - {&__pyx_n_s_num_aspects, __pyx_k_num_aspects, sizeof(__pyx_k_num_aspects), 0, 0, 1, 1}, - {&__pyx_n_s_num_bpr_samples, __pyx_k_num_bpr_samples, sizeof(__pyx_k_num_bpr_samples), 0, 0, 1, 1}, - {&__pyx_n_s_num_items, __pyx_k_num_items, sizeof(__pyx_k_num_items), 0, 0, 1, 1}, - {&__pyx_n_s_num_opinions, __pyx_k_num_opinions, sizeof(__pyx_k_num_opinions), 0, 0, 1, 1}, - {&__pyx_n_s_num_pair_samples, __pyx_k_num_pair_samples, sizeof(__pyx_k_num_pair_samples), 0, 0, 1, 1}, - {&__pyx_n_s_num_samples, __pyx_k_num_samples, sizeof(__pyx_k_num_samples), 0, 0, 1, 1}, - {&__pyx_n_s_num_users, __pyx_k_num_users, sizeof(__pyx_k_num_users), 0, 0, 1, 1}, - {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, - {&__pyx_kp_u_numpy_core_multiarray_failed_to, __pyx_k_numpy_core_multiarray_failed_to, sizeof(__pyx_k_numpy_core_multiarray_failed_to), 0, 1, 0, 0}, - {&__pyx_kp_u_numpy_core_umath_failed_to_impor, __pyx_k_numpy_core_umath_failed_to_impor, sizeof(__pyx_k_numpy_core_umath_failed_to_impor), 0, 1, 0, 0}, - {&__pyx_n_s_o_idx, __pyx_k_o_idx, sizeof(__pyx_k_o_idx), 0, 0, 1, 1}, - {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1}, - {&__pyx_n_s_oid, __pyx_k_oid, sizeof(__pyx_k_oid), 0, 0, 1, 1}, - {&__pyx_n_s_p_user_indices, __pyx_k_p_user_indices, sizeof(__pyx_k_p_user_indices), 0, 0, 1, 1}, - {&__pyx_n_s_pack, __pyx_k_pack, sizeof(__pyx_k_pack), 0, 0, 1, 1}, - {&__pyx_n_s_pair_counts, __pyx_k_pair_counts, sizeof(__pyx_k_pair_counts), 0, 0, 1, 1}, - {&__pyx_n_s_pair_freq, __pyx_k_pair_freq, sizeof(__pyx_k_pair_freq), 0, 0, 1, 1}, - {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, - {&__pyx_n_s_polarity, __pyx_k_polarity, sizeof(__pyx_k_polarity), 0, 0, 1, 1}, - {&__pyx_n_s_pred, __pyx_k_pred, sizeof(__pyx_k_pred), 0, 0, 1, 1}, - {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, - {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1}, - {&__pyx_n_s_progress, __pyx_k_progress, sizeof(__pyx_k_progress), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_getbuffer, __pyx_k_pyx_getbuffer, sizeof(__pyx_k_pyx_getbuffer), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle_Enum, __pyx_k_pyx_unpickle_Enum, sizeof(__pyx_k_pyx_unpickle_Enum), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, - {&__pyx_n_s_quality_scores, __pyx_k_quality_scores, sizeof(__pyx_k_quality_scores), 0, 0, 1, 1}, - {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, - {&__pyx_n_s_r_values, __pyx_k_r_values, sizeof(__pyx_k_r_values), 0, 0, 1, 1}, - {&__pyx_n_s_randint, __pyx_k_randint, sizeof(__pyx_k_randint), 0, 0, 1, 1}, - {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, - {&__pyx_n_s_rank, __pyx_k_rank, sizeof(__pyx_k_rank), 0, 0, 1, 1}, - {&__pyx_n_s_rating_dict, __pyx_k_rating_dict, sizeof(__pyx_k_rating_dict), 0, 0, 1, 1}, - {&__pyx_n_s_rating_matrix, __pyx_k_rating_matrix, sizeof(__pyx_k_rating_matrix), 0, 0, 1, 1}, - {&__pyx_n_s_rating_scale, __pyx_k_rating_scale, sizeof(__pyx_k_rating_scale), 0, 0, 1, 1}, - {&__pyx_n_s_recommender, __pyx_k_recommender, sizeof(__pyx_k_recommender), 0, 0, 1, 1}, - {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, - {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, - {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, - {&__pyx_n_s_repeat, __pyx_k_repeat, sizeof(__pyx_k_repeat), 0, 0, 1, 1}, - {&__pyx_n_s_reshape, __pyx_k_reshape, sizeof(__pyx_k_reshape), 0, 0, 1, 1}, - {&__pyx_n_s_rng, __pyx_k_rng, sizeof(__pyx_k_rng), 0, 0, 1, 1}, - {&__pyx_n_s_rng_neg, __pyx_k_rng_neg, sizeof(__pyx_k_rng_neg), 0, 0, 1, 1}, - {&__pyx_n_s_rng_pos, __pyx_k_rng_pos, sizeof(__pyx_k_rng_pos), 0, 0, 1, 1}, - {&__pyx_n_s_rng_pos_iao, __pyx_k_rng_pos_iao, sizeof(__pyx_k_rng_pos_iao), 0, 0, 1, 1}, - {&__pyx_n_s_rng_pos_pair, __pyx_k_rng_pos_pair, sizeof(__pyx_k_rng_pos_pair), 0, 0, 1, 1}, - {&__pyx_n_s_rng_pos_uao, __pyx_k_rng_pos_uao, sizeof(__pyx_k_rng_pos_uao), 0, 0, 1, 1}, - {&__pyx_n_s_rng_pos_uia, __pyx_k_rng_pos_uia, sizeof(__pyx_k_rng_pos_uia), 0, 0, 1, 1}, - {&__pyx_n_s_s, __pyx_k_s, sizeof(__pyx_k_s), 0, 0, 1, 1}, - {&__pyx_n_s_scipy_sparse, __pyx_k_scipy_sparse, sizeof(__pyx_k_scipy_sparse), 0, 0, 1, 1}, - {&__pyx_n_s_score, __pyx_k_score, sizeof(__pyx_k_score), 0, 0, 1, 1}, - {&__pyx_n_s_seed, __pyx_k_seed, sizeof(__pyx_k_seed), 0, 0, 1, 1}, - {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, - {&__pyx_n_s_sentiment, __pyx_k_sentiment, sizeof(__pyx_k_sentiment), 0, 0, 1, 1}, - {&__pyx_n_s_sentiment_polarity, __pyx_k_sentiment_polarity, sizeof(__pyx_k_sentiment_polarity), 0, 0, 1, 1}, - {&__pyx_n_s_sentiment_tup_ids_by_item, __pyx_k_sentiment_tup_ids_by_item, sizeof(__pyx_k_sentiment_tup_ids_by_item), 0, 0, 1, 1}, - {&__pyx_n_s_sentiment_tup_ids_by_user, __pyx_k_sentiment_tup_ids_by_user, sizeof(__pyx_k_sentiment_tup_ids_by_user), 0, 0, 1, 1}, - {&__pyx_n_s_set_postfix, __pyx_k_set_postfix, sizeof(__pyx_k_set_postfix), 0, 0, 1, 1}, - {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, - {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, - {&__pyx_n_s_sgrad_A, __pyx_k_sgrad_A, sizeof(__pyx_k_sgrad_A), 0, 0, 1, 1}, - {&__pyx_n_s_sgrad_G1, __pyx_k_sgrad_G1, sizeof(__pyx_k_sgrad_G1), 0, 0, 1, 1}, - {&__pyx_n_s_sgrad_G2, __pyx_k_sgrad_G2, sizeof(__pyx_k_sgrad_G2), 0, 0, 1, 1}, - {&__pyx_n_s_sgrad_G3, __pyx_k_sgrad_G3, sizeof(__pyx_k_sgrad_G3), 0, 0, 1, 1}, - {&__pyx_n_s_sgrad_I, __pyx_k_sgrad_I, sizeof(__pyx_k_sgrad_I), 0, 0, 1, 1}, - {&__pyx_n_s_sgrad_O, __pyx_k_sgrad_O, sizeof(__pyx_k_sgrad_O), 0, 0, 1, 1}, - {&__pyx_n_s_sgrad_U, __pyx_k_sgrad_U, sizeof(__pyx_k_sgrad_U), 0, 0, 1, 1}, - {&__pyx_n_s_shape, __pyx_k_shape, sizeof(__pyx_k_shape), 0, 0, 1, 1}, - {&__pyx_n_s_short, __pyx_k_short, sizeof(__pyx_k_short), 0, 0, 1, 1}, - {&__pyx_n_s_signatures, __pyx_k_signatures, sizeof(__pyx_k_signatures), 0, 0, 1, 1}, - {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1}, - {&__pyx_n_s_skipped, __pyx_k_skipped, sizeof(__pyx_k_skipped), 0, 0, 1, 1}, - {&__pyx_n_u_skipped, __pyx_k_skipped, sizeof(__pyx_k_skipped), 0, 1, 0, 1}, - {&__pyx_n_s_sp, __pyx_k_sp, sizeof(__pyx_k_sp), 0, 0, 1, 1}, - {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1}, - {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1}, - {&__pyx_n_s_start_time, __pyx_k_start_time, sizeof(__pyx_k_start_time), 0, 0, 1, 1}, - {&__pyx_n_s_step, __pyx_k_step, sizeof(__pyx_k_step), 0, 0, 1, 1}, - {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1}, - {&__pyx_kp_s_strided_and_direct, __pyx_k_strided_and_direct, sizeof(__pyx_k_strided_and_direct), 0, 0, 1, 0}, - {&__pyx_kp_s_strided_and_direct_or_indirect, __pyx_k_strided_and_direct_or_indirect, sizeof(__pyx_k_strided_and_direct_or_indirect), 0, 0, 1, 0}, - {&__pyx_kp_s_strided_and_indirect, __pyx_k_strided_and_indirect, sizeof(__pyx_k_strided_and_indirect), 0, 0, 1, 0}, - {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, - {&__pyx_n_s_strip, __pyx_k_strip, sizeof(__pyx_k_strip), 0, 0, 1, 1}, - {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1}, - {&__pyx_n_s_sub_item_ids, __pyx_k_sub_item_ids, sizeof(__pyx_k_sub_item_ids), 0, 0, 1, 1}, - {&__pyx_n_s_sum, __pyx_k_sum, sizeof(__pyx_k_sum), 0, 0, 1, 1}, - {&__pyx_n_s_super, __pyx_k_super, sizeof(__pyx_k_super), 0, 0, 1, 1}, - {&__pyx_n_s_temp, __pyx_k_temp, sizeof(__pyx_k_temp), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_thread_id, __pyx_k_thread_id, sizeof(__pyx_k_thread_id), 0, 0, 1, 1}, - {&__pyx_n_s_time, __pyx_k_time, sizeof(__pyx_k_time), 0, 0, 1, 1}, - {&__pyx_n_s_top_aspect_scores, __pyx_k_top_aspect_scores, sizeof(__pyx_k_top_aspect_scores), 0, 0, 1, 1}, - {&__pyx_n_s_total_sentiment, __pyx_k_total_sentiment, sizeof(__pyx_k_total_sentiment), 0, 0, 1, 1}, - {&__pyx_n_s_total_sentiment_by_aspect, __pyx_k_total_sentiment_by_aspect, sizeof(__pyx_k_total_sentiment_by_aspect), 0, 0, 1, 1}, - {&__pyx_n_s_total_time, __pyx_k_total_time, sizeof(__pyx_k_total_time), 0, 0, 1, 1}, - {&__pyx_n_s_tqdm, __pyx_k_tqdm, sizeof(__pyx_k_tqdm), 0, 0, 1, 1}, - {&__pyx_n_s_train_set, __pyx_k_train_set, sizeof(__pyx_k_train_set), 0, 0, 1, 1}, - {&__pyx_n_s_trainable, __pyx_k_trainable, sizeof(__pyx_k_trainable), 0, 0, 1, 1}, - {&__pyx_n_s_trange, __pyx_k_trange, sizeof(__pyx_k_trange), 0, 0, 1, 1}, - {&__pyx_n_s_ts1, __pyx_k_ts1, sizeof(__pyx_k_ts1), 0, 0, 1, 1}, - {&__pyx_n_s_ts2, __pyx_k_ts2, sizeof(__pyx_k_ts2), 0, 0, 1, 1}, - {&__pyx_n_s_ts3, __pyx_k_ts3, sizeof(__pyx_k_ts3), 0, 0, 1, 1}, - {&__pyx_n_s_tup, __pyx_k_tup, sizeof(__pyx_k_tup), 0, 0, 1, 1}, - {&__pyx_n_s_tup_id, __pyx_k_tup_id, sizeof(__pyx_k_tup_id), 0, 0, 1, 1}, - {&__pyx_n_s_tup_idx, __pyx_k_tup_idx, sizeof(__pyx_k_tup_idx), 0, 0, 1, 1}, - {&__pyx_n_s_u, __pyx_k_u, sizeof(__pyx_k_u), 0, 0, 1, 1}, - {&__pyx_n_s_u_idx, __pyx_k_u_idx, sizeof(__pyx_k_u_idx), 0, 0, 1, 1}, - {&__pyx_n_s_u_indices, __pyx_k_u_indices, sizeof(__pyx_k_u_indices), 0, 0, 1, 1}, - {&__pyx_n_s_uid, __pyx_k_uid, sizeof(__pyx_k_uid), 0, 0, 1, 1}, - {&__pyx_n_s_uir_tuple, __pyx_k_uir_tuple, sizeof(__pyx_k_uir_tuple), 0, 0, 1, 1}, - {&__pyx_kp_s_unable_to_allocate_array_data, __pyx_k_unable_to_allocate_array_data, sizeof(__pyx_k_unable_to_allocate_array_data), 0, 0, 1, 0}, - {&__pyx_kp_s_unable_to_allocate_shape_and_str, __pyx_k_unable_to_allocate_shape_and_str, sizeof(__pyx_k_unable_to_allocate_shape_and_str), 0, 0, 1, 0}, - {&__pyx_n_s_uniform, __pyx_k_uniform, sizeof(__pyx_k_uniform), 0, 0, 1, 1}, - {&__pyx_kp_u_unique_earlier_later_pairs, __pyx_k_unique_earlier_later_pairs, sizeof(__pyx_k_unique_earlier_later_pairs), 0, 1, 0, 0}, - {&__pyx_n_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1}, - {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, - {&__pyx_n_s_use_item_aspect_popularity, __pyx_k_use_item_aspect_popularity, sizeof(__pyx_k_use_item_aspect_popularity), 0, 0, 1, 1}, - {&__pyx_n_s_user_aspect_opinion, __pyx_k_user_aspect_opinion, sizeof(__pyx_k_user_aspect_opinion), 0, 0, 1, 1}, - {&__pyx_n_s_user_counts, __pyx_k_user_counts, sizeof(__pyx_k_user_counts), 0, 0, 1, 1}, - {&__pyx_n_s_user_id, __pyx_k_user_id, sizeof(__pyx_k_user_id), 0, 0, 1, 1}, - {&__pyx_n_s_user_ids, __pyx_k_user_ids, sizeof(__pyx_k_user_ids), 0, 0, 1, 1}, - {&__pyx_n_s_user_idx, __pyx_k_user_idx, sizeof(__pyx_k_user_idx), 0, 0, 1, 1}, - {&__pyx_n_s_user_indices, __pyx_k_user_indices, sizeof(__pyx_k_user_indices), 0, 0, 1, 1}, - {&__pyx_n_s_user_item_aspect, __pyx_k_user_item_aspect, sizeof(__pyx_k_user_item_aspect), 0, 0, 1, 1}, - {&__pyx_n_s_user_sentiment, __pyx_k_user_sentiment, sizeof(__pyx_k_user_sentiment), 0, 0, 1, 1}, - {&__pyx_n_s_utils, __pyx_k_utils, sizeof(__pyx_k_utils), 0, 0, 1, 1}, - {&__pyx_n_s_utils_init_utils, __pyx_k_utils_init_utils, sizeof(__pyx_k_utils_init_utils), 0, 0, 1, 1}, - {&__pyx_n_s_val_set, __pyx_k_val_set, sizeof(__pyx_k_val_set), 0, 0, 1, 1}, - {&__pyx_n_s_values, __pyx_k_values, sizeof(__pyx_k_values), 0, 0, 1, 1}, - {&__pyx_n_s_verbose, __pyx_k_verbose, sizeof(__pyx_k_verbose), 0, 0, 1, 1}, - {&__pyx_n_s_window, __pyx_k_window, sizeof(__pyx_k_window), 0, 0, 1, 1}, - {&__pyx_n_s_z, __pyx_k_z, sizeof(__pyx_k_z), 0, 0, 1, 1}, - {&__pyx_n_s_zeros_like, __pyx_k_zeros_like, sizeof(__pyx_k_zeros_like), 0, 0, 1, 1}, - {&__pyx_n_s_zip, __pyx_k_zip, sizeof(__pyx_k_zip), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_, __pyx_k_, sizeof(__pyx_k_), 0, 1, 0, 0}, + {&__pyx_kp_u_2f, __pyx_k_2f, sizeof(__pyx_k_2f), 0, 1, 0, 0}, + {&__pyx_kp_u_2f_2, __pyx_k_2f_2, sizeof(__pyx_k_2f_2), 0, 1, 0, 0}, + {&__pyx_kp_u_2f_3, __pyx_k_2f_3, sizeof(__pyx_k_2f_3), 0, 1, 0, 0}, + {&__pyx_n_s_A, __pyx_k_A, sizeof(__pyx_k_A), 0, 0, 1, 1}, + {&__pyx_n_s_ASCII, __pyx_k_ASCII, sizeof(__pyx_k_ASCII), 0, 0, 1, 1}, + {&__pyx_kp_s_All_dimensions_preceding_dimensi, __pyx_k_All_dimensions_preceding_dimensi, sizeof(__pyx_k_All_dimensions_preceding_dimensi), 0, 0, 1, 0}, + {&__pyx_n_s_AssertionError, __pyx_k_AssertionError, sizeof(__pyx_k_AssertionError), 0, 0, 1, 1}, + {&__pyx_kp_s_Buffer_view_does_not_expose_stri, __pyx_k_Buffer_view_does_not_expose_stri, sizeof(__pyx_k_Buffer_view_does_not_expose_stri), 0, 0, 1, 0}, + {&__pyx_kp_u_Building_chrono_purchared_items, __pyx_k_Building_chrono_purchared_items, sizeof(__pyx_k_Building_chrono_purchared_items), 0, 1, 0, 0}, + {&__pyx_kp_u_Building_data_completed_in_d_s, __pyx_k_Building_data_completed_in_d_s, sizeof(__pyx_k_Building_data_completed_in_d_s), 0, 1, 0, 0}, + {&__pyx_kp_u_Building_data_started, __pyx_k_Building_data_started, sizeof(__pyx_k_Building_data_started), 0, 1, 0, 0}, + {&__pyx_kp_u_Building_item_aspect_quality_mat, __pyx_k_Building_item_aspect_quality_mat, sizeof(__pyx_k_Building_item_aspect_quality_mat), 0, 1, 0, 0}, + {&__pyx_kp_s_Can_only_create_a_buffer_that_is, __pyx_k_Can_only_create_a_buffer_that_is, sizeof(__pyx_k_Can_only_create_a_buffer_that_is), 0, 0, 1, 0}, + {&__pyx_kp_s_Cannot_assign_to_read_only_memor, __pyx_k_Cannot_assign_to_read_only_memor, sizeof(__pyx_k_Cannot_assign_to_read_only_memor), 0, 0, 1, 0}, + {&__pyx_kp_s_Cannot_create_writable_memory_vi, __pyx_k_Cannot_create_writable_memory_vi, sizeof(__pyx_k_Cannot_create_writable_memory_vi), 0, 0, 1, 0}, + {&__pyx_kp_u_Cannot_index_with_type, __pyx_k_Cannot_index_with_type, sizeof(__pyx_k_Cannot_index_with_type), 0, 1, 0, 0}, + {&__pyx_kp_s_Cannot_transpose_memoryview_with, __pyx_k_Cannot_transpose_memoryview_with, sizeof(__pyx_k_Cannot_transpose_memoryview_with), 0, 0, 1, 0}, + {&__pyx_n_s_ComparERSub, __pyx_k_ComparERSub, sizeof(__pyx_k_ComparERSub), 0, 0, 1, 1}, + {&__pyx_n_u_ComparERSub, __pyx_k_ComparERSub, sizeof(__pyx_k_ComparERSub), 0, 1, 0, 1}, + {&__pyx_n_s_ComparERSub___init, __pyx_k_ComparERSub___init, sizeof(__pyx_k_ComparERSub___init), 0, 0, 1, 1}, + {&__pyx_n_s_ComparERSub__build_chrono_purcha, __pyx_k_ComparERSub__build_chrono_purcha, sizeof(__pyx_k_ComparERSub__build_chrono_purcha), 0, 0, 1, 1}, + {&__pyx_n_s_ComparERSub__build_data, __pyx_k_ComparERSub__build_data, sizeof(__pyx_k_ComparERSub__build_data), 0, 0, 1, 1}, + {&__pyx_n_s_ComparERSub__build_item_quality, __pyx_k_ComparERSub__build_item_quality, sizeof(__pyx_k_ComparERSub__build_item_quality), 0, 0, 1, 1}, + {&__pyx_n_s_ComparERSub__fit_mter, __pyx_k_ComparERSub__fit_mter, sizeof(__pyx_k_ComparERSub__fit_mter), 0, 0, 1, 1}, + {&__pyx_n_s_ComparERSub_fit, __pyx_k_ComparERSub_fit, sizeof(__pyx_k_ComparERSub_fit), 0, 0, 1, 1}, + {&__pyx_n_s_ComparERSub_rank, __pyx_k_ComparERSub_rank, sizeof(__pyx_k_ComparERSub_rank), 0, 0, 1, 1}, + {&__pyx_kp_u_Compute_X, __pyx_k_Compute_X, sizeof(__pyx_k_Compute_X), 0, 1, 0, 0}, + {&__pyx_kp_u_Compute_YI, __pyx_k_Compute_YI, sizeof(__pyx_k_Compute_YI), 0, 1, 0, 0}, + {&__pyx_kp_u_Compute_YU, __pyx_k_Compute_YU, sizeof(__pyx_k_Compute_YU), 0, 1, 0, 0}, + {&__pyx_kp_u_Count_aspects, __pyx_k_Count_aspects, sizeof(__pyx_k_Count_aspects), 0, 1, 0, 0}, + {&__pyx_n_s_Counter, __pyx_k_Counter, sizeof(__pyx_k_Counter), 0, 0, 1, 1}, + {&__pyx_kp_s_Dimension_d_is_not_direct, __pyx_k_Dimension_d_is_not_direct, sizeof(__pyx_k_Dimension_d_is_not_direct), 0, 0, 1, 0}, + {&__pyx_n_s_Ellipsis, __pyx_k_Ellipsis, sizeof(__pyx_k_Ellipsis), 0, 0, 1, 1}, + {&__pyx_kp_s_Empty_shape_tuple_for_cython_arr, __pyx_k_Empty_shape_tuple_for_cython_arr, sizeof(__pyx_k_Empty_shape_tuple_for_cython_arr), 0, 0, 1, 0}, + {&__pyx_kp_u_Enumerate_index, __pyx_k_Enumerate_index, sizeof(__pyx_k_Enumerate_index), 0, 1, 0, 0}, + {&__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_k_Expected_at_least_d_argument_s_g, sizeof(__pyx_k_Expected_at_least_d_argument_s_g), 0, 0, 1, 0}, + {&__pyx_kp_s_Explainable_Recommendation_with, __pyx_k_Explainable_Recommendation_with, sizeof(__pyx_k_Explainable_Recommendation_with), 0, 0, 1, 0}, + {&__pyx_kp_s_Function_call_with_ambiguous_arg, __pyx_k_Function_call_with_ambiguous_arg, sizeof(__pyx_k_Function_call_with_ambiguous_arg), 0, 0, 1, 0}, + {&__pyx_n_s_G1, __pyx_k_G1, sizeof(__pyx_k_G1), 0, 0, 1, 1}, + {&__pyx_n_s_G2, __pyx_k_G2, sizeof(__pyx_k_G2), 0, 0, 1, 1}, + {&__pyx_n_s_G3, __pyx_k_G3, sizeof(__pyx_k_G3), 0, 0, 1, 1}, + {&__pyx_kp_u_Get_purchased_pairs, __pyx_k_Get_purchased_pairs, sizeof(__pyx_k_Get_purchased_pairs), 0, 1, 0, 0}, + {&__pyx_kp_u_Get_skyline_aspects, __pyx_k_Get_skyline_aspects, sizeof(__pyx_k_Get_skyline_aspects), 0, 1, 0, 0}, + {&__pyx_n_s_I, __pyx_k_I, sizeof(__pyx_k_I), 0, 0, 1, 1}, + {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, + {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_k_Incompatible_checksums_0x_x_vs_0, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0), 0, 0, 1, 0}, + {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1}, + {&__pyx_kp_s_Index_out_of_bounds_axis_d, __pyx_k_Index_out_of_bounds_axis_d, sizeof(__pyx_k_Index_out_of_bounds_axis_d), 0, 0, 1, 0}, + {&__pyx_kp_s_Indirect_dimensions_not_supporte, __pyx_k_Indirect_dimensions_not_supporte, sizeof(__pyx_k_Indirect_dimensions_not_supporte), 0, 0, 1, 0}, + {&__pyx_kp_u_Invalid_mode_expected_c_or_fortr, __pyx_k_Invalid_mode_expected_c_or_fortr, sizeof(__pyx_k_Invalid_mode_expected_c_or_fortr), 0, 1, 0, 0}, + {&__pyx_kp_u_Invalid_shape_in_axis, __pyx_k_Invalid_shape_in_axis, sizeof(__pyx_k_Invalid_shape_in_axis), 0, 1, 0, 0}, + {&__pyx_n_s_MTER, __pyx_k_MTER, sizeof(__pyx_k_MTER), 0, 0, 1, 1}, + {&__pyx_kp_u_Mc_Nc_MN, __pyx_k_Mc_Nc_MN, sizeof(__pyx_k_Mc_Nc_MN), 0, 1, 0, 0}, + {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1}, + {&__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_k_MemoryView_of_r_at_0x_x, sizeof(__pyx_k_MemoryView_of_r_at_0x_x), 0, 0, 1, 0}, + {&__pyx_kp_s_MemoryView_of_r_object, __pyx_k_MemoryView_of_r_object, sizeof(__pyx_k_MemoryView_of_r_object), 0, 0, 1, 0}, + {&__pyx_kp_s_No_matching_signature_found, __pyx_k_No_matching_signature_found, sizeof(__pyx_k_No_matching_signature_found), 0, 0, 1, 0}, + {&__pyx_n_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1}, + {&__pyx_n_s_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 1, 1}, + {&__pyx_kp_u_Optimization_finished, __pyx_k_Optimization_finished, sizeof(__pyx_k_Optimization_finished), 0, 1, 0, 0}, + {&__pyx_n_s_OrderedDict, __pyx_k_OrderedDict, sizeof(__pyx_k_OrderedDict), 0, 0, 1, 1}, + {&__pyx_kp_u_Out_of_bounds_on_buffer_access_a, __pyx_k_Out_of_bounds_on_buffer_access_a, sizeof(__pyx_k_Out_of_bounds_on_buffer_access_a), 0, 1, 0, 0}, + {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_Recommender, __pyx_k_Recommender, sizeof(__pyx_k_Recommender), 0, 0, 1, 1}, + {&__pyx_n_s_ScoreException, __pyx_k_ScoreException, sizeof(__pyx_k_ScoreException), 0, 0, 1, 1}, + {&__pyx_n_s_Sequence, __pyx_k_Sequence, sizeof(__pyx_k_Sequence), 0, 0, 1, 1}, + {&__pyx_kp_u_Statistics_aspect_pairs, __pyx_k_Statistics_aspect_pairs, sizeof(__pyx_k_Statistics_aspect_pairs), 0, 1, 0, 0}, + {&__pyx_kp_s_Step_may_not_be_zero_axis_d, __pyx_k_Step_may_not_be_zero_axis_d, sizeof(__pyx_k_Step_may_not_be_zero_axis_d), 0, 0, 1, 0}, + {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, + {&__pyx_n_s_U, __pyx_k_U, sizeof(__pyx_k_U), 0, 0, 1, 1}, + {&__pyx_kp_s_Unable_to_convert_item_to_object, __pyx_k_Unable_to_convert_item_to_object, sizeof(__pyx_k_Unable_to_convert_item_to_object), 0, 0, 1, 0}, + {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, + {&__pyx_n_s_View_MemoryView, __pyx_k_View_MemoryView, sizeof(__pyx_k_View_MemoryView), 0, 0, 1, 1}, + {&__pyx_n_s_X, __pyx_k_X, sizeof(__pyx_k_X), 0, 0, 1, 1}, + {&__pyx_n_s_X_aids, __pyx_k_X_aids, sizeof(__pyx_k_X_aids), 0, 0, 1, 1}, + {&__pyx_n_s_X_iids, __pyx_k_X_iids, sizeof(__pyx_k_X_iids), 0, 0, 1, 1}, + {&__pyx_n_s_X_uids, __pyx_k_X_uids, sizeof(__pyx_k_X_uids), 0, 0, 1, 1}, + {&__pyx_n_s_Y, __pyx_k_Y, sizeof(__pyx_k_Y), 0, 0, 1, 1}, + {&__pyx_n_s_YI, __pyx_k_YI, sizeof(__pyx_k_YI), 0, 0, 1, 1}, + {&__pyx_n_s_YI_aids, __pyx_k_YI_aids, sizeof(__pyx_k_YI_aids), 0, 0, 1, 1}, + {&__pyx_n_s_YI_iids, __pyx_k_YI_iids, sizeof(__pyx_k_YI_iids), 0, 0, 1, 1}, + {&__pyx_n_s_YI_oids, __pyx_k_YI_oids, sizeof(__pyx_k_YI_oids), 0, 0, 1, 1}, + {&__pyx_n_s_YU, __pyx_k_YU, sizeof(__pyx_k_YU), 0, 0, 1, 1}, + {&__pyx_n_s_YU_aids, __pyx_k_YU_aids, sizeof(__pyx_k_YU_aids), 0, 0, 1, 1}, + {&__pyx_n_s_YU_oids, __pyx_k_YU_oids, sizeof(__pyx_k_YU_oids), 0, 0, 1, 1}, + {&__pyx_n_s_YU_uids, __pyx_k_YU_uids, sizeof(__pyx_k_YU_uids), 0, 0, 1, 1}, + {&__pyx_kp_u__12, __pyx_k__12, sizeof(__pyx_k__12), 0, 1, 0, 0}, + {&__pyx_kp_s__15, __pyx_k__15, sizeof(__pyx_k__15), 0, 0, 1, 0}, + {&__pyx_kp_s__16, __pyx_k__16, sizeof(__pyx_k__16), 0, 0, 1, 0}, + {&__pyx_kp_u__16, __pyx_k__16, sizeof(__pyx_k__16), 0, 1, 0, 0}, + {&__pyx_kp_u__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 1, 0, 0}, + {&__pyx_n_s__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 0, 1, 1}, + {&__pyx_n_s__38, __pyx_k__38, sizeof(__pyx_k__38), 0, 0, 1, 1}, + {&__pyx_n_s__53, __pyx_k__53, sizeof(__pyx_k__53), 0, 0, 1, 1}, + {&__pyx_kp_u__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 1, 0, 0}, + {&__pyx_kp_u__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 1, 0, 0}, + {&__pyx_n_s_a_idx, __pyx_k_a_idx, sizeof(__pyx_k_a_idx), 0, 0, 1, 1}, + {&__pyx_n_s_a_ji, __pyx_k_a_ji, sizeof(__pyx_k_a_ji), 0, 0, 1, 1}, + {&__pyx_n_s_abc, __pyx_k_abc, sizeof(__pyx_k_abc), 0, 0, 1, 1}, + {&__pyx_kp_u_abc_a_bc, __pyx_k_abc_a_bc, sizeof(__pyx_k_abc_a_bc), 0, 1, 0, 0}, + {&__pyx_n_s_aid, __pyx_k_aid, sizeof(__pyx_k_aid), 0, 0, 1, 1}, + {&__pyx_n_s_all_item_scores, __pyx_k_all_item_scores, sizeof(__pyx_k_all_item_scores), 0, 0, 1, 1}, + {&__pyx_n_s_allocate_buffer, __pyx_k_allocate_buffer, sizeof(__pyx_k_allocate_buffer), 0, 0, 1, 1}, + {&__pyx_n_s_alpha, __pyx_k_alpha, sizeof(__pyx_k_alpha), 0, 0, 1, 1}, + {&__pyx_kp_u_and, __pyx_k_and, sizeof(__pyx_k_and), 0, 1, 0, 0}, + {&__pyx_n_s_append, __pyx_k_append, sizeof(__pyx_k_append), 0, 0, 1, 1}, + {&__pyx_n_s_arange, __pyx_k_arange, sizeof(__pyx_k_arange), 0, 0, 1, 1}, + {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, + {&__pyx_n_s_argsort, __pyx_k_argsort, sizeof(__pyx_k_argsort), 0, 0, 1, 1}, + {&__pyx_n_s_array, __pyx_k_array, sizeof(__pyx_k_array), 0, 0, 1, 1}, + {&__pyx_n_s_asarray, __pyx_k_asarray, sizeof(__pyx_k_asarray), 0, 0, 1, 1}, + {&__pyx_n_s_aspect_bpr_loss, __pyx_k_aspect_bpr_loss, sizeof(__pyx_k_aspect_bpr_loss), 0, 0, 1, 1}, + {&__pyx_n_s_aspect_correct, __pyx_k_aspect_correct, sizeof(__pyx_k_aspect_correct), 0, 0, 1, 1}, + {&__pyx_n_s_aspect_idx, __pyx_k_aspect_idx, sizeof(__pyx_k_aspect_idx), 0, 0, 1, 1}, + {&__pyx_n_s_aspect_indices, __pyx_k_aspect_indices, sizeof(__pyx_k_aspect_indices), 0, 0, 1, 1}, + {&__pyx_n_s_astype, __pyx_k_astype, sizeof(__pyx_k_astype), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_kp_u_avg, __pyx_k_avg, sizeof(__pyx_k_avg), 0, 1, 0, 0}, + {&__pyx_n_s_avg_sentiment, __pyx_k_avg_sentiment, sizeof(__pyx_k_avg_sentiment), 0, 0, 1, 1}, + {&__pyx_n_s_axis, __pyx_k_axis, sizeof(__pyx_k_axis), 0, 0, 1, 1}, + {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1}, + {&__pyx_kp_u_bc_Mb_Mc, __pyx_k_bc_Mb_Mc, sizeof(__pyx_k_bc_Mb_Mc), 0, 1, 0, 0}, + {&__pyx_n_s_bpr_loss, __pyx_k_bpr_loss, sizeof(__pyx_k_bpr_loss), 0, 0, 1, 1}, + {&__pyx_n_u_bpr_loss, __pyx_k_bpr_loss, sizeof(__pyx_k_bpr_loss), 0, 1, 0, 1}, + {&__pyx_n_s_build_chrono_purchased_pairs, __pyx_k_build_chrono_purchased_pairs, sizeof(__pyx_k_build_chrono_purchased_pairs), 0, 0, 1, 1}, + {&__pyx_n_s_build_data, __pyx_k_build_data, sizeof(__pyx_k_build_data), 0, 0, 1, 1}, + {&__pyx_n_s_build_item_quality_matrix, __pyx_k_build_item_quality_matrix, sizeof(__pyx_k_build_item_quality_matrix), 0, 0, 1, 1}, + {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1}, + {&__pyx_n_u_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 1, 0, 1}, + {&__pyx_n_s_chrono_purchased_pairs, __pyx_k_chrono_purchased_pairs, sizeof(__pyx_k_chrono_purchased_pairs), 0, 0, 1, 1}, + {&__pyx_n_s_chrono_user_data, __pyx_k_chrono_user_data, sizeof(__pyx_k_chrono_user_data), 0, 0, 1, 1}, + {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1}, + {&__pyx_n_s_class_getitem, __pyx_k_class_getitem, sizeof(__pyx_k_class_getitem), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_collections, __pyx_k_collections, sizeof(__pyx_k_collections), 0, 0, 1, 1}, + {&__pyx_kp_s_collections_abc, __pyx_k_collections_abc, sizeof(__pyx_k_collections_abc), 0, 0, 1, 0}, + {&__pyx_n_s_combinations, __pyx_k_combinations, sizeof(__pyx_k_combinations), 0, 0, 1, 1}, + {&__pyx_n_s_common_aspect_counts, __pyx_k_common_aspect_counts, sizeof(__pyx_k_common_aspect_counts), 0, 0, 1, 1}, + {&__pyx_kp_u_comparable_pairs, __pyx_k_comparable_pairs, sizeof(__pyx_k_comparable_pairs), 0, 1, 0, 0}, + {&__pyx_n_s_compute_attention_score, __pyx_k_compute_attention_score, sizeof(__pyx_k_compute_attention_score), 0, 0, 1, 1}, + {&__pyx_n_s_compute_quality_score, __pyx_k_compute_quality_score, sizeof(__pyx_k_compute_quality_score), 0, 0, 1, 1}, + {&__pyx_kp_s_contiguous_and_direct, __pyx_k_contiguous_and_direct, sizeof(__pyx_k_contiguous_and_direct), 0, 0, 1, 0}, + {&__pyx_kp_s_contiguous_and_indirect, __pyx_k_contiguous_and_indirect, sizeof(__pyx_k_contiguous_and_indirect), 0, 0, 1, 0}, + {&__pyx_n_s_cornac_models_comparer_recom_com, __pyx_k_cornac_models_comparer_recom_com, sizeof(__pyx_k_cornac_models_comparer_recom_com), 0, 0, 1, 1}, + {&__pyx_kp_s_cornac_models_comparer_recom_com_2, __pyx_k_cornac_models_comparer_recom_com_2, sizeof(__pyx_k_cornac_models_comparer_recom_com_2), 0, 0, 1, 0}, + {&__pyx_n_s_correct, __pyx_k_correct, sizeof(__pyx_k_correct), 0, 0, 1, 1}, + {&__pyx_n_u_correct, __pyx_k_correct, sizeof(__pyx_k_correct), 0, 1, 0, 1}, + {&__pyx_n_s_count, __pyx_k_count, sizeof(__pyx_k_count), 0, 0, 1, 1}, + {&__pyx_n_s_counted_pairs, __pyx_k_counted_pairs, sizeof(__pyx_k_counted_pairs), 0, 0, 1, 1}, + {&__pyx_n_s_csr_matrix, __pyx_k_csr_matrix, sizeof(__pyx_k_csr_matrix), 0, 0, 1, 1}, + {&__pyx_n_u_d, __pyx_k_d, sizeof(__pyx_k_d), 0, 1, 0, 1}, + {&__pyx_n_s_data_set, __pyx_k_data_set, sizeof(__pyx_k_data_set), 0, 0, 1, 1}, + {&__pyx_n_s_defaults, __pyx_k_defaults, sizeof(__pyx_k_defaults), 0, 0, 1, 1}, + {&__pyx_n_s_del_a, __pyx_k_del_a, sizeof(__pyx_k_del_a), 0, 0, 1, 1}, + {&__pyx_n_s_del_a_reg, __pyx_k_del_a_reg, sizeof(__pyx_k_del_a_reg), 0, 0, 1, 1}, + {&__pyx_n_s_del_aspect_bpr, __pyx_k_del_aspect_bpr, sizeof(__pyx_k_del_aspect_bpr), 0, 0, 1, 1}, + {&__pyx_n_s_del_bpr, __pyx_k_del_bpr, sizeof(__pyx_k_del_bpr), 0, 0, 1, 1}, + {&__pyx_n_s_del_g1, __pyx_k_del_g1, sizeof(__pyx_k_del_g1), 0, 0, 1, 1}, + {&__pyx_n_s_del_g1_reg, __pyx_k_del_g1_reg, sizeof(__pyx_k_del_g1_reg), 0, 0, 1, 1}, + {&__pyx_n_s_del_g2, __pyx_k_del_g2, sizeof(__pyx_k_del_g2), 0, 0, 1, 1}, + {&__pyx_n_s_del_g2_reg, __pyx_k_del_g2_reg, sizeof(__pyx_k_del_g2_reg), 0, 0, 1, 1}, + {&__pyx_n_s_del_g3, __pyx_k_del_g3, sizeof(__pyx_k_del_g3), 0, 0, 1, 1}, + {&__pyx_n_s_del_g3_reg, __pyx_k_del_g3_reg, sizeof(__pyx_k_del_g3_reg), 0, 0, 1, 1}, + {&__pyx_n_s_del_i, __pyx_k_del_i, sizeof(__pyx_k_del_i), 0, 0, 1, 1}, + {&__pyx_n_s_del_i_reg, __pyx_k_del_i_reg, sizeof(__pyx_k_del_i_reg), 0, 0, 1, 1}, + {&__pyx_n_s_del_o, __pyx_k_del_o, sizeof(__pyx_k_del_o), 0, 0, 1, 1}, + {&__pyx_n_s_del_o_reg, __pyx_k_del_o_reg, sizeof(__pyx_k_del_o_reg), 0, 0, 1, 1}, + {&__pyx_n_s_del_sqerror, __pyx_k_del_sqerror, sizeof(__pyx_k_del_sqerror), 0, 0, 1, 1}, + {&__pyx_n_s_del_u, __pyx_k_del_u, sizeof(__pyx_k_del_u), 0, 0, 1, 1}, + {&__pyx_n_s_del_u_reg, __pyx_k_del_u_reg, sizeof(__pyx_k_del_u_reg), 0, 0, 1, 1}, + {&__pyx_n_s_desc, __pyx_k_desc, sizeof(__pyx_k_desc), 0, 0, 1, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_n_s_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 0, 1, 1}, + {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0}, + {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, + {&__pyx_n_s_double, __pyx_k_double, sizeof(__pyx_k_double), 0, 0, 1, 1}, + {&__pyx_kp_s_double_int, __pyx_k_double_int, sizeof(__pyx_k_double_int), 0, 0, 1, 0}, + {&__pyx_kp_s_double_long, __pyx_k_double_long, sizeof(__pyx_k_double_long), 0, 0, 1, 0}, + {&__pyx_kp_s_double_short, __pyx_k_double_short, sizeof(__pyx_k_double_short), 0, 0, 1, 0}, + {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, + {&__pyx_n_s_dtype_is_object, __pyx_k_dtype_is_object, sizeof(__pyx_k_dtype_is_object), 0, 0, 1, 1}, + {&__pyx_n_s_earlier_indices, __pyx_k_earlier_indices, sizeof(__pyx_k_earlier_indices), 0, 0, 1, 1}, + {&__pyx_n_s_earlier_item_idx, __pyx_k_earlier_item_idx, sizeof(__pyx_k_earlier_item_idx), 0, 0, 1, 1}, + {&__pyx_kp_u_earlier_later_pairs, __pyx_k_earlier_later_pairs, sizeof(__pyx_k_earlier_later_pairs), 0, 1, 0, 0}, + {&__pyx_n_s_ediff1d, __pyx_k_ediff1d, sizeof(__pyx_k_ediff1d), 0, 0, 1, 1}, + {&__pyx_n_s_einsum, __pyx_k_einsum, sizeof(__pyx_k_einsum), 0, 0, 1, 1}, + {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0}, + {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1}, + {&__pyx_n_s_enter, __pyx_k_enter, sizeof(__pyx_k_enter), 0, 0, 1, 1}, + {&__pyx_n_s_enum_window, __pyx_k_enum_window, sizeof(__pyx_k_enum_window), 0, 0, 1, 1}, + {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1}, + {&__pyx_n_s_epoch, __pyx_k_epoch, sizeof(__pyx_k_epoch), 0, 0, 1, 1}, + {&__pyx_n_s_eps, __pyx_k_eps, sizeof(__pyx_k_eps), 0, 0, 1, 1}, + {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, + {&__pyx_n_s_exception, __pyx_k_exception, sizeof(__pyx_k_exception), 0, 0, 1, 1}, + {&__pyx_n_s_exit, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1}, + {&__pyx_n_s_fill, __pyx_k_fill, sizeof(__pyx_k_fill), 0, 0, 1, 1}, + {&__pyx_n_s_fit, __pyx_k_fit, sizeof(__pyx_k_fit), 0, 0, 1, 1}, + {&__pyx_n_s_fit_mter, __pyx_k_fit_mter, sizeof(__pyx_k_fit_mter), 0, 0, 1, 1}, + {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1}, + {&__pyx_n_s_flatten, __pyx_k_flatten, sizeof(__pyx_k_flatten), 0, 0, 1, 1}, + {&__pyx_n_s_float, __pyx_k_float, sizeof(__pyx_k_float), 0, 0, 1, 1}, + {&__pyx_n_s_float32, __pyx_k_float32, sizeof(__pyx_k_float32), 0, 0, 1, 1}, + {&__pyx_n_s_float64, __pyx_k_float64, sizeof(__pyx_k_float64), 0, 0, 1, 1}, + {&__pyx_kp_s_float_int, __pyx_k_float_int, sizeof(__pyx_k_float_int), 0, 0, 1, 0}, + {&__pyx_kp_s_float_long, __pyx_k_float_long, sizeof(__pyx_k_float_long), 0, 0, 1, 0}, + {&__pyx_kp_s_float_short, __pyx_k_float_short, sizeof(__pyx_k_float_short), 0, 0, 1, 0}, + {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, + {&__pyx_n_s_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 0, 1, 1}, + {&__pyx_n_u_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 1, 0, 1}, + {&__pyx_n_s_fused_sigindex, __pyx_k_fused_sigindex, sizeof(__pyx_k_fused_sigindex), 0, 0, 1, 1}, + {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0}, + {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, + {&__pyx_n_s_get_rng, __pyx_k_get_rng, sizeof(__pyx_k_get_rng), 0, 0, 1, 1}, + {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, + {&__pyx_kp_u_got, __pyx_k_got, sizeof(__pyx_k_got), 0, 1, 0, 0}, + {&__pyx_kp_u_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 1, 0, 0}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, + {&__pyx_n_s_i_idx, __pyx_k_i_idx, sizeof(__pyx_k_i_idx), 0, 0, 1, 1}, + {&__pyx_n_s_i_ij, __pyx_k_i_ij, sizeof(__pyx_k_i_ij), 0, 0, 1, 1}, + {&__pyx_n_s_i_index, __pyx_k_i_index, sizeof(__pyx_k_i_index), 0, 0, 1, 1}, + {&__pyx_n_s_i_indices, __pyx_k_i_indices, sizeof(__pyx_k_i_indices), 0, 0, 1, 1}, + {&__pyx_n_s_i_score, __pyx_k_i_score, sizeof(__pyx_k_i_score), 0, 0, 1, 1}, + {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, + {&__pyx_n_s_idx, __pyx_k_idx, sizeof(__pyx_k_idx), 0, 0, 1, 1}, + {&__pyx_n_s_iid, __pyx_k_iid, sizeof(__pyx_k_iid), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_index, __pyx_k_index, sizeof(__pyx_k_index), 0, 0, 1, 1}, + {&__pyx_n_s_indices, __pyx_k_indices, sizeof(__pyx_k_indices), 0, 0, 1, 1}, + {&__pyx_n_s_indptr, __pyx_k_indptr, sizeof(__pyx_k_indptr), 0, 0, 1, 1}, + {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1}, + {&__pyx_n_s_init_2, __pyx_k_init_2, sizeof(__pyx_k_init_2), 0, 0, 1, 1}, + {&__pyx_n_s_init_params, __pyx_k_init_params, sizeof(__pyx_k_init_params), 0, 0, 1, 1}, + {&__pyx_n_s_init_subclass, __pyx_k_init_subclass, sizeof(__pyx_k_init_subclass), 0, 0, 1, 1}, + {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1}, + {&__pyx_n_s_int, __pyx_k_int, sizeof(__pyx_k_int), 0, 0, 1, 1}, + {&__pyx_n_s_int32, __pyx_k_int32, sizeof(__pyx_k_int32), 0, 0, 1, 1}, + {&__pyx_n_s_intp, __pyx_k_intp, sizeof(__pyx_k_intp), 0, 0, 1, 1}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_n_s_is_unk_item, __pyx_k_is_unk_item, sizeof(__pyx_k_is_unk_item), 0, 0, 1, 1}, + {&__pyx_n_s_is_unk_user, __pyx_k_is_unk_user, sizeof(__pyx_k_is_unk_user), 0, 0, 1, 1}, + {&__pyx_kp_u_isenabled, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0}, + {&__pyx_n_s_item_aspect_count, __pyx_k_item_aspect_count, sizeof(__pyx_k_item_aspect_count), 0, 0, 1, 1}, + {&__pyx_n_s_item_aspect_opinion, __pyx_k_item_aspect_opinion, sizeof(__pyx_k_item_aspect_opinion), 0, 0, 1, 1}, + {&__pyx_n_s_item_aspects, __pyx_k_item_aspects, sizeof(__pyx_k_item_aspects), 0, 0, 1, 1}, + {&__pyx_n_s_item_ids, __pyx_k_item_ids, sizeof(__pyx_k_item_ids), 0, 0, 1, 1}, + {&__pyx_n_s_item_indices, __pyx_k_item_indices, sizeof(__pyx_k_item_indices), 0, 0, 1, 1}, + {&__pyx_n_s_item_rank, __pyx_k_item_rank, sizeof(__pyx_k_item_rank), 0, 0, 1, 1}, + {&__pyx_n_s_item_scores, __pyx_k_item_scores, sizeof(__pyx_k_item_scores), 0, 0, 1, 1}, + {&__pyx_n_s_item_sentiment, __pyx_k_item_sentiment, sizeof(__pyx_k_item_sentiment), 0, 0, 1, 1}, + {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1}, + {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1}, + {&__pyx_kp_s_itemsize_0_for_cython_array, __pyx_k_itemsize_0_for_cython_array, sizeof(__pyx_k_itemsize_0_for_cython_array), 0, 0, 1, 0}, + {&__pyx_n_s_itertools, __pyx_k_itertools, sizeof(__pyx_k_itertools), 0, 0, 1, 1}, + {&__pyx_n_s_j, __pyx_k_j, sizeof(__pyx_k_j), 0, 0, 1, 1}, + {&__pyx_n_s_j_idx, __pyx_k_j_idx, sizeof(__pyx_k_j_idx), 0, 0, 1, 1}, + {&__pyx_n_s_j_index, __pyx_k_j_index, sizeof(__pyx_k_j_index), 0, 0, 1, 1}, + {&__pyx_n_s_j_score, __pyx_k_j_score, sizeof(__pyx_k_j_score), 0, 0, 1, 1}, + {&__pyx_n_s_jdx, __pyx_k_jdx, sizeof(__pyx_k_jdx), 0, 0, 1, 1}, + {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1}, + {&__pyx_n_s_key, __pyx_k_key, sizeof(__pyx_k_key), 0, 0, 1, 1}, + {&__pyx_n_s_keys, __pyx_k_keys, sizeof(__pyx_k_keys), 0, 0, 1, 1}, + {&__pyx_n_s_kind, __pyx_k_kind, sizeof(__pyx_k_kind), 0, 0, 1, 1}, + {&__pyx_n_s_known_item_scores, __pyx_k_known_item_scores, sizeof(__pyx_k_known_item_scores), 0, 0, 1, 1}, + {&__pyx_n_s_kwargs, __pyx_k_kwargs, sizeof(__pyx_k_kwargs), 0, 0, 1, 1}, + {&__pyx_n_s_lambda_bpr, __pyx_k_lambda_bpr, sizeof(__pyx_k_lambda_bpr), 0, 0, 1, 1}, + {&__pyx_n_s_lambda_d, __pyx_k_lambda_d, sizeof(__pyx_k_lambda_d), 0, 0, 1, 1}, + {&__pyx_n_s_lambda_reg, __pyx_k_lambda_reg, sizeof(__pyx_k_lambda_reg), 0, 0, 1, 1}, + {&__pyx_n_s_later_indices, __pyx_k_later_indices, sizeof(__pyx_k_later_indices), 0, 0, 1, 1}, + {&__pyx_n_s_later_item_idx, __pyx_k_later_item_idx, sizeof(__pyx_k_later_item_idx), 0, 0, 1, 1}, + {&__pyx_n_s_ld_bpr, __pyx_k_ld_bpr, sizeof(__pyx_k_ld_bpr), 0, 0, 1, 1}, + {&__pyx_n_s_ld_reg, __pyx_k_ld_reg, sizeof(__pyx_k_ld_reg), 0, 0, 1, 1}, + {&__pyx_n_s_long, __pyx_k_long, sizeof(__pyx_k_long), 0, 0, 1, 1}, + {&__pyx_n_s_loss, __pyx_k_loss, sizeof(__pyx_k_loss), 0, 0, 1, 1}, + {&__pyx_n_u_loss, __pyx_k_loss, sizeof(__pyx_k_loss), 0, 1, 0, 1}, + {&__pyx_n_s_lr, __pyx_k_lr, sizeof(__pyx_k_lr), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_map_aspect_id, __pyx_k_map_aspect_id, sizeof(__pyx_k_map_aspect_id), 0, 0, 1, 1}, + {&__pyx_n_s_map_iid, __pyx_k_map_iid, sizeof(__pyx_k_map_iid), 0, 0, 1, 1}, + {&__pyx_kp_u_max, __pyx_k_max, sizeof(__pyx_k_max), 0, 1, 0, 0}, + {&__pyx_n_s_max_2, __pyx_k_max_2, sizeof(__pyx_k_max_2), 0, 0, 1, 1}, + {&__pyx_n_s_max_iter, __pyx_k_max_iter, sizeof(__pyx_k_max_iter), 0, 0, 1, 1}, + {&__pyx_n_s_mean, __pyx_k_mean, sizeof(__pyx_k_mean), 0, 0, 1, 1}, + {&__pyx_n_s_memview, __pyx_k_memview, sizeof(__pyx_k_memview), 0, 0, 1, 1}, + {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, + {&__pyx_kp_u_min, __pyx_k_min, sizeof(__pyx_k_min), 0, 1, 0, 0}, + {&__pyx_n_s_min_2, __pyx_k_min_2, sizeof(__pyx_k_min_2), 0, 0, 1, 1}, + {&__pyx_n_s_min_common_freq, __pyx_k_min_common_freq, sizeof(__pyx_k_min_common_freq), 0, 0, 1, 1}, + {&__pyx_n_s_min_pair_freq, __pyx_k_min_pair_freq, sizeof(__pyx_k_min_pair_freq), 0, 0, 1, 1}, + {&__pyx_n_s_min_user_freq, __pyx_k_min_user_freq, sizeof(__pyx_k_min_user_freq), 0, 0, 1, 1}, + {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, + {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, + {&__pyx_n_s_most_common, __pyx_k_most_common, sizeof(__pyx_k_most_common), 0, 0, 1, 1}, + {&__pyx_n_s_mp, __pyx_k_mp, sizeof(__pyx_k_mp), 0, 0, 1, 1}, + {&__pyx_n_s_mro_entries, __pyx_k_mro_entries, sizeof(__pyx_k_mro_entries), 0, 0, 1, 1}, + {&__pyx_n_s_mter, __pyx_k_mter, sizeof(__pyx_k_mter), 0, 0, 1, 1}, + {&__pyx_n_s_multiprocessing, __pyx_k_multiprocessing, sizeof(__pyx_k_multiprocessing), 0, 0, 1, 1}, + {&__pyx_n_s_n_aspect_factors, __pyx_k_n_aspect_factors, sizeof(__pyx_k_n_aspect_factors), 0, 0, 1, 1}, + {&__pyx_n_s_n_aspects, __pyx_k_n_aspects, sizeof(__pyx_k_n_aspects), 0, 0, 1, 1}, + {&__pyx_n_s_n_bpr_samples, __pyx_k_n_bpr_samples, sizeof(__pyx_k_n_bpr_samples), 0, 0, 1, 1}, + {&__pyx_n_s_n_element_samples, __pyx_k_n_element_samples, sizeof(__pyx_k_n_element_samples), 0, 0, 1, 1}, + {&__pyx_n_s_n_item_factors, __pyx_k_n_item_factors, sizeof(__pyx_k_n_item_factors), 0, 0, 1, 1}, + {&__pyx_n_s_n_items, __pyx_k_n_items, sizeof(__pyx_k_n_items), 0, 0, 1, 1}, + {&__pyx_n_s_n_opinion_factors, __pyx_k_n_opinion_factors, sizeof(__pyx_k_n_opinion_factors), 0, 0, 1, 1}, + {&__pyx_n_s_n_opinions, __pyx_k_n_opinions, sizeof(__pyx_k_n_opinions), 0, 0, 1, 1}, + {&__pyx_n_s_n_pair_samples, __pyx_k_n_pair_samples, sizeof(__pyx_k_n_pair_samples), 0, 0, 1, 1}, + {&__pyx_n_s_n_threads, __pyx_k_n_threads, sizeof(__pyx_k_n_threads), 0, 0, 1, 1}, + {&__pyx_n_s_n_top_aspects, __pyx_k_n_top_aspects, sizeof(__pyx_k_n_top_aspects), 0, 0, 1, 1}, + {&__pyx_n_s_n_user_factors, __pyx_k_n_user_factors, sizeof(__pyx_k_n_user_factors), 0, 0, 1, 1}, + {&__pyx_n_s_n_users, __pyx_k_n_users, sizeof(__pyx_k_n_users), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1}, + {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 1}, + {&__pyx_n_s_neg_item_ids, __pyx_k_neg_item_ids, sizeof(__pyx_k_neg_item_ids), 0, 0, 1, 1}, + {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, + {&__pyx_kp_s_no_default___reduce___due_to_non, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0}, + {&__pyx_kp_u_not_dominated_pairs, __pyx_k_not_dominated_pairs, sizeof(__pyx_k_not_dominated_pairs), 0, 1, 0, 0}, + {&__pyx_n_s_not_dominated_pairs_2, __pyx_k_not_dominated_pairs_2, sizeof(__pyx_k_not_dominated_pairs_2), 0, 0, 1, 1}, + {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, + {&__pyx_n_s_num_aspects, __pyx_k_num_aspects, sizeof(__pyx_k_num_aspects), 0, 0, 1, 1}, + {&__pyx_n_s_num_bpr_samples, __pyx_k_num_bpr_samples, sizeof(__pyx_k_num_bpr_samples), 0, 0, 1, 1}, + {&__pyx_n_s_num_items, __pyx_k_num_items, sizeof(__pyx_k_num_items), 0, 0, 1, 1}, + {&__pyx_n_s_num_opinions, __pyx_k_num_opinions, sizeof(__pyx_k_num_opinions), 0, 0, 1, 1}, + {&__pyx_n_s_num_pair_samples, __pyx_k_num_pair_samples, sizeof(__pyx_k_num_pair_samples), 0, 0, 1, 1}, + {&__pyx_n_s_num_samples, __pyx_k_num_samples, sizeof(__pyx_k_num_samples), 0, 0, 1, 1}, + {&__pyx_n_s_num_users, __pyx_k_num_users, sizeof(__pyx_k_num_users), 0, 0, 1, 1}, + {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, + {&__pyx_kp_u_numpy_core_multiarray_failed_to, __pyx_k_numpy_core_multiarray_failed_to, sizeof(__pyx_k_numpy_core_multiarray_failed_to), 0, 1, 0, 0}, + {&__pyx_kp_u_numpy_core_umath_failed_to_impor, __pyx_k_numpy_core_umath_failed_to_impor, sizeof(__pyx_k_numpy_core_umath_failed_to_impor), 0, 1, 0, 0}, + {&__pyx_n_s_o_idx, __pyx_k_o_idx, sizeof(__pyx_k_o_idx), 0, 0, 1, 1}, + {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1}, + {&__pyx_n_s_oid, __pyx_k_oid, sizeof(__pyx_k_oid), 0, 0, 1, 1}, + {&__pyx_n_s_ones, __pyx_k_ones, sizeof(__pyx_k_ones), 0, 0, 1, 1}, + {&__pyx_n_s_p_user_indices, __pyx_k_p_user_indices, sizeof(__pyx_k_p_user_indices), 0, 0, 1, 1}, + {&__pyx_n_s_pack, __pyx_k_pack, sizeof(__pyx_k_pack), 0, 0, 1, 1}, + {&__pyx_n_s_pair_counts, __pyx_k_pair_counts, sizeof(__pyx_k_pair_counts), 0, 0, 1, 1}, + {&__pyx_n_s_pair_freq, __pyx_k_pair_freq, sizeof(__pyx_k_pair_freq), 0, 0, 1, 1}, + {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, + {&__pyx_n_s_polarity, __pyx_k_polarity, sizeof(__pyx_k_polarity), 0, 0, 1, 1}, + {&__pyx_n_s_pred, __pyx_k_pred, sizeof(__pyx_k_pred), 0, 0, 1, 1}, + {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, + {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1}, + {&__pyx_n_s_progress, __pyx_k_progress, sizeof(__pyx_k_progress), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_Enum, __pyx_k_pyx_unpickle_Enum, sizeof(__pyx_k_pyx_unpickle_Enum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, + {&__pyx_n_s_quality_scores, __pyx_k_quality_scores, sizeof(__pyx_k_quality_scores), 0, 0, 1, 1}, + {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, + {&__pyx_n_s_r_values, __pyx_k_r_values, sizeof(__pyx_k_r_values), 0, 0, 1, 1}, + {&__pyx_n_s_randint, __pyx_k_randint, sizeof(__pyx_k_randint), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_rank, __pyx_k_rank, sizeof(__pyx_k_rank), 0, 0, 1, 1}, + {&__pyx_n_s_rating_dict, __pyx_k_rating_dict, sizeof(__pyx_k_rating_dict), 0, 0, 1, 1}, + {&__pyx_n_s_rating_matrix, __pyx_k_rating_matrix, sizeof(__pyx_k_rating_matrix), 0, 0, 1, 1}, + {&__pyx_n_s_rating_scale, __pyx_k_rating_scale, sizeof(__pyx_k_rating_scale), 0, 0, 1, 1}, + {&__pyx_n_s_recommender, __pyx_k_recommender, sizeof(__pyx_k_recommender), 0, 0, 1, 1}, + {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, + {&__pyx_n_s_register, __pyx_k_register, sizeof(__pyx_k_register), 0, 0, 1, 1}, + {&__pyx_n_s_repeat, __pyx_k_repeat, sizeof(__pyx_k_repeat), 0, 0, 1, 1}, + {&__pyx_n_s_reshape, __pyx_k_reshape, sizeof(__pyx_k_reshape), 0, 0, 1, 1}, + {&__pyx_n_s_rng, __pyx_k_rng, sizeof(__pyx_k_rng), 0, 0, 1, 1}, + {&__pyx_n_s_rng_neg, __pyx_k_rng_neg, sizeof(__pyx_k_rng_neg), 0, 0, 1, 1}, + {&__pyx_n_s_rng_pos, __pyx_k_rng_pos, sizeof(__pyx_k_rng_pos), 0, 0, 1, 1}, + {&__pyx_n_s_rng_pos_iao, __pyx_k_rng_pos_iao, sizeof(__pyx_k_rng_pos_iao), 0, 0, 1, 1}, + {&__pyx_n_s_rng_pos_pair, __pyx_k_rng_pos_pair, sizeof(__pyx_k_rng_pos_pair), 0, 0, 1, 1}, + {&__pyx_n_s_rng_pos_uao, __pyx_k_rng_pos_uao, sizeof(__pyx_k_rng_pos_uao), 0, 0, 1, 1}, + {&__pyx_n_s_rng_pos_uia, __pyx_k_rng_pos_uia, sizeof(__pyx_k_rng_pos_uia), 0, 0, 1, 1}, + {&__pyx_n_s_s, __pyx_k_s, sizeof(__pyx_k_s), 0, 0, 1, 1}, + {&__pyx_n_s_scipy, __pyx_k_scipy, sizeof(__pyx_k_scipy), 0, 0, 1, 1}, + {&__pyx_n_s_scipy_sparse, __pyx_k_scipy_sparse, sizeof(__pyx_k_scipy_sparse), 0, 0, 1, 1}, + {&__pyx_n_s_score, __pyx_k_score, sizeof(__pyx_k_score), 0, 0, 1, 1}, + {&__pyx_n_s_seed, __pyx_k_seed, sizeof(__pyx_k_seed), 0, 0, 1, 1}, + {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, + {&__pyx_n_s_sentiment, __pyx_k_sentiment, sizeof(__pyx_k_sentiment), 0, 0, 1, 1}, + {&__pyx_n_s_sentiment_polarity, __pyx_k_sentiment_polarity, sizeof(__pyx_k_sentiment_polarity), 0, 0, 1, 1}, + {&__pyx_n_s_sentiment_tup_ids_by_item, __pyx_k_sentiment_tup_ids_by_item, sizeof(__pyx_k_sentiment_tup_ids_by_item), 0, 0, 1, 1}, + {&__pyx_n_s_sentiment_tup_ids_by_user, __pyx_k_sentiment_tup_ids_by_user, sizeof(__pyx_k_sentiment_tup_ids_by_user), 0, 0, 1, 1}, + {&__pyx_n_s_set_name, __pyx_k_set_name, sizeof(__pyx_k_set_name), 0, 0, 1, 1}, + {&__pyx_n_s_set_postfix, __pyx_k_set_postfix, sizeof(__pyx_k_set_postfix), 0, 0, 1, 1}, + {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, + {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_sgrad_A, __pyx_k_sgrad_A, sizeof(__pyx_k_sgrad_A), 0, 0, 1, 1}, + {&__pyx_n_s_sgrad_G1, __pyx_k_sgrad_G1, sizeof(__pyx_k_sgrad_G1), 0, 0, 1, 1}, + {&__pyx_n_s_sgrad_G2, __pyx_k_sgrad_G2, sizeof(__pyx_k_sgrad_G2), 0, 0, 1, 1}, + {&__pyx_n_s_sgrad_G3, __pyx_k_sgrad_G3, sizeof(__pyx_k_sgrad_G3), 0, 0, 1, 1}, + {&__pyx_n_s_sgrad_I, __pyx_k_sgrad_I, sizeof(__pyx_k_sgrad_I), 0, 0, 1, 1}, + {&__pyx_n_s_sgrad_O, __pyx_k_sgrad_O, sizeof(__pyx_k_sgrad_O), 0, 0, 1, 1}, + {&__pyx_n_s_sgrad_U, __pyx_k_sgrad_U, sizeof(__pyx_k_sgrad_U), 0, 0, 1, 1}, + {&__pyx_n_s_shape, __pyx_k_shape, sizeof(__pyx_k_shape), 0, 0, 1, 1}, + {&__pyx_n_s_short, __pyx_k_short, sizeof(__pyx_k_short), 0, 0, 1, 1}, + {&__pyx_n_s_signatures, __pyx_k_signatures, sizeof(__pyx_k_signatures), 0, 0, 1, 1}, + {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1}, + {&__pyx_n_s_skipped, __pyx_k_skipped, sizeof(__pyx_k_skipped), 0, 0, 1, 1}, + {&__pyx_n_u_skipped, __pyx_k_skipped, sizeof(__pyx_k_skipped), 0, 1, 0, 1}, + {&__pyx_n_s_sp, __pyx_k_sp, sizeof(__pyx_k_sp), 0, 0, 1, 1}, + {&__pyx_n_s_sparse, __pyx_k_sparse, sizeof(__pyx_k_sparse), 0, 0, 1, 1}, + {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, + {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1}, + {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1}, + {&__pyx_n_s_start_time, __pyx_k_start_time, sizeof(__pyx_k_start_time), 0, 0, 1, 1}, + {&__pyx_n_s_step, __pyx_k_step, sizeof(__pyx_k_step), 0, 0, 1, 1}, + {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1}, + {&__pyx_kp_s_strided_and_direct, __pyx_k_strided_and_direct, sizeof(__pyx_k_strided_and_direct), 0, 0, 1, 0}, + {&__pyx_kp_s_strided_and_direct_or_indirect, __pyx_k_strided_and_direct_or_indirect, sizeof(__pyx_k_strided_and_direct_or_indirect), 0, 0, 1, 0}, + {&__pyx_kp_s_strided_and_indirect, __pyx_k_strided_and_indirect, sizeof(__pyx_k_strided_and_indirect), 0, 0, 1, 0}, + {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, + {&__pyx_n_s_strip, __pyx_k_strip, sizeof(__pyx_k_strip), 0, 0, 1, 1}, + {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1}, + {&__pyx_n_s_sub_item_ids, __pyx_k_sub_item_ids, sizeof(__pyx_k_sub_item_ids), 0, 0, 1, 1}, + {&__pyx_n_s_sum, __pyx_k_sum, sizeof(__pyx_k_sum), 0, 0, 1, 1}, + {&__pyx_n_s_super, __pyx_k_super, sizeof(__pyx_k_super), 0, 0, 1, 1}, + {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, + {&__pyx_n_s_temp, __pyx_k_temp, sizeof(__pyx_k_temp), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_thread_id, __pyx_k_thread_id, sizeof(__pyx_k_thread_id), 0, 0, 1, 1}, + {&__pyx_n_s_time, __pyx_k_time, sizeof(__pyx_k_time), 0, 0, 1, 1}, + {&__pyx_n_s_top_aspect_scores, __pyx_k_top_aspect_scores, sizeof(__pyx_k_top_aspect_scores), 0, 0, 1, 1}, + {&__pyx_n_s_total_items, __pyx_k_total_items, sizeof(__pyx_k_total_items), 0, 0, 1, 1}, + {&__pyx_n_s_total_sentiment, __pyx_k_total_sentiment, sizeof(__pyx_k_total_sentiment), 0, 0, 1, 1}, + {&__pyx_n_s_total_sentiment_by_aspect, __pyx_k_total_sentiment_by_aspect, sizeof(__pyx_k_total_sentiment_by_aspect), 0, 0, 1, 1}, + {&__pyx_n_s_total_time, __pyx_k_total_time, sizeof(__pyx_k_total_time), 0, 0, 1, 1}, + {&__pyx_n_s_tqdm, __pyx_k_tqdm, sizeof(__pyx_k_tqdm), 0, 0, 1, 1}, + {&__pyx_n_s_train_set, __pyx_k_train_set, sizeof(__pyx_k_train_set), 0, 0, 1, 1}, + {&__pyx_n_s_trainable, __pyx_k_trainable, sizeof(__pyx_k_trainable), 0, 0, 1, 1}, + {&__pyx_n_s_trange, __pyx_k_trange, sizeof(__pyx_k_trange), 0, 0, 1, 1}, + {&__pyx_n_s_ts1, __pyx_k_ts1, sizeof(__pyx_k_ts1), 0, 0, 1, 1}, + {&__pyx_n_s_ts2, __pyx_k_ts2, sizeof(__pyx_k_ts2), 0, 0, 1, 1}, + {&__pyx_n_s_ts3, __pyx_k_ts3, sizeof(__pyx_k_ts3), 0, 0, 1, 1}, + {&__pyx_n_s_tup, __pyx_k_tup, sizeof(__pyx_k_tup), 0, 0, 1, 1}, + {&__pyx_n_s_tup_id, __pyx_k_tup_id, sizeof(__pyx_k_tup_id), 0, 0, 1, 1}, + {&__pyx_n_s_tup_idx, __pyx_k_tup_idx, sizeof(__pyx_k_tup_idx), 0, 0, 1, 1}, + {&__pyx_n_s_u, __pyx_k_u, sizeof(__pyx_k_u), 0, 0, 1, 1}, + {&__pyx_n_s_u_idx, __pyx_k_u_idx, sizeof(__pyx_k_u_idx), 0, 0, 1, 1}, + {&__pyx_n_s_u_indices, __pyx_k_u_indices, sizeof(__pyx_k_u_indices), 0, 0, 1, 1}, + {&__pyx_n_s_uid, __pyx_k_uid, sizeof(__pyx_k_uid), 0, 0, 1, 1}, + {&__pyx_n_s_uir_tuple, __pyx_k_uir_tuple, sizeof(__pyx_k_uir_tuple), 0, 0, 1, 1}, + {&__pyx_kp_s_unable_to_allocate_array_data, __pyx_k_unable_to_allocate_array_data, sizeof(__pyx_k_unable_to_allocate_array_data), 0, 0, 1, 0}, + {&__pyx_kp_s_unable_to_allocate_shape_and_str, __pyx_k_unable_to_allocate_shape_and_str, sizeof(__pyx_k_unable_to_allocate_shape_and_str), 0, 0, 1, 0}, + {&__pyx_n_s_uniform, __pyx_k_uniform, sizeof(__pyx_k_uniform), 0, 0, 1, 1}, + {&__pyx_kp_u_unique_earlier_later_pairs, __pyx_k_unique_earlier_later_pairs, sizeof(__pyx_k_unique_earlier_later_pairs), 0, 1, 0, 0}, + {&__pyx_n_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {&__pyx_n_s_use_item_aspect_popularity, __pyx_k_use_item_aspect_popularity, sizeof(__pyx_k_use_item_aspect_popularity), 0, 0, 1, 1}, + {&__pyx_n_s_user_aspect_opinion, __pyx_k_user_aspect_opinion, sizeof(__pyx_k_user_aspect_opinion), 0, 0, 1, 1}, + {&__pyx_n_s_user_counts, __pyx_k_user_counts, sizeof(__pyx_k_user_counts), 0, 0, 1, 1}, + {&__pyx_n_s_user_ids, __pyx_k_user_ids, sizeof(__pyx_k_user_ids), 0, 0, 1, 1}, + {&__pyx_n_s_user_idx, __pyx_k_user_idx, sizeof(__pyx_k_user_idx), 0, 0, 1, 1}, + {&__pyx_n_s_user_indices, __pyx_k_user_indices, sizeof(__pyx_k_user_indices), 0, 0, 1, 1}, + {&__pyx_n_s_user_item_aspect, __pyx_k_user_item_aspect, sizeof(__pyx_k_user_item_aspect), 0, 0, 1, 1}, + {&__pyx_n_s_user_sentiment, __pyx_k_user_sentiment, sizeof(__pyx_k_user_sentiment), 0, 0, 1, 1}, + {&__pyx_n_s_utils, __pyx_k_utils, sizeof(__pyx_k_utils), 0, 0, 1, 1}, + {&__pyx_n_s_utils_init_utils, __pyx_k_utils_init_utils, sizeof(__pyx_k_utils_init_utils), 0, 0, 1, 1}, + {&__pyx_n_s_val_set, __pyx_k_val_set, sizeof(__pyx_k_val_set), 0, 0, 1, 1}, + {&__pyx_n_s_values, __pyx_k_values, sizeof(__pyx_k_values), 0, 0, 1, 1}, + {&__pyx_n_s_verbose, __pyx_k_verbose, sizeof(__pyx_k_verbose), 0, 0, 1, 1}, + {&__pyx_n_s_version_info, __pyx_k_version_info, sizeof(__pyx_k_version_info), 0, 0, 1, 1}, + {&__pyx_n_s_window, __pyx_k_window, sizeof(__pyx_k_window), 0, 0, 1, 1}, + {&__pyx_n_s_z, __pyx_k_z, sizeof(__pyx_k_z), 0, 0, 1, 1}, + {&__pyx_n_s_zeros_like, __pyx_k_zeros_like, sizeof(__pyx_k_zeros_like), 0, 0, 1, 1}, + {&__pyx_n_s_zip, __pyx_k_zip, sizeof(__pyx_k_zip), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { __pyx_builtin_super = __Pyx_GetBuiltinName(__pyx_n_s_super); if (!__pyx_builtin_super) __PYX_ERR(0, 166, __pyx_L1_error) __pyx_builtin_print = __Pyx_GetBuiltinName(__pyx_n_s_print); if (!__pyx_builtin_print) __PYX_ERR(0, 209, __pyx_L1_error) __pyx_builtin_zip = __Pyx_GetBuiltinName(__pyx_n_s_zip); if (!__pyx_builtin_zip) __PYX_ERR(0, 223, __pyx_L1_error) __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 308, __pyx_L1_error) __pyx_builtin_sum = __Pyx_GetBuiltinName(__pyx_n_s_sum); if (!__pyx_builtin_sum) __PYX_ERR(0, 342, __pyx_L1_error) - __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 485, __pyx_L1_error) - __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(1, 945, __pyx_L1_error) - __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(2, 134, __pyx_L1_error) - __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(2, 149, __pyx_L1_error) - __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(2, 152, __pyx_L1_error) - __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(2, 406, __pyx_L1_error) - __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(2, 615, __pyx_L1_error) - __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(2, 834, __pyx_L1_error) + __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 482, __pyx_L1_error) + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 482, __pyx_L1_error) + __pyx_builtin___import__ = __Pyx_GetBuiltinName(__pyx_n_s_import); if (!__pyx_builtin___import__) __PYX_ERR(1, 100, __pyx_L1_error) + __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(1, 156, __pyx_L1_error) + __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(1, 159, __pyx_L1_error) + __pyx_builtin_AssertionError = __Pyx_GetBuiltinName(__pyx_n_s_AssertionError); if (!__pyx_builtin_AssertionError) __PYX_ERR(1, 373, __pyx_L1_error) + __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(1, 408, __pyx_L1_error) + __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(1, 618, __pyx_L1_error) + __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(1, 914, __pyx_L1_error) + __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(2, 983, __pyx_L1_error) return 0; __pyx_L1_error:; return -1; } +/* #### Code section: cached_constants ### */ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - /* "cornac/models/comparer/recom_comparer_sub.pyx":219 - * start_time = time.time() - * if self.verbose: - * print("Building data started!") # <<<<<<<<<<<<<< - * - * sentiment = self.train_set.sentiment - */ - __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_Building_data_started); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 219, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":453 - * del_o_reg = np.zeros_like(self.O).astype(np.float32) + /* "View.MemoryView":582 + * def suboffsets(self): + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< * - * with trange(self.max_iter, disable=not self.verbose) as progress: # <<<<<<<<<<<<<< - * for epoch in progress: - * correct, skipped, loss, bpr_loss = self._fit_mter( + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) */ - __pyx_tuple__4 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 453, __pyx_L1_error) + __pyx_tuple__4 = PyTuple_New(1); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(1, 582, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__4); + __Pyx_INCREF(__pyx_int_neg_1); + __Pyx_GIVEREF(__pyx_int_neg_1); + PyTuple_SET_ITEM(__pyx_tuple__4, 0, __pyx_int_neg_1); __Pyx_GIVEREF(__pyx_tuple__4); - /* "cornac/models/comparer/recom_comparer_sub.pyx":478 - * - * if self.verbose: - * print('Optimization finished!') # <<<<<<<<<<<<<< + /* "View.MemoryView":679 + * tup = index if isinstance(index, tuple) else (index,) * - * return self + * result = [slice(None)] * ndim # <<<<<<<<<<<<<< + * have_slices = False + * seen_ellipsis = False */ - __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_u_Optimization_finished); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 478, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__5); - __Pyx_GIVEREF(__pyx_tuple__5); + __pyx_slice__5 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__5)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__5); + __Pyx_GIVEREF(__pyx_slice__5); - /* "cornac/models/comparer/recom_comparer_sub.pyx":485 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def _fit_mter( # <<<<<<<<<<<<<< - * self, - * RNGVector rng_pos_uia, + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0x82a3537, 0x6ae9995, 0xb068931): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum */ - __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_No_matching_signature_found); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 485, __pyx_L1_error) + __pyx_tuple__8 = PyTuple_Pack(3, __pyx_int_136983863, __pyx_int_112105877, __pyx_int_184977713); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__8); __Pyx_GIVEREF(__pyx_tuple__8); - __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_Function_call_with_ambiguous_arg); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__9); - __Pyx_GIVEREF(__pyx_tuple__9); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":773 - * n_items, n_top_aspects - * ), - * ts3[:, :-1].argsort(axis=1)[::-1][:, :n_top_aspects], # <<<<<<<<<<<<<< - * ] - * item_scores = ( - */ - __pyx_slice__10 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__10)) __PYX_ERR(0, 773, __pyx_L1_error) - __Pyx_GOTREF(__pyx_slice__10); - __Pyx_GIVEREF(__pyx_slice__10); - __pyx_slice__11 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_slice__11)) __PYX_ERR(0, 773, __pyx_L1_error) - __Pyx_GOTREF(__pyx_slice__11); - __Pyx_GIVEREF(__pyx_slice__11); - __pyx_tuple__12 = PyTuple_Pack(2, __pyx_slice__10, __pyx_slice__11); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 773, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__12); - __Pyx_GIVEREF(__pyx_tuple__12); - __pyx_slice__13 = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_slice__13)) __PYX_ERR(0, 773, __pyx_L1_error) - __Pyx_GOTREF(__pyx_slice__13); - __Pyx_GIVEREF(__pyx_slice__13); - - /* "cornac/models/comparer/recom_comparer_sub.pyx":776 - * ] - * item_scores = ( - * self.alpha * top_aspect_scores.mean(axis=1) + (1 - self.alpha) * ts3[:, -1] # <<<<<<<<<<<<<< - * ) - * - */ - __pyx_tuple__14 = PyTuple_Pack(2, __pyx_slice__10, __pyx_int_neg_1); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 776, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__14); - __Pyx_GIVEREF(__pyx_tuple__14); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":945 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":983 * __pyx_import_array() * except Exception: * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< * * cdef inline int import_umath() except -1: */ - __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(1, 945, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__15); - __Pyx_GIVEREF(__pyx_tuple__15); + __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(2, 983, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__9); + __Pyx_GIVEREF(__pyx_tuple__9); - /* "../../anaconda3/envs/comparer/lib/python3.10/site-packages/numpy/__init__.pxd":951 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":989 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< * * cdef inline int import_ufunc() except -1: */ - __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(1, 951, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__16); - __Pyx_GIVEREF(__pyx_tuple__16); + __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(2, 989, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__10); + __Pyx_GIVEREF(__pyx_tuple__10); - /* "View.MemoryView":134 - * - * if not self.ndim: - * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":219 + * start_time = time.time() + * if self.verbose: + * print("Building data started!") # <<<<<<<<<<<<<< * - * if itemsize <= 0: + * sentiment = self.train_set.sentiment */ - __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_Empty_shape_tuple_for_cython_arr); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(2, 134, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__17); - __Pyx_GIVEREF(__pyx_tuple__17); + __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_u_Building_data_started); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__11); + __Pyx_GIVEREF(__pyx_tuple__11); - /* "View.MemoryView":137 - * - * if itemsize <= 0: - * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":453 + * del_o_reg = np.zeros_like(self.O).astype(np.float32) * - * if not isinstance(format, bytes): + * with trange(self.max_iter, disable=not self.verbose) as progress: # <<<<<<<<<<<<<< + * for epoch in progress: + * correct, skipped, loss, bpr_loss = self._fit_mter( */ - __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_itemsize_0_for_cython_array); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(2, 137, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__18); - __Pyx_GIVEREF(__pyx_tuple__18); + __pyx_tuple__13 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__13); + __Pyx_GIVEREF(__pyx_tuple__13); - /* "View.MemoryView":149 - * - * if not self._shape: - * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":478 * + * if self.verbose: + * print('Optimization finished!') # <<<<<<<<<<<<<< * + * return self */ - __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_shape_and_str); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(2, 149, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__19); - __Pyx_GIVEREF(__pyx_tuple__19); + __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_u_Optimization_finished); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 478, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__14); + __Pyx_GIVEREF(__pyx_tuple__14); - /* "View.MemoryView":177 - * self.data = malloc(self.len) - * if not self.data: - * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":482 + * return self * - * if self.dtype_is_object: + * @cython.cdivision(True) # <<<<<<<<<<<<<< + * @cython.boundscheck(False) + * @cython.wraparound(False) */ - __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_array_data); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(2, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__20); - __Pyx_GIVEREF(__pyx_tuple__20); + __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_No_matching_signature_found); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__17); + __Pyx_GIVEREF(__pyx_tuple__17); + __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_Function_call_with_ambiguous_arg); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__18); + __Pyx_GIVEREF(__pyx_tuple__18); - /* "View.MemoryView":193 - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * if not (flags & bufmode): - * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< - * info.buf = self.data - * info.len = self.len + /* "cornac/models/comparer/recom_comparer_sub.pyx":771 + * n_items, n_top_aspects + * ), + * ts3[:, :-1].argsort(axis=1)[::-1][:, :n_top_aspects], # <<<<<<<<<<<<<< + * ] + * known_item_scores = ( */ - __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_Can_only_create_a_buffer_that_is); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(2, 193, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__21); - __Pyx_GIVEREF(__pyx_tuple__21); + __pyx_slice__19 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_slice__19)) __PYX_ERR(0, 771, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__19); + __Pyx_GIVEREF(__pyx_slice__19); + __pyx_tuple__20 = PyTuple_Pack(2, __pyx_slice__5, __pyx_slice__19); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 771, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__20); + __Pyx_GIVEREF(__pyx_tuple__20); + __pyx_slice__21 = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_slice__21)) __PYX_ERR(0, 771, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__21); + __Pyx_GIVEREF(__pyx_slice__21); - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + /* "cornac/models/comparer/recom_comparer_sub.pyx":774 + * ] + * known_item_scores = ( + * self.alpha * top_aspect_scores.mean(axis=1) + (1 - self.alpha) * ts3[:, -1] # <<<<<<<<<<<<<< + * ) + * */ - __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(2, 2, __pyx_L1_error) + __pyx_tuple__22 = PyTuple_Pack(2, __pyx_slice__5, __pyx_int_neg_1); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 774, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__22); __Pyx_GIVEREF(__pyx_tuple__22); - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + /* "View.MemoryView":100 + * cdef object __pyx_collections_abc_Sequence "__pyx_collections_abc_Sequence" + * try: + * if __import__("sys").version_info >= (3, 3): # <<<<<<<<<<<<<< + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence + * else: */ - __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(2, 4, __pyx_L1_error) + __pyx_tuple__23 = PyTuple_Pack(1, __pyx_n_s_sys); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(1, 100, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__23); __Pyx_GIVEREF(__pyx_tuple__23); - - /* "View.MemoryView":420 - * def __setitem__(memoryview self, object index, object value): - * if self.view.readonly: - * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< - * - * have_slices, index = _unellipsify(index, self.view.ndim) - */ - __pyx_tuple__24 = PyTuple_Pack(1, __pyx_kp_s_Cannot_assign_to_read_only_memor); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(2, 420, __pyx_L1_error) + __pyx_tuple__24 = PyTuple_Pack(2, __pyx_int_3, __pyx_int_3); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(1, 100, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__24); __Pyx_GIVEREF(__pyx_tuple__24); - /* "View.MemoryView":497 - * result = struct.unpack(self.view.format, bytesitem) - * except struct.error: - * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< - * else: - * if len(self.view.format) == 1: + /* "View.MemoryView":101 + * try: + * if __import__("sys").version_info >= (3, 3): + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence # <<<<<<<<<<<<<< + * else: + * __pyx_collections_abc_Sequence = __import__("collections").Sequence */ - __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_Unable_to_convert_item_to_object); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(2, 497, __pyx_L1_error) + __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_collections_abc); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(1, 101, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__25); __Pyx_GIVEREF(__pyx_tuple__25); - /* "View.MemoryView":522 - * def __getbuffer__(self, Py_buffer *info, int flags): - * if flags & PyBUF_WRITABLE and self.view.readonly: - * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< + /* "View.MemoryView":103 + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence + * else: + * __pyx_collections_abc_Sequence = __import__("collections").Sequence # <<<<<<<<<<<<<< + * except: * - * if flags & PyBUF_ND: */ - __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_s_Cannot_create_writable_memory_vi); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(2, 522, __pyx_L1_error) + __pyx_tuple__26 = PyTuple_Pack(1, __pyx_n_s_collections); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(1, 103, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__26); __Pyx_GIVEREF(__pyx_tuple__26); - /* "View.MemoryView":572 - * if self.view.strides == NULL: - * - * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< + /* "View.MemoryView":309 + * return self.name * - * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + * cdef generic = Enum("") # <<<<<<<<<<<<<< + * cdef strided = Enum("") # default + * cdef indirect = Enum("") */ - __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_s_Buffer_view_does_not_expose_stri); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(2, 572, __pyx_L1_error) + __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(1, 309, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__27); __Pyx_GIVEREF(__pyx_tuple__27); - /* "View.MemoryView":579 - * def suboffsets(self): - * if self.view.suboffsets == NULL: - * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + /* "View.MemoryView":310 + * + * cdef generic = Enum("") + * cdef strided = Enum("") # default # <<<<<<<<<<<<<< + * cdef indirect = Enum("") * - * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) */ - __pyx_tuple__28 = PyTuple_New(1); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(2, 579, __pyx_L1_error) + __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(1, 310, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__28); - __Pyx_INCREF(__pyx_int_neg_1); - __Pyx_GIVEREF(__pyx_int_neg_1); - PyTuple_SET_ITEM(__pyx_tuple__28, 0, __pyx_int_neg_1); __Pyx_GIVEREF(__pyx_tuple__28); - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + /* "View.MemoryView":311 + * cdef generic = Enum("") + * cdef strided = Enum("") # default + * cdef indirect = Enum("") # <<<<<<<<<<<<<< + * + * */ - __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(2, 2, __pyx_L1_error) + __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(1, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__29); __Pyx_GIVEREF(__pyx_tuple__29); - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + /* "View.MemoryView":314 + * + * + * cdef contiguous = Enum("") # <<<<<<<<<<<<<< + * cdef indirect_contiguous = Enum("") + * */ - __pyx_tuple__30 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(2, 4, __pyx_L1_error) + __pyx_tuple__30 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(1, 314, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__30); __Pyx_GIVEREF(__pyx_tuple__30); - /* "View.MemoryView":705 - * for suboffset in suboffsets[:ndim]: - * if suboffset >= 0: - * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< + /* "View.MemoryView":315 + * + * cdef contiguous = Enum("") + * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< * * */ - __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_Indirect_dimensions_not_supporte); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(2, 705, __pyx_L1_error) + __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(1, 315, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__31); __Pyx_GIVEREF(__pyx_tuple__31); - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result */ - __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(2, 2, __pyx_L1_error) + __pyx_tuple__32 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(1, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__32); __Pyx_GIVEREF(__pyx_tuple__32); + __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) __PYX_ERR(1, 1, __pyx_L1_error) - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + /* "cornac/models/comparer/recom_comparer_sub.pyx":25 + * from libc.math cimport sqrt, log, exp + * + * import scipy.sparse as sp # <<<<<<<<<<<<<< + * import numpy as np + * cimport numpy as np */ - __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__33); - __Pyx_GIVEREF(__pyx_tuple__33); - __pyx_tuple__34 = PyTuple_Pack(3, __pyx_int_184977713, __pyx_int_136983863, __pyx_int_112105877); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(2, 4, __pyx_L1_error) + __pyx_tuple__34 = PyTuple_Pack(2, __pyx_n_s_scipy, __pyx_n_s_sparse); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 25, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__34); __Pyx_GIVEREF(__pyx_tuple__34); @@ -55591,13 +63001,13 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * self, * name="ComparERSub", */ - __pyx_tuple__36 = PyTuple_Pack(27, __pyx_n_s_self, __pyx_n_s_name, __pyx_n_s_rating_scale, __pyx_n_s_n_user_factors, __pyx_n_s_n_item_factors, __pyx_n_s_n_aspect_factors, __pyx_n_s_n_opinion_factors, __pyx_n_s_n_pair_samples, __pyx_n_s_n_bpr_samples, __pyx_n_s_n_element_samples, __pyx_n_s_n_top_aspects, __pyx_n_s_alpha, __pyx_n_s_min_user_freq, __pyx_n_s_min_pair_freq, __pyx_n_s_min_common_freq, __pyx_n_s_use_item_aspect_popularity, __pyx_n_s_enum_window, __pyx_n_s_lambda_reg, __pyx_n_s_lambda_bpr, __pyx_n_s_lambda_d, __pyx_n_s_max_iter, __pyx_n_s_lr, __pyx_n_s_n_threads, __pyx_n_s_trainable, __pyx_n_s_verbose, __pyx_n_s_init_params, __pyx_n_s_seed); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 137, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__36); - __Pyx_GIVEREF(__pyx_tuple__36); - __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(27, 0, 27, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_comparer_recom_com_2, __pyx_n_s_init, 137, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) __PYX_ERR(0, 137, __pyx_L1_error) - __pyx_tuple__38 = PyTuple_Pack(26, ((PyObject*)__pyx_n_u_ComparERSub), ((PyObject*)__pyx_float_5_0), ((PyObject *)__pyx_int_8), ((PyObject *)__pyx_int_8), ((PyObject *)__pyx_int_8), ((PyObject *)__pyx_int_8), ((PyObject *)__pyx_int_1000), ((PyObject *)__pyx_int_1000), ((PyObject *)__pyx_int_50), ((PyObject *)__pyx_int_100), ((PyObject*)__pyx_float_0_5), ((PyObject *)__pyx_int_2), ((PyObject *)__pyx_int_1), ((PyObject *)__pyx_int_1), ((PyObject *)Py_True), ((PyObject *)Py_None), ((PyObject*)__pyx_float_0_1), ((PyObject *)__pyx_int_10), ((PyObject*)__pyx_float_0_01), ((PyObject *)__pyx_int_200000), ((PyObject*)__pyx_float_0_5), ((PyObject *)__pyx_int_0), ((PyObject *)Py_True), ((PyObject *)Py_False), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 137, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__38); - __Pyx_GIVEREF(__pyx_tuple__38); + __pyx_tuple__35 = PyTuple_Pack(27, __pyx_n_s_self, __pyx_n_s_name, __pyx_n_s_rating_scale, __pyx_n_s_n_user_factors, __pyx_n_s_n_item_factors, __pyx_n_s_n_aspect_factors, __pyx_n_s_n_opinion_factors, __pyx_n_s_n_pair_samples, __pyx_n_s_n_bpr_samples, __pyx_n_s_n_element_samples, __pyx_n_s_n_top_aspects, __pyx_n_s_alpha, __pyx_n_s_min_user_freq, __pyx_n_s_min_pair_freq, __pyx_n_s_min_common_freq, __pyx_n_s_use_item_aspect_popularity, __pyx_n_s_enum_window, __pyx_n_s_lambda_reg, __pyx_n_s_lambda_bpr, __pyx_n_s_lambda_d, __pyx_n_s_max_iter, __pyx_n_s_lr, __pyx_n_s_n_threads, __pyx_n_s_trainable, __pyx_n_s_verbose, __pyx_n_s_init_params, __pyx_n_s_seed); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__35); + __Pyx_GIVEREF(__pyx_tuple__35); + __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(27, 0, 0, 27, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_comparer_recom_com_2, __pyx_n_s_init, 137, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 137, __pyx_L1_error) + __pyx_tuple__37 = PyTuple_Pack(26, ((PyObject*)__pyx_n_u_ComparERSub), ((PyObject*)__pyx_float_5_0), ((PyObject *)__pyx_int_8), ((PyObject *)__pyx_int_8), ((PyObject *)__pyx_int_8), ((PyObject *)__pyx_int_8), ((PyObject *)__pyx_int_1000), ((PyObject *)__pyx_int_1000), ((PyObject *)__pyx_int_50), ((PyObject *)__pyx_int_100), ((PyObject*)__pyx_float_0_5), ((PyObject *)__pyx_int_2), ((PyObject *)__pyx_int_1), ((PyObject *)__pyx_int_1), ((PyObject *)Py_True), ((PyObject *)Py_None), ((PyObject*)__pyx_float_0_1), ((PyObject *)__pyx_int_10), ((PyObject*)__pyx_float_0_01), ((PyObject *)__pyx_int_200000), ((PyObject*)__pyx_float_0_5), ((PyObject *)__pyx_int_0), ((PyObject *)Py_True), ((PyObject *)Py_False), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__37); + __Pyx_GIVEREF(__pyx_tuple__37); /* "cornac/models/comparer/recom_comparer_sub.pyx":178 * @@ -55606,10 +63016,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * start_time = time() * quality_scores = [] */ - __pyx_tuple__40 = PyTuple_Pack(21, __pyx_n_s_self, __pyx_n_s_data_set, __pyx_n_s_sentiment, __pyx_n_s_start_time, __pyx_n_s_quality_scores, __pyx_n_s_map_iid, __pyx_n_s_map_aspect_id, __pyx_n_s_iid, __pyx_n_s_sentiment_tup_ids_by_user, __pyx_n_s_item_aspects, __pyx_n_s_item_aspect_count, __pyx_n_s_total_sentiment_by_aspect, __pyx_n_s_tup_id, __pyx_n_s_aid, __pyx_n_s__39, __pyx_n_s_sentiment_polarity, __pyx_n_s_total_sentiment, __pyx_n_s_avg_sentiment, __pyx_n_s_Y, __pyx_n_s_tup_id, __pyx_n_s_tup); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 178, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__40); - __Pyx_GIVEREF(__pyx_tuple__40); - __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(3, 0, 21, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_comparer_recom_com_2, __pyx_n_s_build_item_quality_matrix, 178, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(0, 178, __pyx_L1_error) + __pyx_tuple__39 = PyTuple_Pack(21, __pyx_n_s_self, __pyx_n_s_data_set, __pyx_n_s_sentiment, __pyx_n_s_start_time, __pyx_n_s_quality_scores, __pyx_n_s_map_iid, __pyx_n_s_map_aspect_id, __pyx_n_s_iid, __pyx_n_s_sentiment_tup_ids_by_user, __pyx_n_s_item_aspects, __pyx_n_s_item_aspect_count, __pyx_n_s_total_sentiment_by_aspect, __pyx_n_s_tup_id, __pyx_n_s_aid, __pyx_n_s__38, __pyx_n_s_sentiment_polarity, __pyx_n_s_total_sentiment, __pyx_n_s_avg_sentiment, __pyx_n_s_Y, __pyx_n_s_tup_id, __pyx_n_s_tup); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__39); + __Pyx_GIVEREF(__pyx_tuple__39); + __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 21, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_comparer_recom_com_2, __pyx_n_s_build_item_quality_matrix, 178, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) __PYX_ERR(0, 178, __pyx_L1_error) /* "cornac/models/comparer/recom_comparer_sub.pyx":213 * return Y @@ -55618,10 +63028,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * import time * from tqdm import tqdm */ - __pyx_tuple__42 = PyTuple_Pack(32, __pyx_n_s_self, __pyx_n_s_data_set, __pyx_n_s_time, __pyx_n_s_tqdm, __pyx_n_s_start_time, __pyx_n_s_sentiment, __pyx_n_s_u_indices, __pyx_n_s_i_indices, __pyx_n_s_r_values, __pyx_n_s_keys, __pyx_n_s_rating_dict, __pyx_n_s_rating_matrix, __pyx_n_s_user_item_aspect, __pyx_n_s_user_aspect_opinion, __pyx_n_s_item_aspect_opinion, __pyx_n_s_u_idx, __pyx_n_s_sentiment_tup_ids_by_item, __pyx_n_s_i_idx, __pyx_n_s_tup_idx, __pyx_n_s_a_idx, __pyx_n_s_o_idx, __pyx_n_s_polarity, __pyx_n_s_key, __pyx_n_s_Y, __pyx_n_s_user_indices, __pyx_n_s_earlier_indices, __pyx_n_s_later_indices, __pyx_n_s_aspect_indices, __pyx_n_s_pair_freq, __pyx_n_s_total_time, __pyx_n_s_u, __pyx_n_s_i); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 213, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__42); - __Pyx_GIVEREF(__pyx_tuple__42); - __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(2, 0, 32, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_comparer_recom_com_2, __pyx_n_s_build_data, 213, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) __PYX_ERR(0, 213, __pyx_L1_error) + __pyx_tuple__41 = PyTuple_Pack(32, __pyx_n_s_self, __pyx_n_s_data_set, __pyx_n_s_time, __pyx_n_s_tqdm, __pyx_n_s_start_time, __pyx_n_s_sentiment, __pyx_n_s_u_indices, __pyx_n_s_i_indices, __pyx_n_s_r_values, __pyx_n_s_keys, __pyx_n_s_rating_dict, __pyx_n_s_rating_matrix, __pyx_n_s_user_item_aspect, __pyx_n_s_user_aspect_opinion, __pyx_n_s_item_aspect_opinion, __pyx_n_s_u_idx, __pyx_n_s_sentiment_tup_ids_by_item, __pyx_n_s_i_idx, __pyx_n_s_tup_idx, __pyx_n_s_a_idx, __pyx_n_s_o_idx, __pyx_n_s_polarity, __pyx_n_s_key, __pyx_n_s_Y, __pyx_n_s_user_indices, __pyx_n_s_earlier_indices, __pyx_n_s_later_indices, __pyx_n_s_aspect_indices, __pyx_n_s_pair_freq, __pyx_n_s_total_time, __pyx_n_s_u, __pyx_n_s_i); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__41); + __Pyx_GIVEREF(__pyx_tuple__41); + __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 32, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_comparer_recom_com_2, __pyx_n_s_build_data, 213, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) __PYX_ERR(0, 213, __pyx_L1_error) /* "cornac/models/comparer/recom_comparer_sub.pyx":290 * ) @@ -55630,10 +63040,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * start_time = time() * from tqdm import tqdm */ - __pyx_tuple__44 = PyTuple_Pack(27, __pyx_n_s_self, __pyx_n_s_data_set, __pyx_n_s_user_item_aspect, __pyx_n_s_Y, __pyx_n_s_start_time, __pyx_n_s_tqdm, __pyx_n_s_chrono_purchased_pairs, __pyx_n_s_user_idx, __pyx_n_s_item_ids, __pyx_n_s__39, __pyx_n_s_window, __pyx_n_s_sub_item_ids, __pyx_n_s_earlier_item_idx, __pyx_n_s_later_item_idx, __pyx_n_s_pair_counts, __pyx_n_s_common_aspect_counts, __pyx_n_s_counted_pairs, __pyx_n_s_not_dominated_pairs_2, __pyx_n_s_count, __pyx_n_s_k, __pyx_n_s_user_indices, __pyx_n_s_earlier_indices, __pyx_n_s_later_indices, __pyx_n_s_aspect_indices, __pyx_n_s_pair_freq, __pyx_n_s_aspect_idx, __pyx_n_s_i); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 290, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__44); - __Pyx_GIVEREF(__pyx_tuple__44); - __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(4, 0, 27, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_comparer_recom_com_2, __pyx_n_s_build_chrono_purchased_pairs, 290, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) __PYX_ERR(0, 290, __pyx_L1_error) + __pyx_tuple__43 = PyTuple_Pack(27, __pyx_n_s_self, __pyx_n_s_data_set, __pyx_n_s_user_item_aspect, __pyx_n_s_Y, __pyx_n_s_start_time, __pyx_n_s_tqdm, __pyx_n_s_chrono_purchased_pairs, __pyx_n_s_user_idx, __pyx_n_s_item_ids, __pyx_n_s__38, __pyx_n_s_window, __pyx_n_s_sub_item_ids, __pyx_n_s_earlier_item_idx, __pyx_n_s_later_item_idx, __pyx_n_s_pair_counts, __pyx_n_s_common_aspect_counts, __pyx_n_s_counted_pairs, __pyx_n_s_not_dominated_pairs_2, __pyx_n_s_count, __pyx_n_s_k, __pyx_n_s_user_indices, __pyx_n_s_earlier_indices, __pyx_n_s_later_indices, __pyx_n_s_aspect_indices, __pyx_n_s_pair_freq, __pyx_n_s_aspect_idx, __pyx_n_s_i); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 290, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__43); + __Pyx_GIVEREF(__pyx_tuple__43); + __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 27, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_comparer_recom_com_2, __pyx_n_s_build_chrono_purchased_pairs, 290, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(0, 290, __pyx_L1_error) /* "cornac/models/comparer/recom_comparer_sub.pyx":352 * @@ -55642,128 +63052,56 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * """Fit the model to observations. * */ - __pyx_tuple__46 = PyTuple_Pack(67, __pyx_n_s_self, __pyx_n_s_train_set, __pyx_n_s_val_set, __pyx_n_s_rating_matrix, __pyx_n_s_rating_dict, __pyx_n_s_user_item_aspect, __pyx_n_s_user_aspect_opinion, __pyx_n_s_item_aspect_opinion, __pyx_n_s_p_user_indices, __pyx_n_s_earlier_indices, __pyx_n_s_later_indices, __pyx_n_s_aspect_indices, __pyx_n_s_pair_freq, __pyx_n_s_X, __pyx_n_s_X_uids, __pyx_n_s_X_iids, __pyx_n_s_X_aids, __pyx_n_s_YU, __pyx_n_s_YU_uids, __pyx_n_s_YU_aids, __pyx_n_s_YU_oids, __pyx_n_s_YI, __pyx_n_s_YI_iids, __pyx_n_s_YI_aids, __pyx_n_s_YI_oids, __pyx_n_s_uid, __pyx_n_s_iid, __pyx_n_s_aid, __pyx_n_s_score, __pyx_n_s_oid, __pyx_n_s_user_counts, __pyx_n_s_user_ids, __pyx_n_s_neg_item_ids, __pyx_n_s_n_threads, __pyx_n_s_rng_pos_uia, __pyx_n_s_rng_pos_uao, __pyx_n_s_rng_pos_iao, __pyx_n_s_rng_pos_pair, __pyx_n_s_rng_pos, __pyx_n_s_rng_neg, __pyx_n_s_sgrad_G1, __pyx_n_s_sgrad_G2, __pyx_n_s_sgrad_G3, __pyx_n_s_sgrad_U, __pyx_n_s_sgrad_I, __pyx_n_s_sgrad_A, __pyx_n_s_sgrad_O, __pyx_n_s_del_g1, __pyx_n_s_del_g2, __pyx_n_s_del_g3, __pyx_n_s_del_u, __pyx_n_s_del_i, __pyx_n_s_del_a, __pyx_n_s_del_o, __pyx_n_s_del_g1_reg, __pyx_n_s_del_g2_reg, __pyx_n_s_del_g3_reg, __pyx_n_s_del_u_reg, __pyx_n_s_del_i_reg, __pyx_n_s_del_a_reg, __pyx_n_s_del_o_reg, __pyx_n_s_progress, __pyx_n_s_epoch, __pyx_n_s_correct, __pyx_n_s_skipped, __pyx_n_s_loss, __pyx_n_s_bpr_loss); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 352, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__46); - __Pyx_GIVEREF(__pyx_tuple__46); - __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(3, 0, 67, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_comparer_recom_com_2, __pyx_n_s_fit, 352, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 352, __pyx_L1_error) - __pyx_tuple__48 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 352, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__48); - __Pyx_GIVEREF(__pyx_tuple__48); + __pyx_tuple__45 = PyTuple_Pack(67, __pyx_n_s_self, __pyx_n_s_train_set, __pyx_n_s_val_set, __pyx_n_s_rating_matrix, __pyx_n_s_rating_dict, __pyx_n_s_user_item_aspect, __pyx_n_s_user_aspect_opinion, __pyx_n_s_item_aspect_opinion, __pyx_n_s_p_user_indices, __pyx_n_s_earlier_indices, __pyx_n_s_later_indices, __pyx_n_s_aspect_indices, __pyx_n_s_pair_freq, __pyx_n_s_X, __pyx_n_s_X_uids, __pyx_n_s_X_iids, __pyx_n_s_X_aids, __pyx_n_s_YU, __pyx_n_s_YU_uids, __pyx_n_s_YU_aids, __pyx_n_s_YU_oids, __pyx_n_s_YI, __pyx_n_s_YI_iids, __pyx_n_s_YI_aids, __pyx_n_s_YI_oids, __pyx_n_s_uid, __pyx_n_s_iid, __pyx_n_s_aid, __pyx_n_s_score, __pyx_n_s_oid, __pyx_n_s_user_counts, __pyx_n_s_user_ids, __pyx_n_s_neg_item_ids, __pyx_n_s_n_threads, __pyx_n_s_rng_pos_uia, __pyx_n_s_rng_pos_uao, __pyx_n_s_rng_pos_iao, __pyx_n_s_rng_pos_pair, __pyx_n_s_rng_pos, __pyx_n_s_rng_neg, __pyx_n_s_sgrad_G1, __pyx_n_s_sgrad_G2, __pyx_n_s_sgrad_G3, __pyx_n_s_sgrad_U, __pyx_n_s_sgrad_I, __pyx_n_s_sgrad_A, __pyx_n_s_sgrad_O, __pyx_n_s_del_g1, __pyx_n_s_del_g2, __pyx_n_s_del_g3, __pyx_n_s_del_u, __pyx_n_s_del_i, __pyx_n_s_del_a, __pyx_n_s_del_o, __pyx_n_s_del_g1_reg, __pyx_n_s_del_g2_reg, __pyx_n_s_del_g3_reg, __pyx_n_s_del_u_reg, __pyx_n_s_del_i_reg, __pyx_n_s_del_a_reg, __pyx_n_s_del_o_reg, __pyx_n_s_progress, __pyx_n_s_epoch, __pyx_n_s_correct, __pyx_n_s_skipped, __pyx_n_s_loss, __pyx_n_s_bpr_loss); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 352, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__45); + __Pyx_GIVEREF(__pyx_tuple__45); + __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 67, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_comparer_recom_com_2, __pyx_n_s_fit, 352, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) __PYX_ERR(0, 352, __pyx_L1_error) + __pyx_tuple__47 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(0, 352, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__47); + __Pyx_GIVEREF(__pyx_tuple__47); - /* "cornac/models/comparer/recom_comparer_sub.pyx":485 + /* "cornac/models/comparer/recom_comparer_sub.pyx":482 + * return self + * + * @cython.cdivision(True) # <<<<<<<<<<<<<< * @cython.boundscheck(False) * @cython.wraparound(False) - * def _fit_mter( # <<<<<<<<<<<<<< - * self, - * RNGVector rng_pos_uia, */ - __pyx_tuple__49 = PyTuple_Pack(106, __pyx_n_s_self, __pyx_n_s_rng_pos_uia, __pyx_n_s_rng_pos_uao, __pyx_n_s_rng_pos_iao, __pyx_n_s_rng_pos_pair, __pyx_n_s_rng_pos, __pyx_n_s_rng_neg, __pyx_n_s_n_threads, __pyx_n_s_X, __pyx_n_s_X_uids, __pyx_n_s_X_iids, __pyx_n_s_X_aids, __pyx_n_s_YU, __pyx_n_s_YU_uids, __pyx_n_s_YU_aids, __pyx_n_s_YU_oids, __pyx_n_s_YI, __pyx_n_s_YI_iids, __pyx_n_s_YI_aids, __pyx_n_s_YI_oids, __pyx_n_s_rating_dict, __pyx_n_s_user_ids, __pyx_n_s_item_ids, __pyx_n_s_neg_item_ids, __pyx_n_s_indptr, __pyx_n_s_p_user_indices, __pyx_n_s_earlier_indices, __pyx_n_s_later_indices, __pyx_n_s_aspect_indices, __pyx_n_s_pair_counts, __pyx_n_s_G1, __pyx_n_s_G2, __pyx_n_s_G3, __pyx_n_s_U, __pyx_n_s_I, __pyx_n_s_A, __pyx_n_s_O, __pyx_n_s_sgrad_G1, __pyx_n_s_sgrad_G2, __pyx_n_s_sgrad_G3, __pyx_n_s_sgrad_U, __pyx_n_s_sgrad_I, __pyx_n_s_sgrad_A, __pyx_n_s_sgrad_O, __pyx_n_s_del_g1, __pyx_n_s_del_g2, __pyx_n_s_del_g3, __pyx_n_s_del_u, __pyx_n_s_del_i, __pyx_n_s_del_a, __pyx_n_s_del_o, __pyx_n_s_del_g1_reg, __pyx_n_s_del_g2_reg, __pyx_n_s_del_g3_reg, __pyx_n_s_del_u_reg, __pyx_n_s_del_i_reg, __pyx_n_s_del_a_reg, __pyx_n_s_del_o_reg, __pyx_n_s_s, __pyx_n_s_i_index, __pyx_n_s_j_index, __pyx_n_s_correct, __pyx_n_s_skipped, __pyx_n_s_aspect_correct, __pyx_n_s_n_users, __pyx_n_s_n_items, __pyx_n_s_n_aspects, __pyx_n_s_n_opinions, __pyx_n_s_n_user_factors, __pyx_n_s_n_item_factors, __pyx_n_s_n_aspect_factors, __pyx_n_s_n_opinion_factors, __pyx_n_s_num_samples, __pyx_n_s_num_bpr_samples, __pyx_n_s_num_pair_samples, __pyx_n_s__39, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_idx, __pyx_n_s_jdx, __pyx_n_s_u_idx, __pyx_n_s_i_idx, __pyx_n_s_a_idx, __pyx_n_s_o_idx, __pyx_n_s_j_idx, __pyx_n_s_thread_id, __pyx_n_s_z, __pyx_n_s_score, __pyx_n_s_i_score, __pyx_n_s_j_score, __pyx_n_s_pred, __pyx_n_s_temp, __pyx_n_s_i_ij, __pyx_n_s_a_ji, __pyx_n_s_loss, __pyx_n_s_bpr_loss, __pyx_n_s_aspect_bpr_loss, __pyx_n_s_del_sqerror, __pyx_n_s_del_bpr, __pyx_n_s_del_aspect_bpr, __pyx_n_s_eps, __pyx_n_s_lr, __pyx_n_s_ld_reg, __pyx_n_s_ld_bpr, __pyx_n_s_lambda_d); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__49); - __Pyx_GIVEREF(__pyx_tuple__49); - __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(58, 0, 106, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_comparer_recom_com_2, __pyx_n_s_fit_mter, 485, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) __PYX_ERR(0, 485, __pyx_L1_error) + __pyx_tuple__48 = PyTuple_Pack(106, __pyx_n_s_self, __pyx_n_s_rng_pos_uia, __pyx_n_s_rng_pos_uao, __pyx_n_s_rng_pos_iao, __pyx_n_s_rng_pos_pair, __pyx_n_s_rng_pos, __pyx_n_s_rng_neg, __pyx_n_s_n_threads, __pyx_n_s_X, __pyx_n_s_X_uids, __pyx_n_s_X_iids, __pyx_n_s_X_aids, __pyx_n_s_YU, __pyx_n_s_YU_uids, __pyx_n_s_YU_aids, __pyx_n_s_YU_oids, __pyx_n_s_YI, __pyx_n_s_YI_iids, __pyx_n_s_YI_aids, __pyx_n_s_YI_oids, __pyx_n_s_rating_dict, __pyx_n_s_user_ids, __pyx_n_s_item_ids, __pyx_n_s_neg_item_ids, __pyx_n_s_indptr, __pyx_n_s_p_user_indices, __pyx_n_s_earlier_indices, __pyx_n_s_later_indices, __pyx_n_s_aspect_indices, __pyx_n_s_pair_counts, __pyx_n_s_G1, __pyx_n_s_G2, __pyx_n_s_G3, __pyx_n_s_U, __pyx_n_s_I, __pyx_n_s_A, __pyx_n_s_O, __pyx_n_s_sgrad_G1, __pyx_n_s_sgrad_G2, __pyx_n_s_sgrad_G3, __pyx_n_s_sgrad_U, __pyx_n_s_sgrad_I, __pyx_n_s_sgrad_A, __pyx_n_s_sgrad_O, __pyx_n_s_del_g1, __pyx_n_s_del_g2, __pyx_n_s_del_g3, __pyx_n_s_del_u, __pyx_n_s_del_i, __pyx_n_s_del_a, __pyx_n_s_del_o, __pyx_n_s_del_g1_reg, __pyx_n_s_del_g2_reg, __pyx_n_s_del_g3_reg, __pyx_n_s_del_u_reg, __pyx_n_s_del_i_reg, __pyx_n_s_del_a_reg, __pyx_n_s_del_o_reg, __pyx_n_s_s, __pyx_n_s_i_index, __pyx_n_s_j_index, __pyx_n_s_correct, __pyx_n_s_skipped, __pyx_n_s_aspect_correct, __pyx_n_s_n_users, __pyx_n_s_n_items, __pyx_n_s_n_aspects, __pyx_n_s_n_opinions, __pyx_n_s_n_user_factors, __pyx_n_s_n_item_factors, __pyx_n_s_n_aspect_factors, __pyx_n_s_n_opinion_factors, __pyx_n_s_num_samples, __pyx_n_s_num_bpr_samples, __pyx_n_s_num_pair_samples, __pyx_n_s__38, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_idx, __pyx_n_s_jdx, __pyx_n_s_u_idx, __pyx_n_s_i_idx, __pyx_n_s_a_idx, __pyx_n_s_o_idx, __pyx_n_s_j_idx, __pyx_n_s_thread_id, __pyx_n_s_z, __pyx_n_s_score, __pyx_n_s_i_score, __pyx_n_s_j_score, __pyx_n_s_pred, __pyx_n_s_temp, __pyx_n_s_i_ij, __pyx_n_s_a_ji, __pyx_n_s_loss, __pyx_n_s_bpr_loss, __pyx_n_s_aspect_bpr_loss, __pyx_n_s_del_sqerror, __pyx_n_s_del_bpr, __pyx_n_s_del_aspect_bpr, __pyx_n_s_eps, __pyx_n_s_lr, __pyx_n_s_ld_reg, __pyx_n_s_ld_bpr, __pyx_n_s_lambda_d); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__48); + __Pyx_GIVEREF(__pyx_tuple__48); + __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(58, 0, 0, 106, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_comparer_recom_com_2, __pyx_n_s_fit_mter, 482, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 482, __pyx_L1_error) /* "cornac/models/comparer/recom_comparer_sub.pyx":760 * return correct, skipped, loss, bpr_loss * - * def rank(self, user_id, item_ids=None): # <<<<<<<<<<<<<< + * def rank(self, user_idx, item_indices=None): # <<<<<<<<<<<<<< * if self.alpha > 0 and self.n_top_aspects > 0: * n_items = self.train_set.num_items */ - __pyx_tuple__51 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_user_id, __pyx_n_s_item_ids, __pyx_n_s_n_items, __pyx_n_s_n_top_aspects, __pyx_n_s_ts1, __pyx_n_s_ts2, __pyx_n_s_ts3, __pyx_n_s_top_aspect_scores, __pyx_n_s_item_scores, __pyx_n_s_item_rank); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 760, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__51); - __Pyx_GIVEREF(__pyx_tuple__51); - __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_comparer_recom_com_2, __pyx_n_s_rank, 760, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) __PYX_ERR(0, 760, __pyx_L1_error) - __pyx_tuple__53 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(0, 760, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__53); - __Pyx_GIVEREF(__pyx_tuple__53); - - /* "View.MemoryView":287 - * return self.name - * - * cdef generic = Enum("") # <<<<<<<<<<<<<< - * cdef strided = Enum("") # default - * cdef indirect = Enum("") - */ - __pyx_tuple__54 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(2, 287, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__54); - __Pyx_GIVEREF(__pyx_tuple__54); - - /* "View.MemoryView":288 - * - * cdef generic = Enum("") - * cdef strided = Enum("") # default # <<<<<<<<<<<<<< - * cdef indirect = Enum("") - * - */ - __pyx_tuple__55 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(2, 288, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__55); - __Pyx_GIVEREF(__pyx_tuple__55); - - /* "View.MemoryView":289 - * cdef generic = Enum("") - * cdef strided = Enum("") # default - * cdef indirect = Enum("") # <<<<<<<<<<<<<< - * - * - */ - __pyx_tuple__56 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__56)) __PYX_ERR(2, 289, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__56); - __Pyx_GIVEREF(__pyx_tuple__56); - - /* "View.MemoryView":292 - * - * - * cdef contiguous = Enum("") # <<<<<<<<<<<<<< - * cdef indirect_contiguous = Enum("") - * - */ - __pyx_tuple__57 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(2, 292, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__57); - __Pyx_GIVEREF(__pyx_tuple__57); - - /* "View.MemoryView":293 - * - * cdef contiguous = Enum("") - * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< - * - * - */ - __pyx_tuple__58 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(2, 293, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__58); - __Pyx_GIVEREF(__pyx_tuple__58); - - /* "(tree fragment)":1 - * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - __pyx_tuple__59 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__59); - __Pyx_GIVEREF(__pyx_tuple__59); - __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) __PYX_ERR(2, 1, __pyx_L1_error) + __pyx_tuple__50 = PyTuple_Pack(13, __pyx_n_s_self, __pyx_n_s_user_idx, __pyx_n_s_item_indices, __pyx_n_s_n_items, __pyx_n_s_n_top_aspects, __pyx_n_s_ts1, __pyx_n_s_ts2, __pyx_n_s_ts3, __pyx_n_s_top_aspect_scores, __pyx_n_s_known_item_scores, __pyx_n_s_all_item_scores, __pyx_n_s_item_scores, __pyx_n_s_item_rank); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 760, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__50); + __Pyx_GIVEREF(__pyx_tuple__50); + __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_comparer_recom_com_2, __pyx_n_s_rank, 760, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(0, 760, __pyx_L1_error) + __pyx_tuple__52 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 760, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__52); + __Pyx_GIVEREF(__pyx_tuple__52); __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; __Pyx_RefNannyFinishContext(); return -1; } +/* #### Code section: init_constants ### */ -static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { - /* AssertionsEnabled.init */ - __Pyx_init_assertions_enabled(); - -if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error) - - /* InitThreads.init */ - #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 -PyEval_InitThreads(); -#endif - -if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error) - +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { __pyx_umethod_PyDict_Type_get.type = (PyObject*)&PyDict_Type; + __pyx_umethod_PyDict_Type_get.method_name = &__pyx_n_s_get; __pyx_umethod_PyDict_Type_keys.type = (PyObject*)&PyDict_Type; - if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_umethod_PyDict_Type_keys.method_name = &__pyx_n_s_keys; + __pyx_umethod_PyDict_Type_values.type = (PyObject*)&PyDict_Type; + __pyx_umethod_PyDict_Type_values.method_name = &__pyx_n_s_values; + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); __pyx_float_0_1 = PyFloat_FromDouble(0.1); if (unlikely(!__pyx_float_0_1)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_float_0_5 = PyFloat_FromDouble(0.5); if (unlikely(!__pyx_float_0_5)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_float_5_0 = PyFloat_FromDouble(5.0); if (unlikely(!__pyx_float_5_0)) __PYX_ERR(0, 1, __pyx_L1_error) @@ -55789,6 +63127,38 @@ if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_L1_error:; return -1; } +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + /* AssertionsEnabled.init */ + __Pyx_init_assertions_enabled(); + +if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error) + + /* NumpyImportArray.init */ + /* + * Cython has automatically inserted a call to _import_array since + * you didn't include one when you cimported numpy. To disable this + * add the line + * numpy._import_array + */ +#ifdef NPY_FEATURE_VERSION +#if !NO_IMPORT_ARRAY +if (unlikely(_import_array() == -1)) { + PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import " + "(auto-generated because you didn't call 'numpy.import_array()' after cimporting numpy; " + "use 'numpy._import_array' to disable if you are certain you don't need it)."); +} +#endif +#endif + +if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error) + + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_module ### */ static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ @@ -55802,6 +63172,7 @@ static int __Pyx_modinit_global_init_code(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); /*--- Global init code ---*/ + __pyx_collections_abc_Sequence = Py_None; Py_INCREF(Py_None); generic = Py_None; Py_INCREF(Py_None); strided = Py_None; Py_INCREF(Py_None); indirect = Py_None; Py_INCREF(Py_None); @@ -55829,6 +63200,7 @@ static int __Pyx_modinit_function_export_code(void) { static int __Pyx_modinit_type_init_code(void) { __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -55836,22 +63208,61 @@ static int __Pyx_modinit_type_init_code(void) { /*--- Type init code ---*/ __pyx_vtabptr_array = &__pyx_vtable_array; __pyx_vtable_array.get_memview = (PyObject *(*)(struct __pyx_array_obj *))__pyx_array_get_memview; - if (PyType_Ready(&__pyx_type___pyx_array) < 0) __PYX_ERR(2, 106, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type___pyx_array.tp_print = 0; + #if CYTHON_USE_TYPE_SPECS + __pyx_array_type = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type___pyx_array_spec, NULL); if (unlikely(!__pyx_array_type)) __PYX_ERR(1, 114, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + __pyx_array_type->tp_as_buffer = &__pyx_tp_as_buffer_array; + if (!__pyx_array_type->tp_as_buffer->bf_releasebuffer && __pyx_array_type->tp_base->tp_as_buffer && __pyx_array_type->tp_base->tp_as_buffer->bf_releasebuffer) { + __pyx_array_type->tp_as_buffer->bf_releasebuffer = __pyx_array_type->tp_base->tp_as_buffer->bf_releasebuffer; + } + #elif defined(Py_bf_getbuffer) && defined(Py_bf_releasebuffer) + /* PY_VERSION_HEX >= 0x03090000 || Py_LIMITED_API >= 0x030B0000 */ + #elif defined(_MSC_VER) + #pragma message ("The buffer protocol is not supported in the Limited C-API < 3.11.") + #else + #warning "The buffer protocol is not supported in the Limited C-API < 3.11." #endif - if (__Pyx_SetVtable(__pyx_type___pyx_array.tp_dict, __pyx_vtabptr_array) < 0) __PYX_ERR(2, 106, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_array) < 0) __PYX_ERR(2, 106, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type___pyx_array_spec, __pyx_array_type) < 0) __PYX_ERR(1, 114, __pyx_L1_error) + #else __pyx_array_type = &__pyx_type___pyx_array; - if (PyType_Ready(&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(2, 280, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type___pyx_MemviewEnum.tp_print = 0; #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_MemviewEnum.tp_dictoffset && __pyx_type___pyx_MemviewEnum.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type___pyx_MemviewEnum.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(2, 280, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_array_type) < 0) __PYX_ERR(1, 114, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_array_type->tp_print = 0; + #endif + if (__Pyx_SetVtable(__pyx_array_type, __pyx_vtabptr_array) < 0) __PYX_ERR(1, 114, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_MergeVtables(__pyx_array_type) < 0) __PYX_ERR(1, 114, __pyx_L1_error) + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_array_type) < 0) __PYX_ERR(1, 114, __pyx_L1_error) + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_MemviewEnum_type = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type___pyx_MemviewEnum_spec, NULL); if (unlikely(!__pyx_MemviewEnum_type)) __PYX_ERR(1, 302, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type___pyx_MemviewEnum_spec, __pyx_MemviewEnum_type) < 0) __PYX_ERR(1, 302, __pyx_L1_error) + #else __pyx_MemviewEnum_type = &__pyx_type___pyx_MemviewEnum; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_MemviewEnum_type) < 0) __PYX_ERR(1, 302, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_MemviewEnum_type->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_MemviewEnum_type->tp_dictoffset && __pyx_MemviewEnum_type->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_MemviewEnum_type->tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_MemviewEnum_type) < 0) __PYX_ERR(1, 302, __pyx_L1_error) + #endif __pyx_vtabptr_memoryview = &__pyx_vtable_memoryview; __pyx_vtable_memoryview.get_item_pointer = (char *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_get_item_pointer; __pyx_vtable_memoryview.is_slice = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_is_slice; @@ -55860,34 +63271,85 @@ static int __Pyx_modinit_type_init_code(void) { __pyx_vtable_memoryview.setitem_indexed = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_indexed; __pyx_vtable_memoryview.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryview_convert_item_to_object; __pyx_vtable_memoryview.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryview_assign_item_from_object; - if (PyType_Ready(&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(2, 331, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type___pyx_memoryview.tp_print = 0; + __pyx_vtable_memoryview._get_base = (PyObject *(*)(struct __pyx_memoryview_obj *))__pyx_memoryview__get_base; + #if CYTHON_USE_TYPE_SPECS + __pyx_memoryview_type = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type___pyx_memoryview_spec, NULL); if (unlikely(!__pyx_memoryview_type)) __PYX_ERR(1, 337, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + __pyx_memoryview_type->tp_as_buffer = &__pyx_tp_as_buffer_memoryview; + if (!__pyx_memoryview_type->tp_as_buffer->bf_releasebuffer && __pyx_memoryview_type->tp_base->tp_as_buffer && __pyx_memoryview_type->tp_base->tp_as_buffer->bf_releasebuffer) { + __pyx_memoryview_type->tp_as_buffer->bf_releasebuffer = __pyx_memoryview_type->tp_base->tp_as_buffer->bf_releasebuffer; + } + #elif defined(Py_bf_getbuffer) && defined(Py_bf_releasebuffer) + /* PY_VERSION_HEX >= 0x03090000 || Py_LIMITED_API >= 0x030B0000 */ + #elif defined(_MSC_VER) + #pragma message ("The buffer protocol is not supported in the Limited C-API < 3.11.") + #else + #warning "The buffer protocol is not supported in the Limited C-API < 3.11." #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryview.tp_dictoffset && __pyx_type___pyx_memoryview.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type___pyx_memoryview.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (__Pyx_SetVtable(__pyx_type___pyx_memoryview.tp_dict, __pyx_vtabptr_memoryview) < 0) __PYX_ERR(2, 331, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(2, 331, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type___pyx_memoryview_spec, __pyx_memoryview_type) < 0) __PYX_ERR(1, 337, __pyx_L1_error) + #else __pyx_memoryview_type = &__pyx_type___pyx_memoryview; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_memoryview_type) < 0) __PYX_ERR(1, 337, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_memoryview_type->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_memoryview_type->tp_dictoffset && __pyx_memoryview_type->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_memoryview_type->tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + #endif + if (__Pyx_SetVtable(__pyx_memoryview_type, __pyx_vtabptr_memoryview) < 0) __PYX_ERR(1, 337, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_MergeVtables(__pyx_memoryview_type) < 0) __PYX_ERR(1, 337, __pyx_L1_error) + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_memoryview_type) < 0) __PYX_ERR(1, 337, __pyx_L1_error) + #endif __pyx_vtabptr__memoryviewslice = &__pyx_vtable__memoryviewslice; __pyx_vtable__memoryviewslice.__pyx_base = *__pyx_vtabptr_memoryview; __pyx_vtable__memoryviewslice.__pyx_base.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryviewslice_convert_item_to_object; __pyx_vtable__memoryviewslice.__pyx_base.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryviewslice_assign_item_from_object; - __pyx_type___pyx_memoryviewslice.tp_base = __pyx_memoryview_type; - if (PyType_Ready(&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(2, 967, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type___pyx_memoryviewslice.tp_print = 0; + __pyx_vtable__memoryviewslice.__pyx_base._get_base = (PyObject *(*)(struct __pyx_memoryview_obj *))__pyx_memoryviewslice__get_base; + #if CYTHON_USE_TYPE_SPECS + __pyx_t_1 = PyTuple_Pack(1, (PyObject *)__pyx_memoryview_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 952, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_memoryviewslice_type = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type___pyx_memoryviewslice_spec, __pyx_t_1); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_memoryviewslice_type)) __PYX_ERR(1, 952, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type___pyx_memoryviewslice_spec, __pyx_memoryviewslice_type) < 0) __PYX_ERR(1, 952, __pyx_L1_error) + #else + __pyx_memoryviewslice_type = &__pyx_type___pyx_memoryviewslice; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + __pyx_memoryviewslice_type->tp_base = __pyx_memoryview_type; + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_memoryviewslice_type) < 0) __PYX_ERR(1, 952, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_memoryviewslice_type->tp_print = 0; #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryviewslice.tp_dictoffset && __pyx_type___pyx_memoryviewslice.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type___pyx_memoryviewslice.tp_getattro = __Pyx_PyObject_GenericGetAttr; + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_memoryviewslice_type->tp_dictoffset && __pyx_memoryviewslice_type->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_memoryviewslice_type->tp_getattro = __Pyx_PyObject_GenericGetAttr; } - if (__Pyx_SetVtable(__pyx_type___pyx_memoryviewslice.tp_dict, __pyx_vtabptr__memoryviewslice) < 0) __PYX_ERR(2, 967, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(2, 967, __pyx_L1_error) - __pyx_memoryviewslice_type = &__pyx_type___pyx_memoryviewslice; + #endif + if (__Pyx_SetVtable(__pyx_memoryviewslice_type, __pyx_vtabptr__memoryviewslice) < 0) __PYX_ERR(1, 952, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_MergeVtables(__pyx_memoryviewslice_type) < 0) __PYX_ERR(1, 952, __pyx_L1_error) + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_memoryviewslice_type) < 0) __PYX_ERR(1, 952, __pyx_L1_error) + #endif __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); __Pyx_RefNannyFinishContext(); return -1; } @@ -55902,41 +63364,43 @@ static int __Pyx_modinit_type_import_code(void) { /*--- Type import code ---*/ __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 9, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_7cpython_4type_type = __Pyx_ImportType_0_29_36(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", + __pyx_ptype_7cpython_4type_type = __Pyx_ImportType_3_0_0(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 - sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyTypeObject), + sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyTypeObject), + #elif CYTHON_COMPILING_IN_LIMITED_API + sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyTypeObject), #else - sizeof(PyHeapTypeObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyHeapTypeObject), + sizeof(PyHeapTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyHeapTypeObject), #endif - __Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(3, 9, __pyx_L1_error) + __Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(3, 9, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyImport_ImportModule("numpy"); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 200, __pyx_L1_error) + __pyx_t_1 = PyImport_ImportModule("numpy"); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 202, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_5numpy_dtype = __Pyx_ImportType_0_29_36(__pyx_t_1, "numpy", "dtype", sizeof(PyArray_Descr), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyArray_Descr),__Pyx_ImportType_CheckSize_Ignore_0_29_36); if (!__pyx_ptype_5numpy_dtype) __PYX_ERR(1, 200, __pyx_L1_error) - __pyx_ptype_5numpy_flatiter = __Pyx_ImportType_0_29_36(__pyx_t_1, "numpy", "flatiter", sizeof(PyArrayIterObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyArrayIterObject),__Pyx_ImportType_CheckSize_Ignore_0_29_36); if (!__pyx_ptype_5numpy_flatiter) __PYX_ERR(1, 223, __pyx_L1_error) - __pyx_ptype_5numpy_broadcast = __Pyx_ImportType_0_29_36(__pyx_t_1, "numpy", "broadcast", sizeof(PyArrayMultiIterObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyArrayMultiIterObject),__Pyx_ImportType_CheckSize_Ignore_0_29_36); if (!__pyx_ptype_5numpy_broadcast) __PYX_ERR(1, 227, __pyx_L1_error) - __pyx_ptype_5numpy_ndarray = __Pyx_ImportType_0_29_36(__pyx_t_1, "numpy", "ndarray", sizeof(PyArrayObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyArrayObject),__Pyx_ImportType_CheckSize_Ignore_0_29_36); if (!__pyx_ptype_5numpy_ndarray) __PYX_ERR(1, 239, __pyx_L1_error) - __pyx_ptype_5numpy_generic = __Pyx_ImportType_0_29_36(__pyx_t_1, "numpy", "generic", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyObject),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_5numpy_generic) __PYX_ERR(1, 771, __pyx_L1_error) - __pyx_ptype_5numpy_number = __Pyx_ImportType_0_29_36(__pyx_t_1, "numpy", "number", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyObject),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_5numpy_number) __PYX_ERR(1, 773, __pyx_L1_error) - __pyx_ptype_5numpy_integer = __Pyx_ImportType_0_29_36(__pyx_t_1, "numpy", "integer", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyObject),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_5numpy_integer) __PYX_ERR(1, 775, __pyx_L1_error) - __pyx_ptype_5numpy_signedinteger = __Pyx_ImportType_0_29_36(__pyx_t_1, "numpy", "signedinteger", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyObject),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_5numpy_signedinteger) __PYX_ERR(1, 777, __pyx_L1_error) - __pyx_ptype_5numpy_unsignedinteger = __Pyx_ImportType_0_29_36(__pyx_t_1, "numpy", "unsignedinteger", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyObject),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_5numpy_unsignedinteger) __PYX_ERR(1, 779, __pyx_L1_error) - __pyx_ptype_5numpy_inexact = __Pyx_ImportType_0_29_36(__pyx_t_1, "numpy", "inexact", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyObject),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_5numpy_inexact) __PYX_ERR(1, 781, __pyx_L1_error) - __pyx_ptype_5numpy_floating = __Pyx_ImportType_0_29_36(__pyx_t_1, "numpy", "floating", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyObject),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_5numpy_floating) __PYX_ERR(1, 783, __pyx_L1_error) - __pyx_ptype_5numpy_complexfloating = __Pyx_ImportType_0_29_36(__pyx_t_1, "numpy", "complexfloating", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyObject),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_5numpy_complexfloating) __PYX_ERR(1, 785, __pyx_L1_error) - __pyx_ptype_5numpy_flexible = __Pyx_ImportType_0_29_36(__pyx_t_1, "numpy", "flexible", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyObject),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_5numpy_flexible) __PYX_ERR(1, 787, __pyx_L1_error) - __pyx_ptype_5numpy_character = __Pyx_ImportType_0_29_36(__pyx_t_1, "numpy", "character", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyObject),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_5numpy_character) __PYX_ERR(1, 789, __pyx_L1_error) - __pyx_ptype_5numpy_ufunc = __Pyx_ImportType_0_29_36(__pyx_t_1, "numpy", "ufunc", sizeof(PyUFuncObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyUFuncObject),__Pyx_ImportType_CheckSize_Ignore_0_29_36); if (!__pyx_ptype_5numpy_ufunc) __PYX_ERR(1, 827, __pyx_L1_error) + __pyx_ptype_5numpy_dtype = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "dtype", sizeof(PyArray_Descr), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyArray_Descr),__Pyx_ImportType_CheckSize_Ignore_3_0_0); if (!__pyx_ptype_5numpy_dtype) __PYX_ERR(2, 202, __pyx_L1_error) + __pyx_ptype_5numpy_flatiter = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "flatiter", sizeof(PyArrayIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyArrayIterObject),__Pyx_ImportType_CheckSize_Ignore_3_0_0); if (!__pyx_ptype_5numpy_flatiter) __PYX_ERR(2, 225, __pyx_L1_error) + __pyx_ptype_5numpy_broadcast = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "broadcast", sizeof(PyArrayMultiIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyArrayMultiIterObject),__Pyx_ImportType_CheckSize_Ignore_3_0_0); if (!__pyx_ptype_5numpy_broadcast) __PYX_ERR(2, 229, __pyx_L1_error) + __pyx_ptype_5numpy_ndarray = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "ndarray", sizeof(PyArrayObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyArrayObject),__Pyx_ImportType_CheckSize_Ignore_3_0_0); if (!__pyx_ptype_5numpy_ndarray) __PYX_ERR(2, 238, __pyx_L1_error) + __pyx_ptype_5numpy_generic = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "generic", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_generic) __PYX_ERR(2, 809, __pyx_L1_error) + __pyx_ptype_5numpy_number = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "number", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_number) __PYX_ERR(2, 811, __pyx_L1_error) + __pyx_ptype_5numpy_integer = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "integer", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_integer) __PYX_ERR(2, 813, __pyx_L1_error) + __pyx_ptype_5numpy_signedinteger = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "signedinteger", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_signedinteger) __PYX_ERR(2, 815, __pyx_L1_error) + __pyx_ptype_5numpy_unsignedinteger = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "unsignedinteger", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_unsignedinteger) __PYX_ERR(2, 817, __pyx_L1_error) + __pyx_ptype_5numpy_inexact = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "inexact", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_inexact) __PYX_ERR(2, 819, __pyx_L1_error) + __pyx_ptype_5numpy_floating = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "floating", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_floating) __PYX_ERR(2, 821, __pyx_L1_error) + __pyx_ptype_5numpy_complexfloating = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "complexfloating", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_complexfloating) __PYX_ERR(2, 823, __pyx_L1_error) + __pyx_ptype_5numpy_flexible = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "flexible", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_flexible) __PYX_ERR(2, 825, __pyx_L1_error) + __pyx_ptype_5numpy_character = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "character", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_character) __PYX_ERR(2, 827, __pyx_L1_error) + __pyx_ptype_5numpy_ufunc = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "ufunc", sizeof(PyUFuncObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyUFuncObject),__Pyx_ImportType_CheckSize_Ignore_3_0_0); if (!__pyx_ptype_5numpy_ufunc) __PYX_ERR(2, 865, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyImport_ImportModule("cornac.utils.fast_dict"); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 27, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict = __Pyx_ImportType_0_29_36(__pyx_t_1, "cornac.utils.fast_dict", "IntFloatDict", sizeof(struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict) __PYX_ERR(4, 27, __pyx_L1_error) - __pyx_vtabptr_6cornac_5utils_9fast_dict_IntFloatDict = (struct __pyx_vtabstruct_6cornac_5utils_9fast_dict_IntFloatDict*)__Pyx_GetVtable(__pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict->tp_dict); if (unlikely(!__pyx_vtabptr_6cornac_5utils_9fast_dict_IntFloatDict)) __PYX_ERR(4, 27, __pyx_L1_error) + __pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict = __Pyx_ImportType_3_0_0(__pyx_t_1, "cornac.utils.fast_dict", "IntFloatDict", sizeof(struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(struct __pyx_obj_6cornac_5utils_9fast_dict_IntFloatDict),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict) __PYX_ERR(4, 27, __pyx_L1_error) + __pyx_vtabptr_6cornac_5utils_9fast_dict_IntFloatDict = (struct __pyx_vtabstruct_6cornac_5utils_9fast_dict_IntFloatDict*)__Pyx_GetVtable(__pyx_ptype_6cornac_5utils_9fast_dict_IntFloatDict); if (unlikely(!__pyx_vtabptr_6cornac_5utils_9fast_dict_IntFloatDict)) __PYX_ERR(4, 27, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyImport_ImportModule("cornac.models.bpr.recom_bpr"); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 35, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector = __Pyx_ImportType_0_29_36(__pyx_t_1, "cornac.models.bpr.recom_bpr", "RNGVector", sizeof(struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector) __PYX_ERR(5, 35, __pyx_L1_error) - __pyx_vtabptr_6cornac_6models_3bpr_9recom_bpr_RNGVector = (struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector*)__Pyx_GetVtable(__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector->tp_dict); if (unlikely(!__pyx_vtabptr_6cornac_6models_3bpr_9recom_bpr_RNGVector)) __PYX_ERR(5, 35, __pyx_L1_error) + __pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector = __Pyx_ImportType_3_0_0(__pyx_t_1, "cornac.models.bpr.recom_bpr", "RNGVector", sizeof(struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(struct __pyx_obj_6cornac_6models_3bpr_9recom_bpr_RNGVector),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector) __PYX_ERR(5, 35, __pyx_L1_error) + __pyx_vtabptr_6cornac_6models_3bpr_9recom_bpr_RNGVector = (struct __pyx_vtabstruct_6cornac_6models_3bpr_9recom_bpr_RNGVector*)__Pyx_GetVtable(__pyx_ptype_6cornac_6models_3bpr_9recom_bpr_RNGVector); if (unlikely(!__pyx_vtabptr_6cornac_6models_3bpr_9recom_bpr_RNGVector)) __PYX_ERR(5, 35, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_RefNannyFinishContext(); return 0; @@ -55964,15 +63428,15 @@ static int __Pyx_modinit_function_import_code(void) { /*--- Function import code ---*/ __pyx_t_1 = PyImport_ImportModule("cornac.models.bpr.recom_bpr"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_ImportFunction_0_29_36(__pyx_t_1, "__pyx_fuse_0has_non_zero", (void (**)(void))&__pyx_fuse_0__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero, "bool (__Pyx_memviewslice, __Pyx_memviewslice, short, short)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) - if (__Pyx_ImportFunction_0_29_36(__pyx_t_1, "__pyx_fuse_1has_non_zero", (void (**)(void))&__pyx_fuse_1__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero, "bool (__Pyx_memviewslice, __Pyx_memviewslice, int, int)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) - if (__Pyx_ImportFunction_0_29_36(__pyx_t_1, "__pyx_fuse_2has_non_zero", (void (**)(void))&__pyx_fuse_2__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero, "bool (__Pyx_memviewslice, __Pyx_memviewslice, long, long)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_ImportFunction_3_0_0(__pyx_t_1, "__pyx_fuse_0has_non_zero", (void (**)(void))&__pyx_fuse_0__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero, "bool (__Pyx_memviewslice, __Pyx_memviewslice, short, short)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_ImportFunction_3_0_0(__pyx_t_1, "__pyx_fuse_1has_non_zero", (void (**)(void))&__pyx_fuse_1__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero, "bool (__Pyx_memviewslice, __Pyx_memviewslice, int, int)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_ImportFunction_3_0_0(__pyx_t_1, "__pyx_fuse_2has_non_zero", (void (**)(void))&__pyx_fuse_2__pyx_f_6cornac_6models_3bpr_9recom_bpr_has_non_zero, "bool (__Pyx_memviewslice, __Pyx_memviewslice, long, long)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyImport_ImportModule("cornac.models.mter.recom_mter"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_ImportFunction_0_29_36(__pyx_t_1, "get_key", (void (**)(void))&__pyx_f_6cornac_6models_4mter_10recom_mter_get_key, "int (int, int)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) - if (__Pyx_ImportFunction_0_29_36(__pyx_t_1, "__pyx_fuse_0get_score", (void (**)(void))&__pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score, "float (__Pyx_memviewslice, int, int, int, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, int, int, int)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) - if (__Pyx_ImportFunction_0_29_36(__pyx_t_1, "__pyx_fuse_1get_score", (void (**)(void))&__pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score, "double (__Pyx_memviewslice, int, int, int, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, int, int, int)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_ImportFunction_3_0_0(__pyx_t_1, "get_key", (void (**)(void))&__pyx_f_6cornac_6models_4mter_10recom_mter_get_key, "int (int, int)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_ImportFunction_3_0_0(__pyx_t_1, "__pyx_fuse_0get_score", (void (**)(void))&__pyx_fuse_0__pyx_f_6cornac_6models_4mter_10recom_mter_get_score, "float (__Pyx_memviewslice, int, int, int, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, int, int, int)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_ImportFunction_3_0_0(__pyx_t_1, "__pyx_fuse_1get_score", (void (**)(void))&__pyx_fuse_1__pyx_f_6cornac_6models_4mter_10recom_mter_get_score, "double (__Pyx_memviewslice, int, int, int, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, int, int, int)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_RefNannyFinishContext(); return 0; @@ -55983,6 +63447,55 @@ static int __Pyx_modinit_function_import_code(void) { } +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_recom_comparer_sub(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_recom_comparer_sub}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "recom_comparer_sub", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + #ifndef CYTHON_NO_PYINIT_EXPORT #define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC #elif PY_MAJOR_VERSION < 3 @@ -56033,12 +63546,21 @@ static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { } return 0; } -static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ PyObject *value = PyObject_GetAttrString(spec, from_name); int result = 0; if (likely(value)) { if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else result = PyDict_SetItemString(moddict, to_name, value); +#endif } Py_DECREF(value); } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { @@ -56048,8 +63570,9 @@ static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject } return result; } -static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); if (__Pyx_check_single_interpreter()) return NULL; if (__pyx_m) @@ -56059,8 +63582,12 @@ static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNU module = PyModule_NewObject(modname); Py_DECREF(modname); if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else moddict = PyModule_GetDict(module); if (unlikely(!moddict)) goto bad; +#endif if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; @@ -56076,13 +63603,22 @@ static CYTHON_SMALL_CODE int __pyx_pymod_exec_recom_comparer_sub(PyObject *__pyx #endif #endif { + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - static PyThread_type_lock __pyx_t_7[8]; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + static PyThread_type_lock __pyx_t_8[8]; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -56096,6 +63632,35 @@ static CYTHON_SMALL_CODE int __pyx_pymod_exec_recom_comparer_sub(PyObject *__pyx #elif PY_MAJOR_VERSION >= 3 if (__pyx_m) return __Pyx_NewRef(__pyx_m); #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("recom_comparer_sub", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to recom_comparer_sub pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_b); + __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_cython_runtime); + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #if CYTHON_REFNANNY __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); if (!__Pyx_RefNanny) { @@ -56114,48 +63679,31 @@ if (!__Pyx_RefNanny) { __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) #ifdef __Pyx_CyFunction_USED - if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_Coroutine_USED - if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_AsyncGen_USED - if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_StopAsyncIteration_USED - if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif /*--- Library function declarations ---*/ /*--- Threads initialization code ---*/ #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS PyEval_InitThreads(); #endif - /*--- Module creation code ---*/ - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_m = __pyx_pyinit_module; - Py_INCREF(__pyx_m); - #else - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4("recom_comparer_sub", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_b); - __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_cython_runtime); - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) @@ -56167,7 +63715,7 @@ if (!__Pyx_RefNanny) { { PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) if (!PyDict_GetItemString(modules, "cornac.models.comparer.recom_comparer_sub")) { - if (unlikely(PyDict_SetItemString(modules, "cornac.models.comparer.recom_comparer_sub", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + if (unlikely((PyDict_SetItemString(modules, "cornac.models.comparer.recom_comparer_sub", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) } } #endif @@ -56179,15 +63727,528 @@ if (!__Pyx_RefNanny) { (void)__Pyx_modinit_global_init_code(); (void)__Pyx_modinit_variable_export_code(); (void)__Pyx_modinit_function_export_code(); - if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - if (unlikely(__Pyx_modinit_type_import_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + if (unlikely((__Pyx_modinit_type_init_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + if (unlikely((__Pyx_modinit_type_import_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) (void)__Pyx_modinit_variable_import_code(); - if (unlikely(__Pyx_modinit_function_import_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + if (unlikely((__Pyx_modinit_function_import_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) /*--- Execution code ---*/ #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif + /* "View.MemoryView":99 + * + * cdef object __pyx_collections_abc_Sequence "__pyx_collections_abc_Sequence" + * try: # <<<<<<<<<<<<<< + * if __import__("sys").version_info >= (3, 3): + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "View.MemoryView":100 + * cdef object __pyx_collections_abc_Sequence "__pyx_collections_abc_Sequence" + * try: + * if __import__("sys").version_info >= (3, 3): # <<<<<<<<<<<<<< + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence + * else: + */ + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin___import__, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 100, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_version_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 100, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_tuple__24, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 100, __pyx_L2_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(1, 100, __pyx_L2_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + + /* "View.MemoryView":101 + * try: + * if __import__("sys").version_info >= (3, 3): + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence # <<<<<<<<<<<<<< + * else: + * __pyx_collections_abc_Sequence = __import__("collections").Sequence + */ + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin___import__, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 101, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_abc); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 101, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_Sequence); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 101, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_collections_abc_Sequence); + __Pyx_DECREF_SET(__pyx_collections_abc_Sequence, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":100 + * cdef object __pyx_collections_abc_Sequence "__pyx_collections_abc_Sequence" + * try: + * if __import__("sys").version_info >= (3, 3): # <<<<<<<<<<<<<< + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence + * else: + */ + goto __pyx_L8; + } + + /* "View.MemoryView":103 + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence + * else: + * __pyx_collections_abc_Sequence = __import__("collections").Sequence # <<<<<<<<<<<<<< + * except: + * + */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin___import__, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 103, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_Sequence); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 103, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_collections_abc_Sequence); + __Pyx_DECREF_SET(__pyx_collections_abc_Sequence, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + __pyx_t_5 = 0; + } + __pyx_L8:; + + /* "View.MemoryView":99 + * + * cdef object __pyx_collections_abc_Sequence "__pyx_collections_abc_Sequence" + * try: # <<<<<<<<<<<<<< + * if __import__("sys").version_info >= (3, 3): + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L7_try_end; + __pyx_L2_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "View.MemoryView":104 + * else: + * __pyx_collections_abc_Sequence = __import__("collections").Sequence + * except: # <<<<<<<<<<<<<< + * + * __pyx_collections_abc_Sequence = None + */ + /*except:*/ { + __Pyx_AddTraceback("View.MemoryView", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_7) < 0) __PYX_ERR(1, 104, __pyx_L4_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_7); + + /* "View.MemoryView":106 + * except: + * + * __pyx_collections_abc_Sequence = None # <<<<<<<<<<<<<< + * + * + */ + __Pyx_INCREF(Py_None); + __Pyx_XGOTREF(__pyx_collections_abc_Sequence); + __Pyx_DECREF_SET(__pyx_collections_abc_Sequence, Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L3_exception_handled; + } + + /* "View.MemoryView":99 + * + * cdef object __pyx_collections_abc_Sequence "__pyx_collections_abc_Sequence" + * try: # <<<<<<<<<<<<<< + * if __import__("sys").version_info >= (3, 3): + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence + */ + __pyx_L4_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L3_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L7_try_end:; + } + + /* "View.MemoryView":241 + * + * + * try: # <<<<<<<<<<<<<< + * count = __pyx_collections_abc_Sequence.count + * index = __pyx_collections_abc_Sequence.index + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_1); + /*try:*/ { + + /* "View.MemoryView":242 + * + * try: + * count = __pyx_collections_abc_Sequence.count # <<<<<<<<<<<<<< + * index = __pyx_collections_abc_Sequence.index + * except: + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_collections_abc_Sequence, __pyx_n_s_count); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 242, __pyx_L11_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_array_type->tp_dict, __pyx_n_s_count, __pyx_t_7) < 0) __PYX_ERR(1, 242, __pyx_L11_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + PyType_Modified(__pyx_array_type); + + /* "View.MemoryView":243 + * try: + * count = __pyx_collections_abc_Sequence.count + * index = __pyx_collections_abc_Sequence.index # <<<<<<<<<<<<<< + * except: + * pass + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_collections_abc_Sequence, __pyx_n_s_index); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 243, __pyx_L11_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_array_type->tp_dict, __pyx_n_s_index, __pyx_t_7) < 0) __PYX_ERR(1, 243, __pyx_L11_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + PyType_Modified(__pyx_array_type); + + /* "View.MemoryView":241 + * + * + * try: # <<<<<<<<<<<<<< + * count = __pyx_collections_abc_Sequence.count + * index = __pyx_collections_abc_Sequence.index + */ + } + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L16_try_end; + __pyx_L11_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "View.MemoryView":244 + * count = __pyx_collections_abc_Sequence.count + * index = __pyx_collections_abc_Sequence.index + * except: # <<<<<<<<<<<<<< + * pass + * + */ + /*except:*/ { + __Pyx_ErrRestore(0,0,0); + goto __pyx_L12_exception_handled; + } + __pyx_L12_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1); + __pyx_L16_try_end:; + } + + /* "View.MemoryView":309 + * return self.name + * + * cdef generic = Enum("") # <<<<<<<<<<<<<< + * cdef strided = Enum("") # default + * cdef indirect = Enum("") + */ + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 309, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XGOTREF(generic); + __Pyx_DECREF_SET(generic, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":310 + * + * cdef generic = Enum("") + * cdef strided = Enum("") # default # <<<<<<<<<<<<<< + * cdef indirect = Enum("") + * + */ + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 310, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XGOTREF(strided); + __Pyx_DECREF_SET(strided, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":311 + * cdef generic = Enum("") + * cdef strided = Enum("") # default + * cdef indirect = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 311, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XGOTREF(indirect); + __Pyx_DECREF_SET(indirect, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":314 + * + * + * cdef contiguous = Enum("") # <<<<<<<<<<<<<< + * cdef indirect_contiguous = Enum("") + * + */ + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 314, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XGOTREF(contiguous); + __Pyx_DECREF_SET(contiguous, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":315 + * + * cdef contiguous = Enum("") + * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 315, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XGOTREF(indirect_contiguous); + __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":323 + * + * + * cdef int __pyx_memoryview_thread_locks_used = 0 # <<<<<<<<<<<<<< + * cdef PyThread_type_lock[8] __pyx_memoryview_thread_locks = [ + * PyThread_allocate_lock(), + */ + __pyx_memoryview_thread_locks_used = 0; + + /* "View.MemoryView":324 + * + * cdef int __pyx_memoryview_thread_locks_used = 0 + * cdef PyThread_type_lock[8] __pyx_memoryview_thread_locks = [ # <<<<<<<<<<<<<< + * PyThread_allocate_lock(), + * PyThread_allocate_lock(), + */ + __pyx_t_8[0] = PyThread_allocate_lock(); + __pyx_t_8[1] = PyThread_allocate_lock(); + __pyx_t_8[2] = PyThread_allocate_lock(); + __pyx_t_8[3] = PyThread_allocate_lock(); + __pyx_t_8[4] = PyThread_allocate_lock(); + __pyx_t_8[5] = PyThread_allocate_lock(); + __pyx_t_8[6] = PyThread_allocate_lock(); + __pyx_t_8[7] = PyThread_allocate_lock(); + memcpy(&(__pyx_memoryview_thread_locks[0]), __pyx_t_8, sizeof(__pyx_memoryview_thread_locks[0]) * (8)); + + /* "View.MemoryView":982 + * + * + * try: # <<<<<<<<<<<<<< + * count = __pyx_collections_abc_Sequence.count + * index = __pyx_collections_abc_Sequence.index + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "View.MemoryView":983 + * + * try: + * count = __pyx_collections_abc_Sequence.count # <<<<<<<<<<<<<< + * index = __pyx_collections_abc_Sequence.index + * except: + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_collections_abc_Sequence, __pyx_n_s_count); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 983, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_count, __pyx_t_7) < 0) __PYX_ERR(1, 983, __pyx_L17_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + PyType_Modified(__pyx_memoryviewslice_type); + + /* "View.MemoryView":984 + * try: + * count = __pyx_collections_abc_Sequence.count + * index = __pyx_collections_abc_Sequence.index # <<<<<<<<<<<<<< + * except: + * pass + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_collections_abc_Sequence, __pyx_n_s_index); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 984, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_index, __pyx_t_7) < 0) __PYX_ERR(1, 984, __pyx_L17_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + PyType_Modified(__pyx_memoryviewslice_type); + + /* "View.MemoryView":982 + * + * + * try: # <<<<<<<<<<<<<< + * count = __pyx_collections_abc_Sequence.count + * index = __pyx_collections_abc_Sequence.index + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L22_try_end; + __pyx_L17_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "View.MemoryView":985 + * count = __pyx_collections_abc_Sequence.count + * index = __pyx_collections_abc_Sequence.index + * except: # <<<<<<<<<<<<<< + * pass + * + */ + /*except:*/ { + __Pyx_ErrRestore(0,0,0); + goto __pyx_L18_exception_handled; + } + __pyx_L18_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L22_try_end:; + } + + /* "View.MemoryView":988 + * pass + * + * try: # <<<<<<<<<<<<<< + * if __pyx_collections_abc_Sequence: + * + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_1); + /*try:*/ { + + /* "View.MemoryView":989 + * + * try: + * if __pyx_collections_abc_Sequence: # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_collections_abc_Sequence); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(1, 989, __pyx_L23_error) + if (__pyx_t_6) { + + /* "View.MemoryView":993 + * + * + * __pyx_collections_abc_Sequence.register(_memoryviewslice) # <<<<<<<<<<<<<< + * __pyx_collections_abc_Sequence.register(array) + * except: + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_collections_abc_Sequence, __pyx_n_s_register); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 993, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_7, ((PyObject *)__pyx_memoryviewslice_type)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 993, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "View.MemoryView":994 + * + * __pyx_collections_abc_Sequence.register(_memoryviewslice) + * __pyx_collections_abc_Sequence.register(array) # <<<<<<<<<<<<<< + * except: + * pass # ignore failure, it's a minor issue + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_collections_abc_Sequence, __pyx_n_s_register); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 994, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_array_type)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 994, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "View.MemoryView":989 + * + * try: + * if __pyx_collections_abc_Sequence: # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":988 + * pass + * + * try: # <<<<<<<<<<<<<< + * if __pyx_collections_abc_Sequence: + * + */ + } + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L28_try_end; + __pyx_L23_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "View.MemoryView":995 + * __pyx_collections_abc_Sequence.register(_memoryviewslice) + * __pyx_collections_abc_Sequence.register(array) + * except: # <<<<<<<<<<<<<< + * pass # ignore failure, it's a minor issue + * + */ + /*except:*/ { + __Pyx_ErrRestore(0,0,0); + goto __pyx_L24_exception_handled; + } + __pyx_L24_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1); + __pyx_L28_try_end:; + } + + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_7 = PyCFunction_NewEx(&__pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum, NULL, __pyx_n_s_View_MemoryView); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Enum, __pyx_t_7) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + /* "cornac/models/comparer/recom_comparer_sub.pyx":18 * # cython: language_level=3 * @@ -56195,10 +64256,10 @@ if (!__Pyx_RefNanny) { * * cimport cython */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_multiprocessing, 0, 0); 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_mp, __pyx_t_1) < 0) __PYX_ERR(0, 18, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_multiprocessing, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_mp, __pyx_t_7) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":25 * from libc.math cimport sqrt, log, exp @@ -56207,16 +64268,10 @@ if (!__Pyx_RefNanny) { * import numpy as np * cimport numpy as np */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s__35); - __Pyx_GIVEREF(__pyx_n_s__35); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s__35); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_scipy_sparse, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sp, __pyx_t_2) < 0) __PYX_ERR(0, 25, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_scipy_sparse, __pyx_tuple__34); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 25, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_sp, __pyx_t_7) < 0) __PYX_ERR(0, 25, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":26 * @@ -56225,10 +64280,10 @@ if (!__Pyx_RefNanny) { * cimport numpy as np * from tqdm import trange */ - __pyx_t_2 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_2) < 0) __PYX_ERR(0, 26, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_7) < 0) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":28 * import numpy as np @@ -56237,19 +64292,19 @@ if (!__Pyx_RefNanny) { * from itertools import combinations * from collections import Counter, OrderedDict */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 28, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_n_s_trange); __Pyx_GIVEREF(__pyx_n_s_trange); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_trange); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_tqdm, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __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_trange); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 28, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_trange, __pyx_t_2) < 0) __PYX_ERR(0, 28, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_trange); + __pyx_t_4 = __Pyx_Import(__pyx_n_s_tqdm, __pyx_t_7, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_trange); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_trange, __pyx_t_7) < 0) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":29 * cimport numpy as np @@ -56258,19 +64313,19 @@ if (!__Pyx_RefNanny) { * from collections import Counter, OrderedDict * from time import time */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 29, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 29, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_combinations); __Pyx_GIVEREF(__pyx_n_s_combinations); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_combinations); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_itertools, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 29, __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_combinations); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 29, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_combinations, __pyx_t_1) < 0) __PYX_ERR(0, 29, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_combinations); + __pyx_t_7 = __Pyx_Import(__pyx_n_s_itertools, __pyx_t_4, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 29, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_combinations); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 29, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_combinations, __pyx_t_4) < 0) __PYX_ERR(0, 29, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":30 * from tqdm import trange @@ -56279,26 +64334,26 @@ if (!__Pyx_RefNanny) { * from time import time * */ - __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 30, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_n_s_Counter); __Pyx_GIVEREF(__pyx_n_s_Counter); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Counter); + PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_Counter); __Pyx_INCREF(__pyx_n_s_OrderedDict); __Pyx_GIVEREF(__pyx_n_s_OrderedDict); - PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_OrderedDict); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_collections, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 30, __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_Counter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 30, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_Counter, __pyx_t_2) < 0) __PYX_ERR(0, 30, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_OrderedDict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 30, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_OrderedDict, __pyx_t_2) < 0) __PYX_ERR(0, 30, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyList_SET_ITEM(__pyx_t_7, 1, __pyx_n_s_OrderedDict); + __pyx_t_4 = __Pyx_Import(__pyx_n_s_collections, __pyx_t_7, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_Counter); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Counter, __pyx_t_7) < 0) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_OrderedDict); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_OrderedDict, __pyx_t_7) < 0) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":31 * from itertools import combinations @@ -56307,19 +64362,19 @@ if (!__Pyx_RefNanny) { * * from ..recommender import Recommender */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_time); __Pyx_GIVEREF(__pyx_n_s_time); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_time); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_time, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __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_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_time, __pyx_t_1) < 0) __PYX_ERR(0, 31, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_time); + __pyx_t_7 = __Pyx_Import(__pyx_n_s_time, __pyx_t_4, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_time, __pyx_t_4) < 0) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":33 * from time import time @@ -56328,19 +64383,19 @@ if (!__Pyx_RefNanny) { * from ...exception import ScoreException * from ...utils import get_rng */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_n_s_Recommender); __Pyx_GIVEREF(__pyx_n_s_Recommender); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Recommender); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_recommender, __pyx_t_2, 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 33, __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_Recommender); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_Recommender, __pyx_t_2) < 0) __PYX_ERR(0, 33, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_Recommender); + __pyx_t_4 = __Pyx_Import(__pyx_n_s_recommender, __pyx_t_7, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_Recommender); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Recommender, __pyx_t_7) < 0) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":34 * @@ -56349,19 +64404,19 @@ if (!__Pyx_RefNanny) { * from ...utils import get_rng * from ...utils.fast_dict cimport IntFloatDict */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_ScoreException); __Pyx_GIVEREF(__pyx_n_s_ScoreException); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_ScoreException); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_exception, __pyx_t_1, 3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __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_ScoreException); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_ScoreException, __pyx_t_1) < 0) __PYX_ERR(0, 34, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_ScoreException); + __pyx_t_7 = __Pyx_Import(__pyx_n_s_exception, __pyx_t_4, 3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_ScoreException); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ScoreException, __pyx_t_4) < 0) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":35 * from ..recommender import Recommender @@ -56370,19 +64425,19 @@ if (!__Pyx_RefNanny) { * from ...utils.fast_dict cimport IntFloatDict * from ...utils.init_utils import uniform */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_n_s_get_rng); __Pyx_GIVEREF(__pyx_n_s_get_rng); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_get_rng); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_utils, __pyx_t_2, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __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_rng); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_rng, __pyx_t_2) < 0) __PYX_ERR(0, 35, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_get_rng); + __pyx_t_4 = __Pyx_Import(__pyx_n_s_utils, __pyx_t_7, 3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_get_rng); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_rng, __pyx_t_7) < 0) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":37 * from ...utils import get_rng @@ -56391,19 +64446,19 @@ if (!__Pyx_RefNanny) { * from ..bpr.recom_bpr cimport RNGVector, has_non_zero * from ..mter import MTER */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_uniform); __Pyx_GIVEREF(__pyx_n_s_uniform); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_uniform); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_utils_init_utils, __pyx_t_1, 3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __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_uniform); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_uniform, __pyx_t_1) < 0) __PYX_ERR(0, 37, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_uniform); + __pyx_t_7 = __Pyx_Import(__pyx_n_s_utils_init_utils, __pyx_t_4, 3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_uniform); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_uniform, __pyx_t_4) < 0) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":39 * from ...utils.init_utils import uniform @@ -56412,19 +64467,19 @@ if (!__Pyx_RefNanny) { * from ..mter.recom_mter cimport get_key, get_score * */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 39, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_n_s_MTER); __Pyx_GIVEREF(__pyx_n_s_MTER); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_MTER); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_mter, __pyx_t_2, 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 39, __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_MTER); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 39, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_MTER, __pyx_t_2) < 0) __PYX_ERR(0, 39, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_MTER); + __pyx_t_4 = __Pyx_Import(__pyx_n_s_mter, __pyx_t_7, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_MTER); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_MTER, __pyx_t_7) < 0) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":47 * @@ -56433,19 +64488,25 @@ if (!__Pyx_RefNanny) { * """Explainable Recommendation with Comparative Constraints on Subjective Aspect-Level Quality * */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_MTER); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 47, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 47, __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_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 47, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_2, __pyx_n_s_ComparERSub, __pyx_n_s_ComparERSub, (PyObject *) NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_kp_s_Explainable_Recommendation_with); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 47, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_MTER); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PEP560_update_bases(__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 47, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_CalculateMetaclass(NULL, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_9 = __Pyx_Py3MetaclassPrepare(__pyx_t_5, __pyx_t_4, __pyx_n_s_ComparERSub, __pyx_n_s_ComparERSub, (PyObject *) NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_kp_s_Explainable_Recommendation_with); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + if (__pyx_t_4 != __pyx_t_7) { + if (unlikely((PyDict_SetItemString(__pyx_t_9, "__orig_bases__", __pyx_t_7) < 0))) __PYX_ERR(0, 47, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); /* "cornac/models/comparer/recom_comparer_sub.pyx":137 * ACM International Conference on Web Search and Data Mining (WSDM). 2021. @@ -56454,14 +64515,14 @@ if (!__Pyx_RefNanny) { * self, * name="ComparERSub", */ - __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_1__init__, 0, __pyx_n_s_ComparERSub___init, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__37)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 137, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_t_5); - PyList_Append(__pyx_t_4, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_tuple__38); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_init, __pyx_t_5) < 0) __PYX_ERR(0, 137, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_10 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_1__init__, 0, __pyx_n_s_ComparERSub___init, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_INCREF(__pyx_t_10); + PyList_Append(__pyx_t_7, __pyx_t_10); + __Pyx_GIVEREF(__pyx_t_10); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_10, __pyx_tuple__37); + if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_n_s_init, __pyx_t_10) < 0) __PYX_ERR(0, 137, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":178 * @@ -56470,10 +64531,10 @@ if (!__Pyx_RefNanny) { * start_time = time() * quality_scores = [] */ - __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_3_build_item_quality_matrix, 0, __pyx_n_s_ComparERSub__build_item_quality, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__41)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 178, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_build_item_quality_matrix, __pyx_t_5) < 0) __PYX_ERR(0, 178, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_10 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_3_build_item_quality_matrix, 0, __pyx_n_s_ComparERSub__build_item_quality, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__40)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_n_s_build_item_quality_matrix, __pyx_t_10) < 0) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":213 * return Y @@ -56482,10 +64543,10 @@ if (!__Pyx_RefNanny) { * import time * from tqdm import tqdm */ - __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_5_build_data, 0, __pyx_n_s_ComparERSub__build_data, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__43)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 213, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_build_data, __pyx_t_5) < 0) __PYX_ERR(0, 213, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_10 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_5_build_data, 0, __pyx_n_s_ComparERSub__build_data, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_n_s_build_data, __pyx_t_10) < 0) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":290 * ) @@ -56494,10 +64555,10 @@ if (!__Pyx_RefNanny) { * start_time = time() * from tqdm import tqdm */ - __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_7_build_chrono_purchased_pairs, 0, __pyx_n_s_ComparERSub__build_chrono_purcha, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__45)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 290, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_build_chrono_purchased_pairs, __pyx_t_5) < 0) __PYX_ERR(0, 290, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_10 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_7_build_chrono_purchased_pairs, 0, __pyx_n_s_ComparERSub__build_chrono_purcha, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 290, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_n_s_build_chrono_purchased_pairs, __pyx_t_10) < 0) __PYX_ERR(0, 290, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":352 * @@ -56506,75 +64567,81 @@ if (!__Pyx_RefNanny) { * """Fit the model to observations. * */ - __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_9fit, 0, __pyx_n_s_ComparERSub_fit, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 352, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_tuple__48); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_fit, __pyx_t_5) < 0) __PYX_ERR(0, 352, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_10 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_9fit, 0, __pyx_n_s_ComparERSub_fit, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__46)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 352, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_10, __pyx_tuple__47); + if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_n_s_fit, __pyx_t_10) < 0) __PYX_ERR(0, 352, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - /* "cornac/models/comparer/recom_comparer_sub.pyx":485 + /* "cornac/models/comparer/recom_comparer_sub.pyx":482 + * return self + * + * @cython.cdivision(True) # <<<<<<<<<<<<<< * @cython.boundscheck(False) * @cython.wraparound(False) - * def _fit_mter( # <<<<<<<<<<<<<< - * self, - * RNGVector rng_pos_uia, */ - __pyx_t_5 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __pyx_FusedFunction_New(&__pyx_fuse_0_0__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_15_fit_mter, 0, __pyx_n_s_ComparERSub__fit_mter, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple); - if (PyDict_SetItem(__pyx_t_5, __pyx_kp_s_float_short, __pyx_t_6) < 0) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __pyx_FusedFunction_New(&__pyx_fuse_0_1__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_17_fit_mter, 0, __pyx_n_s_ComparERSub__fit_mter, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple); - if (PyDict_SetItem(__pyx_t_5, __pyx_kp_s_float_int, __pyx_t_6) < 0) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __pyx_FusedFunction_New(&__pyx_fuse_0_2__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_19_fit_mter, 0, __pyx_n_s_ComparERSub__fit_mter, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple); - if (PyDict_SetItem(__pyx_t_5, __pyx_kp_s_float_long, __pyx_t_6) < 0) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __pyx_FusedFunction_New(&__pyx_fuse_1_0__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_21_fit_mter, 0, __pyx_n_s_ComparERSub__fit_mter, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple); - if (PyDict_SetItem(__pyx_t_5, __pyx_kp_s_double_short, __pyx_t_6) < 0) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __pyx_FusedFunction_New(&__pyx_fuse_1_1__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_23_fit_mter, 0, __pyx_n_s_ComparERSub__fit_mter, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple); - if (PyDict_SetItem(__pyx_t_5, __pyx_kp_s_double_int, __pyx_t_6) < 0) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __pyx_FusedFunction_New(&__pyx_fuse_1_2__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_25_fit_mter, 0, __pyx_n_s_ComparERSub__fit_mter, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple); - if (PyDict_SetItem(__pyx_t_5, __pyx_kp_s_double_long, __pyx_t_6) < 0) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __pyx_FusedFunction_New(&__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_11_fit_mter, 0, __pyx_n_s_ComparERSub__fit_mter, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple); - ((__pyx_FusedFunctionObject *) __pyx_t_6)->__signatures__ = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_fit_mter, __pyx_t_6) < 0) __PYX_ERR(0, 485, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __pyx_FusedFunction_New(&__pyx_fuse_0_0__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_15_fit_mter, 0, __pyx_n_s_ComparERSub__fit_mter, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_11, __pyx_empty_tuple); + if (PyDict_SetItem(__pyx_t_10, __pyx_kp_s_float_short, __pyx_t_11) < 0) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __pyx_FusedFunction_New(&__pyx_fuse_0_1__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_17_fit_mter, 0, __pyx_n_s_ComparERSub__fit_mter, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_11, __pyx_empty_tuple); + if (PyDict_SetItem(__pyx_t_10, __pyx_kp_s_float_int, __pyx_t_11) < 0) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __pyx_FusedFunction_New(&__pyx_fuse_0_2__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_19_fit_mter, 0, __pyx_n_s_ComparERSub__fit_mter, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_11, __pyx_empty_tuple); + if (PyDict_SetItem(__pyx_t_10, __pyx_kp_s_float_long, __pyx_t_11) < 0) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __pyx_FusedFunction_New(&__pyx_fuse_1_0__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_21_fit_mter, 0, __pyx_n_s_ComparERSub__fit_mter, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_11, __pyx_empty_tuple); + if (PyDict_SetItem(__pyx_t_10, __pyx_kp_s_double_short, __pyx_t_11) < 0) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __pyx_FusedFunction_New(&__pyx_fuse_1_1__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_23_fit_mter, 0, __pyx_n_s_ComparERSub__fit_mter, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_11, __pyx_empty_tuple); + if (PyDict_SetItem(__pyx_t_10, __pyx_kp_s_double_int, __pyx_t_11) < 0) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __pyx_FusedFunction_New(&__pyx_fuse_1_2__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_25_fit_mter, 0, __pyx_n_s_ComparERSub__fit_mter, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_11, __pyx_empty_tuple); + if (PyDict_SetItem(__pyx_t_10, __pyx_kp_s_double_long, __pyx_t_11) < 0) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = __pyx_FusedFunction_New(&__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_11_fit_mter, 0, __pyx_n_s_ComparERSub__fit_mter, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + if (!__Pyx_CyFunction_InitDefaults(__pyx_t_11, sizeof(__pyx_defaults), 1)) __PYX_ERR(0, 482, __pyx_L1_error) + __pyx_t_12 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_11)->__pyx_arg__fused_sigindex = __pyx_t_12; + __Pyx_GIVEREF(__pyx_t_12); + __pyx_t_12 = 0; + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_11, __pyx_empty_tuple); + ((__pyx_FusedFunctionObject *) __pyx_t_11)->__signatures__ = __pyx_t_10; + __Pyx_GIVEREF(__pyx_t_10); + __pyx_t_10 = 0; + if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_n_s_fit_mter, __pyx_t_11) < 0) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":760 * return correct, skipped, loss, bpr_loss * - * def rank(self, user_id, item_ids=None): # <<<<<<<<<<<<<< + * def rank(self, user_idx, item_indices=None): # <<<<<<<<<<<<<< * if self.alpha > 0 and self.n_top_aspects > 0: * n_items = self.train_set.num_items */ - __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_13rank, 0, __pyx_n_s_ComparERSub_rank, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__52)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 760, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_6); - PyList_Append(__pyx_t_4, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_6); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_tuple__53); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_rank, __pyx_t_6) < 0) __PYX_ERR(0, 760, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_11 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_8comparer_18recom_comparer_sub_11ComparERSub_13rank, 0, __pyx_n_s_ComparERSub_rank, NULL, __pyx_n_s_cornac_models_comparer_recom_com, __pyx_d, ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 760, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_t_11); + PyList_Append(__pyx_t_7, __pyx_t_11); + __Pyx_GIVEREF(__pyx_t_11); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_11, __pyx_tuple__52); + if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_n_s_rank, __pyx_t_11) < 0) __PYX_ERR(0, 760, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":47 * @@ -56583,429 +64650,1612 @@ if (!__Pyx_RefNanny) { * """Explainable Recommendation with Comparative Constraints on Subjective Aspect-Level Quality * */ - __pyx_t_6 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_ComparERSub, __pyx_t_2, __pyx_t_3, NULL, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 47, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - if (__Pyx_CyFunction_InitClassCell(__pyx_t_4, __pyx_t_6) < 0) __PYX_ERR(0, 47, __pyx_L1_error) + __pyx_t_11 = __Pyx_Py3ClassCreate(__pyx_t_5, __pyx_n_s_ComparERSub, __pyx_t_4, __pyx_t_9, NULL, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + if (__Pyx_CyFunction_InitClassCell(__pyx_t_7, __pyx_t_11) < 0) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ComparERSub, __pyx_t_11) < 0) __PYX_ERR(0, 47, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_ComparERSub, __pyx_t_6) < 0) __PYX_ERR(0, 47, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "cornac/models/comparer/recom_comparer_sub.pyx":1 * # Copyright 2018 The Cornac Authors. All Rights Reserved. # <<<<<<<<<<<<<< * # * # Licensed under the Apache License, Version 2.0 (the "License"); */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_4) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "View.MemoryView":210 - * info.obj = self - * - * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< - * - * def __dealloc__(array self): - */ - __pyx_t_2 = __pyx_capsule_create(((void *)(&__pyx_array_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 210, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem((PyObject *)__pyx_array_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_2) < 0) __PYX_ERR(2, 210, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - PyType_Modified(__pyx_array_type); + /*--- Wrapped vars code ---*/ - /* "View.MemoryView":287 - * return self.name - * - * cdef generic = Enum("") # <<<<<<<<<<<<<< - * cdef strided = Enum("") # default - * cdef indirect = Enum("") + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + if (__pyx_m) { + if (__pyx_d && stringtab_initialized) { + __Pyx_AddTraceback("init cornac.models.comparer.recom_comparer_sub", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + #if !CYTHON_USE_MODULE_STATE + Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init cornac.models.comparer.recom_comparer_sub"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful */ - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__54, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 287, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_XGOTREF(generic); - __Pyx_DECREF_SET(generic, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; +#pragma warning( disable : 4127 ) +#endif - /* "View.MemoryView":288 - * - * cdef generic = Enum("") - * cdef strided = Enum("") # default # <<<<<<<<<<<<<< - * cdef indirect = Enum("") - * - */ - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__55, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 288, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_XGOTREF(strided); - __Pyx_DECREF_SET(strided, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - /* "View.MemoryView":289 - * cdef generic = Enum("") - * cdef strided = Enum("") # default - * cdef indirect = Enum("") # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__56, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 289, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_XGOTREF(indirect); - __Pyx_DECREF_SET(indirect, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - /* "View.MemoryView":292 - * - * - * cdef contiguous = Enum("") # <<<<<<<<<<<<<< - * cdef indirect_contiguous = Enum("") - * - */ - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__57, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 292, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_XGOTREF(contiguous); - __Pyx_DECREF_SET(contiguous, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; +/* #### Code section: utility_code_def ### */ + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; +#else + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; +#endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); + } + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); + } + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif + } +#else + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#endif +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* PyObjectGetAttrStrNoError */ +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +} + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* TupleAndListFromArray */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); + } +} +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; + } + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; +} +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + return PyList_New(0); + } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* fastcall */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; + } + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; // error + return kwvalues[i]; + } + } + return NULL; // not found (no exception set) +} +#endif + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); + while (1) { + if (kwds_is_tuple) { + if (pos >= PyTuple_GET_SIZE(kwds)) break; + key = PyTuple_GET_ITEM(kwds, pos); + value = kwvalues[pos]; + pos++; + } + else + { + if (!PyDict_Next(kwds, &pos, &key, &value)) break; + } + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = ( + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} - /* "View.MemoryView":293 - * - * cdef contiguous = Enum("") - * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__58, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 293, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_XGOTREF(indirect_contiguous); - __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; +/* ArgTypeTest */ +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + __Pyx_TypeName type_name; + __Pyx_TypeName obj_type_name; + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + type_name = __Pyx_PyType_GetName(type); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected " __Pyx_FMT_TYPENAME + ", got " __Pyx_FMT_TYPENAME ")", name, type_name, obj_type_name); + __Pyx_DECREF_TypeName(type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return 0; +} - /* "View.MemoryView":317 - * - * DEF THREAD_LOCKS_PREALLOCATED = 8 - * cdef int __pyx_memoryview_thread_locks_used = 0 # <<<<<<<<<<<<<< - * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ - * PyThread_allocate_lock(), - */ - __pyx_memoryview_thread_locks_used = 0; +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + __Pyx_PyThreadState_declare + CYTHON_UNUSED_VAR(cause); + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { + #if PY_VERSION_HEX >= 0x030C00A6 + PyException_SetTraceback(value, tb); + #elif CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif - /* "View.MemoryView":318 - * DEF THREAD_LOCKS_PREALLOCATED = 8 - * cdef int __pyx_memoryview_thread_locks_used = 0 - * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ # <<<<<<<<<<<<<< - * PyThread_allocate_lock(), - * PyThread_allocate_lock(), - */ - __pyx_t_7[0] = PyThread_allocate_lock(); - __pyx_t_7[1] = PyThread_allocate_lock(); - __pyx_t_7[2] = PyThread_allocate_lock(); - __pyx_t_7[3] = PyThread_allocate_lock(); - __pyx_t_7[4] = PyThread_allocate_lock(); - __pyx_t_7[5] = PyThread_allocate_lock(); - __pyx_t_7[6] = PyThread_allocate_lock(); - __pyx_t_7[7] = PyThread_allocate_lock(); - memcpy(&(__pyx_memoryview_thread_locks[0]), __pyx_t_7, sizeof(__pyx_memoryview_thread_locks[0]) * (8)); +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { + return NULL; + } + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif - /* "View.MemoryView":551 - * info.obj = self - * - * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_2 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 551, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem((PyObject *)__pyx_memoryview_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_2) < 0) __PYX_ERR(2, 551, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - PyType_Modified(__pyx_memoryview_type); +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif - /* "View.MemoryView":997 - * return self.from_object - * - * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_2 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 997, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem((PyObject *)__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_2) < 0) __PYX_ERR(2, 997, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - PyType_Modified(__pyx_memoryviewslice_type); +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectFastCall */ +static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { + PyObject *argstuple; + PyObject *result; + size_t i; + argstuple = PyTuple_New((Py_ssize_t)nargs); + if (unlikely(!argstuple)) return NULL; + for (i = 0; i < nargs; i++) { + Py_INCREF(args[i]); + PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]); + } + result = __Pyx_PyObject_Call(func, argstuple, kwargs); + Py_DECREF(argstuple); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { + Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); +#if CYTHON_COMPILING_IN_CPYTHON + if (nargs == 0 && kwargs == NULL) { +#if defined(__Pyx_CyFunction_USED) && defined(NDEBUG) + if (__Pyx_IsCyOrPyCFunction(func)) +#else + if (PyCFunction_Check(func)) +#endif + { + if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) { + return __Pyx_PyObject_CallMethO(func, NULL); + } + } + } + else if (nargs == 1 && kwargs == NULL) { + if (PyCFunction_Check(func)) + { + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, args[0]); + } + } + } +#endif + #if PY_VERSION_HEX < 0x030800B1 + #if CYTHON_FAST_PYCCALL + if (PyCFunction_Check(func)) { + if (kwargs) { + return _PyCFunction_FastCallDict(func, args, nargs, kwargs); + } else { + return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); + } + } + #if PY_VERSION_HEX >= 0x030700A1 + if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { + return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); + } + #endif + #endif + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); + } + #endif + #endif + #if CYTHON_VECTORCALL + vectorcallfunc f = _PyVectorcall_Function(func); + if (f) { + return f(func, args, (size_t)nargs, kwargs); + } + #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL + if (__Pyx_CyFunction_CheckExact(func)) { + __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); + if (f) return f(func, args, (size_t)nargs, kwargs); + } + #endif + if (nargs == 0) { + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); + } + return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); +} - /* "(tree fragment)":1 - * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum, NULL, __pyx_n_s_View_MemoryView); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Enum, __pyx_t_2) < 0) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; +/* RaiseUnexpectedTypeError */ +static int +__Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj) +{ + __Pyx_TypeName obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, "Expected %s, got " __Pyx_FMT_TYPENAME, + expected, obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return 0; +} - /* "(tree fragment)":11 - * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.name = __pyx_state[0] - * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): - */ +/* CIntToDigits */ +static const char DIGIT_PAIRS_10[2*10*10+1] = { + "00010203040506070809" + "10111213141516171819" + "20212223242526272829" + "30313233343536373839" + "40414243444546474849" + "50515253545556575859" + "60616263646566676869" + "70717273747576777879" + "80818283848586878889" + "90919293949596979899" +}; +static const char DIGIT_PAIRS_8[2*8*8+1] = { + "0001020304050607" + "1011121314151617" + "2021222324252627" + "3031323334353637" + "4041424344454647" + "5051525354555657" + "6061626364656667" + "7071727374757677" +}; +static const char DIGITS_HEX[2*16+1] = { + "0123456789abcdef" + "0123456789ABCDEF" +}; - /*--- Wrapped vars code ---*/ +/* BuildPyUnicode */ +static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, char* chars, int clength, + int prepend_sign, char padding_char) { + PyObject *uval; + Py_ssize_t uoffset = ulength - clength; +#if CYTHON_USE_UNICODE_INTERNALS + Py_ssize_t i; +#if CYTHON_PEP393_ENABLED + void *udata; + uval = PyUnicode_New(ulength, 127); + if (unlikely(!uval)) return NULL; + udata = PyUnicode_DATA(uval); +#else + Py_UNICODE *udata; + uval = PyUnicode_FromUnicode(NULL, ulength); + if (unlikely(!uval)) return NULL; + udata = PyUnicode_AS_UNICODE(uval); +#endif + if (uoffset > 0) { + i = 0; + if (prepend_sign) { + __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, 0, '-'); + i++; + } + for (; i < uoffset; i++) { + __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, i, padding_char); + } + } + for (i=0; i < clength; i++) { + __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, uoffset+i, chars[i]); + } +#else + { + PyObject *sign = NULL, *padding = NULL; + uval = NULL; + if (uoffset > 0) { + prepend_sign = !!prepend_sign; + if (uoffset > prepend_sign) { + padding = PyUnicode_FromOrdinal(padding_char); + if (likely(padding) && uoffset > prepend_sign + 1) { + PyObject *tmp; + PyObject *repeat = PyInt_FromSsize_t(uoffset - prepend_sign); + if (unlikely(!repeat)) goto done_or_error; + tmp = PyNumber_Multiply(padding, repeat); + Py_DECREF(repeat); + Py_DECREF(padding); + padding = tmp; + } + if (unlikely(!padding)) goto done_or_error; + } + if (prepend_sign) { + sign = PyUnicode_FromOrdinal('-'); + if (unlikely(!sign)) goto done_or_error; + } + } + uval = PyUnicode_DecodeASCII(chars, clength, NULL); + if (likely(uval) && padding) { + PyObject *tmp = PyNumber_Add(padding, uval); + Py_DECREF(uval); + uval = tmp; + } + if (likely(uval) && sign) { + PyObject *tmp = PyNumber_Add(sign, uval); + Py_DECREF(uval); + uval = tmp; + } +done_or_error: + Py_XDECREF(padding); + Py_XDECREF(sign); + } +#endif + return uval; +} - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - if (__pyx_m) { - if (__pyx_d) { - __Pyx_AddTraceback("init cornac.models.comparer.recom_comparer_sub", __pyx_clineno, __pyx_lineno, __pyx_filename); +/* CIntToPyUnicode */ +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_int(int value, Py_ssize_t width, char padding_char, char format_char) { + char digits[sizeof(int)*3+2]; + char *dpos, *end = digits + sizeof(int)*3+2; + const char *hex_digits = DIGITS_HEX; + Py_ssize_t length, ulength; + int prepend_sign, last_one_off; + int remaining; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (format_char == 'X') { + hex_digits += 16; + format_char = 'x'; } - Py_CLEAR(__pyx_m); - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init cornac.models.comparer.recom_comparer_sub"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if CYTHON_PEP489_MULTI_PHASE_INIT - return (__pyx_m != NULL) ? 0 : -1; - #elif PY_MAJOR_VERSION >= 3 - return __pyx_m; - #else - return; - #endif + remaining = value; + last_one_off = 0; + dpos = end; + do { + int digit_pos; + switch (format_char) { + case 'o': + digit_pos = abs((int)(remaining % (8*8))); + remaining = (int) (remaining / (8*8)); + dpos -= 2; + memcpy(dpos, DIGIT_PAIRS_8 + digit_pos * 2, 2); + last_one_off = (digit_pos < 8); + break; + case 'd': + digit_pos = abs((int)(remaining % (10*10))); + remaining = (int) (remaining / (10*10)); + dpos -= 2; + memcpy(dpos, DIGIT_PAIRS_10 + digit_pos * 2, 2); + last_one_off = (digit_pos < 10); + break; + case 'x': + *(--dpos) = hex_digits[abs((int)(remaining % 16))]; + remaining = (int) (remaining / 16); + break; + default: + assert(0); + break; + } + } while (unlikely(remaining != 0)); + assert(!last_one_off || *dpos == '0'); + dpos += last_one_off; + length = end - dpos; + ulength = length; + prepend_sign = 0; + if (!is_unsigned && value <= neg_one) { + if (padding_char == ' ' || width <= length + 1) { + *(--dpos) = '-'; + ++length; + } else { + prepend_sign = 1; + } + ++ulength; + } + if (width > ulength) { + ulength = width; + } + if (ulength == 1) { + return PyUnicode_FromOrdinal(*dpos); + } + return __Pyx_PyUnicode_BuildFromAscii(ulength, dpos, (int) length, prepend_sign, padding_char); } -/* --- Runtime support code --- */ -/* Refnanny */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule(modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, "RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; +/* CIntToPyUnicode */ +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_Py_ssize_t(Py_ssize_t value, Py_ssize_t width, char padding_char, char format_char) { + char digits[sizeof(Py_ssize_t)*3+2]; + char *dpos, *end = digits + sizeof(Py_ssize_t)*3+2; + const char *hex_digits = DIGITS_HEX; + Py_ssize_t length, ulength; + int prepend_sign, last_one_off; + Py_ssize_t remaining; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const Py_ssize_t neg_one = (Py_ssize_t) -1, const_zero = (Py_ssize_t) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (format_char == 'X') { + hex_digits += 16; + format_char = 'x'; + } + remaining = value; + last_one_off = 0; + dpos = end; + do { + int digit_pos; + switch (format_char) { + case 'o': + digit_pos = abs((int)(remaining % (8*8))); + remaining = (Py_ssize_t) (remaining / (8*8)); + dpos -= 2; + memcpy(dpos, DIGIT_PAIRS_8 + digit_pos * 2, 2); + last_one_off = (digit_pos < 8); + break; + case 'd': + digit_pos = abs((int)(remaining % (10*10))); + remaining = (Py_ssize_t) (remaining / (10*10)); + dpos -= 2; + memcpy(dpos, DIGIT_PAIRS_10 + digit_pos * 2, 2); + last_one_off = (digit_pos < 10); + break; + case 'x': + *(--dpos) = hex_digits[abs((int)(remaining % 16))]; + remaining = (Py_ssize_t) (remaining / 16); + break; + default: + assert(0); + break; + } + } while (unlikely(remaining != 0)); + assert(!last_one_off || *dpos == '0'); + dpos += last_one_off; + length = end - dpos; + ulength = length; + prepend_sign = 0; + if (!is_unsigned && value <= neg_one) { + if (padding_char == ' ' || width <= length + 1) { + *(--dpos) = '-'; + ++length; + } else { + prepend_sign = 1; + } + ++ulength; + } + if (width > ulength) { + ulength = width; + } + if (ulength == 1) { + return PyUnicode_FromOrdinal(*dpos); + } + return __Pyx_PyUnicode_BuildFromAscii(ulength, dpos, (int) length, prepend_sign, padding_char); } + +/* JoinPyUnicode */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char) { +#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyObject *result_uval; + int result_ukind, kind_shift; + Py_ssize_t i, char_pos; + void *result_udata; + CYTHON_MAYBE_UNUSED_VAR(max_char); +#if CYTHON_PEP393_ENABLED + result_uval = PyUnicode_New(result_ulength, max_char); + if (unlikely(!result_uval)) return NULL; + result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND; + kind_shift = (result_ukind == PyUnicode_4BYTE_KIND) ? 2 : result_ukind - 1; + result_udata = PyUnicode_DATA(result_uval); +#else + result_uval = PyUnicode_FromUnicode(NULL, result_ulength); + if (unlikely(!result_uval)) return NULL; + result_ukind = sizeof(Py_UNICODE); + kind_shift = (result_ukind == 4) ? 2 : result_ukind - 1; + result_udata = PyUnicode_AS_UNICODE(result_uval); +#endif + assert(kind_shift == 2 || kind_shift == 1 || kind_shift == 0); + char_pos = 0; + for (i=0; i < value_count; i++) { + int ukind; + Py_ssize_t ulength; + void *udata; + PyObject *uval = PyTuple_GET_ITEM(value_tuple, i); + if (unlikely(__Pyx_PyUnicode_READY(uval))) + goto bad; + ulength = __Pyx_PyUnicode_GET_LENGTH(uval); + if (unlikely(!ulength)) + continue; + if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - ulength < char_pos)) + goto overflow; + ukind = __Pyx_PyUnicode_KIND(uval); + udata = __Pyx_PyUnicode_DATA(uval); + if (!CYTHON_PEP393_ENABLED || ukind == result_ukind) { + memcpy((char *)result_udata + (char_pos << kind_shift), udata, (size_t) (ulength << kind_shift)); + } else { + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030300F0 || defined(_PyUnicode_FastCopyCharacters) + _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength); + #else + Py_ssize_t j; + for (j=0; j < ulength; j++) { + Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j); + __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar); + } + #endif + } + char_pos += ulength; + } + return result_uval; +overflow: + PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string"); +bad: + Py_DECREF(result_uval); + return NULL; +#else + CYTHON_UNUSED_VAR(max_char); + CYTHON_UNUSED_VAR(result_ulength); + CYTHON_UNUSED_VAR(value_count); + return PyUnicode_Join(__pyx_empty_unicode, value_tuple); #endif +} -/* PyObjectGetAttrStr */ +/* GetAttr */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { #if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#if PY_MAJOR_VERSION >= 3 + if (likely(PyUnicode_Check(n))) +#else + if (likely(PyString_Check(n))) #endif - return PyObject_GetAttr(obj, attr_name); -} + return __Pyx_PyObject_GetAttrStr(o, n); #endif + return PyObject_GetAttr(o, n); +} -/* GetBuiltinName */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (unlikely(!j)) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); #else - "name '%.200s' is not defined", PyString_AS_STRING(name)); + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); #endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } } - return result; + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_subscript) { + PyObject *r, *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return NULL; + r = mm->mp_subscript(o, key); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return sm->sq_item(o, i); + } + } +#else + if (is_list || PySequence_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); } -/* RaiseDoubleKeywords */ -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif +/* PyObjectCallOneArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *args[2] = {NULL, arg}; + return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); } -/* ParseKeywords */ -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) +/* ObjectGetItem */ +#if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) { + PyObject *runerr = NULL; + Py_ssize_t key_value; + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + __Pyx_TypeName index_type_name = __Pyx_PyType_GetName(Py_TYPE(index)); + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, + "cannot fit '" __Pyx_FMT_TYPENAME "' into an index-sized integer", index_type_name); + __Pyx_DECREF_TypeName(index_type_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *key) { + __Pyx_TypeName obj_type_name; + if (likely(PyType_Check(obj))) { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(obj, __pyx_n_s_class_getitem); + if (meth) { + PyObject *result = __Pyx_PyObject_CallOneArg(meth, key); + Py_DECREF(meth); + return result; + } + } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' object is not subscriptable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) { + PyTypeObject *tp = Py_TYPE(obj); + PyMappingMethods *mm = tp->tp_as_mapping; + PySequenceMethods *sm = tp->tp_as_sequence; + if (likely(mm && mm->mp_subscript)) { + return mm->mp_subscript(obj, key); + } + if (likely(sm && sm->sq_item)) { + return __Pyx_PyObject_GetIndex(obj, key); + } + return __Pyx_PyObject_GetItem_Slow(obj, key); +} +#endif + +/* KeywordStringCheck */ +static int __Pyx_CheckKeywordStrings( + PyObject *kw, + const char* function_name, + int kw_allowed) { - PyObject *key = 0, *value = 0; + PyObject* key = 0; Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; +#if CYTHON_COMPILING_IN_PYPY + if (!kw_allowed && PyDict_Next(kw, &pos, &key, 0)) + goto invalid_keyword; + return 1; +#else + if (CYTHON_METH_FASTCALL && likely(PyTuple_Check(kw))) { + if (unlikely(PyTuple_GET_SIZE(kw) == 0)) + return 1; + if (!kw_allowed) { + key = PyTuple_GET_ITEM(kw, 0); + goto invalid_keyword; } - name = first_kw_arg; +#if PY_VERSION_HEX < 0x03090000 + for (pos = 0; pos < PyTuple_GET_SIZE(kw); pos++) { + key = PyTuple_GET_ITEM(kw, pos); + if (unlikely(!PyUnicode_Check(key))) + goto invalid_keyword_type; + } +#endif + return 1; + } + while (PyDict_Next(kw, &pos, &key, 0)) { #if PY_MAJOR_VERSION < 3 - if (likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else + if (unlikely(!PyString_Check(key))) #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } + if (unlikely(!PyUnicode_Check(key))) + goto invalid_keyword_type; } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; + if (!kw_allowed && unlikely(key)) + goto invalid_keyword; + return 1; invalid_keyword_type: PyErr_Format(PyExc_TypeError, "%.200s() keywords must be strings", function_name); - goto bad; + return 0; +#endif invalid_keyword: - PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, "%.200s() got an unexpected keyword argument '%.200s'", function_name, PyString_AsString(key)); #else + PyErr_Format(PyExc_TypeError, "%s() got an unexpected keyword argument '%U'", function_name, key); #endif -bad: - return -1; + return 0; } -/* RaiseArgTupleInvalid */ -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); +/* DivInt[Py_ssize_t] */ +static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ssize_t b) { + Py_ssize_t q = a / b; + Py_ssize_t r = a - q*b; + q -= ((r != 0) & ((r ^ b) < 0)); + return q; } -/* PyObjectCall */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = Py_TYPE(func)->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) +/* GetAttr3 */ +static PyObject *__Pyx_GetAttr3Default(PyObject *d) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) return NULL; - result = (*call)(func, arg, kw); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; + __Pyx_PyErr_Clear(); + Py_INCREF(d); + return d; } -#endif - -/* PyObjectSetAttrStr */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { + PyObject *r; #if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_setattro)) - return tp->tp_setattro(obj, attr_name, value); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_setattr)) - return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); + if (likely(PyString_Check(n))) { + r = __Pyx_PyObject_GetAttrStrNoError(o, n); + if (unlikely(!r) && likely(!PyErr_Occurred())) { + r = __Pyx_NewRef(d); + } + return r; + } #endif - return PyObject_SetAttr(obj, attr_name, value); + r = PyObject_GetAttr(o, n); + return (likely(r)) ? r : __Pyx_GetAttr3Default(d); } -#endif /* PyDictVersioning */ #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS @@ -57050,6 +66300,14 @@ static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) } else if (unlikely(PyErr_Occurred())) { return NULL; } +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; + } + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; + } #else result = PyDict_GetItem(__pyx_d, name); __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) @@ -57068,269 +66326,789 @@ static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) return __Pyx_GetBuiltinName(name); } -/* PyFunctionFastCall */ -#if CYTHON_FAST_PYCALL -static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, - PyObject *globals) { - PyFrameObject *f; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject **fastlocals; - Py_ssize_t i; - PyObject *result; - assert(globals != NULL); - /* XXX Perhaps we should create a specialized - PyFrame_New() that doesn't take locals, but does - take builtins without sanity checking them. - */ - assert(tstate != NULL); - f = PyFrame_New(tstate, co, globals, NULL); - if (f == NULL) { - return NULL; +/* RaiseTooManyValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* RaiseNeedMoreValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* RaiseNoneIterError */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +/* ExtTypeTest */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + __Pyx_TypeName obj_type_name; + __Pyx_TypeName type_name; + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; } - fastlocals = __Pyx_PyFrame_GetLocalsplus(f); - for (i = 0; i < na; i++) { - Py_INCREF(*args); - fastlocals[i] = *args++; + if (likely(__Pyx_TypeCheck(obj, type))) + return 1; + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + type_name = __Pyx_PyType_GetName(type); + PyErr_Format(PyExc_TypeError, + "Cannot convert " __Pyx_FMT_TYPENAME " to " __Pyx_FMT_TYPENAME, + obj_type_name, type_name); + __Pyx_DECREF_TypeName(obj_type_name); + __Pyx_DECREF_TypeName(type_name); + return 0; +} + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; } - result = PyEval_EvalFrameEx(f,0); - ++tstate->recursion_depth; - Py_DECREF(f); - --tstate->recursion_depth; - return result; + return exc_info; } -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { - PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); - PyObject *globals = PyFunction_GET_GLOBALS(func); - PyObject *argdefs = PyFunction_GET_DEFAULTS(func); - PyObject *closure; +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; + } else { + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #endif +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); + #endif +} +#endif + +/* GetException */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type = NULL, *local_value, *local_tb = NULL; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if PY_VERSION_HEX >= 0x030C00A6 + local_value = tstate->current_exception; + tstate->current_exception = 0; + if (likely(local_value)) { + local_type = (PyObject*) Py_TYPE(local_value); + Py_INCREF(local_type); + local_tb = PyException_GetTraceback(local_value); + } + #else + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + #endif +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE && PY_VERSION_HEX >= 0x030C00A6 + if (unlikely(tstate->current_exception)) +#elif CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + #if PY_VERSION_HEX >= 0x030B00a4 + tmp_value = exc_info->exc_value; + exc_info->exc_value = local_value; + tmp_type = NULL; + tmp_tb = NULL; + Py_XDECREF(local_type); + Py_XDECREF(local_tb); + #else + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + #endif + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_value = exc_info->exc_value; + exc_info->exc_value = *value; + if (tmp_value == NULL || tmp_value == Py_None) { + Py_XDECREF(tmp_value); + tmp_value = NULL; + tmp_type = NULL; + tmp_tb = NULL; + } else { + tmp_type = (PyObject*) Py_TYPE(tmp_value); + Py_INCREF(tmp_type); + #if CYTHON_COMPILING_IN_CPYTHON + tmp_tb = ((PyBaseExceptionObject*) tmp_value)->traceback; + Py_XINCREF(tmp_tb); + #else + tmp_tb = PyException_GetTraceback(tmp_value); + #endif + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = *type; + exc_info->exc_value = *value; + exc_info->exc_traceback = *tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = *type; + tstate->exc_value = *value; + tstate->exc_traceback = *tb; + #endif + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* Import */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *module = 0; + PyObject *empty_dict = 0; + PyObject *empty_list = 0; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (unlikely(!py_import)) + goto bad; + if (!from_list) { + empty_list = PyList_New(0); + if (unlikely(!empty_list)) + goto bad; + from_list = empty_list; + } + #endif + empty_dict = PyDict_New(); + if (unlikely(!empty_dict)) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { + #if CYTHON_COMPILING_IN_LIMITED_API + module = PyImport_ImportModuleLevelObject( + name, empty_dict, empty_dict, from_list, 1); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, 1); + #endif + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (unlikely(!py_level)) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + #if CYTHON_COMPILING_IN_LIMITED_API + module = PyImport_ImportModuleLevelObject( + name, empty_dict, empty_dict, from_list, level); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, level); + #endif + #endif + } + } +bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + return module; +} + +/* ImportDottedModule */ #if PY_MAJOR_VERSION >= 3 - PyObject *kwdefs; +static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) { + PyObject *partial_name = NULL, *slice = NULL, *sep = NULL; + if (unlikely(PyErr_Occurred())) { + PyErr_Clear(); + } + if (likely(PyTuple_GET_SIZE(parts_tuple) == count)) { + partial_name = name; + } else { + slice = PySequence_GetSlice(parts_tuple, 0, count); + if (unlikely(!slice)) + goto bad; + sep = PyUnicode_FromStringAndSize(".", 1); + if (unlikely(!sep)) + goto bad; + partial_name = PyUnicode_Join(sep, slice); + } + PyErr_Format( +#if PY_MAJOR_VERSION < 3 + PyExc_ImportError, + "No module named '%s'", PyString_AS_STRING(partial_name)); +#else +#if PY_VERSION_HEX >= 0x030600B1 + PyExc_ModuleNotFoundError, +#else + PyExc_ImportError, #endif - PyObject *kwtuple, **k; - PyObject **d; - Py_ssize_t nd; - Py_ssize_t nk; - PyObject *result; - assert(kwargs == NULL || PyDict_Check(kwargs)); - nk = kwargs ? PyDict_Size(kwargs) : 0; - if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { + "No module named '%U'", partial_name); +#endif +bad: + Py_XDECREF(sep); + Py_XDECREF(slice); + Py_XDECREF(partial_name); + return NULL; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) { + PyObject *imported_module; +#if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + return NULL; + imported_module = __Pyx_PyDict_GetItemStr(modules, name); + Py_XINCREF(imported_module); +#else + imported_module = PyImport_GetModule(name); +#endif + return imported_module; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple) { + Py_ssize_t i, nparts; + nparts = PyTuple_GET_SIZE(parts_tuple); + for (i=1; i < nparts && module; i++) { + PyObject *part, *submodule; +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + part = PyTuple_GET_ITEM(parts_tuple, i); +#else + part = PySequence_ITEM(parts_tuple, i); +#endif + submodule = __Pyx_PyObject_GetAttrStrNoError(module, part); +#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(part); +#endif + Py_DECREF(module); + module = submodule; + } + if (unlikely(!module)) { + return __Pyx__ImportDottedModule_Error(name, parts_tuple, i); + } + return module; +} +#endif +static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if PY_MAJOR_VERSION < 3 + PyObject *module, *from_list, *star = __pyx_n_s__3; + CYTHON_UNUSED_VAR(parts_tuple); + from_list = PyList_New(1); + if (unlikely(!from_list)) return NULL; + Py_INCREF(star); + PyList_SET_ITEM(from_list, 0, star); + module = __Pyx_Import(name, from_list, 0); + Py_DECREF(from_list); + return module; +#else + PyObject *imported_module; + PyObject *module = __Pyx_Import(name, NULL, 0); + if (!parts_tuple || unlikely(!module)) + return module; + imported_module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(imported_module)) { + Py_DECREF(module); + return imported_module; + } + PyErr_Clear(); + return __Pyx_ImportDottedModule_WalkParts(module, name, parts_tuple); +#endif +} +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030400B1 + PyObject *module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(module)) { + PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_n_s_spec); + if (likely(spec)) { + PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_n_s_initializing); + if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) { + Py_DECREF(spec); + spec = NULL; + } + Py_XDECREF(unsafe); + } + if (likely(!spec)) { + PyErr_Clear(); + return module; + } + Py_DECREF(spec); + Py_DECREF(module); + } else if (PyErr_Occurred()) { + PyErr_Clear(); } - if ( -#if PY_MAJOR_VERSION >= 3 - co->co_kwonlyargcount == 0 && #endif - likely(kwargs == NULL || nk == 0) && - co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { - if (argdefs == NULL && co->co_argcount == nargs) { - result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); - goto done; - } - else if (nargs == 0 && argdefs != NULL - && co->co_argcount == Py_SIZE(argdefs)) { - /* function called with no arguments, but all parameters have - a default value: use default values as arguments .*/ - args = &PyTuple_GET_ITEM(argdefs, 0); - result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); - goto done; + return __Pyx__ImportDottedModule(name, parts_tuple); +} + +/* ssize_strlen */ +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; + } + return (Py_ssize_t) len; +} + +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; } + return 0; } - if (kwargs != NULL) { - Py_ssize_t pos, i; - kwtuple = PyTuple_New(2 * nk); - if (kwtuple == NULL) { - result = NULL; - goto done; + return __Pyx_InBases(a, b); +} +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; } - k = &PyTuple_GET_ITEM(kwtuple, 0); - pos = i = 0; - while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { - Py_INCREF(k[i]); - Py_INCREF(k[i+1]); - i += 2; + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; } - nk = i / 2; } - else { - kwtuple = NULL; - k = NULL; + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); } - closure = PyFunction_GET_CLOSURE(func); +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); #if PY_MAJOR_VERSION >= 3 - kwdefs = PyFunction_GET_KW_DEFAULTS(func); + for (i=0; i= 3 - result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, kwdefs, closure); -#else - result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, closure); -#endif - Py_XDECREF(kwtuple); -done: - Py_LeaveRecursiveCall(); - return result; + return PyErr_GivenExceptionMatches(err, exc_type); +} +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) { + assert(PyExceptionClass_Check(exc_type1)); + assert(PyExceptionClass_Check(exc_type2)); + if (likely(err == exc_type1 || err == exc_type2)) return 1; + if (likely(PyExceptionClass_Check(err))) { + return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2); + } + return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2)); } -#endif #endif -/* PyObjectCallMethO */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { - PyObject *self, *result; - PyCFunction cfunc; - cfunc = PyCFunction_GET_FUNCTION(func); - self = PyCFunction_GET_SELF(func); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) +/* PySequenceMultiply */ +static PyObject* __Pyx_PySequence_Multiply_Generic(PyObject *seq, Py_ssize_t mul) { + PyObject *result, *pymul = PyInt_FromSsize_t(mul); + if (unlikely(!pymul)) return NULL; - result = cfunc(self, arg); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } + result = PyNumber_Multiply(seq, pymul); + Py_DECREF(pymul); return result; } +static CYTHON_INLINE PyObject* __Pyx_PySequence_Multiply(PyObject *seq, Py_ssize_t mul) { +#if CYTHON_USE_TYPE_SLOTS + PyTypeObject *type = Py_TYPE(seq); + if (likely(type->tp_as_sequence && type->tp_as_sequence->sq_repeat)) { + return type->tp_as_sequence->sq_repeat(seq, mul); + } else #endif + { + return __Pyx_PySequence_Multiply_Generic(seq, mul); + } +} -/* PyObjectCallNoArg */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { -#if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, NULL, 0); +/* SetItemInt */ +static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) { + int r; + if (unlikely(!j)) return -1; + r = PyObject_SetItem(o, j, v); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list, + CYTHON_NCP_UNUSED int wraparound, CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o)); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o)))) { + PyObject* old = PyList_GET_ITEM(o, n); + Py_INCREF(v); + PyList_SET_ITEM(o, n, v); + Py_DECREF(old); + return 1; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_ass_subscript) { + int r; + PyObject *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return -1; + r = mm->mp_ass_subscript(o, key, v); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_ass_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return -1; + PyErr_Clear(); + } + } + return sm->sq_ass_item(o, i, v); + } } -#endif -#if defined(__Pyx_CyFunction_USED) && defined(NDEBUG) - if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func))) #else - if (likely(PyCFunction_Check(func))) +#if CYTHON_COMPILING_IN_PYPY + if (is_list || (PySequence_Check(o) && !PyDict_Check(o))) +#else + if (is_list || PySequence_Check(o)) #endif { - if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) { - return __Pyx_PyObject_CallMethO(func, NULL); - } - } - return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL); -} -#endif - -/* PyCFunctionFastCall */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { - PyCFunctionObject *func = (PyCFunctionObject*)func_obj; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - int flags = PyCFunction_GET_FLAGS(func); - assert(PyCFunction_Check(func)); - assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); - assert(nargs >= 0); - assert(nargs == 0 || args != NULL); - /* _PyCFunction_FastCallDict() must not be called with an exception set, - because it may clear it (directly or indirectly) and so the - caller loses its exception */ - assert(!PyErr_Occurred()); - if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { - return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); - } else { - return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + return PySequence_SetItem(o, i, v); } -} #endif + return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v); +} -/* PyObjectCallOneArg */ -#if CYTHON_COMPILING_IN_CPYTHON -static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_New(1); - if (unlikely(!args)) return NULL; - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 0, arg); - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; +/* RaiseUnboundLocalError */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { + PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); } -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { -#if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, &arg, 1); - } -#endif - if (likely(PyCFunction_Check(func))) { - if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { - return __Pyx_PyObject_CallMethO(func, arg); -#if CYTHON_FAST_PYCCALL - } else if (__Pyx_PyFastCFunction_Check(func)) { - return __Pyx_PyCFunction_FastCall(func, &arg, 1); -#endif + +/* DivInt[long] */ +static CYTHON_INLINE long __Pyx_div_long(long a, long b) { + long q = a / b; + long r = a - q*b; + q -= ((r != 0) & ((r ^ b) < 0)); + return q; +} + +/* ImportFrom */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + const char* module_name_str = 0; + PyObject* module_name = 0; + PyObject* module_dot = 0; + PyObject* full_name = 0; + PyErr_Clear(); + module_name_str = PyModule_GetName(module); + if (unlikely(!module_name_str)) { goto modbad; } + module_name = PyUnicode_FromString(module_name_str); + if (unlikely(!module_name)) { goto modbad; } + module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__2); + if (unlikely(!module_dot)) { goto modbad; } + full_name = PyUnicode_Concat(module_dot, name); + if (unlikely(!full_name)) { goto modbad; } + #if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + { + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + goto modbad; + value = PyObject_GetItem(modules, full_name); } + #else + value = PyImport_GetModule(full_name); + #endif + modbad: + Py_XDECREF(full_name); + Py_XDECREF(module_dot); + Py_XDECREF(module_name); + } + if (unlikely(!value)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif } - return __Pyx__PyObject_CallOneArg(func, arg); + return value; } -#else -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_Pack(1, arg); - if (unlikely(!args)) return NULL; - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; + +/* HasAttr */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { + PyObject *r; + if (unlikely(!__Pyx_PyBaseString_Check(n))) { + PyErr_SetString(PyExc_TypeError, + "hasattr(): attribute name must be string"); + return -1; + } + r = __Pyx_GetAttr(o, n); + if (!r) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; + } +} + +/* PyObjectSetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_setattro)) + return tp->tp_setattro(obj, attr_name, value); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_setattr)) + return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); +#endif + return PyObject_SetAttr(obj, attr_name, value); } #endif /* IterFinish */ static CYTHON_INLINE int __Pyx_IterFinish(void) { -#if CYTHON_FAST_THREAD_STATE - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject* exc_type = tstate->curexc_type; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); if (unlikely(exc_type)) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) { - PyObject *exc_value, *exc_tb; - exc_value = tstate->curexc_value; - exc_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; - Py_DECREF(exc_type); - Py_XDECREF(exc_value); - Py_XDECREF(exc_tb); - return 0; - } else { - return -1; - } - } - return 0; -#else - if (unlikely(PyErr_Occurred())) { - if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { - PyErr_Clear(); - return 0; - } else { + if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) return -1; - } + __Pyx_PyErr_Clear(); + return 0; } return 0; -#endif +} + +/* PyObjectCallNoArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { + PyObject *arg = NULL; + return __Pyx_PyObject_FastCall(func, (&arg)+1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); } /* PyObjectGetMethod */ static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { PyObject *attr; #if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + __Pyx_TypeName type_name; PyTypeObject *tp = Py_TYPE(obj); PyObject *descr; descrgetfunc f = NULL; @@ -57347,11 +67125,13 @@ static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **me descr = _PyType_Lookup(tp, name); if (likely(descr != NULL)) { Py_INCREF(descr); -#if PY_MAJOR_VERSION >= 3 +#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR + if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) +#elif PY_MAJOR_VERSION >= 3 #ifdef __Pyx_CyFunction_USED - if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) #else - if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type))) + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type))) #endif #else #ifdef __Pyx_CyFunction_USED @@ -57392,18 +67172,20 @@ static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **me Py_DECREF(descr); goto try_unpack; } - if (descr != NULL) { + if (likely(descr != NULL)) { *method = descr; return 0; } + type_name = __Pyx_PyType_GetName(tp); PyErr_Format(PyExc_AttributeError, #if PY_MAJOR_VERSION >= 3 - "'%.50s' object has no attribute '%U'", - tp->tp_name, name); + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, name); #else - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, PyString_AS_STRING(name)); + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(name)); #endif + __Pyx_DECREF_TypeName(type_name); return 0; #else attr = __Pyx_PyObject_GetAttrStr(obj, name); @@ -57439,19 +67221,6 @@ static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name return result; } -/* RaiseNeedMoreValuesToUnpack */ -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { - PyErr_Format(PyExc_ValueError, - "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", - index, (index == 1) ? "" : "s"); -} - -/* RaiseTooManyValuesToUnpack */ -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { - PyErr_Format(PyExc_ValueError, - "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); -} - /* UnpackItemEndCheck */ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { if (unlikely(retval)) { @@ -57462,11 +67231,6 @@ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { return __Pyx_IterFinish(); } -/* RaiseNoneIterError */ -static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); -} - /* UnpackTupleError */ static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { if (t == Py_None) { @@ -57511,7 +67275,7 @@ static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyOb iter = PyObject_GetIter(tuple); if (unlikely(!iter)) goto bad; if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; } - iternext = Py_TYPE(iter)->tp_iternext; + iternext = __Pyx_PyObject_GetIterNextFunc(iter); value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; } value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; } if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad; @@ -57644,149 +67408,10 @@ static CYTHON_INLINE int __Pyx_dict_iter_next( } /* PyObjectCall2Args */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { - PyObject *args, *result = NULL; - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyFunction_FastCall(function, args, 2); - } - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyCFunction_FastCall(function, args, 2); - } - #endif - args = PyTuple_New(2); - if (unlikely(!args)) goto done; - Py_INCREF(arg1); - PyTuple_SET_ITEM(args, 0, arg1); - Py_INCREF(arg2); - PyTuple_SET_ITEM(args, 1, arg2); - Py_INCREF(function); - result = __Pyx_PyObject_Call(function, args, NULL); - Py_DECREF(args); - Py_DECREF(function); -done: - return result; -} - -/* GetItemInt */ -static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { - PyObject *r; - if (!j) return NULL; - r = PyObject_GetItem(o, j); - Py_DECREF(j); - return r; -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - Py_ssize_t wrapped_i = i; - if (wraparound & unlikely(i < 0)) { - wrapped_i += PyList_GET_SIZE(o); - } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { - PyObject *r = PyList_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - Py_ssize_t wrapped_i = i; - if (wraparound & unlikely(i < 0)) { - wrapped_i += PyTuple_GET_SIZE(o); - } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); - if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { - PyObject *r = PyList_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } - else if (PyTuple_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (!PyErr_ExceptionMatches(PyExc_OverflowError)) - return NULL; - PyErr_Clear(); - } - } - return m->sq_item(o, i); - } - } -#else - if (is_list || PySequence_Check(o)) { - return PySequence_GetItem(o, i); - } -#endif - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -} - -/* ObjectGetItem */ -#if CYTHON_USE_TYPE_SLOTS -static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) { - PyObject *runerr = NULL; - Py_ssize_t key_value; - PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence; - if (unlikely(!(m && m->sq_item))) { - PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name); - return NULL; - } - key_value = __Pyx_PyIndex_AsSsize_t(index); - if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { - return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); - } - if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { - PyErr_Clear(); - PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name); - } - return NULL; -} -static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) { - PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping; - if (likely(m && m->mp_subscript)) { - return m->mp_subscript(obj, key); - } - return __Pyx_PyObject_GetIndex(obj, key); +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args[3] = {NULL, arg1, arg2}; + return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); } -#endif /* PyObjectCallMethod1 */ static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { @@ -57816,89 +67441,23 @@ static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x) { return -1; Py_DECREF(retval); } - return 0; -} - -/* Import */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_MAJOR_VERSION < 3 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; - } - #endif - if (!module) { - #if PY_MAJOR_VERSION < 3 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } -bad: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -/* ImportFrom */ -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif - } - return value; + return 0; } /* UnpackUnboundCMethod */ +static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject *args, PyObject *kwargs) { + PyObject *selfless_args = PyTuple_GetSlice(args, 1, PyTuple_Size(args)); + if (unlikely(!selfless_args)) return NULL; + PyObject *result = PyObject_Call(method, selfless_args, kwargs); + Py_DECREF(selfless_args); + return result; +} +static PyMethodDef __Pyx_UnboundCMethod_Def = { + "CythonUnboundCMethod", + __PYX_REINTERPRET_FUNCION(PyCFunction, __Pyx_SelflessCall), + METH_VARARGS | METH_KEYWORDS, + NULL +}; static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) { PyObject *method; method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name); @@ -57908,13 +67467,43 @@ static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) { #if CYTHON_COMPILING_IN_CPYTHON #if PY_MAJOR_VERSION >= 3 if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type))) + #else + if (likely(!PyCFunction_Check(method))) #endif { PyMethodDescrObject *descr = (PyMethodDescrObject*) method; target->func = descr->d_method->ml_meth; target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS); - } + } else +#endif +#if defined(CYTHON_COMPILING_IN_PYPY) +#elif PY_VERSION_HEX >= 0x03090000 + if (PyCFunction_CheckExact(method)) +#else + if (PyCFunction_Check(method)) +#endif + { + PyObject *self; + int self_found; +#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY + self = PyObject_GetAttrString(method, "__self__"); + if (!self) { + PyErr_Clear(); + } +#else + self = PyCFunction_GET_SELF(method); +#endif + self_found = (self && self != Py_None); +#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY + Py_XDECREF(self); #endif + if (self_found) { + PyObject *unbound_method = PyCFunction_New(&__Pyx_UnboundCMethod_Def, method); + if (unlikely(!unbound_method)) return -1; + Py_DECREF(method); + target->method = unbound_method; + } + } return 0; } @@ -57925,13 +67514,13 @@ static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* int flag = cfunc->flag; if (flag == METH_O) { return (*(cfunc->func))(self, arg); - } else if (PY_VERSION_HEX >= 0x030600B1 && flag == METH_FASTCALL) { + } else if ((PY_VERSION_HEX >= 0x030600B1) && flag == METH_FASTCALL) { #if PY_VERSION_HEX >= 0x030700A0 return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1); #else return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); #endif - } else if (PY_VERSION_HEX >= 0x030700A0 && flag == (METH_FASTCALL | METH_KEYWORDS)) { + } else if ((PY_VERSION_HEX >= 0x030700A0) && flag == (METH_FASTCALL | METH_KEYWORDS)) { return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); } } @@ -58029,7 +67618,7 @@ static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc, PyObje /* dict_getitem_default */ static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value) { PyObject* value; -#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +#if PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) value = PyDict_GetItemWithError(d, key); if (unlikely(!value)) { if (unlikely(PyErr_Occurred())) @@ -58058,15 +67647,17 @@ static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObjec /* PyIntBinop */ #if !CYTHON_COMPILING_IN_PYPY -static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) { - (void)inplace; - (void)zerodivision_check; +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); #if PY_MAJOR_VERSION < 3 if (likely(PyInt_CheckExact(op1))) { const long b = intval; long x; long a = PyInt_AS_LONG(op1); - x = (long)((unsigned long)a + b); + + x = (long)((unsigned long)a + (unsigned long)b); if (likely((x^a) >= 0 || (x^b) >= 0)) return PyInt_FromLong(x); return PyLong_Type.tp_as_number->nb_add(op1, op2); @@ -58080,77 +67671,79 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED const PY_LONG_LONG llb = intval; PY_LONG_LONG lla, llx; #endif - const digit* digits = ((PyLongObject*)op1)->ob_digit; - const Py_ssize_t size = Py_SIZE(op1); - if (likely(__Pyx_sst_abs(size) <= 1)) { - a = likely(size) ? digits[0] : 0; - if (size == -1) a = -a; + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op2); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); switch (size) { case -2: if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 2: if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case -3: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 3: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case -4: if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 4: if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; default: return PyLong_Type.tp_as_number->nb_add(op1, op2); @@ -58169,8 +67762,13 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED #endif if (PyFloat_CheckExact(op1)) { const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else double a = PyFloat_AS_DOUBLE(op1); +#endif double result; + PyFPE_START_PROTECT("add", return NULL) result = ((double)a) + (double)b; PyFPE_END_PROTECT(result) @@ -58235,7 +67833,8 @@ static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, - int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) { + int has_cstart, int has_cstop, int wraparound) { + __Pyx_TypeName obj_type_name; #if CYTHON_USE_TYPE_SLOTS PyMappingMethods* mp; #if PY_MAJOR_VERSION < 3 @@ -58274,9 +67873,13 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj, } return ms->sq_slice(obj, cstart, cstop); } +#else + CYTHON_UNUSED_VAR(wraparound); #endif mp = Py_TYPE(obj)->tp_as_mapping; if (likely(mp && mp->mp_subscript)) +#else + CYTHON_UNUSED_VAR(wraparound); #endif { PyObject* result; @@ -58322,23 +67925,27 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj, } return result; } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); PyErr_Format(PyExc_TypeError, - "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name); + "'" __Pyx_FMT_TYPENAME "' object is unsliceable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); bad: return NULL; } /* PyIntBinop */ #if !CYTHON_COMPILING_IN_PYPY -static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) { - (void)inplace; - (void)zerodivision_check; +static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); #if PY_MAJOR_VERSION < 3 if (likely(PyInt_CheckExact(op1))) { const long b = intval; long x; long a = PyInt_AS_LONG(op1); - x = (long)((unsigned long)a - b); + + x = (long)((unsigned long)a - (unsigned long)b); if (likely((x^a) >= 0 || (x^~b) >= 0)) return PyInt_FromLong(x); return PyLong_Type.tp_as_number->nb_subtract(op1, op2); @@ -58352,77 +67959,79 @@ static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, CYTHON_U const PY_LONG_LONG llb = intval; PY_LONG_LONG lla, llx; #endif - const digit* digits = ((PyLongObject*)op1)->ob_digit; - const Py_ssize_t size = Py_SIZE(op1); - if (likely(__Pyx_sst_abs(size) <= 1)) { - a = likely(size) ? digits[0] : 0; - if (size == -1) a = -a; + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return PyLong_FromLong(-intval); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); switch (size) { case -2: if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 2: if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case -3: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 3: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case -4: if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 4: if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; default: return PyLong_Type.tp_as_number->nb_subtract(op1, op2); @@ -58441,8 +68050,13 @@ static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, CYTHON_U #endif if (PyFloat_CheckExact(op1)) { const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else double a = PyFloat_AS_DOUBLE(op1); +#endif double result; + PyFPE_START_PROTECT("subtract", return NULL) result = ((double)a) - (double)b; PyFPE_END_PROTECT(result) @@ -58539,677 +68153,144 @@ static PyObject* __Pyx_PyObject_Format(PyObject* obj, PyObject* format_spec) { ret = _PyFloat_FormatAdvancedWriter( &writer, obj, - format_spec, 0, PyUnicode_GET_LENGTH(format_spec)); - } else if (likely(PyLong_CheckExact(obj))) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x03040000 - _PyUnicodeWriter_Init(&writer, 0); -#else - _PyUnicodeWriter_Init(&writer); -#endif - ret = _PyLong_FormatAdvancedWriter( - &writer, - obj, - format_spec, 0, PyUnicode_GET_LENGTH(format_spec)); - } else { - return PyObject_Format(obj, format_spec); - } - if (unlikely(ret == -1)) { - _PyUnicodeWriter_Dealloc(&writer); - return NULL; - } - return _PyUnicodeWriter_Finish(&writer); -} -#endif - -/* JoinPyUnicode */ -static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, - CYTHON_UNUSED Py_UCS4 max_char) { -#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - PyObject *result_uval; - int result_ukind; - Py_ssize_t i, char_pos; - void *result_udata; -#if CYTHON_PEP393_ENABLED - result_uval = PyUnicode_New(result_ulength, max_char); - if (unlikely(!result_uval)) return NULL; - result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND; - result_udata = PyUnicode_DATA(result_uval); -#else - result_uval = PyUnicode_FromUnicode(NULL, result_ulength); - if (unlikely(!result_uval)) return NULL; - result_ukind = sizeof(Py_UNICODE); - result_udata = PyUnicode_AS_UNICODE(result_uval); -#endif - char_pos = 0; - for (i=0; i < value_count; i++) { - int ukind; - Py_ssize_t ulength; - void *udata; - PyObject *uval = PyTuple_GET_ITEM(value_tuple, i); - if (unlikely(__Pyx_PyUnicode_READY(uval))) - goto bad; - ulength = __Pyx_PyUnicode_GET_LENGTH(uval); - if (unlikely(!ulength)) - continue; - if (unlikely(char_pos + ulength < 0)) - goto overflow; - ukind = __Pyx_PyUnicode_KIND(uval); - udata = __Pyx_PyUnicode_DATA(uval); - if (!CYTHON_PEP393_ENABLED || ukind == result_ukind) { - memcpy((char *)result_udata + char_pos * result_ukind, udata, (size_t) (ulength * result_ukind)); - } else { - #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030300F0 || defined(_PyUnicode_FastCopyCharacters) - _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength); - #else - Py_ssize_t j; - for (j=0; j < ulength; j++) { - Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j); - __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar); - } - #endif - } - char_pos += ulength; - } - return result_uval; -overflow: - PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string"); -bad: - Py_DECREF(result_uval); - return NULL; -#else - result_ulength++; - value_count++; - return PyUnicode_Join(__pyx_empty_unicode, value_tuple); -#endif -} - -/* CIntToDigits */ -static const char DIGIT_PAIRS_10[2*10*10+1] = { - "00010203040506070809" - "10111213141516171819" - "20212223242526272829" - "30313233343536373839" - "40414243444546474849" - "50515253545556575859" - "60616263646566676869" - "70717273747576777879" - "80818283848586878889" - "90919293949596979899" -}; -static const char DIGIT_PAIRS_8[2*8*8+1] = { - "0001020304050607" - "1011121314151617" - "2021222324252627" - "3031323334353637" - "4041424344454647" - "5051525354555657" - "6061626364656667" - "7071727374757677" -}; -static const char DIGITS_HEX[2*16+1] = { - "0123456789abcdef" - "0123456789ABCDEF" -}; - -/* BuildPyUnicode */ -static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, char* chars, int clength, - int prepend_sign, char padding_char) { - PyObject *uval; - Py_ssize_t uoffset = ulength - clength; -#if CYTHON_USE_UNICODE_INTERNALS - Py_ssize_t i; -#if CYTHON_PEP393_ENABLED - void *udata; - uval = PyUnicode_New(ulength, 127); - if (unlikely(!uval)) return NULL; - udata = PyUnicode_DATA(uval); -#else - Py_UNICODE *udata; - uval = PyUnicode_FromUnicode(NULL, ulength); - if (unlikely(!uval)) return NULL; - udata = PyUnicode_AS_UNICODE(uval); -#endif - if (uoffset > 0) { - i = 0; - if (prepend_sign) { - __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, 0, '-'); - i++; - } - for (; i < uoffset; i++) { - __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, i, padding_char); - } - } - for (i=0; i < clength; i++) { - __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, uoffset+i, chars[i]); - } -#else - { - PyObject *sign = NULL, *padding = NULL; - uval = NULL; - if (uoffset > 0) { - prepend_sign = !!prepend_sign; - if (uoffset > prepend_sign) { - padding = PyUnicode_FromOrdinal(padding_char); - if (likely(padding) && uoffset > prepend_sign + 1) { - PyObject *tmp; - PyObject *repeat = PyInt_FromSsize_t(uoffset - prepend_sign); - if (unlikely(!repeat)) goto done_or_error; - tmp = PyNumber_Multiply(padding, repeat); - Py_DECREF(repeat); - Py_DECREF(padding); - padding = tmp; - } - if (unlikely(!padding)) goto done_or_error; - } - if (prepend_sign) { - sign = PyUnicode_FromOrdinal('-'); - if (unlikely(!sign)) goto done_or_error; - } - } - uval = PyUnicode_DecodeASCII(chars, clength, NULL); - if (likely(uval) && padding) { - PyObject *tmp = PyNumber_Add(padding, uval); - Py_DECREF(uval); - uval = tmp; - } - if (likely(uval) && sign) { - PyObject *tmp = PyNumber_Add(sign, uval); - Py_DECREF(uval); - uval = tmp; - } -done_or_error: - Py_XDECREF(padding); - Py_XDECREF(sign); - } -#endif - return uval; -} - -/* CIntToPyUnicode */ -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_Py_ssize_t(Py_ssize_t value, Py_ssize_t width, char padding_char, char format_char) { - char digits[sizeof(Py_ssize_t)*3+2]; - char *dpos, *end = digits + sizeof(Py_ssize_t)*3+2; - const char *hex_digits = DIGITS_HEX; - Py_ssize_t length, ulength; - int prepend_sign, last_one_off; - Py_ssize_t remaining; -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wconversion" -#endif - const Py_ssize_t neg_one = (Py_ssize_t) -1, const_zero = (Py_ssize_t) 0; -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic pop -#endif - const int is_unsigned = neg_one > const_zero; - if (format_char == 'X') { - hex_digits += 16; - format_char = 'x'; - } - remaining = value; - last_one_off = 0; - dpos = end; - do { - int digit_pos; - switch (format_char) { - case 'o': - digit_pos = abs((int)(remaining % (8*8))); - remaining = (Py_ssize_t) (remaining / (8*8)); - dpos -= 2; - memcpy(dpos, DIGIT_PAIRS_8 + digit_pos * 2, 2); - last_one_off = (digit_pos < 8); - break; - case 'd': - digit_pos = abs((int)(remaining % (10*10))); - remaining = (Py_ssize_t) (remaining / (10*10)); - dpos -= 2; - memcpy(dpos, DIGIT_PAIRS_10 + digit_pos * 2, 2); - last_one_off = (digit_pos < 10); - break; - case 'x': - *(--dpos) = hex_digits[abs((int)(remaining % 16))]; - remaining = (Py_ssize_t) (remaining / 16); - break; - default: - assert(0); - break; - } - } while (unlikely(remaining != 0)); - if (last_one_off) { - assert(*dpos == '0'); - dpos++; - } - length = end - dpos; - ulength = length; - prepend_sign = 0; - if (!is_unsigned && value <= neg_one) { - if (padding_char == ' ' || width <= length + 1) { - *(--dpos) = '-'; - ++length; - } else { - prepend_sign = 1; - } - ++ulength; - } - if (width > ulength) { - ulength = width; - } - if (ulength == 1) { - return PyUnicode_FromOrdinal(*dpos); - } - return __Pyx_PyUnicode_BuildFromAscii(ulength, dpos, (int) length, prepend_sign, padding_char); -} - -/* PyIntBinop */ -#if !CYTHON_COMPILING_IN_PYPY -#if PY_MAJOR_VERSION < 3 || CYTHON_USE_PYLONG_INTERNALS -#define __Pyx_PyInt_TrueDivideObjC_ZeroDivisionError(operand)\ - if (unlikely(zerodivision_check && ((operand) == 0))) {\ - PyErr_SetString(PyExc_ZeroDivisionError, "integer division by zero");\ - return NULL;\ - } -#endif -static PyObject* __Pyx_PyInt_TrueDivideObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) { - (void)inplace; - (void)zerodivision_check; - #if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(op1))) { - const long b = intval; - long a = PyInt_AS_LONG(op1); - __Pyx_PyInt_TrueDivideObjC_ZeroDivisionError(b) - if (8 * sizeof(long) <= 53 || likely(labs(a) <= ((PY_LONG_LONG)1 << 53))) { - return PyFloat_FromDouble((double)a / (double)b); - } - return PyInt_Type.tp_as_number->nb_true_divide(op1, op2); - } - #endif - #if CYTHON_USE_PYLONG_INTERNALS - if (likely(PyLong_CheckExact(op1))) { - const long b = intval; - long a, x; - const digit* digits = ((PyLongObject*)op1)->ob_digit; - const Py_ssize_t size = Py_SIZE(op1); - if (likely(__Pyx_sst_abs(size) <= 1)) { - a = likely(size) ? digits[0] : 0; - if (size == -1) a = -a; - } else { - switch (size) { - case -2: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT && 1 * PyLong_SHIFT < 53) { - a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; - } - CYTHON_FALLTHROUGH; - case 2: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT && 1 * PyLong_SHIFT < 53) { - a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; - } - CYTHON_FALLTHROUGH; - case -3: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT && 2 * PyLong_SHIFT < 53) { - a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; - } - CYTHON_FALLTHROUGH; - case 3: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT && 2 * PyLong_SHIFT < 53) { - a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; - } - CYTHON_FALLTHROUGH; - case -4: - if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT && 3 * PyLong_SHIFT < 53) { - a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; - } - CYTHON_FALLTHROUGH; - case 4: - if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT && 3 * PyLong_SHIFT < 53) { - a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; - } - CYTHON_FALLTHROUGH; - default: return PyLong_Type.tp_as_number->nb_true_divide(op1, op2); - } - } - __Pyx_PyInt_TrueDivideObjC_ZeroDivisionError(b) - if ((8 * sizeof(long) <= 53 || likely(labs(a) <= ((PY_LONG_LONG)1 << 53))) - || __Pyx_sst_abs(size) <= 52 / PyLong_SHIFT) { - return PyFloat_FromDouble((double)a / (double)b); - } - return PyLong_Type.tp_as_number->nb_true_divide(op1, op2); - return PyLong_FromLong(x); - - } - #endif - if (PyFloat_CheckExact(op1)) { - const long b = intval; - double a = PyFloat_AS_DOUBLE(op1); - double result; - if (unlikely(zerodivision_check && b == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "float division by zero"); - return NULL; - } - PyFPE_START_PROTECT("divide", return NULL) - result = ((double)a) / (double)b; - PyFPE_END_PROTECT(result) - return PyFloat_FromDouble(result); - } - return (inplace ? PyNumber_InPlaceTrueDivide : PyNumber_TrueDivide)(op1, op2); -} -#endif - -/* GetTopmostException */ -#if CYTHON_USE_EXC_INFO_STACK -static _PyErr_StackItem * -__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) -{ - _PyErr_StackItem *exc_info = tstate->exc_info; - while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) && - exc_info->previous_item != NULL) - { - exc_info = exc_info->previous_item; - } - return exc_info; -} -#endif - -/* SaveResetException */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); - *type = exc_info->exc_type; - *value = exc_info->exc_value; - *tb = exc_info->exc_traceback; - #else - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; - #endif - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); -} -static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = type; - exc_info->exc_value = value; - exc_info->exc_traceback = tb; - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; - #endif - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} -#endif - -/* GetException */ -#if CYTHON_FAST_THREAD_STATE -static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) -#else -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) -#endif -{ - PyObject *local_type, *local_value, *local_tb; -#if CYTHON_FAST_THREAD_STATE - PyObject *tmp_type, *tmp_value, *tmp_tb; - local_type = tstate->curexc_type; - local_value = tstate->curexc_value; - local_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(&local_type, &local_value, &local_tb); -#endif - PyErr_NormalizeException(&local_type, &local_value, &local_tb); -#if CYTHON_FAST_THREAD_STATE - if (unlikely(tstate->curexc_type)) -#else - if (unlikely(PyErr_Occurred())) -#endif - goto bad; - #if PY_MAJOR_VERSION >= 3 - if (local_tb) { - if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) - goto bad; - } - #endif - Py_XINCREF(local_tb); - Py_XINCREF(local_type); - Py_XINCREF(local_value); - *type = local_type; - *value = local_value; - *tb = local_tb; -#if CYTHON_FAST_THREAD_STATE - #if CYTHON_USE_EXC_INFO_STACK - { - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = local_type; - exc_info->exc_value = local_value; - exc_info->exc_traceback = local_tb; - } - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = local_type; - tstate->exc_value = local_value; - tstate->exc_traceback = local_tb; - #endif - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); + format_spec, 0, PyUnicode_GET_LENGTH(format_spec)); + } else if (likely(PyLong_CheckExact(obj))) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x03040000 + _PyUnicodeWriter_Init(&writer, 0); #else - PyErr_SetExcInfo(local_type, local_value, local_tb); + _PyUnicodeWriter_Init(&writer); #endif - return 0; -bad: - *type = 0; - *value = 0; - *tb = 0; - Py_XDECREF(local_type); - Py_XDECREF(local_value); - Py_XDECREF(local_tb); - return -1; -} - -/* PyErrFetchRestore */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; + ret = _PyLong_FormatAdvancedWriter( + &writer, + obj, + format_spec, 0, PyUnicode_GET_LENGTH(format_spec)); + } else { + return PyObject_Format(obj, format_spec); + } + if (unlikely(ret == -1)) { + _PyUnicodeWriter_Dealloc(&writer); + return NULL; + } + return _PyUnicodeWriter_Finish(&writer); } #endif -/* RaiseException */ +/* PyObjectLookupSpecial */ +#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) { + PyObject *res; + PyTypeObject *tp = Py_TYPE(obj); #if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { - __Pyx_PyThreadState_declare - Py_XINCREF(type); - if (!value || value == Py_None) - value = NULL; - else - Py_INCREF(value); - if (!tb || tb == Py_None) - tb = NULL; - else { - Py_INCREF(tb); - if (!PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - } - if (PyType_Check(type)) { -#if CYTHON_COMPILING_IN_PYPY - if (!value) { - Py_INCREF(Py_None); - value = Py_None; - } + if (unlikely(PyInstance_Check(obj))) + return with_error ? __Pyx_PyObject_GetAttrStr(obj, attr_name) : __Pyx_PyObject_GetAttrStrNoError(obj, attr_name); #endif - PyErr_NormalizeException(&type, &value, &tb); - } else { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - value = type; - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; + res = _PyType_Lookup(tp, attr_name); + if (likely(res)) { + descrgetfunc f = Py_TYPE(res)->tp_descr_get; + if (!f) { + Py_INCREF(res); + } else { + res = f(res, obj, (PyObject *)tp); } + } else if (with_error) { + PyErr_SetObject(PyExc_AttributeError, attr_name); } - __Pyx_PyThreadState_assign - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; + return res; } -#else -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - PyObject* owned_instance = NULL; - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (PyExceptionClass_Check(type)) { - PyObject *instance_class = NULL; - if (value && PyExceptionInstance_Check(value)) { - instance_class = (PyObject*) Py_TYPE(value); - if (instance_class != type) { - int is_subclass = PyObject_IsSubclass(instance_class, type); - if (!is_subclass) { - instance_class = NULL; - } else if (unlikely(is_subclass == -1)) { - goto bad; - } else { - type = instance_class; - } - } - } - if (!instance_class) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyObject_Call(type, args, NULL); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; +#endif + +/* PyIntBinop */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_TrueDivideObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long a = PyInt_AS_LONG(op1); + + if (8 * sizeof(long) <= 53 || likely(labs(a) <= ((PY_LONG_LONG)1 << 53))) { + return PyFloat_FromDouble((double)a / (double)b); } - } - } else { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; + return PyInt_Type.tp_as_number->nb_true_divide(op1, op2); } - if (cause) { - PyObject *fixed_cause; - if (cause == Py_None) { - fixed_cause = NULL; - } else if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); } else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT && 1 * PyLong_SHIFT < 53) { + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT && 1 * PyLong_SHIFT < 53) { + a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT && 2 * PyLong_SHIFT < 53) { + a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT && 2 * PyLong_SHIFT < 53) { + a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT && 3 * PyLong_SHIFT < 53) { + a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT && 3 * PyLong_SHIFT < 53) { + a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_true_divide(op1, op2); + } } - PyException_SetCause(value, fixed_cause); + if ((8 * sizeof(long) <= 53 || likely(labs(a) <= ((PY_LONG_LONG)1 << 53))) + || __Pyx_PyLong_DigitCount(op1) <= 52 / PyLong_SHIFT) { + return PyFloat_FromDouble((double)a / (double)b); + } + return PyLong_Type.tp_as_number->nb_true_divide(op1, op2); + return PyLong_FromLong(x); + } - PyErr_SetObject(type, value); - if (tb) { -#if CYTHON_FAST_THREAD_STATE - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); #else - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); - Py_INCREF(tb); - PyErr_Restore(tmp_type, tmp_value, tb); - Py_XDECREF(tmp_tb); + double a = PyFloat_AS_DOUBLE(op1); #endif + double result; + + PyFPE_START_PROTECT("divide", return NULL) + result = ((double)a) / (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); } -bad: - Py_XDECREF(owned_instance); - return; + return (inplace ? PyNumber_InPlaceTrueDivide : PyNumber_TrueDivide)(op1, op2); } #endif @@ -59264,8 +68345,11 @@ static long __Pyx__PyObject_Ord(PyObject* c) { } #endif } else { + __Pyx_TypeName c_type_name = __Pyx_PyType_GetName(Py_TYPE(c)); PyErr_Format(PyExc_TypeError, - "ord() expected string of length 1, but %.200s found", Py_TYPE(c)->tp_name); + "ord() expected string of length 1, but " __Pyx_FMT_TYPENAME " found", + c_type_name); + __Pyx_DECREF_TypeName(c_type_name); return (long)(Py_UCS4)-1; } PyErr_Format(PyExc_TypeError, @@ -59273,74 +68357,48 @@ static long __Pyx__PyObject_Ord(PyObject* c) { return (long)(Py_UCS4)-1; } -/* SetItemInt */ -static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) { - int r; - if (!j) return -1; - r = PyObject_SetItem(o, j, v); - Py_DECREF(j); - return r; -} -static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list, - CYTHON_NCP_UNUSED int wraparound, CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o)); - if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o)))) { - PyObject* old = PyList_GET_ITEM(o, n); - Py_INCREF(v); - PyList_SET_ITEM(o, n, v); - Py_DECREF(old); - return 1; - } - } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_ass_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (!PyErr_ExceptionMatches(PyExc_OverflowError)) - return -1; - PyErr_Clear(); - } - } - return m->sq_ass_item(o, i, v); - } - } -#else -#if CYTHON_COMPILING_IN_PYPY - if (is_list || (PySequence_Check(o) && !PyDict_Check(o))) +/* memoryview_get_from_buffer */ +#if !CYTHON_COMPILING_IN_LIMITED_API || CYTHON_LIMITED_API >= 0x030b0000 #else - if (is_list || PySequence_Check(o)) -#endif - { - return PySequence_SetItem(o, i, v); +static Py_ssize_t __Pyx_PyMemoryView_Get_itemsize(PyObject *obj) { + Py_ssize_t result; + PyObject *attr = PyObject_GetAttr(obj, __pyx_n_s_itemsize); + if (!attr) { + goto bad; } -#endif - return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v); + result = PyLong_AsSsize_t(attr); + Py_DECREF(attr); + return result; + bad: + Py_XDECREF(attr); + return -1; } +#endif -/* ArgTypeTest */ -static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) -{ - if (unlikely(!type)) { - PyErr_SetString(PyExc_SystemError, "Missing type object"); - return 0; - } - else if (exact) { - #if PY_MAJOR_VERSION == 2 - if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; - #endif - } - else { - if (likely(__Pyx_TypeCheck(obj, type))) return 1; +/* memoryview_get_from_buffer */ +#if !CYTHON_COMPILING_IN_LIMITED_API || CYTHON_LIMITED_API >= 0x030b0000 +#else +static int __Pyx_PyMemoryView_Get_ndim(PyObject *obj) { + int result; + PyObject *attr = PyObject_GetAttr(obj, __pyx_n_s_ndim); + if (!attr) { + goto bad; } - PyErr_Format(PyExc_TypeError, - "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", - name, type->tp_name, Py_TYPE(obj)->tp_name); - return 0; + result = PyLong_AsLong(attr); + Py_DECREF(attr); + return result; + bad: + Py_XDECREF(attr); + return -1; +} +#endif + +/* py_dict_values */ +static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d) { + if (PY_MAJOR_VERSION >= 3) + return __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyDict_Type_values, d); + else + return PyDict_Values(d); } /* IsLittleEndian */ @@ -59430,7 +68488,7 @@ static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { case 'P': return "a pointer"; case 's': case 'p': return "a string"; case 0: return "end"; - default: return "unparseable format string"; + default: return "unparsable format string"; } } static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { @@ -59480,7 +68538,8 @@ typedef struct { char c; void *x; } __Pyx_st_void_p; #ifdef HAVE_LONG_LONG typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; #endif -static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) { +static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, int is_complex) { + CYTHON_UNUSED_VAR(is_complex); switch (ch) { case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); @@ -59512,7 +68571,8 @@ typedef struct { void *x; char c; } __Pyx_pad_void_p; #ifdef HAVE_LONG_LONG typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; #endif -static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) { +static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, int is_complex) { + CYTHON_UNUSED_VAR(is_complex); switch (ch) { case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); @@ -59847,205 +68907,88 @@ static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const cha if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL; break; default: - { - int number = __Pyx_BufFmt_ExpectNumber(&ts); - if (number == -1) return NULL; - ctx->new_count = (size_t)number; - } - } - } -} - -/* BufferGetAndValidate */ - static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { - if (unlikely(info->buf == NULL)) return; - if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; - __Pyx_ReleaseBuffer(info); -} -static void __Pyx_ZeroBuffer(Py_buffer* buf) { - buf->buf = NULL; - buf->obj = NULL; - buf->strides = __Pyx_zeros; - buf->shape = __Pyx_zeros; - buf->suboffsets = __Pyx_minusones; -} -static int __Pyx__GetBufferAndValidate( - Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, - int nd, int cast, __Pyx_BufFmt_StackElem* stack) -{ - buf->buf = NULL; - if (unlikely(__Pyx_GetBuffer(obj, buf, flags) == -1)) { - __Pyx_ZeroBuffer(buf); - return -1; - } - if (unlikely(buf->ndim != nd)) { - PyErr_Format(PyExc_ValueError, - "Buffer has wrong number of dimensions (expected %d, got %d)", - nd, buf->ndim); - goto fail; - } - if (!cast) { - __Pyx_BufFmt_Context ctx; - __Pyx_BufFmt_Init(&ctx, stack, dtype); - if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; - } - if (unlikely((size_t)buf->itemsize != dtype->size)) { - PyErr_Format(PyExc_ValueError, - "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)", - buf->itemsize, (buf->itemsize > 1) ? "s" : "", - dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); - goto fail; - } - if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; - return 0; -fail:; - __Pyx_SafeReleaseBuffer(buf); - return -1; -} - -/* MemviewSliceInit */ - static int -__Pyx_init_memviewslice(struct __pyx_memoryview_obj *memview, - int ndim, - __Pyx_memviewslice *memviewslice, - int memview_is_new_reference) -{ - __Pyx_RefNannyDeclarations - int i, retval=-1; - Py_buffer *buf = &memview->view; - __Pyx_RefNannySetupContext("init_memviewslice", 0); - if (unlikely(memviewslice->memview || memviewslice->data)) { - PyErr_SetString(PyExc_ValueError, - "memviewslice is already initialized!"); - goto fail; - } - if (buf->strides) { - for (i = 0; i < ndim; i++) { - memviewslice->strides[i] = buf->strides[i]; - } - } else { - Py_ssize_t stride = buf->itemsize; - for (i = ndim - 1; i >= 0; i--) { - memviewslice->strides[i] = stride; - stride *= buf->shape[i]; - } - } - for (i = 0; i < ndim; i++) { - memviewslice->shape[i] = buf->shape[i]; - if (buf->suboffsets) { - memviewslice->suboffsets[i] = buf->suboffsets[i]; - } else { - memviewslice->suboffsets[i] = -1; - } - } - memviewslice->memview = memview; - memviewslice->data = (char *)buf->buf; - if (__pyx_add_acquisition_count(memview) == 0 && !memview_is_new_reference) { - Py_INCREF(memview); - } - retval = 0; - goto no_fail; -fail: - memviewslice->memview = 0; - memviewslice->data = 0; - retval = -1; -no_fail: - __Pyx_RefNannyFinishContext(); - return retval; -} -#ifndef Py_NO_RETURN -#define Py_NO_RETURN -#endif -static void __pyx_fatalerror(const char *fmt, ...) Py_NO_RETURN { - va_list vargs; - char msg[200]; -#if PY_VERSION_HEX >= 0x030A0000 || defined(HAVE_STDARG_PROTOTYPES) - va_start(vargs, fmt); -#else - va_start(vargs); -#endif - vsnprintf(msg, 200, fmt, vargs); - va_end(vargs); - Py_FatalError(msg); -} -static CYTHON_INLINE int -__pyx_add_acquisition_count_locked(__pyx_atomic_int *acquisition_count, - PyThread_type_lock lock) -{ - int result; - PyThread_acquire_lock(lock, 1); - result = (*acquisition_count)++; - PyThread_release_lock(lock); - return result; -} -static CYTHON_INLINE int -__pyx_sub_acquisition_count_locked(__pyx_atomic_int *acquisition_count, - PyThread_type_lock lock) -{ - int result; - PyThread_acquire_lock(lock, 1); - result = (*acquisition_count)--; - PyThread_release_lock(lock); - return result; -} -static CYTHON_INLINE void -__Pyx_INC_MEMVIEW(__Pyx_memviewslice *memslice, int have_gil, int lineno) -{ - int first_time; - struct __pyx_memoryview_obj *memview = memslice->memview; - if (unlikely(!memview || (PyObject *) memview == Py_None)) - return; - if (unlikely(__pyx_get_slice_count(memview) < 0)) - __pyx_fatalerror("Acquisition count is %d (line %d)", - __pyx_get_slice_count(memview), lineno); - first_time = __pyx_add_acquisition_count(memview) == 0; - if (unlikely(first_time)) { - if (have_gil) { - Py_INCREF((PyObject *) memview); - } else { - PyGILState_STATE _gilstate = PyGILState_Ensure(); - Py_INCREF((PyObject *) memview); - PyGILState_Release(_gilstate); - } - } -} -static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *memslice, - int have_gil, int lineno) { - int last_time; - struct __pyx_memoryview_obj *memview = memslice->memview; - if (unlikely(!memview || (PyObject *) memview == Py_None)) { - memslice->memview = NULL; - return; - } - if (unlikely(__pyx_get_slice_count(memview) <= 0)) - __pyx_fatalerror("Acquisition count is %d (line %d)", - __pyx_get_slice_count(memview), lineno); - last_time = __pyx_sub_acquisition_count(memview) == 1; - memslice->data = NULL; - if (unlikely(last_time)) { - if (have_gil) { - Py_CLEAR(memslice->memview); - } else { - PyGILState_STATE _gilstate = PyGILState_Ensure(); - Py_CLEAR(memslice->memview); - PyGILState_Release(_gilstate); + { + int number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + ctx->new_count = (size_t)number; } - } else { - memslice->memview = NULL; } + } +} + +/* BufferGetAndValidate */ + static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { + if (unlikely(info->buf == NULL)) return; + if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; + __Pyx_ReleaseBuffer(info); +} +static void __Pyx_ZeroBuffer(Py_buffer* buf) { + buf->buf = NULL; + buf->obj = NULL; + buf->strides = __Pyx_zeros; + buf->shape = __Pyx_zeros; + buf->suboffsets = __Pyx_minusones; +} +static int __Pyx__GetBufferAndValidate( + Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, + int nd, int cast, __Pyx_BufFmt_StackElem* stack) +{ + buf->buf = NULL; + if (unlikely(__Pyx_GetBuffer(obj, buf, flags) == -1)) { + __Pyx_ZeroBuffer(buf); + return -1; + } + if (unlikely(buf->ndim != nd)) { + PyErr_Format(PyExc_ValueError, + "Buffer has wrong number of dimensions (expected %d, got %d)", + nd, buf->ndim); + goto fail; + } + if (!cast) { + __Pyx_BufFmt_Context ctx; + __Pyx_BufFmt_Init(&ctx, stack, dtype); + if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; + } + if (unlikely((size_t)buf->itemsize != dtype->size)) { + PyErr_Format(PyExc_ValueError, + "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)", + buf->itemsize, (buf->itemsize > 1) ? "s" : "", + dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); + goto fail; + } + if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; + return 0; +fail:; + __Pyx_SafeReleaseBuffer(buf); + return -1; +} + +/* ErrOccurredWithGIL */ + static CYTHON_INLINE int __Pyx_ErrOccurredWithGIL(void) { + int err; + #ifdef WITH_THREAD + PyGILState_STATE _save = PyGILState_Ensure(); + #endif + err = !!PyErr_Occurred(); + #ifdef WITH_THREAD + PyGILState_Release(_save); + #endif + return err; } /* PyIntBinop */ #if !CYTHON_COMPILING_IN_PYPY -static PyObject* __Pyx_PyInt_SubtractCObj(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) { - (void)inplace; - (void)zerodivision_check; +static PyObject* __Pyx_PyInt_SubtractCObj(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); #if PY_MAJOR_VERSION < 3 if (likely(PyInt_CheckExact(op2))) { const long a = intval; long x; long b = PyInt_AS_LONG(op2); - x = (long)((unsigned long)a - b); + + x = (long)((unsigned long)a - (unsigned long)b); if (likely((x^a) >= 0 || (x^~b) >= 0)) return PyInt_FromLong(x); return PyLong_Type.tp_as_number->nb_subtract(op1, op2); @@ -60059,77 +69002,79 @@ static PyObject* __Pyx_PyInt_SubtractCObj(PyObject *op1, PyObject *op2, CYTHON_U const PY_LONG_LONG lla = intval; PY_LONG_LONG llb, llx; #endif - const digit* digits = ((PyLongObject*)op2)->ob_digit; - const Py_ssize_t size = Py_SIZE(op2); - if (likely(__Pyx_sst_abs(size) <= 1)) { - b = likely(size) ? digits[0] : 0; - if (size == -1) b = -b; + if (unlikely(__Pyx_PyLong_IsZero(op2))) { + return __Pyx_NewRef(op1); + } + if (likely(__Pyx_PyLong_IsCompact(op2))) { + b = __Pyx_PyLong_CompactValue(op2); } else { + const digit* digits = __Pyx_PyLong_Digits(op2); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op2); switch (size) { case -2: if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { b = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { llb = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 2: if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { b = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { llb = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case -3: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { b = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { llb = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 3: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { b = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { llb = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case -4: if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { b = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { llb = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 4: if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { b = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { llb = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; default: return PyLong_Type.tp_as_number->nb_subtract(op1, op2); @@ -60148,8 +69093,13 @@ static PyObject* __Pyx_PyInt_SubtractCObj(PyObject *op1, PyObject *op2, CYTHON_U #endif if (PyFloat_CheckExact(op2)) { const long a = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double b = __pyx_PyFloat_AsDouble(op2); +#else double b = PyFloat_AS_DOUBLE(op2); +#endif double result; + PyFPE_START_PROTECT("subtract", return NULL) result = ((double)a) - (double)b; PyFPE_END_PROTECT(result) @@ -60159,439 +69109,124 @@ static PyObject* __Pyx_PyInt_SubtractCObj(PyObject *op1, PyObject *op2, CYTHON_U } #endif -/* PyErrExceptionMatches */ - #if CYTHON_FAST_THREAD_STATE -static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; icurexc_type; - if (exc_type == err) return 1; - if (unlikely(!exc_type)) return 0; - if (unlikely(PyTuple_Check(err))) - return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); - return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); -} -#endif - -/* BytesEquals */ - static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result; -#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) - Py_hash_t hash1, hash2; - hash1 = ((PyBytesObject*)s1)->ob_shash; - hash2 = ((PyBytesObject*)s2)->ob_shash; - if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { - return (equals == Py_NE); - } -#endif - result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -#endif -} - -/* UnicodeEquals */ - static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; -#endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); +/* SliceObject */ + static CYTHON_INLINE int __Pyx_PyObject_SetSlice(PyObject* obj, PyObject* value, + Py_ssize_t cstart, Py_ssize_t cstop, + PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, + int has_cstart, int has_cstop, int wraparound) { + __Pyx_TypeName obj_type_name; +#if CYTHON_USE_TYPE_SLOTS + PyMappingMethods* mp; #if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) - return -1; - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } -#if CYTHON_USE_UNICODE_INTERNALS - { - Py_hash_t hash1, hash2; - #if CYTHON_PEP393_ENABLED - hash1 = ((PyASCIIObject*)s1)->hash; - hash2 = ((PyASCIIObject*)s2)->hash; - #else - hash1 = ((PyUnicodeObject*)s1)->hash; - hash2 = ((PyUnicodeObject*)s2)->hash; - #endif - if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { - goto return_ne; - } + PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; + if (likely(ms && ms->sq_ass_slice)) { + if (!has_cstart) { + if (_py_start && (*_py_start != Py_None)) { + cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); + if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; + } else + cstart = 0; } -#endif - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; + if (!has_cstop) { + if (_py_stop && (*_py_stop != Py_None)) { + cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); + if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; + } else + cstop = PY_SSIZE_T_MAX; } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, (size_t)(length * kind)); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); + if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { + Py_ssize_t l = ms->sq_length(obj); + if (likely(l >= 0)) { + if (cstop < 0) { + cstop += l; + if (cstop < 0) cstop = 0; + } + if (cstart < 0) { + cstart += l; + if (cstart < 0) cstart = 0; + } + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + goto bad; + PyErr_Clear(); + } } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; + return ms->sq_ass_slice(obj, cstart, cstop, value); } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_NE); -#endif -} - -/* DivInt[Py_ssize_t] */ - static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ssize_t b) { - Py_ssize_t q = a / b; - Py_ssize_t r = a - q*b; - q -= ((r != 0) & ((r ^ b) < 0)); - return q; -} - -/* GetAttr */ - static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { -#if CYTHON_USE_TYPE_SLOTS -#if PY_MAJOR_VERSION >= 3 - if (likely(PyUnicode_Check(n))) #else - if (likely(PyString_Check(n))) -#endif - return __Pyx_PyObject_GetAttrStr(o, n); + CYTHON_UNUSED_VAR(wraparound); #endif - return PyObject_GetAttr(o, n); -} - -/* decode_c_string */ - static CYTHON_INLINE PyObject* __Pyx_decode_c_string( - const char* cstring, Py_ssize_t start, Py_ssize_t stop, - const char* encoding, const char* errors, - PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { - Py_ssize_t length; - if (unlikely((start < 0) | (stop < 0))) { - size_t slen = strlen(cstring); - if (unlikely(slen > (size_t) PY_SSIZE_T_MAX)) { - PyErr_SetString(PyExc_OverflowError, - "c-string too long to convert to Python"); - return NULL; - } - length = (Py_ssize_t) slen; - if (start < 0) { - start += length; - if (start < 0) - start = 0; - } - if (stop < 0) - stop += length; - } - if (unlikely(stop <= start)) - return __Pyx_NewRef(__pyx_empty_unicode); - length = stop - start; - cstring += start; - if (decode_func) { - return decode_func(cstring, length, errors); - } else { - return PyUnicode_Decode(cstring, length, encoding, errors); - } -} - -/* GetAttr3 */ - static PyObject *__Pyx_GetAttr3Default(PyObject *d) { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) - return NULL; - __Pyx_PyErr_Clear(); - Py_INCREF(d); - return d; -} -static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { - PyObject *r = __Pyx_GetAttr(o, n); - return (likely(r)) ? r : __Pyx_GetAttr3Default(d); -} - -/* ExtTypeTest */ - static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { - if (unlikely(!type)) { - PyErr_SetString(PyExc_SystemError, "Missing type object"); - return 0; - } - if (likely(__Pyx_TypeCheck(obj, type))) - return 1; - PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", - Py_TYPE(obj)->tp_name, type->tp_name); - return 0; -} - -/* SwapException */ - #if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = *type; - exc_info->exc_value = *value; - exc_info->exc_traceback = *tb; - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = *type; - tstate->exc_value = *value; - tstate->exc_traceback = *tb; - #endif - *type = tmp_type; - *value = tmp_value; - *tb = tmp_tb; -} + mp = Py_TYPE(obj)->tp_as_mapping; + if (likely(mp && mp->mp_ass_subscript)) #else -static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); - PyErr_SetExcInfo(*type, *value, *tb); - *type = tmp_type; - *value = tmp_value; - *tb = tmp_tb; -} + CYTHON_UNUSED_VAR(wraparound); #endif - -/* FastTypeChecks */ - #if CYTHON_COMPILING_IN_CPYTHON -static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { - while (a) { - a = a->tp_base; - if (a == b) - return 1; - } - return b == &PyBaseObject_Type; -} -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { - PyObject *mro; - if (a == b) return 1; - mro = a->tp_mro; - if (likely(mro)) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(mro); - for (i = 0; i < n; i++) { - if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) - return 1; - } - return 0; - } - return __Pyx_InBases(a, b); -} -#if PY_MAJOR_VERSION == 2 -static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { - PyObject *exception, *value, *tb; - int res; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&exception, &value, &tb); - res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; - } - if (!res) { - res = PyObject_IsSubclass(err, exc_type2); - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; + { + int result; + PyObject *py_slice, *py_start, *py_stop; + if (_py_slice) { + py_slice = *_py_slice; + } else { + PyObject* owned_start = NULL; + PyObject* owned_stop = NULL; + if (_py_start) { + py_start = *_py_start; + } else { + if (has_cstart) { + owned_start = py_start = PyInt_FromSsize_t(cstart); + if (unlikely(!py_start)) goto bad; + } else + py_start = Py_None; + } + if (_py_stop) { + py_stop = *_py_stop; + } else { + if (has_cstop) { + owned_stop = py_stop = PyInt_FromSsize_t(cstop); + if (unlikely(!py_stop)) { + Py_XDECREF(owned_start); + goto bad; + } + } else + py_stop = Py_None; + } + py_slice = PySlice_New(py_start, py_stop, Py_None); + Py_XDECREF(owned_start); + Py_XDECREF(owned_stop); + if (unlikely(!py_slice)) goto bad; } - } - __Pyx_ErrRestore(exception, value, tb); - return res; -} +#if CYTHON_USE_TYPE_SLOTS + result = mp->mp_ass_subscript(obj, py_slice, value); #else -static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { - int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; - if (!res) { - res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); - } - return res; -} -#endif -static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - assert(PyExceptionClass_Check(exc_type)); - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; i= 3 - "'%.50s' object has no attribute '%U'", - tp->tp_name, attr_name); + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, attr_name); #else - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, PyString_AS_STRING(attr_name)); + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(attr_name)); #endif + __Pyx_DECREF_TypeName(type_name); return NULL; } static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { @@ -60631,16 +69266,213 @@ static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_nam } #endif +/* FixUpExtensionType */ + #if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* ValidateBasesTuple */ + #if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) { + Py_ssize_t i, n = PyTuple_GET_SIZE(bases); + for (i = 1; i < n; i++) + { + PyObject *b0 = PyTuple_GET_ITEM(bases, i); + PyTypeObject *b; +#if PY_MAJOR_VERSION < 3 + if (PyClass_Check(b0)) + { + PyErr_Format(PyExc_TypeError, "base class '%.200s' is an old-style class", + PyString_AS_STRING(((PyClassObject*)b0)->cl_name)); + return -1; + } +#endif + b = (PyTypeObject*) b0; + if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE)) + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name); + __Pyx_DECREF_TypeName(b_name); + return -1; + } + if (dictoffset == 0 && b->tp_dictoffset) + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "extension type '%.200s' has no __dict__ slot, " + "but base type '" __Pyx_FMT_TYPENAME "' has: " + "either add 'cdef dict __dict__' to the extension type " + "or add '__slots__ = [...]' to the base type", + type_name, b_name); + __Pyx_DECREF_TypeName(b_name); + return -1; + } + } + return 0; +} +#endif + +/* PyType_Ready */ + static int __Pyx_PyType_Ready(PyTypeObject *t) { +#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION) + (void)__Pyx_PyObject_CallMethod0; +#if CYTHON_USE_TYPE_SPECS + (void)__Pyx_validate_bases_tuple; +#endif + return PyType_Ready(t); +#else + int r; + PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*); + if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1)) + return -1; +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + { + int gc_was_enabled; + #if PY_VERSION_HEX >= 0x030A00b1 + gc_was_enabled = PyGC_Disable(); + (void)__Pyx_PyObject_CallMethod0; + #else + PyObject *ret, *py_status; + PyObject *gc = NULL; + #if PY_VERSION_HEX >= 0x030700a1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) + gc = PyImport_GetModule(__pyx_kp_u_gc); + #endif + if (unlikely(!gc)) gc = PyImport_Import(__pyx_kp_u_gc); + if (unlikely(!gc)) return -1; + py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_isenabled); + if (unlikely(!py_status)) { + Py_DECREF(gc); + return -1; + } + gc_was_enabled = __Pyx_PyObject_IsTrue(py_status); + Py_DECREF(py_status); + if (gc_was_enabled > 0) { + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_disable); + if (unlikely(!ret)) { + Py_DECREF(gc); + return -1; + } + Py_DECREF(ret); + } else if (unlikely(gc_was_enabled == -1)) { + Py_DECREF(gc); + return -1; + } + #endif + t->tp_flags |= Py_TPFLAGS_HEAPTYPE; +#if PY_VERSION_HEX >= 0x030A0000 + t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE; +#endif +#else + (void)__Pyx_PyObject_CallMethod0; +#endif + r = PyType_Ready(t); +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE; + #if PY_VERSION_HEX >= 0x030A00b1 + if (gc_was_enabled) + PyGC_Enable(); + #else + if (gc_was_enabled) { + PyObject *tp, *v, *tb; + PyErr_Fetch(&tp, &v, &tb); + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_enable); + if (likely(ret || r == -1)) { + Py_XDECREF(ret); + PyErr_Restore(tp, v, tb); + } else { + Py_XDECREF(tp); + Py_XDECREF(v); + Py_XDECREF(tb); + r = -1; + } + } + Py_DECREF(gc); + #endif + } +#endif + return r; +#endif +} + /* SetVTable */ - static int __Pyx_SetVtable(PyObject *dict, void *vtable) { -#if PY_VERSION_HEX >= 0x02070000 + static int __Pyx_SetVtable(PyTypeObject *type, void *vtable) { PyObject *ob = PyCapsule_New(vtable, 0, 0); + if (unlikely(!ob)) + goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(PyObject_SetAttr((PyObject *) type, __pyx_n_s_pyx_vtable, ob) < 0)) #else - PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); + if (unlikely(PyDict_SetItem(type->tp_dict, __pyx_n_s_pyx_vtable, ob) < 0)) #endif - if (!ob) - goto bad; - if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) goto bad; Py_DECREF(ob); return 0; @@ -60649,33 +69481,85 @@ static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_nam return -1; } -/* PyObjectGetAttrStrNoError */ - static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) - __Pyx_PyErr_Clear(); -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { - return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); - } +/* GetVTable */ + static void* __Pyx_GetVtable(PyTypeObject *type) { + void* ptr; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *ob = PyObject_GetAttr((PyObject *)type, __pyx_n_s_pyx_vtable); +#else + PyObject *ob = PyObject_GetItem(type->tp_dict, __pyx_n_s_pyx_vtable); #endif - result = __Pyx_PyObject_GetAttrStr(obj, attr_name); - if (unlikely(!result)) { - __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + if (!ob) + goto bad; + ptr = PyCapsule_GetPointer(ob, 0); + if (!ptr && !PyErr_Occurred()) + PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type"); + Py_DECREF(ob); + return ptr; +bad: + Py_XDECREF(ob); + return NULL; +} + +/* MergeVTables */ + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_MergeVtables(PyTypeObject *type) { + int i; + void** base_vtables; + __Pyx_TypeName tp_base_name; + __Pyx_TypeName base_name; + void* unknown = (void*)-1; + PyObject* bases = type->tp_bases; + int base_depth = 0; + { + PyTypeObject* base = type->tp_base; + while (base) { + base_depth += 1; + base = base->tp_base; + } + } + base_vtables = (void**) malloc(sizeof(void*) * (size_t)(base_depth + 1)); + base_vtables[0] = unknown; + for (i = 1; i < PyTuple_GET_SIZE(bases); i++) { + void* base_vtable = __Pyx_GetVtable(((PyTypeObject*)PyTuple_GET_ITEM(bases, i))); + if (base_vtable != NULL) { + int j; + PyTypeObject* base = type->tp_base; + for (j = 0; j < base_depth; j++) { + if (base_vtables[j] == unknown) { + base_vtables[j] = __Pyx_GetVtable(base); + base_vtables[j + 1] = unknown; + } + if (base_vtables[j] == base_vtable) { + break; + } else if (base_vtables[j] == NULL) { + goto bad; + } + base = base->tp_base; + } + } } - return result; + PyErr_Clear(); + free(base_vtables); + return 0; +bad: + tp_base_name = __Pyx_PyType_GetName(type->tp_base); + base_name = __Pyx_PyType_GetName((PyTypeObject*)PyTuple_GET_ITEM(bases, i)); + PyErr_Format(PyExc_TypeError, + "multiple bases have vtable conflict: '" __Pyx_FMT_TYPENAME "' and '" __Pyx_FMT_TYPENAME "'", tp_base_name, base_name); + __Pyx_DECREF_TypeName(tp_base_name); + __Pyx_DECREF_TypeName(base_name); + free(base_vtables); + return -1; } +#endif /* SetupReduce */ - static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { int ret; PyObject *name_attr; - name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name_2); + name_attr = __Pyx_PyObject_GetAttrStrNoError(meth, __pyx_n_s_name_2); if (likely(name_attr)) { ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); } else { @@ -60741,7 +69625,7 @@ static int __Pyx_setup_reduce(PyObject* type_obj) { } else if (reduce == object_reduce || PyErr_Occurred()) { goto __PYX_BAD; } - setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate); + setstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate); if (!setstate) PyErr_Clear(); if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython); @@ -60757,8 +69641,13 @@ static int __Pyx_setup_reduce(PyObject* type_obj) { } goto __PYX_GOOD; __PYX_BAD: - if (!PyErr_Occurred()) - PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); + if (!PyErr_Occurred()) { + __Pyx_TypeName type_obj_name = + __Pyx_PyType_GetName((PyTypeObject*)type_obj); + PyErr_Format(PyExc_RuntimeError, + "Unable to initialize pickling for " __Pyx_FMT_TYPENAME, type_obj_name); + __Pyx_DECREF_TypeName(type_obj_name); + } ret = -1; __PYX_GOOD: #if !CYTHON_USE_PYTYPE_LOOKUP @@ -60774,18 +69663,19 @@ static int __Pyx_setup_reduce(PyObject* type_obj) { Py_XDECREF(setstate_cython); return ret; } +#endif /* TypeImport */ - #ifndef __PYX_HAVE_RT_ImportType_0_29_36 -#define __PYX_HAVE_RT_ImportType_0_29_36 -static PyTypeObject *__Pyx_ImportType_0_29_36(PyObject *module, const char *module_name, const char *class_name, - size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_0_29_36 check_size) + #ifndef __PYX_HAVE_RT_ImportType_3_0_0 +#define __PYX_HAVE_RT_ImportType_3_0_0 +static PyTypeObject *__Pyx_ImportType_3_0_0(PyObject *module, const char *module_name, const char *class_name, + size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_0 check_size) { PyObject *result = 0; char warning[200]; Py_ssize_t basicsize; Py_ssize_t itemsize; -#ifdef Py_LIMITED_API +#if CYTHON_COMPILING_IN_LIMITED_API PyObject *py_basicsize; PyObject *py_itemsize; #endif @@ -60798,7 +69688,7 @@ static PyTypeObject *__Pyx_ImportType_0_29_36(PyObject *module, const char *modu module_name, class_name); goto bad; } -#ifndef Py_LIMITED_API +#if !CYTHON_COMPILING_IN_LIMITED_API basicsize = ((PyTypeObject *)result)->tp_basicsize; itemsize = ((PyTypeObject *)result)->tp_itemsize; #else @@ -60830,17 +69720,18 @@ static PyTypeObject *__Pyx_ImportType_0_29_36(PyObject *module, const char *modu PyErr_Format(PyExc_ValueError, "%.200s.%.200s size changed, may indicate binary incompatibility. " "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); + module_name, class_name, size, basicsize+itemsize); goto bad; } - if (check_size == __Pyx_ImportType_CheckSize_Error_0_29_36 && (size_t)basicsize != size) { + if (check_size == __Pyx_ImportType_CheckSize_Error_3_0_0 && + ((size_t)basicsize > size || (size_t)(basicsize + itemsize) < size)) { PyErr_Format(PyExc_ValueError, "%.200s.%.200s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); + "Expected %zd from C header, got %zd-%zd from PyObject", + module_name, class_name, size, basicsize, basicsize+itemsize); goto bad; } - else if (check_size == __Pyx_ImportType_CheckSize_Warn_0_29_36 && (size_t)basicsize > size) { + else if (check_size == __Pyx_ImportType_CheckSize_Warn_3_0_0 && (size_t)basicsize > size) { PyOS_snprintf(warning, sizeof(warning), "%s.%s size changed, may indicate binary incompatibility. " "Expected %zd from C header, got %zd from PyObject", @@ -60854,23 +69745,71 @@ static PyTypeObject *__Pyx_ImportType_0_29_36(PyObject *module, const char *modu } #endif -/* GetVTable */ - static void* __Pyx_GetVtable(PyObject *dict) { - void* ptr; - PyObject *ob = PyObject_GetItem(dict, __pyx_n_s_pyx_vtable); - if (!ob) - goto bad; -#if PY_VERSION_HEX >= 0x02070000 - ptr = PyCapsule_GetPointer(ob, 0); -#else - ptr = PyCObject_AsVoidPtr(ob); -#endif - if (!ptr && !PyErr_Occurred()) - PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type"); - Py_DECREF(ob); - return ptr; -bad: - Py_XDECREF(ob); +/* Py3UpdateBases */ + static PyObject* +__Pyx_PEP560_update_bases(PyObject *bases) +{ + Py_ssize_t i, j, size_bases; + PyObject *base, *meth, *new_base, *result, *new_bases = NULL; + size_bases = PyTuple_GET_SIZE(bases); + for (i = 0; i < size_bases; i++) { + base = PyTuple_GET_ITEM(bases, i); + if (PyType_Check(base)) { + if (new_bases) { + if (PyList_Append(new_bases, base) < 0) { + goto error; + } + } + continue; + } + meth = __Pyx_PyObject_GetAttrStrNoError(base, __pyx_n_s_mro_entries); + if (!meth && PyErr_Occurred()) { + goto error; + } + if (!meth) { + if (new_bases) { + if (PyList_Append(new_bases, base) < 0) { + goto error; + } + } + continue; + } + new_base = __Pyx_PyObject_CallOneArg(meth, bases); + Py_DECREF(meth); + if (!new_base) { + goto error; + } + if (!PyTuple_Check(new_base)) { + PyErr_SetString(PyExc_TypeError, + "__mro_entries__ must return a tuple"); + Py_DECREF(new_base); + goto error; + } + if (!new_bases) { + if (!(new_bases = PyList_New(i))) { + goto error; + } + for (j = 0; j < i; j++) { + base = PyTuple_GET_ITEM(bases, j); + PyList_SET_ITEM(new_bases, j, base); + Py_INCREF(base); + } + } + j = PyList_GET_SIZE(new_bases); + if (PyList_SetSlice(new_bases, j, j, new_base) < 0) { + goto error; + } + Py_DECREF(new_base); + } + if (!new_bases) { + Py_INCREF(bases); + return bases; + } + result = PyList_AsTuple(new_bases); + Py_DECREF(new_bases); + return result; +error: + Py_XDECREF(new_bases); return NULL; } @@ -60913,56 +69852,193 @@ static PyTypeObject *__Pyx_ImportType_0_29_36(PyObject *module, const char *modu return (PyObject*) metaclass; } +/* FetchSharedCythonModule */ + static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + PyObject *abi_module = PyImport_AddModule((char*) __PYX_ABI_MODULE_NAME); + if (unlikely(!abi_module)) return NULL; + Py_INCREF(abi_module); + return abi_module; +} + /* FetchCommonType */ - static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { - PyObject* fake_module; - PyTypeObject* cached_type = NULL; - fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI); - if (!fake_module) return NULL; - Py_INCREF(fake_module); - cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name); + static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; + } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); if (cached_type) { - if (!PyType_Check((PyObject*)cached_type)) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s is not a type object", - type->tp_name); + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { goto bad; } - if (cached_type->tp_basicsize != type->tp_basicsize) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s has the wrong size, try recompiling", - type->tp_name); + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; +#endif + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { goto bad; } - } else { - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; - PyErr_Clear(); - if (PyType_Ready(type) < 0) goto bad; - if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) - goto bad; - Py_INCREF(type); - cached_type = type; + goto done; } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; done: - Py_DECREF(fake_module); - return cached_type; + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; bad: Py_XDECREF(cached_type); cached_type = NULL; goto done; } +#endif + +/* PyVectorcallFastCallDict */ + #if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); +} +#endif /* CythonFunctionShared */ - #include + static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#endif +} static PyObject * -__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) { + CYTHON_UNUSED_VAR(closure); if (unlikely(op->func_doc == NULL)) { - if (op->func.m_ml->ml_doc) { + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { #if PY_MAJOR_VERSION >= 3 - op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); #else - op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); #endif if (unlikely(op->func_doc == NULL)) return NULL; @@ -60975,25 +70051,25 @@ __Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure return op->func_doc; } static int -__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) { - PyObject *tmp = op->func_doc; + CYTHON_UNUSED_VAR(context); if (value == NULL) { value = Py_None; } Py_INCREF(value); - op->func_doc = value; - Py_XDECREF(tmp); + __Pyx_Py_XDECREF_SET(op->func_doc, value); return 0; } static PyObject * -__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); if (unlikely(op->func_name == NULL)) { #if PY_MAJOR_VERSION >= 3 - op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); #else - op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); #endif if (unlikely(op->func_name == NULL)) return NULL; @@ -61002,9 +70078,9 @@ __Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *contex return op->func_name; } static int -__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) { - PyObject *tmp; + CYTHON_UNUSED_VAR(context); #if PY_MAJOR_VERSION >= 3 if (unlikely(value == NULL || !PyUnicode_Check(value))) #else @@ -61015,22 +70091,21 @@ __Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UN "__name__ must be set to a string object"); return -1; } - tmp = op->func_name; Py_INCREF(value); - op->func_name = value; - Py_XDECREF(tmp); + __Pyx_Py_XDECREF_SET(op->func_name, value); return 0; } static PyObject * -__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); Py_INCREF(op->func_qualname); return op->func_qualname; } static int -__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) { - PyObject *tmp; + CYTHON_UNUSED_VAR(context); #if PY_MAJOR_VERSION >= 3 if (unlikely(value == NULL || !PyUnicode_Check(value))) #else @@ -61041,25 +70116,14 @@ __Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, CYTHO "__qualname__ must be set to a string object"); return -1; } - tmp = op->func_qualname; Py_INCREF(value); - op->func_qualname = value; - Py_XDECREF(tmp); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); return 0; } static PyObject * -__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) -{ - PyObject *self; - self = m->func_closure; - if (self == NULL) - self = Py_None; - Py_INCREF(self); - return self; -} -static PyObject * -__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); if (unlikely(op->func_dict == NULL)) { op->func_dict = PyDict_New(); if (unlikely(op->func_dict == NULL)) @@ -61069,9 +70133,9 @@ __Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *contex return op->func_dict; } static int -__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) { - PyObject *tmp; + CYTHON_UNUSED_VAR(context); if (unlikely(value == NULL)) { PyErr_SetString(PyExc_TypeError, "function's dictionary may not be deleted"); @@ -61082,28 +70146,30 @@ __Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UN "setting function's dictionary to a non-dict"); return -1; } - tmp = op->func_dict; Py_INCREF(value); - op->func_dict = value; - Py_XDECREF(tmp); + __Pyx_Py_XDECREF_SET(op->func_dict, value); return 0; } static PyObject * -__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); Py_INCREF(op->func_globals); return op->func_globals; } static PyObject * -__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); Py_INCREF(Py_None); return Py_None; } static PyObject * -__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) { PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); Py_INCREF(result); return result; } @@ -61130,27 +70196,28 @@ __Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { return result; } static int -__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { - PyObject* tmp; +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); if (!value) { value = Py_None; - } else if (value != Py_None && !PyTuple_Check(value)) { + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { PyErr_SetString(PyExc_TypeError, "__defaults__ must be set to a tuple object"); return -1; } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); Py_INCREF(value); - tmp = op->defaults_tuple; - op->defaults_tuple = value; - Py_XDECREF(tmp); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); return 0; } static PyObject * -__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); if (unlikely(!result)) { if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; result = op->defaults_tuple; } else { result = Py_None; @@ -61160,27 +70227,28 @@ __Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *co return result; } static int -__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { - PyObject* tmp; +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); if (!value) { value = Py_None; - } else if (value != Py_None && !PyDict_Check(value)) { + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { PyErr_SetString(PyExc_TypeError, "__kwdefaults__ must be set to a dict object"); return -1; } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); Py_INCREF(value); - tmp = op->defaults_kwdict; - op->defaults_kwdict = value; - Py_XDECREF(tmp); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); return 0; } static PyObject * -__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); if (unlikely(!result)) { if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; result = op->defaults_kwdict; } else { result = Py_None; @@ -61190,24 +70258,23 @@ __Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void * return result; } static int -__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { - PyObject* tmp; +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); if (!value || value == Py_None) { value = NULL; - } else if (!PyDict_Check(value)) { + } else if (unlikely(!PyDict_Check(value))) { PyErr_SetString(PyExc_TypeError, "__annotations__ must be set to a dict object"); return -1; } Py_XINCREF(value); - tmp = op->func_annotations; - op->func_annotations = value; - Py_XDECREF(tmp); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); return 0; } static PyObject * -__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); if (unlikely(!result)) { result = PyDict_New(); if (unlikely(!result)) return NULL; @@ -61216,13 +70283,42 @@ __Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, CYTHON_UNUSED void Py_INCREF(result); return result; } +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); + PyList_SET_ITEM(fromlist, 0, marker); + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); + } +ignore: + PyErr_Clear(); + } +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} static PyGetSetDef __pyx_CyFunction_getsets[] = { {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, - {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, @@ -61235,20 +70331,37 @@ static PyGetSetDef __pyx_CyFunction_getsets[] = { {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, {0, 0, 0, 0, 0} }; static PyMemberDef __pyx_CyFunction_members[] = { - {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), PY_WRITE_RESTRICTED, 0}, + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif {0, 0, 0, 0, 0} }; static PyObject * -__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) { + CYTHON_UNUSED_VAR(args); #if PY_MAJOR_VERSION >= 3 Py_INCREF(m->func_qualname); return m->func_qualname; #else - return PyString_FromString(m->func.m_ml->ml_name); + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); #endif } static PyMethodDef __pyx_CyFunction_methods[] = { @@ -61258,26 +70371,31 @@ static PyMethodDef __pyx_CyFunction_methods[] = { #if PY_VERSION_HEX < 0x030500A0 #define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) #else -#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func.m_weakreflist) +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) #endif static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyCFunctionObject *cf = (PyCFunctionObject*) op; if (unlikely(op == NULL)) return NULL; op->flags = flags; __Pyx_CyFunction_weakreflist(op) = NULL; - op->func.m_ml = ml; - op->func.m_self = (PyObject *) op; + cf->m_ml = ml; + cf->m_self = (PyObject *) op; Py_XINCREF(closure); op->func_closure = closure; Py_XINCREF(module); - op->func.m_module = module; + cf->m_module = module; op->func_dict = NULL; op->func_name = NULL; Py_INCREF(qualname); op->func_qualname = qualname; op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif op->func_globals = globals; Py_INCREF(op->func_globals); Py_XINCREF(code); @@ -61289,23 +70407,56 @@ static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef * op->defaults_kwdict = NULL; op->defaults_getter = NULL; op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; + } +#endif return (PyObject *) op; } static int __Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) { Py_CLEAR(m->func_closure); - Py_CLEAR(m->func.m_module); + Py_CLEAR(((PyCFunctionObject*)m)->m_module); Py_CLEAR(m->func_dict); Py_CLEAR(m->func_name); Py_CLEAR(m->func_qualname); Py_CLEAR(m->func_doc); Py_CLEAR(m->func_globals); Py_CLEAR(m->func_code); - Py_CLEAR(m->func_classobj); +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); + } +#endif Py_CLEAR(m->defaults_tuple); Py_CLEAR(m->defaults_kwdict); Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); if (m->defaults) { PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); int i; @@ -61321,7 +70472,7 @@ static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) if (__Pyx_CyFunction_weakreflist(m) != NULL) PyObject_ClearWeakRefs((PyObject *) m); __Pyx_CyFunction_clear(m); - PyObject_GC_Del(m); + __Pyx_PyHeapTypeObject_GC_Del(m); } static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) { @@ -61331,16 +70482,17 @@ static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) { Py_VISIT(m->func_closure); - Py_VISIT(m->func.m_module); + Py_VISIT(((PyCFunctionObject*)m)->m_module); Py_VISIT(m->func_dict); Py_VISIT(m->func_name); Py_VISIT(m->func_qualname); Py_VISIT(m->func_doc); Py_VISIT(m->func_globals); Py_VISIT(m->func_code); - Py_VISIT(m->func_classobj); + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); Py_VISIT(m->defaults_tuple); Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); if (m->defaults) { PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); int i; @@ -61349,24 +70501,6 @@ static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, } return 0; } -static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) -{ -#if PY_MAJOR_VERSION < 3 - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { - Py_INCREF(func); - return func; - } - if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { - if (type == NULL) - type = (PyObject *)(Py_TYPE(obj)); - return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type))); - } - if (obj == Py_None) - obj = NULL; -#endif - return __Pyx_PyMethod_New(func, obj, type); -} static PyObject* __Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) { @@ -61423,9 +70557,7 @@ static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, Py } break; default: - PyErr_SetString(PyExc_SystemError, "Bad call flags in " - "__Pyx_CyFunction_Call. METH_OLDARGS is no " - "longer supported!"); + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); return NULL; } PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", @@ -61438,6 +70570,17 @@ static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *a static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { PyObject *result; __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); +#endif + } +#endif if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { Py_ssize_t argc; PyObject *new_args; @@ -61466,13 +70609,175 @@ static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, P } return result; } +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; + } + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + return ret; +} +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else static PyTypeObject __pyx_CyFunctionType_type = { PyVarObject_HEAD_INIT(0, 0) - "cython_function_or_method", + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", sizeof(__pyx_CyFunctionObject), 0, (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif 0, 0, #if PY_MAJOR_VERSION < 3 @@ -61490,7 +70795,13 @@ static PyTypeObject __pyx_CyFunctionType_type = { 0, 0, 0, - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#ifdef _Py_TPFLAGS_HAVE_VECTORCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, 0, (traverseproc) __Pyx_CyFunction_traverse, (inquiry) __Pyx_CyFunction_clear, @@ -61507,7 +70818,7 @@ static PyTypeObject __pyx_CyFunctionType_type = { __pyx_CyFunction_getsets, 0, 0, - __Pyx_CyFunction_descr_get, + __Pyx_PyMethod_New, 0, offsetof(__pyx_CyFunctionObject, func_dict), 0, @@ -61528,7 +70839,7 @@ static PyTypeObject __pyx_CyFunctionType_type = { #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, #endif -#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 +#if __PYX_NEED_TP_PRINT_SLOT 0, #endif #if PY_VERSION_HEX >= 0x030C0000 @@ -61538,8 +70849,14 @@ static PyTypeObject __pyx_CyFunctionType_type = { 0, #endif }; -static int __pyx_CyFunction_init(void) { +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); +#endif if (unlikely(__pyx_CyFunctionType == NULL)) { return -1; } @@ -61598,7 +70915,6 @@ __pyx_FusedFunction_New(PyMethodDef *ml, int flags, if (likely(op)) { __pyx_FusedFunctionObject *fusedfunc = (__pyx_FusedFunctionObject *) op; fusedfunc->__signatures__ = NULL; - fusedfunc->type = NULL; fusedfunc->self = NULL; PyObject_GC_Track(op); } @@ -61609,7 +70925,6 @@ __pyx_FusedFunction_dealloc(__pyx_FusedFunctionObject *self) { PyObject_GC_UnTrack(self); Py_CLEAR(self->self); - Py_CLEAR(self->type); Py_CLEAR(self->__signatures__); __Pyx__CyFunction_dealloc((__pyx_CyFunctionObject *) self); } @@ -61619,7 +70934,6 @@ __pyx_FusedFunction_traverse(__pyx_FusedFunctionObject *self, void *arg) { Py_VISIT(self->self); - Py_VISIT(self->type); Py_VISIT(self->__signatures__); return __Pyx_CyFunction_traverse((__pyx_CyFunctionObject *) self, visit, arg); } @@ -61627,7 +70941,6 @@ static int __pyx_FusedFunction_clear(__pyx_FusedFunctionObject *self) { Py_CLEAR(self->self); - Py_CLEAR(self->type); Py_CLEAR(self->__signatures__); return __Pyx_CyFunction_clear((__pyx_CyFunctionObject *) self); } @@ -61642,6 +70955,12 @@ __pyx_FusedFunction_descr_get(PyObject *self, PyObject *obj, PyObject *type) } if (obj == Py_None) obj = NULL; + if (func->func.flags & __Pyx_CYFUNCTION_CLASSMETHOD) + obj = type; + if (obj == NULL) { + Py_INCREF(self); + return self; + } meth = (__pyx_FusedFunctionObject *) __pyx_FusedFunction_New( ((PyCFunctionObject *) func)->m_ml, ((__pyx_CyFunctionObject *) func)->flags, @@ -61650,14 +70969,15 @@ __pyx_FusedFunction_descr_get(PyObject *self, PyObject *obj, PyObject *type) ((PyCFunctionObject *) func)->m_module, ((__pyx_CyFunctionObject *) func)->func_globals, ((__pyx_CyFunctionObject *) func)->func_code); - if (!meth) + if (unlikely(!meth)) return NULL; if (func->func.defaults) { PyObject **pydefaults; int i; - if (!__Pyx_CyFunction_InitDefaults((PyObject*)meth, - func->func.defaults_size, - func->func.defaults_pyobjects)) { + if (unlikely(!__Pyx_CyFunction_InitDefaults( + (PyObject*)meth, + func->func.defaults_size, + func->func.defaults_pyobjects))) { Py_XDECREF((PyObject*)meth); return NULL; } @@ -61666,27 +70986,28 @@ __pyx_FusedFunction_descr_get(PyObject *self, PyObject *obj, PyObject *type) for (i = 0; i < meth->func.defaults_pyobjects; i++) Py_XINCREF(pydefaults[i]); } - Py_XINCREF(func->func.func_classobj); - meth->func.func_classobj = func->func.func_classobj; + __Pyx_CyFunction_SetClassObj(meth, __Pyx_CyFunction_GetClassObj(func)); Py_XINCREF(func->__signatures__); meth->__signatures__ = func->__signatures__; - Py_XINCREF(type); - meth->type = type; Py_XINCREF(func->func.defaults_tuple); meth->func.defaults_tuple = func->func.defaults_tuple; - if (func->func.flags & __Pyx_CYFUNCTION_CLASSMETHOD) - obj = type; Py_XINCREF(obj); meth->self = obj; return (PyObject *) meth; } static PyObject * -_obj_to_str(PyObject *obj) +_obj_to_string(PyObject *obj) { - if (PyType_Check(obj)) + if (PyUnicode_CheckExact(obj)) + return __Pyx_NewRef(obj); +#if PY_MAJOR_VERSION == 2 + else if (PyString_Check(obj)) + return PyUnicode_FromEncodedObject(obj, NULL, "strict"); +#endif + else if (PyType_Check(obj)) return PyObject_GetAttr(obj, __pyx_n_s_name_2); else - return PyObject_Str(obj); + return PyObject_Unicode(obj); } static PyObject * __pyx_FusedFunction_getitem(__pyx_FusedFunctionObject *self, PyObject *idx) @@ -61694,55 +71015,45 @@ __pyx_FusedFunction_getitem(__pyx_FusedFunctionObject *self, PyObject *idx) PyObject *signature = NULL; PyObject *unbound_result_func; PyObject *result_func = NULL; - if (self->__signatures__ == NULL) { + if (unlikely(self->__signatures__ == NULL)) { PyErr_SetString(PyExc_TypeError, "Function is not fused"); return NULL; } if (PyTuple_Check(idx)) { - PyObject *list = PyList_New(0); Py_ssize_t n = PyTuple_GET_SIZE(idx); - PyObject *sep = NULL; + PyObject *list = PyList_New(n); int i; if (unlikely(!list)) return NULL; for (i = 0; i < n; i++) { - int ret; PyObject *string; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS PyObject *item = PyTuple_GET_ITEM(idx, i); #else PyObject *item = PySequence_ITEM(idx, i); if (unlikely(!item)) goto __pyx_err; #endif - string = _obj_to_str(item); + string = _obj_to_string(item); #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) Py_DECREF(item); #endif if (unlikely(!string)) goto __pyx_err; - ret = PyList_Append(list, string); - Py_DECREF(string); - if (unlikely(ret < 0)) goto __pyx_err; - } - sep = PyUnicode_FromString("|"); - if (likely(sep)) - signature = PyUnicode_Join(sep, list); -__pyx_err: -; + PyList_SET_ITEM(list, i, string); + } + signature = PyUnicode_Join(__pyx_kp_u__16, list); +__pyx_err:; Py_DECREF(list); - Py_XDECREF(sep); } else { - signature = _obj_to_str(idx); + signature = _obj_to_string(idx); } - if (!signature) + if (unlikely(!signature)) return NULL; unbound_result_func = PyObject_GetItem(self->__signatures__, signature); - if (unbound_result_func) { - if (self->self || self->type) { + if (likely(unbound_result_func)) { + if (self->self) { __pyx_FusedFunctionObject *unbound = (__pyx_FusedFunctionObject *) unbound_result_func; - Py_CLEAR(unbound->func.func_classobj); - Py_XINCREF(self->func.func_classobj); - unbound->func.func_classobj = self->func.func_classobj; + __Pyx_CyFunction_SetClassObj(unbound, __Pyx_CyFunction_GetClassObj(self)); result_func = __pyx_FusedFunction_descr_get(unbound_result_func, - self->self, self->type); + self->self, self->self); } else { result_func = unbound_result_func; Py_INCREF(result_func); @@ -61758,7 +71069,7 @@ __pyx_FusedFunction_callfunction(PyObject *func, PyObject *args, PyObject *kw) __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; int static_specialized = (cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD && !((__pyx_FusedFunctionObject *) func)->__signatures__); - if (cyfunc->flags & __Pyx_CYFUNCTION_CCLASS && !static_specialized) { + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !static_specialized) { return __Pyx_CyFunction_CallAsMethod(func, args, kw); } else { return __Pyx_CyFunction_Call(func, args, kw); @@ -61772,20 +71083,17 @@ __pyx_FusedFunction_call(PyObject *func, PyObject *args, PyObject *kw) PyObject *new_args = NULL; __pyx_FusedFunctionObject *new_func = NULL; PyObject *result = NULL; - PyObject *self = NULL; int is_staticmethod = binding_func->func.flags & __Pyx_CYFUNCTION_STATICMETHOD; - int is_classmethod = binding_func->func.flags & __Pyx_CYFUNCTION_CLASSMETHOD; if (binding_func->self) { + PyObject *self; Py_ssize_t i; new_args = PyTuple_New(argc + 1); - if (!new_args) + if (unlikely(!new_args)) return NULL; self = binding_func->self; -#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) - Py_INCREF(self); -#endif Py_INCREF(self); PyTuple_SET_ITEM(new_args, 0, self); + self = NULL; for (i = 0; i < argc; i++) { #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS PyObject *item = PyTuple_GET_ITEM(args, i); @@ -61796,33 +71104,7 @@ __pyx_FusedFunction_call(PyObject *func, PyObject *args, PyObject *kw) PyTuple_SET_ITEM(new_args, i + 1, item); } args = new_args; - } else if (binding_func->type) { - if (argc < 1) { - PyErr_SetString(PyExc_TypeError, "Need at least one argument, 0 given."); - return NULL; - } -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - self = PyTuple_GET_ITEM(args, 0); -#else - self = PySequence_ITEM(args, 0); if (unlikely(!self)) return NULL; -#endif - } - if (self && !is_classmethod && !is_staticmethod) { - int is_instance = PyObject_IsInstance(self, binding_func->type); - if (unlikely(!is_instance)) { - PyErr_Format(PyExc_TypeError, - "First argument should be of type %.200s, got %.200s.", - ((PyTypeObject *) binding_func->type)->tp_name, - Py_TYPE(self)->tp_name); - goto bad; - } else if (unlikely(is_instance == -1)) { - goto bad; - } } -#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) - Py_XDECREF(self); - self = NULL; -#endif if (binding_func->__signatures__) { PyObject *tup; if (is_staticmethod && binding_func->func.flags & __Pyx_CYFUNCTION_CCLASS) { @@ -61842,16 +71124,11 @@ __pyx_FusedFunction_call(PyObject *func, PyObject *args, PyObject *kw) Py_DECREF(tup); if (unlikely(!new_func)) goto bad; - Py_XINCREF(binding_func->func.func_classobj); - Py_CLEAR(new_func->func.func_classobj); - new_func->func.func_classobj = binding_func->func.func_classobj; + __Pyx_CyFunction_SetClassObj(new_func, __Pyx_CyFunction_GetClassObj(binding_func)); func = (PyObject *) new_func; } result = __pyx_FusedFunction_callfunction(func, args, kw); bad: -#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) - Py_XDECREF(self); -#endif Py_XDECREF(new_args); Py_XDECREF((PyObject *) new_func); return result; @@ -61862,8 +71139,33 @@ static PyMemberDef __pyx_FusedFunction_members[] = { offsetof(__pyx_FusedFunctionObject, __signatures__), READONLY, 0}, + {(char *) "__self__", T_OBJECT_EX, offsetof(__pyx_FusedFunctionObject, self), READONLY, 0}, {0, 0, 0, 0, 0}, }; +static PyGetSetDef __pyx_FusedFunction_getsets[] = { + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {0, 0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_FusedFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__pyx_FusedFunction_dealloc}, + {Py_tp_call, (void *)__pyx_FusedFunction_call}, + {Py_tp_traverse, (void *)__pyx_FusedFunction_traverse}, + {Py_tp_clear, (void *)__pyx_FusedFunction_clear}, + {Py_tp_members, (void *)__pyx_FusedFunction_members}, + {Py_tp_getset, (void *)__pyx_FusedFunction_getsets}, + {Py_tp_descr_get, (void *)__pyx_FusedFunction_descr_get}, + {Py_mp_subscript, (void *)__pyx_FusedFunction_getitem}, + {0, 0}, +}; +static PyType_Spec __pyx_FusedFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "fused_cython_function", + sizeof(__pyx_FusedFunctionObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_FusedFunctionType_slots +}; +#else static PyMappingMethods __pyx_FusedFunction_mapping_methods = { 0, (binaryfunc) __pyx_FusedFunction_getitem, @@ -61871,7 +71173,7 @@ static PyMappingMethods __pyx_FusedFunction_mapping_methods = { }; static PyTypeObject __pyx_FusedFunctionType_type = { PyVarObject_HEAD_INIT(0, 0) - "fused_cython_function", + __PYX_TYPE_MODULE_PREFIX "fused_cython_function", sizeof(__pyx_FusedFunctionObject), 0, (destructor) __pyx_FusedFunction_dealloc, @@ -61903,7 +71205,7 @@ static PyTypeObject __pyx_FusedFunctionType_type = { 0, 0, __pyx_FusedFunction_members, - __pyx_CyFunction_getsets, + __pyx_FusedFunction_getsets, &__pyx_CyFunctionType_type, 0, __pyx_FusedFunction_descr_get, @@ -61927,7 +71229,7 @@ static PyTypeObject __pyx_FusedFunctionType_type = { #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, #endif -#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 +#if __PYX_NEED_TP_PRINT_SLOT 0, #endif #if PY_VERSION_HEX >= 0x030C0000 @@ -61937,10 +71239,21 @@ static PyTypeObject __pyx_FusedFunctionType_type = { 0, #endif }; -static int __pyx_FusedFunction_init(void) { +#endif +static int __pyx_FusedFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + PyObject *bases = PyTuple_Pack(1, __pyx_CyFunctionType); + if (unlikely(!bases)) { + return -1; + } + __pyx_FusedFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_FusedFunctionType_spec, bases); + Py_DECREF(bases); +#else + CYTHON_UNUSED_VAR(module); __pyx_FusedFunctionType_type.tp_base = __pyx_CyFunctionType; __pyx_FusedFunctionType = __Pyx_FetchCommonType(&__pyx_FusedFunctionType_type); - if (__pyx_FusedFunctionType == NULL) { +#endif + if (unlikely(__pyx_FusedFunctionType == NULL)) { return -1; } return 0; @@ -61951,20 +71264,14 @@ static int __pyx_FusedFunction_init(void) { PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { PyObject *ns; if (metaclass) { - PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare); + PyObject *prep = __Pyx_PyObject_GetAttrStrNoError(metaclass, __pyx_n_s_prepare); if (prep) { - PyObject *pargs = PyTuple_Pack(2, name, bases); - if (unlikely(!pargs)) { - Py_DECREF(prep); - return NULL; - } - ns = PyObject_Call(prep, pargs, mkw); + PyObject *pargs[3] = {NULL, name, bases}; + ns = __Pyx_PyObject_FastCallDict(prep, pargs+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, mkw); Py_DECREF(prep); - Py_DECREF(pargs); } else { - if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError))) + if (unlikely(PyErr_Occurred())) return NULL; - PyErr_Clear(); ns = PyDict_New(); } } else { @@ -61973,18 +71280,153 @@ static int __pyx_FusedFunction_init(void) { if (unlikely(!ns)) return NULL; if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; +#if PY_VERSION_HEX >= 0x03030000 if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; +#else + CYTHON_MAYBE_UNUSED_VAR(qualname); +#endif if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; return ns; bad: Py_DECREF(ns); return NULL; } +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS +static int __Pyx_SetNamesPEP487(PyObject *type_obj) { + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *names_to_set, *key, *value, *set_name, *tmp; + Py_ssize_t i = 0; +#if CYTHON_USE_TYPE_SLOTS + names_to_set = PyDict_Copy(type->tp_dict); +#else + { + PyObject *d = PyObject_GetAttr(type_obj, __pyx_n_s_dict); + names_to_set = NULL; + if (likely(d)) { + PyObject *names_to_set = PyDict_New(); + int ret = likely(names_to_set) ? PyDict_Update(names_to_set, d) : -1; + Py_DECREF(d); + if (unlikely(ret < 0)) + Py_CLEAR(names_to_set); + } + } +#endif + if (unlikely(names_to_set == NULL)) + goto bad; + while (PyDict_Next(names_to_set, &i, &key, &value)) { + set_name = __Pyx_PyObject_LookupSpecialNoError(value, __pyx_n_s_set_name); + if (unlikely(set_name != NULL)) { + tmp = __Pyx_PyObject_Call2Args(set_name, type_obj, key); + Py_DECREF(set_name); + if (unlikely(tmp == NULL)) { + __Pyx_TypeName value_type_name = + __Pyx_PyType_GetName(Py_TYPE(value)); + __Pyx_TypeName type_name = __Pyx_PyType_GetName(type); + PyErr_Format(PyExc_RuntimeError, +#if PY_MAJOR_VERSION >= 3 + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %R " "in '" __Pyx_FMT_TYPENAME "'", + value_type_name, key, type_name); +#else + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %.100s in '" __Pyx_FMT_TYPENAME "'", + value_type_name, + PyString_Check(key) ? PyString_AS_STRING(key) : "?", + type_name); +#endif + goto bad; + } else { + Py_DECREF(tmp); + } + } + else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } + Py_DECREF(names_to_set); + return 0; +bad: + Py_XDECREF(names_to_set); + return -1; +} +static PyObject *__Pyx_InitSubclassPEP487(PyObject *type_obj, PyObject *mkw) { +#if CYTHON_USE_TYPE_SLOTS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *mro = type->tp_mro; + Py_ssize_t i, nbases; + if (unlikely(!mro)) goto done; + (void) &__Pyx_GetBuiltinName; + Py_INCREF(mro); + nbases = PyTuple_GET_SIZE(mro); + assert(PyTuple_GET_ITEM(mro, 0) == type_obj); + for (i = 1; i < nbases-1; i++) { + PyObject *base, *dict, *meth; + base = PyTuple_GET_ITEM(mro, i); + dict = ((PyTypeObject *)base)->tp_dict; + meth = __Pyx_PyDict_GetItemStrWithError(dict, __pyx_n_s_init_subclass); + if (unlikely(meth)) { + descrgetfunc f = Py_TYPE(meth)->tp_descr_get; + PyObject *res; + Py_INCREF(meth); + if (likely(f)) { + res = f(meth, NULL, type_obj); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + meth = res; + } + res = __Pyx_PyObject_FastCallDict(meth, NULL, 0, mkw); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + Py_DECREF(res); + goto done; + } else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } +done: + Py_XDECREF(mro); + return type_obj; +bad: + Py_XDECREF(mro); + Py_DECREF(type_obj); + return NULL; +#else + PyObject *super_type, *super, *func, *res; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + super_type = __Pyx_GetBuiltinName(__pyx_n_s_super); +#else + super_type = (PyObject*) &PySuper_Type; + (void) &__Pyx_GetBuiltinName; +#endif + super = likely(super_type) ? __Pyx_PyObject_Call2Args(super_type, type_obj, type_obj) : NULL; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + Py_XDECREF(super_type); +#endif + if (unlikely(!super)) { + Py_CLEAR(type_obj); + goto done; + } + func = __Pyx_PyObject_GetAttrStrNoError(super, __pyx_n_s_init_subclass); + Py_DECREF(super); + if (likely(!func)) { + if (unlikely(PyErr_Occurred())) + Py_CLEAR(type_obj); + goto done; + } + res = __Pyx_PyObject_FastCallDict(func, NULL, 0, mkw); + Py_DECREF(func); + if (unlikely(!res)) + Py_CLEAR(type_obj); + Py_XDECREF(res); +done: + return type_obj; +#endif +} +#endif static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass) { - PyObject *result, *margs; + PyObject *result; PyObject *owned_metaclass = NULL; + PyObject *margs[4] = {NULL, name, bases, dict}; if (allow_py2_metaclass) { owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); if (owned_metaclass) { @@ -62002,14 +71444,25 @@ static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObj return NULL; owned_metaclass = metaclass; } - margs = PyTuple_Pack(3, name, bases, dict); - if (unlikely(!margs)) { - result = NULL; - } else { - result = PyObject_Call(metaclass, margs, mkw); - Py_DECREF(margs); - } + result = __Pyx_PyObject_FastCallDict(metaclass, margs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, +#if PY_VERSION_HEX < 0x030600A4 + (metaclass == (PyObject*)&PyType_Type) ? NULL : mkw +#else + mkw +#endif + ); Py_XDECREF(owned_metaclass); +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS + if (likely(result) && likely(PyType_Check(result))) { + if (unlikely(__Pyx_SetNamesPEP487(result) < 0)) { + Py_CLEAR(result); + } else { + result = __Pyx_InitSubclassPEP487(result, mkw); + } + } +#else + (void) &__Pyx_GetBuiltinName; +#endif return result; } @@ -62025,8 +71478,7 @@ static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObj if (unlikely(!m)) return -1; #endif - Py_INCREF(classobj); - m->func_classobj = classobj; + __Pyx_CyFunction_SetClassObj(m, classobj); #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) Py_DECREF((PyObject*)m); #endif @@ -62036,12 +71488,13 @@ static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObj /* CLineInTraceback */ #ifndef CYTHON_CLINE_IN_TRACEBACK -static int __Pyx_CLineForTraceback(CYTHON_UNUSED PyThreadState *tstate, int c_line) { +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { PyObject *use_cline; PyObject *ptype, *pvalue, *ptraceback; #if CYTHON_COMPILING_IN_CPYTHON PyObject **cython_runtime_dict; #endif + CYTHON_MAYBE_UNUSED_VAR(tstate); if (unlikely(!__pyx_cython_runtime)) { return c_line; } @@ -62055,7 +71508,7 @@ static int __Pyx_CLineForTraceback(CYTHON_UNUSED PyThreadState *tstate, int c_li } else #endif { - PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); if (use_cline_obj) { use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; Py_DECREF(use_cline_obj); @@ -62077,7 +71530,8 @@ static int __Pyx_CLineForTraceback(CYTHON_UNUSED PyThreadState *tstate, int c_li #endif /* CodeObjectCache */ - static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { int start = 0, mid = 0, end = count - 1; if (end >= 0 && code_line > entries[end].code_line) { return count; @@ -62155,6 +71609,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { __pyx_code_cache.count++; Py_INCREF(code_object); } +#endif /* AddTraceback */ #include "compile.h" @@ -62166,6 +71621,16 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { #endif #include "internal/pycore_frame.h" #endif +#if CYTHON_COMPILING_IN_LIMITED_API +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + _PyTraceback_Add(funcname, filename, py_line); +} +#else static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( const char *funcname, int c_line, int py_line, const char *filename) { @@ -62200,6 +71665,7 @@ static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( 0, 0, 0, + 0, __pyx_empty_bytes, /*PyObject *code,*/ __pyx_empty_tuple, /*PyObject *consts,*/ __pyx_empty_tuple, /*PyObject *names,*/ @@ -62262,13 +71728,19 @@ static void __Pyx_AddTraceback(const char *funcname, int c_line, Py_XDECREF(py_code); Py_XDECREF(py_frame); } +#endif #if PY_MAJOR_VERSION < 3 static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + __Pyx_TypeName obj_type_name; if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); if (__Pyx_TypeCheck(obj, __pyx_array_type)) return __pyx_array_getbuffer(obj, view, flags); if (__Pyx_TypeCheck(obj, __pyx_memoryview_type)) return __pyx_memoryview_getbuffer(obj, view, flags); - PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_name); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' does not have the buffer interface", + obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); return -1; } static void __Pyx_ReleaseBuffer(Py_buffer *view) { @@ -62343,19 +71815,6 @@ __pyx_slices_overlap(__Pyx_memviewslice *slice1, return (start1 < end2) && (start2 < end1); } -/* Capsule */ - static CYTHON_INLINE PyObject * -__pyx_capsule_create(void *p, CYTHON_UNUSED const char *sig) -{ - PyObject *cobj; -#if PY_VERSION_HEX >= 0x02070000 - cobj = PyCapsule_New(p, sig, NULL); -#else - cobj = PyCObject_FromVoidPtr(p, NULL); -#endif - return cobj; -} - /* TypeInfoCompare */ static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b) @@ -62452,8 +71911,9 @@ __pyx_check_strides(Py_buffer *buf, int dim, int ndim, int spec) return 0; } static int -__pyx_check_suboffsets(Py_buffer *buf, int dim, CYTHON_UNUSED int ndim, int spec) +__pyx_check_suboffsets(Py_buffer *buf, int dim, int ndim, int spec) { + CYTHON_UNUSED_VAR(ndim); if (spec & __Pyx_MEMVIEW_DIRECT) { if (unlikely(buf->suboffsets && buf->suboffsets[dim] >= 0)) { PyErr_Format(PyExc_ValueError, @@ -62808,7 +72268,7 @@ static int __Pyx_ValidateAndInit_memviewslice( } /* Declarations */ - #if CYTHON_CCOMPLEX + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #ifdef __cplusplus static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { return ::std::complex< float >(x, y); @@ -62828,7 +72288,7 @@ static int __Pyx_ValidateAndInit_memviewslice( #endif /* Arithmetic */ - #if CYTHON_CCOMPLEX + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #else static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { return (a.real == b.real) && (a.imag == b.imag); @@ -62962,7 +72422,7 @@ static int __Pyx_ValidateAndInit_memviewslice( #endif /* Declarations */ - #if CYTHON_CCOMPLEX + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #ifdef __cplusplus static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { return ::std::complex< double >(x, y); @@ -62982,7 +72442,7 @@ static int __Pyx_ValidateAndInit_memviewslice( #endif /* Arithmetic */ - #if CYTHON_CCOMPLEX + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #else static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { return (a.real == b.real) && (a.imag == b.imag); @@ -63182,6 +72642,141 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, return new_mvs; } +/* MemviewSliceInit */ + static int +__Pyx_init_memviewslice(struct __pyx_memoryview_obj *memview, + int ndim, + __Pyx_memviewslice *memviewslice, + int memview_is_new_reference) +{ + __Pyx_RefNannyDeclarations + int i, retval=-1; + Py_buffer *buf = &memview->view; + __Pyx_RefNannySetupContext("init_memviewslice", 0); + if (unlikely(memviewslice->memview || memviewslice->data)) { + PyErr_SetString(PyExc_ValueError, + "memviewslice is already initialized!"); + goto fail; + } + if (buf->strides) { + for (i = 0; i < ndim; i++) { + memviewslice->strides[i] = buf->strides[i]; + } + } else { + Py_ssize_t stride = buf->itemsize; + for (i = ndim - 1; i >= 0; i--) { + memviewslice->strides[i] = stride; + stride *= buf->shape[i]; + } + } + for (i = 0; i < ndim; i++) { + memviewslice->shape[i] = buf->shape[i]; + if (buf->suboffsets) { + memviewslice->suboffsets[i] = buf->suboffsets[i]; + } else { + memviewslice->suboffsets[i] = -1; + } + } + memviewslice->memview = memview; + memviewslice->data = (char *)buf->buf; + if (__pyx_add_acquisition_count(memview) == 0 && !memview_is_new_reference) { + Py_INCREF(memview); + } + retval = 0; + goto no_fail; +fail: + memviewslice->memview = 0; + memviewslice->data = 0; + retval = -1; +no_fail: + __Pyx_RefNannyFinishContext(); + return retval; +} +#ifndef Py_NO_RETURN +#define Py_NO_RETURN +#endif +static void __pyx_fatalerror(const char *fmt, ...) Py_NO_RETURN { + va_list vargs; + char msg[200]; +#if PY_VERSION_HEX >= 0x030A0000 || defined(HAVE_STDARG_PROTOTYPES) + va_start(vargs, fmt); +#else + va_start(vargs); +#endif + vsnprintf(msg, 200, fmt, vargs); + va_end(vargs); + Py_FatalError(msg); +} +static CYTHON_INLINE int +__pyx_add_acquisition_count_locked(__pyx_atomic_int_type *acquisition_count, + PyThread_type_lock lock) +{ + int result; + PyThread_acquire_lock(lock, 1); + result = (*acquisition_count)++; + PyThread_release_lock(lock); + return result; +} +static CYTHON_INLINE int +__pyx_sub_acquisition_count_locked(__pyx_atomic_int_type *acquisition_count, + PyThread_type_lock lock) +{ + int result; + PyThread_acquire_lock(lock, 1); + result = (*acquisition_count)--; + PyThread_release_lock(lock); + return result; +} +static CYTHON_INLINE void +__Pyx_INC_MEMVIEW(__Pyx_memviewslice *memslice, int have_gil, int lineno) +{ + __pyx_nonatomic_int_type old_acquisition_count; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) { + return; + } + old_acquisition_count = __pyx_add_acquisition_count(memview); + if (unlikely(old_acquisition_count <= 0)) { + if (likely(old_acquisition_count == 0)) { + if (have_gil) { + Py_INCREF((PyObject *) memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_INCREF((PyObject *) memview); + PyGILState_Release(_gilstate); + } + } else { + __pyx_fatalerror("Acquisition count is %d (line %d)", + old_acquisition_count+1, lineno); + } + } +} +static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, + int have_gil, int lineno) { + __pyx_nonatomic_int_type old_acquisition_count; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) { + memslice->memview = NULL; + return; + } + old_acquisition_count = __pyx_sub_acquisition_count(memview); + memslice->data = NULL; + if (likely(old_acquisition_count > 1)) { + memslice->memview = NULL; + } else if (likely(old_acquisition_count == 1)) { + if (have_gil) { + Py_CLEAR(memslice->memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_CLEAR(memslice->memview); + PyGILState_Release(_gilstate); + } + } else { + __pyx_fatalerror("Acquisition count is %d (line %d)", + old_acquisition_count-1, lineno); + } +} + /* CIntFromPy */ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC @@ -63195,7 +72790,7 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { + if ((sizeof(int) < sizeof(long))) { __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); @@ -63209,37 +72804,42 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { - return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { - return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { - return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } } - } - break; + break; + } } #endif #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 @@ -63255,109 +72855,181 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, goto raise_neg_overflow; } #endif - if (sizeof(int) <= sizeof(unsigned long)) { + if ((sizeof(int) <= sizeof(unsigned long))) { __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) - case -2: - if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case -3: - if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case -4: - if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; + break; + } } #endif - if (sizeof(int) <= sizeof(long)) { + if ((sizeof(int) <= sizeof(long))) { __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else int val; PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 +#if PY_MAJOR_VERSION < 3 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } - #endif +#endif if (likely(v)) { + int ret = -1; +#if !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); + ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + long idigit; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (unlikely(!PyLong_CheckExact(v))) { + PyObject *tmp = v; + v = PyNumber_Long(v); + assert(PyLong_CheckExact(v)); + Py_DECREF(tmp); + if (unlikely(!v)) return (int) -1; + } +#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(x) == 0) + return (int) 0; + is_negative = Py_SIZE(x) < 0; +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + is_negative = result == 1; + } +#endif + if (is_unsigned && unlikely(is_negative)) { + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = __Pyx_NewRef(v); + } + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + val |= ((int) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(stepval) == 0) + goto unpacking_done; + #endif + } + idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + unpacking_done: + #endif + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif Py_DECREF(v); if (likely(!ret)) return val; } -#endif return (int) -1; } } else { @@ -63467,7 +73139,7 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { + if ((sizeof(long) < sizeof(long))) { __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); @@ -63481,37 +73153,42 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { - return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { - return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { - return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } } - } - break; + break; + } } #endif #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 @@ -63527,109 +73204,181 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, goto raise_neg_overflow; } #endif - if (sizeof(long) <= sizeof(unsigned long)) { + if ((sizeof(long) <= sizeof(unsigned long))) { __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) - case -2: - if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case -3: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case -4: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; + break; + } } #endif - if (sizeof(long) <= sizeof(long)) { + if ((sizeof(long) <= sizeof(long))) { __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else long val; PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 +#if PY_MAJOR_VERSION < 3 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } - #endif +#endif if (likely(v)) { + int ret = -1; +#if !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); + ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + long idigit; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (unlikely(!PyLong_CheckExact(v))) { + PyObject *tmp = v; + v = PyNumber_Long(v); + assert(PyLong_CheckExact(v)); + Py_DECREF(tmp); + if (unlikely(!v)) return (long) -1; + } +#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(x) == 0) + return (long) 0; + is_negative = Py_SIZE(x) < 0; +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + is_negative = result == 1; + } +#endif + if (is_unsigned && unlikely(is_negative)) { + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = __Pyx_NewRef(v); + } + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + val |= ((long) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(stepval) == 0) + goto unpacking_done; + #endif + } + idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + unpacking_done: + #endif + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif Py_DECREF(v); if (likely(!ret)) return val; } -#endif return (long) -1; } } else { @@ -63663,7 +73412,7 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if (sizeof(short) < sizeof(long)) { + if ((sizeof(short) < sizeof(long))) { __PYX_VERIFY_RETURN_INT(short, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); @@ -63677,37 +73426,42 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (short) 0; - case 1: __PYX_VERIFY_RETURN_INT(short, digit, digits[0]) - case 2: - if (8 * sizeof(short) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(short) >= 2 * PyLong_SHIFT) { - return (short) (((((short)digits[1]) << PyLong_SHIFT) | (short)digits[0])); + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(short, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(short) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(short) >= 2 * PyLong_SHIFT)) { + return (short) (((((short)digits[1]) << PyLong_SHIFT) | (short)digits[0])); + } } - } - break; - case 3: - if (8 * sizeof(short) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(short) >= 3 * PyLong_SHIFT) { - return (short) (((((((short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0])); + break; + case 3: + if ((8 * sizeof(short) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(short) >= 3 * PyLong_SHIFT)) { + return (short) (((((((short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0])); + } } - } - break; - case 4: - if (8 * sizeof(short) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(short) >= 4 * PyLong_SHIFT) { - return (short) (((((((((short)digits[3]) << PyLong_SHIFT) | (short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0])); + break; + case 4: + if ((8 * sizeof(short) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(short) >= 4 * PyLong_SHIFT)) { + return (short) (((((((((short)digits[3]) << PyLong_SHIFT) | (short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0])); + } } - } - break; + break; + } } #endif #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 @@ -63723,109 +73477,181 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, goto raise_neg_overflow; } #endif - if (sizeof(short) <= sizeof(unsigned long)) { + if ((sizeof(short) <= sizeof(unsigned long))) { __PYX_VERIFY_RETURN_INT_EXC(short, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(short) <= sizeof(unsigned PY_LONG_LONG)) { + } else if ((sizeof(short) <= sizeof(unsigned PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(short, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (short) 0; - case -1: __PYX_VERIFY_RETURN_INT(short, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(short, digit, +digits[0]) - case -2: - if (8 * sizeof(short) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(short, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(short) - 1 > 2 * PyLong_SHIFT) { - return (short) (((short)-1)*(((((short)digits[1]) << PyLong_SHIFT) | (short)digits[0]))); + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(short, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(short) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(short, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(short) - 1 > 2 * PyLong_SHIFT)) { + return (short) (((short)-1)*(((((short)digits[1]) << PyLong_SHIFT) | (short)digits[0]))); + } } - } - break; - case 2: - if (8 * sizeof(short) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(short) - 1 > 2 * PyLong_SHIFT) { - return (short) ((((((short)digits[1]) << PyLong_SHIFT) | (short)digits[0]))); + break; + case 2: + if ((8 * sizeof(short) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(short) - 1 > 2 * PyLong_SHIFT)) { + return (short) ((((((short)digits[1]) << PyLong_SHIFT) | (short)digits[0]))); + } } - } - break; - case -3: - if (8 * sizeof(short) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(short, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(short) - 1 > 3 * PyLong_SHIFT) { - return (short) (((short)-1)*(((((((short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0]))); + break; + case -3: + if ((8 * sizeof(short) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(short, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(short) - 1 > 3 * PyLong_SHIFT)) { + return (short) (((short)-1)*(((((((short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0]))); + } } - } - break; - case 3: - if (8 * sizeof(short) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(short) - 1 > 3 * PyLong_SHIFT) { - return (short) ((((((((short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0]))); + break; + case 3: + if ((8 * sizeof(short) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(short) - 1 > 3 * PyLong_SHIFT)) { + return (short) ((((((((short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0]))); + } } - } - break; - case -4: - if (8 * sizeof(short) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(short, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(short) - 1 > 4 * PyLong_SHIFT) { - return (short) (((short)-1)*(((((((((short)digits[3]) << PyLong_SHIFT) | (short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0]))); + break; + case -4: + if ((8 * sizeof(short) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(short, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(short) - 1 > 4 * PyLong_SHIFT)) { + return (short) (((short)-1)*(((((((((short)digits[3]) << PyLong_SHIFT) | (short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0]))); + } } - } - break; - case 4: - if (8 * sizeof(short) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(short) - 1 > 4 * PyLong_SHIFT) { - return (short) ((((((((((short)digits[3]) << PyLong_SHIFT) | (short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0]))); + break; + case 4: + if ((8 * sizeof(short) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(short) - 1 > 4 * PyLong_SHIFT)) { + return (short) ((((((((((short)digits[3]) << PyLong_SHIFT) | (short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0]))); + } } - } - break; + break; + } } #endif - if (sizeof(short) <= sizeof(long)) { + if ((sizeof(short) <= sizeof(long))) { __PYX_VERIFY_RETURN_INT_EXC(short, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(short) <= sizeof(PY_LONG_LONG)) { + } else if ((sizeof(short) <= sizeof(PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(short, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else short val; PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 +#if PY_MAJOR_VERSION < 3 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } - #endif +#endif if (likely(v)) { + int ret = -1; +#if !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); + ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + long idigit; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (unlikely(!PyLong_CheckExact(v))) { + PyObject *tmp = v; + v = PyNumber_Long(v); + assert(PyLong_CheckExact(v)); + Py_DECREF(tmp); + if (unlikely(!v)) return (short) -1; + } +#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(x) == 0) + return (short) 0; + is_negative = Py_SIZE(x) < 0; +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (short) -1; + is_negative = result == 1; + } +#endif + if (is_unsigned && unlikely(is_negative)) { + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + if (unlikely(!stepval)) + return (short) -1; + } else { + stepval = __Pyx_NewRef(v); + } + val = (short) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(short) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + val |= ((short) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(stepval) == 0) + goto unpacking_done; + #endif + } + idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(short) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((short) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + unpacking_done: + #endif + if (!is_unsigned) { + if (unlikely(val & (((short) 1) << (sizeof(short) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif Py_DECREF(v); if (likely(!ret)) return val; } -#endif return (short) -1; } } else { @@ -63892,7 +73718,7 @@ static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) { const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if (sizeof(char) < sizeof(long)) { + if ((sizeof(char) < sizeof(long))) { __PYX_VERIFY_RETURN_INT(char, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); @@ -63906,37 +73732,42 @@ static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) { if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (char) 0; - case 1: __PYX_VERIFY_RETURN_INT(char, digit, digits[0]) - case 2: - if (8 * sizeof(char) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) >= 2 * PyLong_SHIFT) { - return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(char, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) >= 2 * PyLong_SHIFT)) { + return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } } - } - break; - case 3: - if (8 * sizeof(char) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) >= 3 * PyLong_SHIFT) { - return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + break; + case 3: + if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) >= 3 * PyLong_SHIFT)) { + return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } } - } - break; - case 4: - if (8 * sizeof(char) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) >= 4 * PyLong_SHIFT) { - return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + break; + case 4: + if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) >= 4 * PyLong_SHIFT)) { + return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } } - } - break; + break; + } } #endif #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 @@ -63952,109 +73783,181 @@ static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) { goto raise_neg_overflow; } #endif - if (sizeof(char) <= sizeof(unsigned long)) { + if ((sizeof(char) <= sizeof(unsigned long))) { __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) { + } else if ((sizeof(char) <= sizeof(unsigned PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (char) 0; - case -1: __PYX_VERIFY_RETURN_INT(char, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(char, digit, +digits[0]) - case -2: - if (8 * sizeof(char) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { - return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(char, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(char) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) { + return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } } - } - break; - case 2: - if (8 * sizeof(char) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { - return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + break; + case 2: + if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) { + return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } } - } - break; - case -3: - if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { - return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + break; + case -3: + if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) { + return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } } - } - break; - case 3: - if (8 * sizeof(char) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { - return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + break; + case 3: + if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) { + return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } } - } - break; - case -4: - if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) - 1 > 4 * PyLong_SHIFT) { - return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + break; + case -4: + if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) { + return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } } - } - break; - case 4: - if (8 * sizeof(char) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) - 1 > 4 * PyLong_SHIFT) { - return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + break; + case 4: + if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) { + return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } } - } - break; + break; + } } #endif - if (sizeof(char) <= sizeof(long)) { + if ((sizeof(char) <= sizeof(long))) { __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) { + } else if ((sizeof(char) <= sizeof(PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else char val; PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 +#if PY_MAJOR_VERSION < 3 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } - #endif +#endif if (likely(v)) { + int ret = -1; +#if !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); + ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + long idigit; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (unlikely(!PyLong_CheckExact(v))) { + PyObject *tmp = v; + v = PyNumber_Long(v); + assert(PyLong_CheckExact(v)); + Py_DECREF(tmp); + if (unlikely(!v)) return (char) -1; + } +#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(x) == 0) + return (char) 0; + is_negative = Py_SIZE(x) < 0; +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (char) -1; + is_negative = result == 1; + } +#endif + if (is_unsigned && unlikely(is_negative)) { + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + if (unlikely(!stepval)) + return (char) -1; + } else { + stepval = __Pyx_NewRef(v); + } + val = (char) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + val |= ((char) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(stepval) == 0) + goto unpacking_done; + #endif + } + idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((char) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + unpacking_done: + #endif + if (!is_unsigned) { + if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif Py_DECREF(v); if (likely(!ret)) return val; } -#endif return (char) -1; } } else { @@ -64075,6 +73978,21 @@ static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) { return (char) -1; } +/* FormatTypeName */ + #if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name_2); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XSETREF(name, __Pyx_NewRef(__pyx_n_s__53)); + } + return name; +} +#endif + /* CheckBinaryVersion */ static int __Pyx_check_binary_version(void) { char ctversion[5]; @@ -64105,7 +74023,7 @@ static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) { rtversion[i] = rt_from_call[i]; } PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " + "compile time version %s of module '%.100s' " "does not match runtime version %s", ctversion, __Pyx_MODULE_NAME, rtversion); return PyErr_WarnEx(NULL, message, 1); @@ -64114,9 +74032,9 @@ static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) { } /* FunctionImport */ - #ifndef __PYX_HAVE_RT_ImportFunction_0_29_36 -#define __PYX_HAVE_RT_ImportFunction_0_29_36 -static int __Pyx_ImportFunction_0_29_36(PyObject *module, const char *funcname, void (**f)(void), const char *sig) { + #ifndef __PYX_HAVE_RT_ImportFunction_3_0_0 +#define __PYX_HAVE_RT_ImportFunction_3_0_0 +static int __Pyx_ImportFunction_3_0_0(PyObject *module, const char *funcname, void (**f)(void), const char *sig) { PyObject *d = 0; PyObject *cobj = 0; union { @@ -64133,7 +74051,6 @@ static int __Pyx_ImportFunction_0_29_36(PyObject *module, const char *funcname, PyModule_GetName(module), funcname); goto bad; } -#if PY_VERSION_HEX >= 0x02070000 if (!PyCapsule_IsValid(cobj, sig)) { PyErr_Format(PyExc_TypeError, "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)", @@ -64141,21 +74058,6 @@ static int __Pyx_ImportFunction_0_29_36(PyObject *module, const char *funcname, goto bad; } tmp.p = PyCapsule_GetPointer(cobj, sig); -#else - {const char *desc, *s1, *s2; - desc = (const char *)PyCObject_GetDesc(cobj); - if (!desc) - goto bad; - s1 = desc; s2 = sig; - while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; } - if (*s1 != *s2) { - PyErr_Format(PyExc_TypeError, - "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)", - PyModule_GetName(module), funcname, sig, desc); - goto bad; - } - tmp.p = PyCObject_AsVoidPtr(cobj);} -#endif *f = tmp.fp; if (!(*f)) goto bad; @@ -64168,9 +74070,31 @@ static int __Pyx_ImportFunction_0_29_36(PyObject *module, const char *funcname, #endif /* InitStrings */ - static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + #if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { while (t->p) { - #if PY_MAJOR_VERSION < 3 + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else if (t->is_unicode) { *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); } else if (t->intern) { @@ -64178,23 +74102,11 @@ static int __Pyx_ImportFunction_0_29_36(PyObject *module, const char *funcname, } else { *t->p = PyString_FromStringAndSize(t->s, t->n - 1); } - #else - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif if (!*t->p) return -1; if (PyObject_Hash(*t->p) == -1) return -1; + #endif ++t; } return 0; @@ -64256,7 +74168,7 @@ static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ return __Pyx_PyUnicode_AsStringAndSize(o, length); } else #endif -#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) if (PyByteArray_Check(o)) { *length = PyByteArray_GET_SIZE(o); return PyByteArray_AS_STRING(o); @@ -64285,22 +74197,26 @@ static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { return retval; } static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); #if PY_MAJOR_VERSION >= 3 if (PyLong_Check(result)) { if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, - "__int__ returned non-int (type %.200s). " - "The ability to return an instance of a strict subclass of int " - "is deprecated, and may be removed in a future version of Python.", - Py_TYPE(result)->tp_name)) { + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); Py_DECREF(result); return NULL; } + __Pyx_DECREF_TypeName(result_type_name); return result; } #endif PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - type_name, type_name, Py_TYPE(result)->tp_name); + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); Py_DECREF(result); return NULL; } @@ -64366,13 +74282,11 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { #endif if (likely(PyLong_CheckExact(b))) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)b)->ob_digit; - const Py_ssize_t size = Py_SIZE(b); - if (likely(__Pyx_sst_abs(size) <= 1)) { - ival = likely(size) ? digits[0] : 0; - if (size == -1) ival = -ival; - return ival; + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); switch (size) { case 2: if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { @@ -64440,4 +74354,12 @@ static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { } +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ #endif /* Py_PYTHON_H */ diff --git a/cornac/models/comparer/recom_comparer_sub.pyx b/cornac/models/comparer/recom_comparer_sub.pyx index 52699807a..09de437ee 100644 --- a/cornac/models/comparer/recom_comparer_sub.pyx +++ b/cornac/models/comparer/recom_comparer_sub.pyx @@ -757,14 +757,12 @@ class ComparERSub(MTER): return correct, skipped, loss, bpr_loss - def rank(self, user_id, item_ids=None): + def rank(self, user_idx, item_indices=None): if self.alpha > 0 and self.n_top_aspects > 0: n_items = self.train_set.num_items n_top_aspects = min(self.n_top_aspects, self.train_set.sentiment.num_aspects) - item_ids = item_ids if item_ids is not None else range(n_items) - item_ids = np.array(item_ids) - ts1 = np.einsum("abc,a->bc", self.G1, self.U[user_id]) - ts2 = np.einsum("bc,Mb->Mc", ts1, self.I[item_ids]) + ts1 = np.einsum("abc,a->bc", self.G1, self.U[user_idx]) + ts2 = np.einsum("bc,Mb->Mc", ts1, self.I) ts3 = np.einsum("Mc,Nc->MN", ts2, self.A) top_aspect_scores = ts3[ np.repeat(range(n_items), n_top_aspects).reshape( @@ -772,10 +770,27 @@ class ComparERSub(MTER): ), ts3[:, :-1].argsort(axis=1)[::-1][:, :n_top_aspects], ] - item_scores = ( + known_item_scores = ( self.alpha * top_aspect_scores.mean(axis=1) + (1 - self.alpha) * ts3[:, -1] ) - item_rank = item_ids[item_scores.argsort()[::-1]] + # check if the returned scores also cover unknown items + # if not, all unknown items will be given the MIN score + if len(known_item_scores) == self.train_set.total_items: + all_item_scores = known_item_scores + else: + all_item_scores = np.ones(self.train_set.total_items) * np.min( + known_item_scores + ) + all_item_scores[: self.train_set.num_items] = known_item_scores + + # rank items based on their scores + if item_indices is None: + item_scores = all_item_scores[: self.train_set.num_items] + item_rank = item_scores.argsort()[::-1] + else: + item_scores = all_item_scores[item_indices] + item_rank = np.array(item_indices)[item_scores.argsort()[::-1]] + return item_rank, item_scores - return super().rank(user_id, item_ids) \ No newline at end of file + return super().rank(user_idx, item_indices) \ No newline at end of file diff --git a/cornac/models/efm/recom_efm.cpp b/cornac/models/efm/recom_efm.cpp index f038f464f..4cd23957c 100644 --- a/cornac/models/efm/recom_efm.cpp +++ b/cornac/models/efm/recom_efm.cpp @@ -1,17 +1,17 @@ -/* Generated by Cython 0.29.24 */ +/* Generated by Cython 3.0.0 */ /* BEGIN: Cython Metadata { "distutils": { "depends": [ - "/home/hoangle/anaconda3/lib/python3.9/site-packages/numpy/core/include/numpy/arrayobject.h", - "/home/hoangle/anaconda3/lib/python3.9/site-packages/numpy/core/include/numpy/arrayscalars.h", - "/home/hoangle/anaconda3/lib/python3.9/site-packages/numpy/core/include/numpy/ndarrayobject.h", - "/home/hoangle/anaconda3/lib/python3.9/site-packages/numpy/core/include/numpy/ndarraytypes.h", - "/home/hoangle/anaconda3/lib/python3.9/site-packages/numpy/core/include/numpy/ufuncobject.h" + "/home/hoangle/anaconda3/envs/py310/lib/python3.10/site-packages/numpy/core/include/numpy/arrayobject.h", + "/home/hoangle/anaconda3/envs/py310/lib/python3.10/site-packages/numpy/core/include/numpy/arrayscalars.h", + "/home/hoangle/anaconda3/envs/py310/lib/python3.10/site-packages/numpy/core/include/numpy/ndarrayobject.h", + "/home/hoangle/anaconda3/envs/py310/lib/python3.10/site-packages/numpy/core/include/numpy/ndarraytypes.h", + "/home/hoangle/anaconda3/envs/py310/lib/python3.10/site-packages/numpy/core/include/numpy/ufuncobject.h" ], "include_dirs": [ - "/home/hoangle/anaconda3/lib/python3.9/site-packages/numpy/core/include" + "/home/hoangle/anaconda3/envs/py310/lib/python3.10/site-packages/numpy/core/include" ], "language": "c++", "name": "cornac.models.efm.recom_efm", @@ -26,20 +26,32 @@ END: Cython Metadata */ #ifndef PY_SSIZE_T_CLEAN #define PY_SSIZE_T_CLEAN #endif /* PY_SSIZE_T_CLEAN */ +#if defined(CYTHON_LIMITED_API) && 0 + #ifndef Py_LIMITED_API + #if CYTHON_LIMITED_API+0 > 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + #include "Python.h" #ifndef Py_PYTHON_H #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) - #error Cython requires Python 2.6+ or Python 3.3+. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. #else -#define CYTHON_ABI "0_29_24" -#define CYTHON_HEX_VERSION 0x001D18F0 +#define CYTHON_ABI "3_0_0" +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x030000F0 #define CYTHON_FUTURE_DIVISION 1 #include #ifndef offsetof #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) #endif -#if !defined(WIN32) && !defined(MS_WINDOWS) +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) #ifndef __stdcall #define __stdcall #endif @@ -58,9 +70,7 @@ END: Cython Metadata */ #endif #define __PYX_COMMA , #ifndef HAVE_LONG_LONG - #if PY_VERSION_HEX >= 0x02070000 - #define HAVE_LONG_LONG - #endif + #define HAVE_LONG_LONG #endif #ifndef PY_LONG_LONG #define PY_LONG_LONG LONG_LONG @@ -68,12 +78,18 @@ END: Cython Metadata */ #ifndef Py_HUGE_VAL #define Py_HUGE_VAL HUGE_VAL #endif -#ifdef PYPY_VERSION - #define CYTHON_COMPILING_IN_PYPY 1 - #define CYTHON_COMPILING_IN_PYSTON 0 +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 + #define CYTHON_COMPILING_IN_NOGIL 0 #undef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #if PY_VERSION_HEX < 0x03050000 @@ -98,27 +114,159 @@ END: Cython Metadata */ #define CYTHON_UNPACK_METHODS 0 #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 #undef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE 0 #undef CYTHON_USE_DICT_VERSIONS #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 -#elif defined(PYSTON_VERSION) + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif +#elif defined(PYPY_VERSION) + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #if PY_VERSION_HEX < 0x03090000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif +#elif defined(CYTHON_LIMITED_API) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #endif + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif +#elif defined(PY_NOGIL) #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 1 #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 1 #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 + #ifndef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif #undef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 0 #ifndef CYTHON_USE_UNICODE_INTERNALS @@ -141,25 +289,29 @@ END: Cython Metadata */ #define CYTHON_FAST_THREAD_STATE 0 #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 1 + #endif #undef CYTHON_USE_DICT_VERSIONS #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 #else #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 0 #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 1 #endif #if PY_MAJOR_VERSION < 3 @@ -168,10 +320,7 @@ END: Cython Metadata */ #elif !defined(CYTHON_USE_ASYNC_SLOTS) #define CYTHON_USE_ASYNC_SLOTS 1 #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #ifndef CYTHON_USE_PYLONG_INTERNALS #define CYTHON_USE_PYLONG_INTERNALS 1 #endif #ifndef CYTHON_USE_PYLIST_INTERNALS @@ -180,7 +329,7 @@ END: Cython Metadata */ #ifndef CYTHON_USE_UNICODE_INTERNALS #define CYTHON_USE_UNICODE_INTERNALS 1 #endif - #if PY_VERSION_HEX < 0x030300F0 + #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2 #undef CYTHON_USE_UNICODE_WRITER #define CYTHON_USE_UNICODE_WRITER 0 #elif !defined(CYTHON_USE_UNICODE_WRITER) @@ -198,27 +347,60 @@ END: Cython Metadata */ #ifndef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 1 #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif #ifndef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 1 #endif - #ifndef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 #endif - #ifndef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) #endif - #ifndef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #if PY_VERSION_HEX < 0x030700A3 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #elif !defined(CYTHON_USE_EXC_INFO_STACK) + #define CYTHON_USE_EXC_INFO_STACK 1 #endif - #ifndef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 #endif #endif #if !defined(CYTHON_FAST_PYCCALL) #define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) #endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" + #if PY_MAJOR_VERSION < 3 + #include "longintrepr.h" + #endif #undef SHIFT #undef BASE #undef MASK @@ -243,6 +425,17 @@ END: Cython Metadata */ #define CYTHON_RESTRICT #endif #endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif #ifndef CYTHON_UNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) @@ -256,13 +449,16 @@ END: Cython Metadata */ # define CYTHON_UNUSED # endif #endif -#ifndef CYTHON_MAYBE_UNUSED_VAR +#ifndef CYTHON_UNUSED_VAR # if defined(__cplusplus) - template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } + template void CYTHON_UNUSED_VAR( const T& ) { } # else -# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# define CYTHON_UNUSED_VAR(x) (void)(x) # endif #endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif #ifndef CYTHON_NCP_UNUSED # if CYTHON_COMPILING_IN_CPYTHON # define CYTHON_NCP_UNUSED @@ -274,24 +470,47 @@ END: Cython Metadata */ #ifdef _MSC_VER #ifndef _MSC_STDINT_H_ #if _MSC_VER < 1300 - typedef unsigned char uint8_t; - typedef unsigned int uint32_t; + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; #else - typedef unsigned __int8 uint8_t; - typedef unsigned __int32 uint32_t; + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; + #else + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; + #else + typedef unsigned __int32 __pyx_uintptr_t; #endif #endif #else - #include + #include + typedef uintptr_t __pyx_uintptr_t; #endif #ifndef CYTHON_FALLTHROUGH - #if defined(__cplusplus) && __cplusplus >= 201103L - #if __has_cpp_attribute(fallthrough) - #define CYTHON_FALLTHROUGH [[fallthrough]] - #elif __has_cpp_attribute(clang::fallthrough) - #define CYTHON_FALLTHROUGH [[clang::fallthrough]] - #elif __has_cpp_attribute(gnu::fallthrough) - #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif #endif #endif #ifndef CYTHON_FALLTHROUGH @@ -301,13 +520,26 @@ END: Cython Metadata */ #define CYTHON_FALLTHROUGH #endif #endif - #if defined(__clang__ ) && defined(__apple_build_version__) + #if defined(__clang__) && defined(__apple_build_version__) #if __apple_build_version__ < 7000000 #undef CYTHON_FALLTHROUGH #define CYTHON_FALLTHROUGH #endif #endif #endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) #ifndef __cplusplus #error "Cython files generated with the C++ option must be compiled with a C++ compiler." @@ -331,32 +563,121 @@ class __Pyx_FakeReference { T *operator->() { return ptr; } T *operator&() { return ptr; } operator T&() { return *ptr; } - template bool operator ==(U other) { return *ptr == other; } - template bool operator !=(U other) { return *ptr != other; } + template bool operator ==(const U& other) const { return *ptr == other; } + template bool operator !=(const U& other) const { return *ptr != other; } + template bool operator==(const __Pyx_FakeReference& other) const { return *ptr == *other.ptr; } + template bool operator!=(const __Pyx_FakeReference& other) const { return *ptr != *other.ptr; } private: T *ptr; }; -#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) - #define Py_OptimizeFlag 0 -#endif #define __PYX_BUILD_PY_SSIZE_T "n" #define CYTHON_FORMAT_SSIZE_T "z" #if PY_MAJOR_VERSION < 3 #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else #define __Pyx_BUILTIN_MODULE_NAME "builtins" -#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyType_Type +#if PY_VERSION_HEX >= 0x030B00A1 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyObject *kwds=NULL, *argcount=NULL, *posonlyargcount=NULL, *kwonlyargcount=NULL; + PyObject *nlocals=NULL, *stacksize=NULL, *flags=NULL, *replace=NULL, *empty=NULL; + const char *fn_cstr=NULL; + const char *name_cstr=NULL; + PyCodeObject *co=NULL, *result=NULL; + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + if (!(kwds=PyDict_New())) goto end; + if (!(argcount=PyLong_FromLong(a))) goto end; + if (PyDict_SetItemString(kwds, "co_argcount", argcount) != 0) goto end; + if (!(posonlyargcount=PyLong_FromLong(p))) goto end; + if (PyDict_SetItemString(kwds, "co_posonlyargcount", posonlyargcount) != 0) goto end; + if (!(kwonlyargcount=PyLong_FromLong(k))) goto end; + if (PyDict_SetItemString(kwds, "co_kwonlyargcount", kwonlyargcount) != 0) goto end; + if (!(nlocals=PyLong_FromLong(l))) goto end; + if (PyDict_SetItemString(kwds, "co_nlocals", nlocals) != 0) goto end; + if (!(stacksize=PyLong_FromLong(s))) goto end; + if (PyDict_SetItemString(kwds, "co_stacksize", stacksize) != 0) goto end; + if (!(flags=PyLong_FromLong(f))) goto end; + if (PyDict_SetItemString(kwds, "co_flags", flags) != 0) goto end; + if (PyDict_SetItemString(kwds, "co_code", code) != 0) goto end; + if (PyDict_SetItemString(kwds, "co_consts", c) != 0) goto end; + if (PyDict_SetItemString(kwds, "co_names", n) != 0) goto end; + if (PyDict_SetItemString(kwds, "co_varnames", v) != 0) goto end; + if (PyDict_SetItemString(kwds, "co_freevars", fv) != 0) goto end; + if (PyDict_SetItemString(kwds, "co_cellvars", cell) != 0) goto end; + if (PyDict_SetItemString(kwds, "co_linetable", lnos) != 0) goto end; + if (!(fn_cstr=PyUnicode_AsUTF8AndSize(fn, NULL))) goto end; + if (!(name_cstr=PyUnicode_AsUTF8AndSize(name, NULL))) goto end; + if (!(co = PyCode_NewEmpty(fn_cstr, name_cstr, fline))) goto end; + if (!(replace = PyObject_GetAttrString((PyObject*)co, "replace"))) goto end; + if (!(empty = PyTuple_New(0))) goto end; + result = (PyCodeObject*) PyObject_Call(replace, empty, kwds); + end: + Py_XDECREF((PyObject*) co); + Py_XDECREF(kwds); + Py_XDECREF(argcount); + Py_XDECREF(posonlyargcount); + Py_XDECREF(kwonlyargcount); + Py_XDECREF(nlocals); + Py_XDECREF(stacksize); + Py_XDECREF(replace); + Py_XDECREF(empty); + if (type) { + PyErr_Restore(type, value, traceback); + } + return result; + } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #endif - #define __Pyx_DefaultClassType PyType_Type +#endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) +#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) +#else + #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) +#endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 #endif #ifndef Py_TPFLAGS_CHECKTYPES #define Py_TPFLAGS_CHECKTYPES 0 @@ -370,6 +691,12 @@ class __Pyx_FakeReference { #ifndef Py_TPFLAGS_HAVE_FINALIZE #define Py_TPFLAGS_HAVE_FINALIZE 0 #endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif #ifndef METH_STACKLESS #define METH_STACKLESS 0 #endif @@ -384,30 +711,53 @@ class __Pyx_FakeReference { #define __Pyx_PyCFunctionFast _PyCFunctionFast #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords #endif -#if CYTHON_FAST_PYCCALL -#define __Pyx_PyFastCFunction_Check(func)\ - ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords +#else + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) #else -#define __Pyx_PyFastCFunction_Check(func) 0 + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) +#endif +#if PY_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); +#else + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 #endif #if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) #define PyObject_Malloc(s) PyMem_Malloc(s) #define PyObject_Free(p) PyMem_Free(p) #define PyObject_Realloc(p) PyMem_Realloc(p) #endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 - #define PyMem_RawMalloc(n) PyMem_Malloc(n) - #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) - #define PyMem_RawFree(p) PyMem_Free(p) -#endif -#if CYTHON_COMPILING_IN_PYSTON - #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) #else #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) #endif -#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE #define __Pyx_PyThreadState_Current PyThreadState_GET() #elif PY_VERSION_HEX >= 0x03060000 #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() @@ -416,6 +766,22 @@ class __Pyx_FakeReference { #else #define __Pyx_PyThreadState_Current _PyThreadState_Current #endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif #if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) #include "pythread.h" #define Py_tss_NEEDS_INIT 0 @@ -446,6 +812,28 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { return PyThread_get_key_value(*key); } #endif +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif #if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) #define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) #else @@ -458,34 +846,86 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) #endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS -#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#else +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); +#else + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; +#endif +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#endif +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) #else -#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next #endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE(obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} +#else +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API #define CYTHON_PEP393_ENABLED 1 - #if defined(PyUnicode_IS_READY) - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #else #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_READY(op) (0) + #else + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) #endif #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) - #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) - #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) #else - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) - #endif - #else - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif #endif #else #define CYTHON_PEP393_ENABLED 0 @@ -495,11 +935,11 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyUnicode_READY(op) (0) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) #endif #if CYTHON_COMPILING_IN_PYPY @@ -510,14 +950,20 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) #endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) - #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) - #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) - #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif #endif #define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) #define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) @@ -546,8 +992,14 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) #endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif #ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) #endif #if PY_VERSION_HEX >= 0x030900A4 #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) @@ -566,6 +1018,8 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define PyInt_Type PyLong_Type #define PyInt_Check(op) PyLong_Check(op) #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) #define PyInt_FromString PyLong_FromString #define PyInt_FromUnicode PyLong_FromUnicode #define PyInt_FromLong PyLong_FromLong @@ -577,6 +1031,9 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) #endif #if PY_MAJOR_VERSION >= 3 #define PyBoolObject PyLongObject @@ -589,15 +1046,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #if PY_VERSION_HEX < 0x030200A4 typedef long Py_hash_t; #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t #else #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) -#else - #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t #endif #if CYTHON_USE_ASYNC_SLOTS #if PY_VERSION_HEX >= 0x030500B1 @@ -617,8 +1069,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { } __Pyx_PyAsyncMethodsStruct; #endif -#if defined(WIN32) || defined(MS_WINDOWS) - #define _USE_MATH_DEFINES +#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS) + #if !defined(_USE_MATH_DEFINES) + #define _USE_MATH_DEFINES + #endif #endif #include #ifdef NAN @@ -641,12 +1095,17 @@ static CYTHON_INLINE float __PYX_NAN() { #define __PYX_ERR(f_index, lineno, Ln_error) \ { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else + #define __PYX_EXTERN_C extern "C++" #endif #define __PYX_HAVE__cornac__models__efm__recom_efm @@ -655,17 +1114,16 @@ static CYTHON_INLINE float __PYX_NAN() { #include #include #include + + /* Using NumPy API declarations from "numpy/__init__.cython-30.pxd" */ + #include "numpy/arrayobject.h" #include "numpy/ndarrayobject.h" #include "numpy/ndarraytypes.h" #include "numpy/arrayscalars.h" #include "numpy/ufuncobject.h" - - /* NumPy API declarations from "numpy/__init__.pxd" */ - #include "pythread.h" #include -#include "pystate.h" #ifdef _OPENMP #include #endif /* _OPENMP */ @@ -734,9 +1192,9 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); #define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) #define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) #define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) @@ -744,11 +1202,22 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); #define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) #define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) #define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const wchar_t *u) +{ + const wchar_t *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#else +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) +{ const Py_UNICODE *u_end = u; while (*u_end++) ; return (size_t)(u_end - u - 1); } +#endif +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) #define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) #define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode #define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode @@ -762,6 +1231,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); #if CYTHON_ASSUME_SAFE_MACROS #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) #else @@ -773,7 +1243,52 @@ static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); #else #define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) #endif -#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else // Py < 3.12 + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII static int __Pyx_sys_getdefaultencoding_not_ascii; static int __Pyx_init_sys_getdefaultencoding_params(void) { @@ -795,7 +1310,7 @@ static int __Pyx_init_sys_getdefaultencoding_params(void) { char ascii_chars[128]; int c; for (c = 0; c < 128; c++) { - ascii_chars[c] = c; + ascii_chars[c] = (char) c; } __Pyx_sys_getdefaultencoding_not_ascii = 1; ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); @@ -860,23 +1375,19 @@ static int __Pyx_init_sys_getdefaultencoding_params(void) { #endif /* __GNUC__ */ static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } +#if !CYTHON_USE_MODULE_STATE static PyObject *__pyx_m = NULL; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_cython_runtime = NULL; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static PyObject *__pyx_empty_unicode; +#endif static int __pyx_lineno; static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; +static const char * __pyx_cfilenm = __FILE__; static const char *__pyx_filename; /* Header.proto */ #if !defined(CYTHON_CCOMPLEX) #if defined(__cplusplus) #define CYTHON_CCOMPLEX 1 - #elif defined(_Complex_I) + #elif (defined(_Complex_I) && !defined(_MSC_VER)) || ((defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) && !defined(__STDC_NO_COMPLEX__)) #define CYTHON_CCOMPLEX 1 #else #define CYTHON_CCOMPLEX 0 @@ -894,15 +1405,28 @@ static const char *__pyx_filename; #define _Complex_I 1.0fj #endif +/* #### Code section: filename_table ### */ static const char *__pyx_f[] = { "cornac/models/efm/recom_efm.pyx", - "__init__.pxd", - "stringsource", + "", + "__init__.cython-30.pxd", "type.pxd", }; +/* #### Code section: utility_code_proto_before_types ### */ +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* NoFastGil.proto */ +#define __Pyx_PyGILState_Ensure PyGILState_Ensure +#define __Pyx_PyGILState_Release PyGILState_Release +#define __Pyx_FastGIL_Remember() +#define __Pyx_FastGIL_Forget() +#define __Pyx_FastGilFuncInit() + /* BufferFormatStructs.proto */ -#define IS_UNSIGNED(type) (((type) -1) > 0) struct __Pyx_StructField_; #define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) typedef struct { @@ -937,58 +1461,69 @@ typedef struct { char is_valid_array; } __Pyx_BufFmt_Context; -/* NoFastGil.proto */ -#define __Pyx_PyGILState_Ensure PyGILState_Ensure -#define __Pyx_PyGILState_Release PyGILState_Release -#define __Pyx_FastGIL_Remember() -#define __Pyx_FastGIL_Forget() -#define __Pyx_FastGilFuncInit() - -/* ForceInitThreads.proto */ -#ifndef __PYX_FORCE_INIT_THREADS - #define __PYX_FORCE_INIT_THREADS 0 -#endif - -/* MemviewSliceStruct.proto */ -struct __pyx_memoryview_obj; -typedef struct { - struct __pyx_memoryview_obj *memview; - char *data; - Py_ssize_t shape[8]; - Py_ssize_t strides[8]; - Py_ssize_t suboffsets[8]; -} __Pyx_memviewslice; -#define __Pyx_MemoryView_Len(m) (m.shape[0]) - /* Atomics.proto */ #include #ifndef CYTHON_ATOMICS #define CYTHON_ATOMICS 1 #endif +#define __PYX_CYTHON_ATOMICS_ENABLED() CYTHON_ATOMICS #define __pyx_atomic_int_type int -#if CYTHON_ATOMICS && __GNUC__ >= 4 && (__GNUC_MINOR__ > 1 ||\ - (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL >= 2)) &&\ - !defined(__i386__) - #define __pyx_atomic_incr_aligned(value, lock) __sync_fetch_and_add(value, 1) - #define __pyx_atomic_decr_aligned(value, lock) __sync_fetch_and_sub(value, 1) +#define __pyx_nonatomic_int_type int +#if CYTHON_ATOMICS && (defined(__STDC_VERSION__) &&\ + (__STDC_VERSION__ >= 201112L) &&\ + !defined(__STDC_NO_ATOMICS__)) + #include +#elif CYTHON_ATOMICS && (defined(__cplusplus) && (\ + (__cplusplus >= 201103L) ||\ + (defined(_MSC_VER) && _MSC_VER >= 1700))) + #include +#endif +#if CYTHON_ATOMICS && (defined(__STDC_VERSION__) &&\ + (__STDC_VERSION__ >= 201112L) &&\ + !defined(__STDC_NO_ATOMICS__) &&\ + ATOMIC_INT_LOCK_FREE == 2) + #undef __pyx_atomic_int_type + #define __pyx_atomic_int_type atomic_int + #define __pyx_atomic_incr_aligned(value) atomic_fetch_add_explicit(value, 1, memory_order_relaxed) + #define __pyx_atomic_decr_aligned(value) atomic_fetch_sub_explicit(value, 1, memory_order_acq_rel) + #if defined(__PYX_DEBUG_ATOMICS) && defined(_MSC_VER) + #pragma message ("Using standard C atomics") + #elif defined(__PYX_DEBUG_ATOMICS) + #warning "Using standard C atomics" + #endif +#elif CYTHON_ATOMICS && (defined(__cplusplus) && (\ + (__cplusplus >= 201103L) ||\ +\ + (defined(_MSC_VER) && _MSC_VER >= 1700)) &&\ + ATOMIC_INT_LOCK_FREE == 2) + #undef __pyx_atomic_int_type + #define __pyx_atomic_int_type std::atomic_int + #define __pyx_atomic_incr_aligned(value) std::atomic_fetch_add_explicit(value, 1, std::memory_order_relaxed) + #define __pyx_atomic_decr_aligned(value) std::atomic_fetch_sub_explicit(value, 1, std::memory_order_acq_rel) + #if defined(__PYX_DEBUG_ATOMICS) && defined(_MSC_VER) + #pragma message ("Using standard C++ atomics") + #elif defined(__PYX_DEBUG_ATOMICS) + #warning "Using standard C++ atomics" + #endif +#elif CYTHON_ATOMICS && (__GNUC__ >= 5 || (__GNUC__ == 4 &&\ + (__GNUC_MINOR__ > 1 ||\ + (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ >= 2)))) + #define __pyx_atomic_incr_aligned(value) __sync_fetch_and_add(value, 1) + #define __pyx_atomic_decr_aligned(value) __sync_fetch_and_sub(value, 1) #ifdef __PYX_DEBUG_ATOMICS #warning "Using GNU atomics" #endif -#elif CYTHON_ATOMICS && defined(_MSC_VER) && 0 - #include +#elif CYTHON_ATOMICS && defined(_MSC_VER) + #include #undef __pyx_atomic_int_type - #define __pyx_atomic_int_type LONG - #define __pyx_atomic_incr_aligned(value, lock) InterlockedIncrement(value) - #define __pyx_atomic_decr_aligned(value, lock) InterlockedDecrement(value) + #define __pyx_atomic_int_type long + #define __pyx_nonatomic_int_type long + #pragma intrinsic (_InterlockedExchangeAdd) + #define __pyx_atomic_incr_aligned(value) _InterlockedExchangeAdd(value, 1) + #define __pyx_atomic_decr_aligned(value) _InterlockedExchangeAdd(value, -1) #ifdef __PYX_DEBUG_ATOMICS #pragma message ("Using MSVC atomics") #endif -#elif CYTHON_ATOMICS && (defined(__ICC) || defined(__INTEL_COMPILER)) && 0 - #define __pyx_atomic_incr_aligned(value, lock) _InterlockedIncrement(value) - #define __pyx_atomic_decr_aligned(value, lock) _InterlockedDecrement(value) - #ifdef __PYX_DEBUG_ATOMICS - #warning "Using Intel atomics" - #endif #else #undef CYTHON_ATOMICS #define CYTHON_ATOMICS 0 @@ -996,12 +1531,11 @@ typedef struct { #warning "Not using atomics" #endif #endif -typedef volatile __pyx_atomic_int_type __pyx_atomic_int; #if CYTHON_ATOMICS #define __pyx_add_acquisition_count(memview)\ - __pyx_atomic_incr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) + __pyx_atomic_incr_aligned(__pyx_get_slice_count_pointer(memview)) #define __pyx_sub_acquisition_count(memview)\ - __pyx_atomic_decr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) + __pyx_atomic_decr_aligned(__pyx_get_slice_count_pointer(memview)) #else #define __pyx_add_acquisition_count(memview)\ __pyx_add_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) @@ -1009,8 +1543,20 @@ typedef volatile __pyx_atomic_int_type __pyx_atomic_int; __pyx_sub_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) #endif +/* MemviewSliceStruct.proto */ +struct __pyx_memoryview_obj; +typedef struct { + struct __pyx_memoryview_obj *memview; + char *data; + Py_ssize_t shape[8]; + Py_ssize_t strides[8]; + Py_ssize_t suboffsets[8]; +} __Pyx_memviewslice; +#define __Pyx_MemoryView_Len(m) (m.shape[0]) + +/* #### Code section: numeric_typedefs ### */ -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":690 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":730 * # in Cython to enable them only on the right systems. * * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< @@ -1019,7 +1565,7 @@ typedef volatile __pyx_atomic_int_type __pyx_atomic_int; */ typedef npy_int8 __pyx_t_5numpy_int8_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":691 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":731 * * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< @@ -1028,7 +1574,7 @@ typedef npy_int8 __pyx_t_5numpy_int8_t; */ typedef npy_int16 __pyx_t_5numpy_int16_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":692 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":732 * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< @@ -1037,7 +1583,7 @@ typedef npy_int16 __pyx_t_5numpy_int16_t; */ typedef npy_int32 __pyx_t_5numpy_int32_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":693 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":733 * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< @@ -1046,7 +1592,7 @@ typedef npy_int32 __pyx_t_5numpy_int32_t; */ typedef npy_int64 __pyx_t_5numpy_int64_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":697 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":737 * #ctypedef npy_int128 int128_t * * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< @@ -1055,7 +1601,7 @@ typedef npy_int64 __pyx_t_5numpy_int64_t; */ typedef npy_uint8 __pyx_t_5numpy_uint8_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":698 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":738 * * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< @@ -1064,7 +1610,7 @@ typedef npy_uint8 __pyx_t_5numpy_uint8_t; */ typedef npy_uint16 __pyx_t_5numpy_uint16_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":699 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":739 * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< @@ -1073,7 +1619,7 @@ typedef npy_uint16 __pyx_t_5numpy_uint16_t; */ typedef npy_uint32 __pyx_t_5numpy_uint32_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":700 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":740 * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< @@ -1082,7 +1628,7 @@ typedef npy_uint32 __pyx_t_5numpy_uint32_t; */ typedef npy_uint64 __pyx_t_5numpy_uint64_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":704 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":744 * #ctypedef npy_uint128 uint128_t * * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< @@ -1091,7 +1637,7 @@ typedef npy_uint64 __pyx_t_5numpy_uint64_t; */ typedef npy_float32 __pyx_t_5numpy_float32_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":705 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":745 * * ctypedef npy_float32 float32_t * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< @@ -1100,61 +1646,43 @@ typedef npy_float32 __pyx_t_5numpy_float32_t; */ typedef npy_float64 __pyx_t_5numpy_float64_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":714 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":754 * # The int types are mapped a bit surprising -- * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t # <<<<<<<<<<<<<< - * ctypedef npy_longlong long_t * ctypedef npy_longlong longlong_t + * */ typedef npy_long __pyx_t_5numpy_int_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":715 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":755 * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t - * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< - * ctypedef npy_longlong longlong_t - * - */ -typedef npy_longlong __pyx_t_5numpy_long_t; - -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":716 - * ctypedef npy_long int_t - * ctypedef npy_longlong long_t * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< * * ctypedef npy_ulong uint_t */ typedef npy_longlong __pyx_t_5numpy_longlong_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":718 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":757 * ctypedef npy_longlong longlong_t * * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< - * ctypedef npy_ulonglong ulong_t * ctypedef npy_ulonglong ulonglong_t + * */ typedef npy_ulong __pyx_t_5numpy_uint_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":719 - * - * ctypedef npy_ulong uint_t - * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< - * ctypedef npy_ulonglong ulonglong_t +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":758 * - */ -typedef npy_ulonglong __pyx_t_5numpy_ulong_t; - -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":720 * ctypedef npy_ulong uint_t - * ctypedef npy_ulonglong ulong_t * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< * * ctypedef npy_intp intp_t */ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":722 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":760 * ctypedef npy_ulonglong ulonglong_t * * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< @@ -1163,7 +1691,7 @@ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; */ typedef npy_intp __pyx_t_5numpy_intp_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":723 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":761 * * ctypedef npy_intp intp_t * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< @@ -1172,7 +1700,7 @@ typedef npy_intp __pyx_t_5numpy_intp_t; */ typedef npy_uintp __pyx_t_5numpy_uintp_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":725 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":763 * ctypedef npy_uintp uintp_t * * ctypedef npy_double float_t # <<<<<<<<<<<<<< @@ -1181,7 +1709,7 @@ typedef npy_uintp __pyx_t_5numpy_uintp_t; */ typedef npy_double __pyx_t_5numpy_float_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":726 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":764 * * ctypedef npy_double float_t * ctypedef npy_double double_t # <<<<<<<<<<<<<< @@ -1190,7 +1718,7 @@ typedef npy_double __pyx_t_5numpy_float_t; */ typedef npy_double __pyx_t_5numpy_double_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":727 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":765 * ctypedef npy_double float_t * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< @@ -1216,8 +1744,9 @@ typedef float __pyx_t_5scipy_6linalg_11cython_blas_s; * ctypedef double complex z */ typedef double __pyx_t_5scipy_6linalg_11cython_blas_d; +/* #### Code section: complex_type_declarations ### */ /* Declarations.proto */ -#if CYTHON_CCOMPLEX +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #ifdef __cplusplus typedef ::std::complex< float > __pyx_t_float_complex; #else @@ -1229,7 +1758,7 @@ typedef double __pyx_t_5scipy_6linalg_11cython_blas_d; static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); /* Declarations.proto */ -#if CYTHON_CCOMPLEX +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #ifdef __cplusplus typedef ::std::complex< double > __pyx_t_double_complex; #else @@ -1240,6 +1769,7 @@ static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(floa #endif static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); +/* #### Code section: type_declarations ### */ /*--- Type declarations ---*/ struct __pyx_array_obj; @@ -1247,7 +1777,7 @@ struct __pyx_MemviewEnum_obj; struct __pyx_memoryview_obj; struct __pyx_memoryviewslice_obj; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":729 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":767 * ctypedef npy_longdouble longdouble_t * * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< @@ -1256,7 +1786,7 @@ struct __pyx_memoryviewslice_obj; */ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":730 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":768 * * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< @@ -1265,7 +1795,7 @@ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; */ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":731 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":769 * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< @@ -1274,7 +1804,7 @@ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; */ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":733 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":771 * ctypedef npy_clongdouble clongdouble_t * * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< @@ -1282,9 +1812,14 @@ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; * cdef inline object PyArray_MultiIterNew1(a): */ typedef npy_cdouble __pyx_t_5numpy_complex_t; +struct __pyx_defaults; +typedef struct __pyx_defaults __pyx_defaults; +struct __pyx_defaults { + PyObject *__pyx_arg__fused_sigindex; +}; -/* "View.MemoryView":105 - * +/* "View.MemoryView":114 + * @cython.collection_type("sequence") * @cname("__pyx_array") * cdef class array: # <<<<<<<<<<<<<< * @@ -1308,7 +1843,7 @@ struct __pyx_array_obj { }; -/* "View.MemoryView":279 +/* "View.MemoryView":302 * * @cname('__pyx_MemviewEnum') * cdef class Enum(object): # <<<<<<<<<<<<<< @@ -1321,10 +1856,10 @@ struct __pyx_MemviewEnum_obj { }; -/* "View.MemoryView":330 +/* "View.MemoryView":337 * * @cname('__pyx_memoryview') - * cdef class memoryview(object): # <<<<<<<<<<<<<< + * cdef class memoryview: # <<<<<<<<<<<<<< * * cdef object obj */ @@ -1335,8 +1870,7 @@ struct __pyx_memoryview_obj { PyObject *_size; PyObject *_array_interface; PyThread_type_lock lock; - __pyx_atomic_int acquisition_count[2]; - __pyx_atomic_int *acquisition_count_aligned_p; + __pyx_atomic_int_type acquisition_count; Py_buffer view; int flags; int dtype_is_object; @@ -1344,8 +1878,8 @@ struct __pyx_memoryview_obj { }; -/* "View.MemoryView":965 - * +/* "View.MemoryView":952 + * @cython.collection_type("sequence") * @cname('__pyx_memoryviewslice') * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< * "Internal class for passing memoryview slices to Python" @@ -1361,8 +1895,8 @@ struct __pyx_memoryviewslice_obj { -/* "View.MemoryView":105 - * +/* "View.MemoryView":114 + * @cython.collection_type("sequence") * @cname("__pyx_array") * cdef class array: # <<<<<<<<<<<<<< * @@ -1375,10 +1909,10 @@ struct __pyx_vtabstruct_array { static struct __pyx_vtabstruct_array *__pyx_vtabptr_array; -/* "View.MemoryView":330 +/* "View.MemoryView":337 * * @cname('__pyx_memoryview') - * cdef class memoryview(object): # <<<<<<<<<<<<<< + * cdef class memoryview: # <<<<<<<<<<<<<< * * cdef object obj */ @@ -1391,12 +1925,13 @@ struct __pyx_vtabstruct_memoryview { PyObject *(*setitem_indexed)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); PyObject *(*convert_item_to_object)(struct __pyx_memoryview_obj *, char *); PyObject *(*assign_item_from_object)(struct __pyx_memoryview_obj *, char *, PyObject *); + PyObject *(*_get_base)(struct __pyx_memoryview_obj *); }; static struct __pyx_vtabstruct_memoryview *__pyx_vtabptr_memoryview; -/* "View.MemoryView":965 - * +/* "View.MemoryView":952 + * @cython.collection_type("sequence") * @cname('__pyx_memoryviewslice') * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< * "Internal class for passing memoryview slices to Python" @@ -1407,6 +1942,7 @@ struct __pyx_vtabstruct__memoryviewslice { struct __pyx_vtabstruct_memoryview __pyx_base; }; static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; +/* #### Code section: utility_code_proto ### */ /* --- Runtime support code (head) --- */ /* Refnanny.proto */ @@ -1415,11 +1951,11 @@ static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; #endif #if CYTHON_REFNANNY typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); void (*FinishContext)(void**); } __Pyx_RefNannyAPIStruct; static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; @@ -1429,28 +1965,40 @@ static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; #define __Pyx_RefNannySetupContext(name, acquire_gil)\ if (acquire_gil) {\ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ PyGILState_Release(__pyx_gilstate_save);\ } else {\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ } #else #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() #endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } #define __Pyx_RefNannyFinishContext()\ __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) #else #define __Pyx_RefNannyDeclarations #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() #define __Pyx_RefNannyFinishContext() #define __Pyx_INCREF(r) Py_INCREF(r) #define __Pyx_DECREF(r) Py_DECREF(r) @@ -1461,6 +2009,10 @@ static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; #define __Pyx_XGOTREF(r) #define __Pyx_XGIVEREF(r) #endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) #define __Pyx_XDECREF_SET(r, v) do {\ PyObject *tmp = (PyObject *) r;\ r = v; __Pyx_XDECREF(tmp);\ @@ -1472,6 +2024,57 @@ static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; #define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) #define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + /* PyObjectGetAttrStr.proto */ #if CYTHON_USE_TYPE_SLOTS static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); @@ -1479,20 +2082,227 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) #endif +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + /* GetBuiltinName.proto */ static PyObject *__Pyx_GetBuiltinName(PyObject *name); +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* fastcall.proto */ +#define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + /* RaiseDoubleKeywords.proto */ static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /* ParseKeywords.proto */ -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name); -/* RaiseArgTupleInvalid.proto */ -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + __Pyx__ArgTypeTest(obj, type, name, exact)) +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#if !CYTHON_VECTORCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif +#if !CYTHON_VECTORCALL +#if PY_VERSION_HEX >= 0x03080000 + #include "frameobject.h" +#if PY_VERSION_HEX >= 0x030b00a6 + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif + #define __Pxy_PyFrame_Initialize_Offsets() + #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus) +#else + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif +#endif +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectFastCall.proto */ +#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL) +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs); + +/* RaiseUnexpectedTypeError.proto */ +static int __Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj); + +/* GCCDiagnostics.proto */ +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* BuildPyUnicode.proto */ +static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, char* chars, int clength, + int prepend_sign, char padding_char); + +/* CIntToPyUnicode.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_int(int value, Py_ssize_t width, char padding_char, char format_char); + +/* CIntToPyUnicode.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_Py_ssize_t(Py_ssize_t value, Py_ssize_t width, char padding_char, char format_char); + +/* JoinPyUnicode.proto */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char); + +/* StrEquals.proto */ +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals +#else +#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals +#endif + +/* PyObjectFormatSimple.proto */ +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#elif PY_MAJOR_VERSION < 3 + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyString_CheckExact(s)) ? PyUnicode_FromEncodedObject(s, NULL, "strict") :\ + PyObject_Format(s, f)) +#elif CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\ + likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\ + PyObject_Format(s, f)) +#else + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#endif + +CYTHON_UNUSED static int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *); /*proto*/ +/* GetAttr.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* KeywordStringCheck.proto */ +static int __Pyx_CheckKeywordStrings(PyObject *kw, const char* function_name, int kw_allowed); + +/* DivInt[Py_ssize_t].proto */ +static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t); + +/* UnaryNegOverflows.proto */ +#define __Pyx_UNARY_NEG_WOULD_OVERFLOW(x)\ + (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x))) + +/* GetAttr3.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); /* PyDictVersioning.proto */ #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS @@ -1522,18 +2332,18 @@ static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UIN /* GetModuleGlobalName.proto */ #if CYTHON_USE_DICT_VERSIONS -#define __Pyx_GetModuleGlobalName(var, name) {\ +#define __Pyx_GetModuleGlobalName(var, name) do {\ static PY_UINT64_T __pyx_dict_version = 0;\ static PyObject *__pyx_dict_cached_value = NULL;\ (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} -#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ +} while(0) +#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\ PY_UINT64_T __pyx_dict_version;\ PyObject *__pyx_dict_cached_value;\ (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} +} while(0) static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); #else #define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) @@ -1541,75 +2351,154 @@ static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_ve static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); #endif -/* PyObjectCall.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +/* AssertionsEnabled.proto */ +#define __Pyx_init_assertions_enabled() +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define __pyx_assertions_enabled() (1) +#elif PY_VERSION_HEX < 0x03080000 || CYTHON_COMPILING_IN_PYPY || defined(Py_LIMITED_API) + #define __pyx_assertions_enabled() (!Py_OptimizeFlag) +#elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030900A6 + static int __pyx_assertions_enabled_flag; + #define __pyx_assertions_enabled() (__pyx_assertions_enabled_flag) + #undef __Pyx_init_assertions_enabled + static void __Pyx_init_assertions_enabled(void) { + __pyx_assertions_enabled_flag = ! _PyInterpreterState_GetConfig(__Pyx_PyThreadState_Current->interp)->optimization_level; + } #else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) + #define __pyx_assertions_enabled() (!Py_OptimizeFlag) #endif -/* PyObjectSetAttrStr.proto */ -#if CYTHON_USE_TYPE_SLOTS -#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL) -static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value); -#else -#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) -#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* RaiseNoneIterError.proto */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); + +/* ExtTypeTest.proto */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); #endif -/* PyFunctionFastCall.proto */ -#if CYTHON_FAST_PYCALL -#define __Pyx_PyFunction_FastCall(func, args, nargs)\ - __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); #else -#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) #endif -#define __Pyx_BUILD_ASSERT_EXPR(cond)\ - (sizeof(char [1 - 2*!(cond)]) - 1) -#ifndef Py_MEMBER_SIZE -#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); #endif - static size_t __pyx_pyframe_localsplus_offset = 0; - #include "frameobject.h" - #define __Pxy_PyFrame_Initialize_Offsets()\ - ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ - (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) - #define __Pyx_PyFrame_GetLocalsplus(frame)\ - (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); #endif -/* PyObjectCallMethO.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportDottedModule.proto */ +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple); +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple); #endif -/* PyObjectCallNoArg.proto */ +/* ssize_strlen.proto */ +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); + +/* FastTypeChecks.proto */ #if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); #else -#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL) +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) #endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) -/* PyCFunctionFastCall.proto */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +CYTHON_UNUSED static int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +/* ListCompAppend.proto */ +#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS +static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len)) { + Py_INCREF(x); + PyList_SET_ITEM(list, len, x); + __Pyx_SET_SIZE(list, len + 1); + return 0; + } + return PyList_Append(list, x); +} #else -#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) +#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) #endif -/* PyObjectCallOneArg.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); +/* PySequenceMultiply.proto */ +#define __Pyx_PySequence_Multiply_Left(mul, seq) __Pyx_PySequence_Multiply(seq, mul) +static CYTHON_INLINE PyObject* __Pyx_PySequence_Multiply(PyObject *seq, Py_ssize_t mul); -/* PyObjectCall2Args.proto */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); +/* SetItemInt.proto */ +#define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) :\ + __Pyx_SetItemInt_Generic(o, to_py_func(i), v))) +static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v); +static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, + int is_list, int wraparound, int boundscheck); -/* RaiseTooManyValuesToUnpack.proto */ -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); +/* RaiseUnboundLocalError.proto */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); -/* RaiseNeedMoreValuesToUnpack.proto */ -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); +/* DivInt[long].proto */ +static CYTHON_INLINE long __Pyx_div_long(long, long); + +/* PySequenceContains.proto */ +static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) { + int result = PySequence_Contains(seq, item); + return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); +} + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* HasAttr.proto */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); + +/* PyObjectSetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL) +static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value); +#else +#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) +#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) +#endif /* IterFinish.proto */ static CYTHON_INLINE int __Pyx_IterFinish(void); @@ -1634,45 +2523,6 @@ static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); #define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) #endif -/* PyThreadStateGet.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; -#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; -#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type -#else -#define __Pyx_PyThreadState_declare -#define __Pyx_PyThreadState_assign -#define __Pyx_PyErr_Occurred() PyErr_Occurred() -#endif - -/* PyErrFetchRestore.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) -#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) -#else -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#endif -#else -#define __Pyx_PyErr_Clear() PyErr_Clear() -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) -#endif - -/* RaiseException.proto */ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); - /* UnicodeAsUCS4.proto */ static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject*); @@ -1685,15 +2535,24 @@ static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject*); #endif static long __Pyx__PyObject_Ord(PyObject* c); -/* SetItemInt.proto */ -#define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) :\ - (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) :\ - __Pyx_SetItemInt_Generic(o, to_py_func(i), v))) -static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v); -static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, - int is_list, int wraparound, int boundscheck); +/* memoryview_get_from_buffer.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API || CYTHON_LIMITED_API >= 0x030b0000 +#define __Pyx_PyMemoryView_Get_itemsize(o) PyMemoryView_GET_BUFFER(o)->itemsize +#else + // can't get format like this unfortunately. It's unicode via getattr +static Py_ssize_t __Pyx_PyMemoryView_Get_itemsize(PyObject *obj); +#endif + +/* memoryview_get_from_buffer.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API || CYTHON_LIMITED_API >= 0x030b0000 +#define __Pyx_PyMemoryView_Get_ndim(o) PyMemoryView_GET_BUFFER(o)->ndim +#else + // can't get format like this unfortunately. It's unicode via getattr +static int __Pyx_PyMemoryView_Get_ndim(PyObject *obj); +#endif + +/* PyObjectCallNoArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); /* PyObjectGetMethod.proto */ static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); @@ -1701,9 +2560,6 @@ static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **me /* PyObjectCallMethod0.proto */ static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); -/* RaiseNoneIterError.proto */ -static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); - /* UnpackTupleError.proto */ static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); @@ -1725,27 +2581,50 @@ static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos, PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict); -/* GetItemInt.proto */ -#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ - (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ - __Pyx_GetItemInt_Generic(o, to_py_func(i)))) -#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ - (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ - (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck); +/* ListExtend.proto */ +static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) { +#if CYTHON_COMPILING_IN_CPYTHON + PyObject* none = _PyList_Extend((PyListObject*)L, v); + if (unlikely(!none)) + return -1; + Py_DECREF(none); + return 0; +#else + return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v); +#endif +} + +/* py_dict_values.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d); + +/* UnpackUnboundCMethod.proto */ +typedef struct { + PyObject *type; + PyObject **method_name; + PyCFunction func; + PyObject *method; + int flag; +} __Pyx_CachedCFunction; + +/* CallUnboundCMethod0.proto */ +static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self); +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CallUnboundCMethod0(cfunc, self)\ + (likely((cfunc)->func) ?\ + (likely((cfunc)->flag == METH_NOARGS) ? (*((cfunc)->func))(self, NULL) :\ + (PY_VERSION_HEX >= 0x030600B1 && likely((cfunc)->flag == METH_FASTCALL) ?\ + (PY_VERSION_HEX >= 0x030700A0 ?\ + (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0) :\ + (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0, NULL)) :\ + (PY_VERSION_HEX >= 0x030700A0 && (cfunc)->flag == (METH_FASTCALL | METH_KEYWORDS) ?\ + (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0, NULL) :\ + (likely((cfunc)->flag == (METH_VARARGS | METH_KEYWORDS)) ? ((*(PyCFunctionWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, __pyx_empty_tuple, NULL)) :\ + ((cfunc)->flag == METH_VARARGS ? (*((cfunc)->func))(self, __pyx_empty_tuple) :\ + __Pyx__CallUnboundCMethod0(cfunc, self)))))) :\ + __Pyx__CallUnboundCMethod0(cfunc, self)) +#else +#define __Pyx_CallUnboundCMethod0(cfunc, self) __Pyx__CallUnboundCMethod0(cfunc, self) +#endif /* ListAppend.proto */ #if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS @@ -1764,9 +2643,6 @@ static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { #define __Pyx_PyList_Append(L,x) PyList_Append(L,x) #endif -/* ExtTypeTest.proto */ -static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); - /* IsLittleEndian.proto */ static CYTHON_INLINE int __Pyx_Is_Little_Endian(void); @@ -1796,12 +2672,12 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) #endif -/* None.proto */ -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); - -/* None.proto */ +/* RaiseUnboundMemoryviewSliceNogil.proto */ static void __Pyx_RaiseUnboundMemoryviewSliceNogil(const char *varname); +/* ErrOccurredWithGIL.proto */ +static CYTHON_INLINE int __Pyx_ErrOccurredWithGIL(void); + #define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1) /* PyObjectFormatAndDecref.proto */ static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatSimpleAndDecref(PyObject* s, PyObject* f); @@ -1814,38 +2690,8 @@ static PyObject* __Pyx_PyObject_Format(PyObject* s, PyObject* f); #define __Pyx_PyObject_Format(s, f) PyObject_Format(s, f) #endif -/* IncludeStringH.proto */ -#include - -/* JoinPyUnicode.proto */ -static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, - Py_UCS4 max_char); - -/* MemviewSliceInit.proto */ -#define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d -#define __Pyx_MEMVIEW_DIRECT 1 -#define __Pyx_MEMVIEW_PTR 2 -#define __Pyx_MEMVIEW_FULL 4 -#define __Pyx_MEMVIEW_CONTIG 8 -#define __Pyx_MEMVIEW_STRIDED 16 -#define __Pyx_MEMVIEW_FOLLOW 32 -#define __Pyx_IS_C_CONTIG 1 -#define __Pyx_IS_F_CONTIG 2 -static int __Pyx_init_memviewslice( - struct __pyx_memoryview_obj *memview, - int ndim, - __Pyx_memviewslice *memviewslice, - int memview_is_new_reference); -static CYTHON_INLINE int __pyx_add_acquisition_count_locked( - __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); -static CYTHON_INLINE int __pyx_sub_acquisition_count_locked( - __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); -#define __pyx_get_slice_count_pointer(memview) (memview->acquisition_count_aligned_p) -#define __pyx_get_slice_count(memview) (*__pyx_get_slice_count_pointer(memview)) -#define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__) -#define __PYX_XDEC_MEMVIEW(slice, have_gil) __Pyx_XDEC_MEMVIEW(slice, have_gil, __LINE__) -static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int); -static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *, int, int); +/* PyObjectCall2Args.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); /* PyObjectCallMethod1.proto */ static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); @@ -1853,30 +2699,6 @@ static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name /* append.proto */ static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x); -/* ObjectGetItem.proto */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key); -#else -#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) -#endif - -/* ListCompAppend.proto */ -#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS -static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { - PyListObject* L = (PyListObject*) list; - Py_ssize_t len = Py_SIZE(list); - if (likely(L->allocated > len)) { - Py_INCREF(x); - PyList_SET_ITEM(list, len, x); - __Pyx_SET_SIZE(list, len + 1); - return 0; - } - return PyList_Append(list, x); -} -#else -#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) -#endif - /* PyIntBinop.proto */ #if !CYTHON_COMPILING_IN_PYPY static PyObject* __Pyx_PyInt_AddCObj(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); @@ -1915,194 +2737,134 @@ static CYTHON_INLINE int __Pyx_PyObject_SetSlice( PyObject** py_start, PyObject** py_stop, PyObject** py_slice, int has_cstart, int has_cstop, int wraparound); -/* GetTopmostException.proto */ -#if CYTHON_USE_EXC_INFO_STACK -static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr #endif -/* SaveResetException.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +/* PyObject_GenericGetAttr.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); #else -#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) -#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr #endif -/* PyErrExceptionMatches.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) -static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); -#else -#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) -#endif +/* IncludeStructmemberH.proto */ +#include -/* GetException.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) -static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#else -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); #endif -/* ArgTypeTest.proto */ -#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ - ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\ - __Pyx__ArgTypeTest(obj, type, name, exact)) -static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); - -/* BytesEquals.proto */ -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); - -/* UnicodeEquals.proto */ -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); - -/* StrEquals.proto */ -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals -#else -#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals +/* ValidateBasesTuple.proto */ +#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases); #endif -/* None.proto */ -static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t); - -/* UnaryNegOverflows.proto */ -#define UNARY_NEG_WOULD_OVERFLOW(x)\ - (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x))) - -static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ -static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *); /*proto*/ -/* GetAttr.proto */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); - -/* decode_c_string_utf16.proto */ -static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors) { - int byteorder = 0; - return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); -} -static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16LE(const char *s, Py_ssize_t size, const char *errors) { - int byteorder = -1; - return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); -} -static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16BE(const char *s, Py_ssize_t size, const char *errors) { - int byteorder = 1; - return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); -} +/* PyType_Ready.proto */ +CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t); -/* decode_c_string.proto */ -static CYTHON_INLINE PyObject* __Pyx_decode_c_string( - const char* cstring, Py_ssize_t start, Py_ssize_t stop, - const char* encoding, const char* errors, - PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)); +/* SetVTable.proto */ +static int __Pyx_SetVtable(PyTypeObject* typeptr , void* vtable); -/* GetAttr3.proto */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); +/* GetVTable.proto */ +static void* __Pyx_GetVtable(PyTypeObject *type); -/* SwapException.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#else -static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +/* MergeVTables.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_MergeVtables(PyTypeObject *type); #endif -/* Import.proto */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); - -/* FastTypeChecks.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); -#else -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) -#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +/* SetupReduce.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_setup_reduce(PyObject* type_obj); #endif -#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) -static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ -/* ListExtend.proto */ -static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject* none = _PyList_Extend((PyListObject*)L, v); - if (unlikely(!none)) - return -1; - Py_DECREF(none); - return 0; +/* TypeImport.proto */ +#ifndef __PYX_HAVE_RT_ImportType_proto_3_0_0 +#define __PYX_HAVE_RT_ImportType_proto_3_0_0 +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L +#include +#endif +#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || __cplusplus >= 201103L +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_0(s) alignof(s) #else - return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v); +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_0(s) sizeof(void*) +#endif +enum __Pyx_ImportType_CheckSize_3_0_0 { + __Pyx_ImportType_CheckSize_Error_3_0_0 = 0, + __Pyx_ImportType_CheckSize_Warn_3_0_0 = 1, + __Pyx_ImportType_CheckSize_Ignore_3_0_0 = 2 +}; +static PyTypeObject *__Pyx_ImportType_3_0_0(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_0 check_size); #endif -} -/* None.proto */ -static CYTHON_INLINE long __Pyx_div_long(long, long); +/* Py3UpdateBases.proto */ +static PyObject* __Pyx_PEP560_update_bases(PyObject *bases); -/* ImportFrom.proto */ -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); +/* CalculateMetaclass.proto */ +static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); -/* HasAttr.proto */ -static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); -/* PyObject_GenericGetAttrNoDict.proto */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +/* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); #else -#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); #endif -/* PyObject_GenericGetAttr.proto */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); +/* PyMethodNew.proto */ +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} #else -#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr + #define __Pyx_PyMethod_New PyMethod_New #endif -/* SetVTable.proto */ -static int __Pyx_SetVtable(PyObject *dict, void *vtable); - -/* PyObjectGetAttrStrNoError.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); - -/* SetupReduce.proto */ -static int __Pyx_setup_reduce(PyObject* type_obj); - -/* TypeImport.proto */ -#ifndef __PYX_HAVE_RT_ImportType_proto -#define __PYX_HAVE_RT_ImportType_proto -enum __Pyx_ImportType_CheckSize { - __Pyx_ImportType_CheckSize_Error = 0, - __Pyx_ImportType_CheckSize_Warn = 1, - __Pyx_ImportType_CheckSize_Ignore = 2 -}; -static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); #endif -/* CalculateMetaclass.proto */ -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); - -/* FetchCommonType.proto */ -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); - /* CythonFunctionShared.proto */ -#define __Pyx_CyFunction_USED 1 +#define __Pyx_CyFunction_USED #define __Pyx_CYFUNCTION_STATICMETHOD 0x01 #define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 #define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 #define __Pyx_CyFunction_GetClosure(f)\ (((__pyx_CyFunctionObject *) (f))->func_closure) -#define __Pyx_CyFunction_GetClassObj(f)\ - (((__pyx_CyFunctionObject *) (f))->func_classobj) +#if PY_VERSION_HEX < 0x030900B1 + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) #define __Pyx_CyFunction_Defaults(type, f)\ ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) #define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) typedef struct { +#if PY_VERSION_HEX < 0x030900B1 PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif #if PY_VERSION_HEX < 0x030500A0 PyObject *func_weakreflist; #endif @@ -2113,7 +2875,9 @@ typedef struct { PyObject *func_globals; PyObject *func_code; PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 PyObject *func_classobj; +#endif void *defaults; int defaults_pyobjects; size_t defaults_size; // used by FusedFunction for copying defaults @@ -2122,14 +2886,17 @@ typedef struct { PyObject *defaults_kwdict; PyObject *(*defaults_getter)(PyObject *); PyObject *func_annotations; + PyObject *func_is_coroutine; } __pyx_CyFunctionObject; -static PyTypeObject *__pyx_CyFunctionType = 0; -#define __Pyx_CyFunction_Check(obj) (__Pyx_TypeCheck(obj, __pyx_CyFunctionType)) +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_IsCyOrPyCFunction(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, int flags, PyObject* qualname, - PyObject *self, + PyObject *closure, PyObject *module, PyObject *globals, PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, size_t size, int pyobjects); @@ -2139,7 +2906,18 @@ static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, PyObject *dict); static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, PyObject *dict); -static int __pyx_CyFunction_init(void); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif /* CythonFunction.proto */ static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, @@ -2163,7 +2941,6 @@ static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, typedef struct { __pyx_CyFunctionObject func; PyObject *__signatures__; - PyObject *type; PyObject *self; } __pyx_FusedFunctionObject; static PyObject *__pyx_FusedFunction_New(PyMethodDef *ml, int flags, @@ -2171,10 +2948,19 @@ static PyObject *__pyx_FusedFunction_New(PyMethodDef *ml, int flags, PyObject *module, PyObject *globals, PyObject *code); static int __pyx_FusedFunction_clear(__pyx_FusedFunctionObject *self); -static PyTypeObject *__pyx_FusedFunctionType = NULL; -static int __pyx_FusedFunction_init(void); +static int __pyx_FusedFunction_init(PyObject *module); #define __Pyx_FusedFunction_USED +/* PyObjectLookupSpecial.proto */ +#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 0) +#define __Pyx_PyObject_LookupSpecial(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 1) +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error); +#else +#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n) +#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) +#endif + /* Py3ClassCreate.proto */ static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc); @@ -2189,6 +2975,7 @@ static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); #endif /* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API typedef struct { PyCodeObject* code_object; int code_line; @@ -2202,6 +2989,7 @@ static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); static PyCodeObject *__pyx_find_code_object(int code_line); static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif /* AddTraceback.proto */ static void __Pyx_AddTraceback(const char *funcname, int c_line, @@ -2238,9 +3026,6 @@ static int __pyx_slices_overlap(__Pyx_memviewslice *slice1, __Pyx_memviewslice *slice2, int ndim, size_t itemsize); -/* Capsule.proto */ -static CYTHON_INLINE PyObject *__pyx_capsule_create(void *p, const char *sig); - /* TypeInfoCompare.proto */ static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b); @@ -2270,11 +3055,6 @@ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_int /* ObjectToMemviewSlice.proto */ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_long(PyObject *, int writable_flag); -/* GCCDiagnostics.proto */ -#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) -#define __Pyx_HAS_GCC_DIAGNOSTIC -#endif - /* ObjectToMemviewSlice.proto */ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_float(PyObject *, int writable_flag); @@ -2304,7 +3084,7 @@ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_d #endif /* Arithmetic.proto */ -#if CYTHON_CCOMPLEX +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #define __Pyx_c_eq_float(a, b) ((a)==(b)) #define __Pyx_c_sum_float(a, b) ((a)+(b)) #define __Pyx_c_diff_float(a, b) ((a)-(b)) @@ -2342,7 +3122,7 @@ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_d #endif /* Arithmetic.proto */ -#if CYTHON_CCOMPLEX +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #define __Pyx_c_eq_double(a, b) ((a)==(b)) #define __Pyx_c_sum_double(a, b) ((a)+(b)) #define __Pyx_c_diff_double(a, b) ((a)-(b)) @@ -2386,6 +3166,31 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, size_t sizeof_dtype, int contig_flag, int dtype_is_object); +/* MemviewSliceInit.proto */ +#define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d +#define __Pyx_MEMVIEW_DIRECT 1 +#define __Pyx_MEMVIEW_PTR 2 +#define __Pyx_MEMVIEW_FULL 4 +#define __Pyx_MEMVIEW_CONTIG 8 +#define __Pyx_MEMVIEW_STRIDED 16 +#define __Pyx_MEMVIEW_FOLLOW 32 +#define __Pyx_IS_C_CONTIG 1 +#define __Pyx_IS_F_CONTIG 2 +static int __Pyx_init_memviewslice( + struct __pyx_memoryview_obj *memview, + int ndim, + __Pyx_memviewslice *memviewslice, + int memview_is_new_reference); +static CYTHON_INLINE int __pyx_add_acquisition_count_locked( + __pyx_atomic_int_type *acquisition_count, PyThread_type_lock lock); +static CYTHON_INLINE int __pyx_sub_acquisition_count_locked( + __pyx_atomic_int_type *acquisition_count, PyThread_type_lock lock); +#define __pyx_get_slice_count_pointer(memview) (&memview->acquisition_count) +#define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__) +#define __PYX_XCLEAR_MEMVIEW(slice, have_gil) __Pyx_XCLEAR_MEMVIEW(slice, have_gil, __LINE__) +static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int); +static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *, int, int); + /* CIntFromPy.proto */ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); @@ -2405,18 +3210,35 @@ static CYTHON_INLINE int __Pyx_BytesContains(PyObject* bytes, char character); static PyObject *__pyx_numpy_ndarray = NULL; static PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void); +/* None.proto */ +#include + /* CIntFromPy.proto */ static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *); +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif + /* CheckBinaryVersion.proto */ static int __Pyx_check_binary_version(void); /* FunctionImport.proto */ -static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig); +static int __Pyx_ImportFunction_3_0_0(PyObject *module, const char *funcname, void (**f)(void), const char *sig); /* InitStrings.proto */ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); +/* #### Code section: module_declarations ### */ static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self); /* proto*/ static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto*/ static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj); /* proto*/ @@ -2425,62 +3247,50 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto*/ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryview__get_base(struct __pyx_memoryview_obj *__pyx_v_self); /* proto*/ static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryviewslice__get_base(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self); /* proto*/ -/* Module declarations from 'cython.view' */ - -/* Module declarations from 'cython' */ +/* Module declarations from "cython.view" */ -/* Module declarations from 'libc.math' */ +/* Module declarations from "cython.dataclasses" */ -/* Module declarations from 'cpython.buffer' */ +/* Module declarations from "cython" */ -/* Module declarations from 'libc.string' */ +/* Module declarations from "libc.math" */ -/* Module declarations from 'libc.stdio' */ +/* Module declarations from "libc.string" */ -/* Module declarations from '__builtin__' */ +/* Module declarations from "libc.stdio" */ -/* Module declarations from 'cpython.type' */ -static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; +/* Module declarations from "__builtin__" */ -/* Module declarations from 'cpython' */ +/* Module declarations from "cpython.type" */ -/* Module declarations from 'cpython.object' */ +/* Module declarations from "cpython" */ -/* Module declarations from 'cpython.ref' */ +/* Module declarations from "cpython.object" */ -/* Module declarations from 'cpython.mem' */ +/* Module declarations from "cpython.ref" */ -/* Module declarations from 'numpy' */ +/* Module declarations from "numpy" */ -/* Module declarations from 'numpy' */ -static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; -static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; -static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; -static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; -static PyTypeObject *__pyx_ptype_5numpy_generic = 0; -static PyTypeObject *__pyx_ptype_5numpy_number = 0; -static PyTypeObject *__pyx_ptype_5numpy_integer = 0; -static PyTypeObject *__pyx_ptype_5numpy_signedinteger = 0; -static PyTypeObject *__pyx_ptype_5numpy_unsignedinteger = 0; -static PyTypeObject *__pyx_ptype_5numpy_inexact = 0; -static PyTypeObject *__pyx_ptype_5numpy_floating = 0; -static PyTypeObject *__pyx_ptype_5numpy_complexfloating = 0; -static PyTypeObject *__pyx_ptype_5numpy_flexible = 0; -static PyTypeObject *__pyx_ptype_5numpy_character = 0; -static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; +/* Module declarations from "numpy" */ -/* Module declarations from 'scipy.linalg.cython_blas' */ +/* Module declarations from "scipy.linalg.cython_blas" */ static __pyx_t_5scipy_6linalg_11cython_blas_d (*__pyx_f_5scipy_6linalg_11cython_blas_ddot)(int *, __pyx_t_5scipy_6linalg_11cython_blas_d *, int *, __pyx_t_5scipy_6linalg_11cython_blas_d *, int *); /*proto*/ static __pyx_t_5scipy_6linalg_11cython_blas_s (*__pyx_f_5scipy_6linalg_11cython_blas_sdot)(int *, __pyx_t_5scipy_6linalg_11cython_blas_s *, int *, __pyx_t_5scipy_6linalg_11cython_blas_s *, int *); /*proto*/ -/* Module declarations from 'cornac.models.efm.recom_efm' */ -static PyTypeObject *__pyx_array_type = 0; -static PyTypeObject *__pyx_MemviewEnum_type = 0; -static PyTypeObject *__pyx_memoryview_type = 0; -static PyTypeObject *__pyx_memoryviewslice_type = 0; +/* Module declarations from "cornac.models.efm.recom_efm" */ +static PyObject *__pyx_collections_abc_Sequence = 0; static PyObject *generic = 0; static PyObject *strided = 0; static PyObject *indirect = 0; @@ -2490,12 +3300,12 @@ static int __pyx_memoryview_thread_locks_used; static PyThread_type_lock __pyx_memoryview_thread_locks[8]; static float __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(int, float *, int, float *, int); /*proto*/ static double __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(int, double *, int, double *, int); /*proto*/ +static int __pyx_array_allocate_buffer(struct __pyx_array_obj *); /*proto*/ static struct __pyx_array_obj *__pyx_array_new(PyObject *, Py_ssize_t, char *, char *, char *); /*proto*/ -static void *__pyx_align_pointer(void *, size_t); /*proto*/ static PyObject *__pyx_memoryview_new(PyObject *, int, int, __Pyx_TypeInfo *); /*proto*/ static CYTHON_INLINE int __pyx_memoryview_check(PyObject *); /*proto*/ static PyObject *_unellipsify(PyObject *, int); /*proto*/ -static PyObject *assert_direct_dimensions(Py_ssize_t *, int); /*proto*/ +static int assert_direct_dimensions(Py_ssize_t *, int); /*proto*/ static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *, PyObject *); /*proto*/ static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int, int); /*proto*/ static char *__pyx_pybuffer_index(Py_buffer *, char *, Py_ssize_t, Py_ssize_t); /*proto*/ @@ -2513,8 +3323,9 @@ static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *, int); /* static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *, Py_ssize_t *, Py_ssize_t, int, char); /*proto*/ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *, __Pyx_memviewslice *, char, int); /*proto*/ static int __pyx_memoryview_err_extents(int, Py_ssize_t, Py_ssize_t); /*proto*/ -static int __pyx_memoryview_err_dim(PyObject *, char *, int); /*proto*/ -static int __pyx_memoryview_err(PyObject *, char *); /*proto*/ +static int __pyx_memoryview_err_dim(PyObject *, PyObject *, int); /*proto*/ +static int __pyx_memoryview_err(PyObject *, PyObject *); /*proto*/ +static int __pyx_memoryview_err_no_memory(void); /*proto*/ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *, int, int); /*proto*/ static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *, int, int, int); /*proto*/ @@ -2523,28 +3334,34 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *, Py_ssize_t *, Py_ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *, int, size_t, void *, int); /*proto*/ static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/ static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *, PyObject *); /*proto*/ +/* #### Code section: typeinfo ### */ static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t = { "float32_t", NULL, sizeof(__pyx_t_5numpy_float32_t), { 0 }, 0, 'R', 0, 0 }; static __Pyx_TypeInfo __Pyx_TypeInfo_float = { "float", NULL, sizeof(float), { 0 }, 0, 'R', 0, 0 }; static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 0 }, 0, 'R', 0, 0 }; -static __Pyx_TypeInfo __Pyx_TypeInfo_short = { "short", NULL, sizeof(short), { 0 }, 0, IS_UNSIGNED(short) ? 'U' : 'I', IS_UNSIGNED(short), 0 }; -static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, IS_UNSIGNED(int) ? 'U' : 'I', IS_UNSIGNED(int), 0 }; -static __Pyx_TypeInfo __Pyx_TypeInfo_long = { "long", NULL, sizeof(long), { 0 }, 0, IS_UNSIGNED(long) ? 'U' : 'I', IS_UNSIGNED(long), 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_short = { "short", NULL, sizeof(short), { 0 }, 0, __PYX_IS_UNSIGNED(short) ? 'U' : 'I', __PYX_IS_UNSIGNED(short), 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, __PYX_IS_UNSIGNED(int) ? 'U' : 'I', __PYX_IS_UNSIGNED(int), 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_long = { "long", NULL, sizeof(long), { 0 }, 0, __PYX_IS_UNSIGNED(long) ? 'U' : 'I', __PYX_IS_UNSIGNED(long), 0 }; +/* #### Code section: before_global_var ### */ #define __Pyx_MODULE_NAME "cornac.models.efm.recom_efm" extern int __pyx_module_is_main_cornac__models__efm__recom_efm; int __pyx_module_is_main_cornac__models__efm__recom_efm = 0; -/* Implementation of 'cornac.models.efm.recom_efm' */ +/* Implementation of "cornac.models.efm.recom_efm" */ +/* #### Code section: global_var ### */ static PyObject *__pyx_builtin_TypeError; +static PyObject *__pyx_builtin_ValueError; static PyObject *__pyx_builtin_range; static PyObject *__pyx_builtin_print; -static PyObject *__pyx_builtin_max; -static PyObject *__pyx_builtin_ImportError; -static PyObject *__pyx_builtin_ValueError; +static PyObject *__pyx_builtin___import__; static PyObject *__pyx_builtin_MemoryError; static PyObject *__pyx_builtin_enumerate; +static PyObject *__pyx_builtin_AssertionError; static PyObject *__pyx_builtin_Ellipsis; static PyObject *__pyx_builtin_id; static PyObject *__pyx_builtin_IndexError; +static PyObject *__pyx_builtin_ImportError; +/* #### Code section: string_decls ### */ +static const char __pyx_k_[] = ": "; static const char __pyx_k_A[] = "A"; static const char __pyx_k_O[] = "O"; static const char __pyx_k_T[] = "T"; @@ -2563,31 +3380,38 @@ static const char __pyx_k_H1[] = "H1"; static const char __pyx_k_H2[] = "H2"; static const char __pyx_k_U1[] = "U1"; static const char __pyx_k_U2[] = "U2"; -static const char __pyx_k__6[] = "()"; -static const char __pyx_k__7[] = "|"; +static const char __pyx_k__2[] = "."; +static const char __pyx_k__3[] = "*"; +static const char __pyx_k__6[] = "'"; +static const char __pyx_k__7[] = ")"; +static const char __pyx_k_gc[] = "gc"; static const char __pyx_k_id[] = "id"; static const char __pyx_k_np[] = "np"; static const char __pyx_k_sp[] = "sp"; static const char __pyx_k_EFM[] = "EFM"; static const char __pyx_k_X_2[] = "X_"; -static const char __pyx_k__13[] = ")"; -static const char __pyx_k__34[] = "*"; +static const char __pyx_k__16[] = "()"; +static const char __pyx_k__17[] = "|"; static const char __pyx_k__45[] = "_"; +static const char __pyx_k__58[] = "?"; +static const char __pyx_k_abc[] = "abc"; static const char __pyx_k_aid[] = "aid"; +static const char __pyx_k_and[] = " and "; static const char __pyx_k_doc[] = "__doc__"; static const char __pyx_k_dot[] = "dot"; static const char __pyx_k_eps[] = "eps"; static const char __pyx_k_exp[] = "exp"; static const char __pyx_k_fit[] = "fit"; static const char __pyx_k_get[] = "get"; +static const char __pyx_k_got[] = " (got "; static const char __pyx_k_idx[] = "idx"; static const char __pyx_k_iid[] = "iid"; static const char __pyx_k_int[] = "int"; -static const char __pyx_k_max[] = "max"; static const char __pyx_k_min[] = "min"; static const char __pyx_k_new[] = "__new__"; static const char __pyx_k_obj[] = "obj"; static const char __pyx_k_rng[] = "rng"; +static const char __pyx_k_sys[] = "sys"; static const char __pyx_k_tup[] = "tup"; static const char __pyx_k_uid[] = "uid"; static const char __pyx_k_args[] = "args"; @@ -2611,12 +3435,14 @@ static const char __pyx_k_rank[] = "rank"; static const char __pyx_k_seed[] = "seed"; static const char __pyx_k_self[] = "self"; static const char __pyx_k_size[] = "size"; +static const char __pyx_k_spec[] = "__spec__"; static const char __pyx_k_sqrt[] = "sqrt"; static const char __pyx_k_step[] = "step"; static const char __pyx_k_stop[] = "stop"; static const char __pyx_k_test[] = "__test__"; static const char __pyx_k_ASCII[] = "ASCII"; static const char __pyx_k_alpha[] = "alpha"; +static const char __pyx_k_array[] = "array"; static const char __pyx_k_class[] = "__class__"; static const char __pyx_k_count[] = "count"; static const char __pyx_k_dtype[] = "dtype"; @@ -2624,16 +3450,20 @@ static const char __pyx_k_empty[] = "empty"; static const char __pyx_k_error[] = "error"; static const char __pyx_k_flags[] = "flags"; static const char __pyx_k_float[] = "float"; +static const char __pyx_k_index[] = "index"; +static const char __pyx_k_int32[] = "int32"; static const char __pyx_k_items[] = "items"; static const char __pyx_k_numpy[] = "numpy"; static const char __pyx_k_print[] = "print"; static const char __pyx_k_range[] = "range"; +static const char __pyx_k_scipy[] = "scipy"; static const char __pyx_k_score[] = "score"; static const char __pyx_k_shape[] = "shape"; static const char __pyx_k_short[] = "short"; static const char __pyx_k_split[] = "split"; static const char __pyx_k_start[] = "start"; static const char __pyx_k_strip[] = "strip"; +static const char __pyx_k_super[] = "super"; static const char __pyx_k_tocsc[] = "tocsc"; static const char __pyx_k_utils[] = "utils"; static const char __pyx_k_A_iids[] = "A_iids"; @@ -2646,6 +3476,7 @@ static const char __pyx_k_append[] = "append"; static const char __pyx_k_arange[] = "arange"; static const char __pyx_k_astype[] = "astype"; static const char __pyx_k_double[] = "double"; +static const char __pyx_k_enable[] = "enable"; static const char __pyx_k_encode[] = "encode"; static const char __pyx_k_format[] = "format"; static const char __pyx_k_import[] = "__import__"; @@ -2659,6 +3490,7 @@ static const char __pyx_k_pickle[] = "pickle"; static const char __pyx_k_rating[] = "rating"; static const char __pyx_k_reduce[] = "__reduce__"; static const char __pyx_k_repeat[] = "repeat"; +static const char __pyx_k_sparse[] = "sparse"; static const char __pyx_k_struct[] = "struct"; static const char __pyx_k_tup_id[] = "tup_id"; static const char __pyx_k_unpack[] = "unpack"; @@ -2668,6 +3500,7 @@ static const char __pyx_k_Counter[] = "Counter"; static const char __pyx_k_EFM_fit[] = "EFM.fit"; static const char __pyx_k_argsort[] = "argsort"; static const char __pyx_k_asarray[] = "asarray"; +static const char __pyx_k_disable[] = "disable"; static const char __pyx_k_ediff1d[] = "ediff1d"; static const char __pyx_k_fit_efm[] = "_fit_efm"; static const char __pyx_k_flatten[] = "flatten"; @@ -2688,6 +3521,7 @@ static const char __pyx_k_val_set[] = "val_set"; static const char __pyx_k_verbose[] = "verbose"; static const char __pyx_k_EFM_rank[] = "EFM.rank"; static const char __pyx_k_Ellipsis[] = "Ellipsis"; +static const char __pyx_k_Sequence[] = "Sequence"; static const char __pyx_k_data_set[] = "data_set"; static const char __pyx_k_defaults[] = "defaults"; static const char __pyx_k_getstate[] = "__getstate__"; @@ -2701,6 +3535,8 @@ static const char __pyx_k_lambda_y[] = "lambda_y"; static const char __pyx_k_max_iter[] = "max_iter"; static const char __pyx_k_pyx_type[] = "__pyx_type"; static const char __pyx_k_qualname[] = "__qualname__"; +static const char __pyx_k_register[] = "register"; +static const char __pyx_k_set_name[] = "__set_name__"; static const char __pyx_k_setstate[] = "__setstate__"; static const char __pyx_k_uir_iter[] = "uir_iter"; static const char __pyx_k_user_idx[] = "user_idx"; @@ -2711,6 +3547,7 @@ static const char __pyx_k_cpu_count[] = "cpu_count"; static const char __pyx_k_enumerate[] = "enumerate"; static const char __pyx_k_exception[] = "exception"; static const char __pyx_k_float_int[] = "float|int"; +static const char __pyx_k_isenabled[] = "isenabled"; static const char __pyx_k_item_rank[] = "item_rank"; static const char __pyx_k_metaclass[] = "__metaclass__"; static const char __pyx_k_n_aspects[] = "n_aspects"; @@ -2750,15 +3587,19 @@ static const char __pyx_k_init_params[] = "init_params"; static const char __pyx_k_is_unk_item[] = "is_unk_item"; static const char __pyx_k_is_unk_user[] = "is_unk_user"; static const char __pyx_k_item_scores[] = "item_scores"; +static const char __pyx_k_mro_entries[] = "__mro_entries__"; static const char __pyx_k_num_aspects[] = "num_aspects"; static const char __pyx_k_num_threads[] = "num_threads"; static const char __pyx_k_recommender[] = "recommender"; +static const char __pyx_k_total_items[] = "total_items"; static const char __pyx_k_EFM__fit_efm[] = "EFM._fit_efm"; static const char __pyx_k_H1_numerator[] = "H1_numerator"; static const char __pyx_k_H2_numerator[] = "H2_numerator"; static const char __pyx_k_U1_numerator[] = "U1_numerator"; static const char __pyx_k_U2_numerator[] = "U2_numerator"; static const char __pyx_k_double_short[] = "double|short"; +static const char __pyx_k_initializing[] = "_initializing"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; static const char __pyx_k_item_aspects[] = "item_aspects"; static const char __pyx_k_item_indices[] = "item_indices"; static const char __pyx_k_most_cared_X[] = "most_cared_X_"; @@ -2767,32 +3608,37 @@ static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; static const char __pyx_k_random_state[] = "random_state"; static const char __pyx_k_rating_scale[] = "rating_scale"; static const char __pyx_k_scipy_sparse[] = "scipy.sparse"; -static const char __pyx_k_stringsource[] = "stringsource"; +static const char __pyx_k_stringsource[] = ""; static const char __pyx_k_user_aspects[] = "user_aspects"; static const char __pyx_k_utils_common[] = "utils.common"; +static const char __pyx_k_version_info[] = "version_info"; static const char __pyx_k_A_item_counts[] = "A_item_counts"; static const char __pyx_k_A_user_counts[] = "A_user_counts"; static const char __pyx_k_V_denominator[] = "V_denominator"; static const char __pyx_k_X_user_counts[] = "X_user_counts"; static const char __pyx_k_Y_item_counts[] = "Y_item_counts"; -static const char __pyx_k_assume_unique[] = "assume_unique"; static const char __pyx_k_avg_sentiment[] = "avg_sentiment"; +static const char __pyx_k_class_getitem[] = "__class_getitem__"; +static const char __pyx_k_init_subclass[] = "__init_subclass__"; static const char __pyx_k_map_aspect_id[] = "map_aspect_id"; -static const char __pyx_k_pyx_getbuffer[] = "__pyx_getbuffer"; static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; +static const char __pyx_k_AssertionError[] = "AssertionError"; static const char __pyx_k_H1_denominator[] = "H1_denominator"; static const char __pyx_k_H2_denominator[] = "H2_denominator"; static const char __pyx_k_ScoreException[] = "ScoreException"; static const char __pyx_k_U1_denominator[] = "U1_denominator"; static const char __pyx_k_U2_denominator[] = "U2_denominator"; static const char __pyx_k_build_matrices[] = "_build_matrices"; +static const char __pyx_k_fused_sigindex[] = "_fused_sigindex"; static const char __pyx_k_item_sentiment[] = "item_sentiment"; static const char __pyx_k_quality_scores[] = "quality_scores"; static const char __pyx_k_user_sentiment[] = "user_sentiment"; static const char __pyx_k_View_MemoryView[] = "View.MemoryView"; static const char __pyx_k_X_aspect_counts[] = "X_aspect_counts"; static const char __pyx_k_Y_aspect_counts[] = "Y_aspect_counts"; +static const char __pyx_k_all_item_scores[] = "all_item_scores"; static const char __pyx_k_allocate_buffer[] = "allocate_buffer"; +static const char __pyx_k_collections_abc[] = "collections.abc"; static const char __pyx_k_dtype_is_object[] = "dtype_is_object"; static const char __pyx_k_explicit_scores[] = "explicit_scores"; static const char __pyx_k_multiprocessing[] = "multiprocessing"; @@ -2802,8 +3648,10 @@ static const char __pyx_k_total_sentiment[] = "total_sentiment"; static const char __pyx_k_attention_scores[] = "attention_scores"; static const char __pyx_k_utils_init_utils[] = "utils.init_utils"; static const char __pyx_k_item_aspect_count[] = "item_aspect_count"; +static const char __pyx_k_known_item_scores[] = "known_item_scores"; static const char __pyx_k_pyx_unpickle_Enum[] = "__pyx_unpickle_Enum"; static const char __pyx_k_user_aspect_count[] = "user_aspect_count"; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; static const char __pyx_k_num_latent_factors[] = "num_latent_factors"; static const char __pyx_k_sentiment_polarity[] = "sentiment_polarity"; @@ -2811,24 +3659,27 @@ static const char __pyx_k_strided_and_direct[] = ""; static const char __pyx_k_EFM__build_matrices[] = "EFM._build_matrices"; static const char __pyx_k_num_explicit_factors[] = "num_explicit_factors"; static const char __pyx_k_strided_and_indirect[] = ""; +static const char __pyx_k_Invalid_shape_in_axis[] = "Invalid shape in axis "; static const char __pyx_k_Optimization_finished[] = "Optimization finished!"; static const char __pyx_k_compute_quality_score[] = "_compute_quality_score"; static const char __pyx_k_contiguous_and_direct[] = ""; +static const char __pyx_k_Cannot_index_with_type[] = "Cannot index with type '"; static const char __pyx_k_MemoryView_of_r_object[] = ""; static const char __pyx_k_num_most_cared_aspects[] = "num_most_cared_aspects"; static const char __pyx_k_MemoryView_of_r_at_0x_x[] = ""; static const char __pyx_k_compute_attention_score[] = "_compute_attention_score"; static const char __pyx_k_contiguous_and_indirect[] = ""; -static const char __pyx_k_Cannot_index_with_type_s[] = "Cannot index with type '%s'"; -static const char __pyx_k_Invalid_shape_in_axis_d_d[] = "Invalid shape in axis %d: %d."; +static const char __pyx_k_Dimension_d_is_not_direct[] = "Dimension %d is not direct"; static const char __pyx_k_sentiment_tup_ids_by_item[] = "sentiment_tup_ids_by_item"; static const char __pyx_k_sentiment_tup_ids_by_user[] = "sentiment_tup_ids_by_user"; static const char __pyx_k_total_sentiment_by_aspect[] = "total_sentiment_by_aspect"; static const char __pyx_k_EFM__compute_quality_score[] = "EFM._compute_quality_score"; +static const char __pyx_k_Index_out_of_bounds_axis_d[] = "Index out of bounds (axis %d)"; static const char __pyx_k_most_cared_aspects_indices[] = "most_cared_aspects_indices"; static const char __pyx_k_use_item_aspect_popularity[] = "use_item_aspect_popularity"; static const char __pyx_k_Building_matrices_completed[] = "Building matrices completed!"; static const char __pyx_k_No_matching_signature_found[] = "No matching signature found"; +static const char __pyx_k_Step_may_not_be_zero_axis_d[] = "Step may not be zero (axis %d)"; static const char __pyx_k_cornac_models_efm_recom_efm[] = "cornac.models.efm.recom_efm"; static const char __pyx_k_itemsize_0_for_cython_array[] = "itemsize <= 0 for cython.array"; static const char __pyx_k_EFM__compute_attention_score[] = "EFM._compute_attention_score"; @@ -2837,357 +3688,27 @@ static const char __pyx_k_strided_and_direct_or_indirect[] = "__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_4type_type); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_dtype); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_flatiter); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_broadcast); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_ndarray); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_generic); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_number); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_integer); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_signedinteger); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_unsignedinteger); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_inexact); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_floating); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_complexfloating); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_flexible); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_character); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_ufunc); + Py_CLEAR(clear_module_state->__pyx_array_type); + Py_CLEAR(clear_module_state->__pyx_type___pyx_array); + Py_CLEAR(clear_module_state->__pyx_MemviewEnum_type); + Py_CLEAR(clear_module_state->__pyx_type___pyx_MemviewEnum); + Py_CLEAR(clear_module_state->__pyx_memoryview_type); + Py_CLEAR(clear_module_state->__pyx_type___pyx_memoryview); + Py_CLEAR(clear_module_state->__pyx_memoryviewslice_type); + Py_CLEAR(clear_module_state->__pyx_type___pyx_memoryviewslice); + Py_CLEAR(clear_module_state->__pyx_kp_u_); + Py_CLEAR(clear_module_state->__pyx_n_s_A); + Py_CLEAR(clear_module_state->__pyx_n_s_ASCII); + Py_CLEAR(clear_module_state->__pyx_n_s_A_iids); + Py_CLEAR(clear_module_state->__pyx_n_s_A_item_counts); + Py_CLEAR(clear_module_state->__pyx_n_s_A_uids); + Py_CLEAR(clear_module_state->__pyx_n_s_A_user_counts); + Py_CLEAR(clear_module_state->__pyx_kp_s_All_dimensions_preceding_dimensi); + Py_CLEAR(clear_module_state->__pyx_n_s_AssertionError); + Py_CLEAR(clear_module_state->__pyx_kp_s_Buffer_view_does_not_expose_stri); + Py_CLEAR(clear_module_state->__pyx_kp_u_Building_matrices_completed); + Py_CLEAR(clear_module_state->__pyx_kp_s_Can_only_create_a_buffer_that_is); + Py_CLEAR(clear_module_state->__pyx_kp_u_Can_t_make_score_prediction_for); + Py_CLEAR(clear_module_state->__pyx_kp_u_Can_t_make_score_prediction_for_2); + Py_CLEAR(clear_module_state->__pyx_kp_s_Cannot_assign_to_read_only_memor); + Py_CLEAR(clear_module_state->__pyx_kp_s_Cannot_create_writable_memory_vi); + Py_CLEAR(clear_module_state->__pyx_kp_u_Cannot_index_with_type); + Py_CLEAR(clear_module_state->__pyx_kp_s_Cannot_transpose_memoryview_with); + Py_CLEAR(clear_module_state->__pyx_n_s_Counter); + Py_CLEAR(clear_module_state->__pyx_kp_s_Dimension_d_is_not_direct); + Py_CLEAR(clear_module_state->__pyx_n_s_EFM); + Py_CLEAR(clear_module_state->__pyx_n_u_EFM); + Py_CLEAR(clear_module_state->__pyx_n_s_EFM___init); + Py_CLEAR(clear_module_state->__pyx_n_s_EFM__build_matrices); + Py_CLEAR(clear_module_state->__pyx_n_s_EFM__compute_attention_score); + Py_CLEAR(clear_module_state->__pyx_n_s_EFM__compute_quality_score); + Py_CLEAR(clear_module_state->__pyx_n_s_EFM__fit_efm); + Py_CLEAR(clear_module_state->__pyx_n_s_EFM__init); + Py_CLEAR(clear_module_state->__pyx_n_s_EFM_fit); + Py_CLEAR(clear_module_state->__pyx_n_s_EFM_rank); + Py_CLEAR(clear_module_state->__pyx_n_s_EFM_score); + Py_CLEAR(clear_module_state->__pyx_n_s_Ellipsis); + Py_CLEAR(clear_module_state->__pyx_kp_s_Empty_shape_tuple_for_cython_arr); + Py_CLEAR(clear_module_state->__pyx_kp_s_Expected_at_least_d_argument_s_g); + Py_CLEAR(clear_module_state->__pyx_kp_s_Explict_Factor_Models_Parameters); + Py_CLEAR(clear_module_state->__pyx_kp_s_Function_call_with_ambiguous_arg); + Py_CLEAR(clear_module_state->__pyx_n_s_H1); + Py_CLEAR(clear_module_state->__pyx_n_u_H1); + Py_CLEAR(clear_module_state->__pyx_n_s_H1_denominator); + Py_CLEAR(clear_module_state->__pyx_n_s_H1_numerator); + Py_CLEAR(clear_module_state->__pyx_n_s_H2); + Py_CLEAR(clear_module_state->__pyx_n_u_H2); + Py_CLEAR(clear_module_state->__pyx_n_s_H2_denominator); + Py_CLEAR(clear_module_state->__pyx_n_s_H2_numerator); + Py_CLEAR(clear_module_state->__pyx_n_s_ImportError); + Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0); + Py_CLEAR(clear_module_state->__pyx_n_s_IndexError); + Py_CLEAR(clear_module_state->__pyx_kp_s_Index_out_of_bounds_axis_d); + Py_CLEAR(clear_module_state->__pyx_kp_s_Indirect_dimensions_not_supporte); + Py_CLEAR(clear_module_state->__pyx_kp_u_Invalid_mode_expected_c_or_fortr); + Py_CLEAR(clear_module_state->__pyx_kp_u_Invalid_shape_in_axis); + Py_CLEAR(clear_module_state->__pyx_n_s_MemoryError); + Py_CLEAR(clear_module_state->__pyx_kp_s_MemoryView_of_r_at_0x_x); + Py_CLEAR(clear_module_state->__pyx_kp_s_MemoryView_of_r_object); + Py_CLEAR(clear_module_state->__pyx_kp_s_No_matching_signature_found); + Py_CLEAR(clear_module_state->__pyx_n_b_O); + Py_CLEAR(clear_module_state->__pyx_kp_u_Optimization_finished); + Py_CLEAR(clear_module_state->__pyx_n_s_OrderedDict); + Py_CLEAR(clear_module_state->__pyx_kp_u_Out_of_bounds_on_buffer_access_a); + Py_CLEAR(clear_module_state->__pyx_n_s_PickleError); + Py_CLEAR(clear_module_state->__pyx_n_s_Recommender); + Py_CLEAR(clear_module_state->__pyx_n_s_ScoreException); + Py_CLEAR(clear_module_state->__pyx_n_s_Sequence); + Py_CLEAR(clear_module_state->__pyx_kp_s_Step_may_not_be_zero_axis_d); + Py_CLEAR(clear_module_state->__pyx_n_s_T); + Py_CLEAR(clear_module_state->__pyx_n_s_TypeError); + Py_CLEAR(clear_module_state->__pyx_n_s_U1); + Py_CLEAR(clear_module_state->__pyx_n_u_U1); + Py_CLEAR(clear_module_state->__pyx_n_s_U1_denominator); + Py_CLEAR(clear_module_state->__pyx_n_s_U1_numerator); + Py_CLEAR(clear_module_state->__pyx_n_s_U2); + Py_CLEAR(clear_module_state->__pyx_n_u_U2); + Py_CLEAR(clear_module_state->__pyx_n_s_U2_denominator); + Py_CLEAR(clear_module_state->__pyx_n_s_U2_numerator); + Py_CLEAR(clear_module_state->__pyx_kp_s_Unable_to_convert_item_to_object); + Py_CLEAR(clear_module_state->__pyx_n_s_V); + Py_CLEAR(clear_module_state->__pyx_n_u_V); + Py_CLEAR(clear_module_state->__pyx_n_s_V_denominator); + Py_CLEAR(clear_module_state->__pyx_n_s_V_numerator); + Py_CLEAR(clear_module_state->__pyx_n_s_ValueError); + Py_CLEAR(clear_module_state->__pyx_n_s_View_MemoryView); + Py_CLEAR(clear_module_state->__pyx_n_s_X); + Py_CLEAR(clear_module_state->__pyx_n_s_X_2); + Py_CLEAR(clear_module_state->__pyx_n_s_X_aids); + Py_CLEAR(clear_module_state->__pyx_n_s_X_aspect_counts); + Py_CLEAR(clear_module_state->__pyx_n_s_X_uids); + Py_CLEAR(clear_module_state->__pyx_n_s_X_user_counts); + Py_CLEAR(clear_module_state->__pyx_n_s_Y); + Py_CLEAR(clear_module_state->__pyx_n_s_Y_aids); + Py_CLEAR(clear_module_state->__pyx_n_s_Y_aspect_counts); + Py_CLEAR(clear_module_state->__pyx_n_s_Y_iids); + Py_CLEAR(clear_module_state->__pyx_n_s_Y_item_counts); + Py_CLEAR(clear_module_state->__pyx_kp_s__16); + Py_CLEAR(clear_module_state->__pyx_kp_s__17); + Py_CLEAR(clear_module_state->__pyx_kp_u__17); + Py_CLEAR(clear_module_state->__pyx_kp_u__2); + Py_CLEAR(clear_module_state->__pyx_n_s__3); + Py_CLEAR(clear_module_state->__pyx_n_s__45); + Py_CLEAR(clear_module_state->__pyx_n_s__58); + Py_CLEAR(clear_module_state->__pyx_kp_u__6); + Py_CLEAR(clear_module_state->__pyx_kp_u__7); + Py_CLEAR(clear_module_state->__pyx_n_s_abc); + Py_CLEAR(clear_module_state->__pyx_n_s_aid); + Py_CLEAR(clear_module_state->__pyx_n_s_all_item_scores); + Py_CLEAR(clear_module_state->__pyx_n_s_allocate_buffer); + Py_CLEAR(clear_module_state->__pyx_n_s_alpha); + Py_CLEAR(clear_module_state->__pyx_kp_u_and); + Py_CLEAR(clear_module_state->__pyx_n_s_append); + Py_CLEAR(clear_module_state->__pyx_n_s_arange); + Py_CLEAR(clear_module_state->__pyx_n_s_args); + Py_CLEAR(clear_module_state->__pyx_n_s_argsort); + Py_CLEAR(clear_module_state->__pyx_n_s_array); + Py_CLEAR(clear_module_state->__pyx_n_s_asarray); + Py_CLEAR(clear_module_state->__pyx_n_s_astype); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_attention_scores); + Py_CLEAR(clear_module_state->__pyx_n_s_avg_sentiment); + Py_CLEAR(clear_module_state->__pyx_n_s_base); + Py_CLEAR(clear_module_state->__pyx_n_s_build_matrices); + Py_CLEAR(clear_module_state->__pyx_n_s_c); + Py_CLEAR(clear_module_state->__pyx_n_u_c); + Py_CLEAR(clear_module_state->__pyx_n_s_class); + Py_CLEAR(clear_module_state->__pyx_n_s_class_getitem); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_collections); + Py_CLEAR(clear_module_state->__pyx_kp_s_collections_abc); + Py_CLEAR(clear_module_state->__pyx_n_s_compute_attention_score); + Py_CLEAR(clear_module_state->__pyx_n_s_compute_quality_score); + Py_CLEAR(clear_module_state->__pyx_kp_s_contiguous_and_direct); + Py_CLEAR(clear_module_state->__pyx_kp_s_contiguous_and_indirect); + Py_CLEAR(clear_module_state->__pyx_n_s_cornac_models_efm_recom_efm); + Py_CLEAR(clear_module_state->__pyx_kp_s_cornac_models_efm_recom_efm_pyx); + Py_CLEAR(clear_module_state->__pyx_n_s_count); + Py_CLEAR(clear_module_state->__pyx_n_s_cpu_count); + Py_CLEAR(clear_module_state->__pyx_n_s_csr_matrix); + Py_CLEAR(clear_module_state->__pyx_n_u_d); + Py_CLEAR(clear_module_state->__pyx_n_s_data); + Py_CLEAR(clear_module_state->__pyx_n_s_data_set); + Py_CLEAR(clear_module_state->__pyx_n_s_defaults); + Py_CLEAR(clear_module_state->__pyx_n_s_dict); + Py_CLEAR(clear_module_state->__pyx_kp_u_disable); + Py_CLEAR(clear_module_state->__pyx_n_s_doc); + Py_CLEAR(clear_module_state->__pyx_n_s_dot); + Py_CLEAR(clear_module_state->__pyx_n_s_double); + Py_CLEAR(clear_module_state->__pyx_kp_s_double_int); + Py_CLEAR(clear_module_state->__pyx_kp_s_double_long); + Py_CLEAR(clear_module_state->__pyx_kp_s_double_short); + Py_CLEAR(clear_module_state->__pyx_n_s_dtype); + Py_CLEAR(clear_module_state->__pyx_n_s_dtype_is_object); + Py_CLEAR(clear_module_state->__pyx_n_s_ediff1d); + Py_CLEAR(clear_module_state->__pyx_n_s_empty); + Py_CLEAR(clear_module_state->__pyx_kp_u_enable); + Py_CLEAR(clear_module_state->__pyx_n_s_encode); + Py_CLEAR(clear_module_state->__pyx_n_s_enumerate); + Py_CLEAR(clear_module_state->__pyx_n_s_eps); + Py_CLEAR(clear_module_state->__pyx_n_s_error); + Py_CLEAR(clear_module_state->__pyx_n_s_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_exp); + Py_CLEAR(clear_module_state->__pyx_n_s_explicit_scores); + Py_CLEAR(clear_module_state->__pyx_n_u_f); + Py_CLEAR(clear_module_state->__pyx_n_s_fill); + Py_CLEAR(clear_module_state->__pyx_n_s_fit); + Py_CLEAR(clear_module_state->__pyx_n_s_fit_efm); + Py_CLEAR(clear_module_state->__pyx_n_s_flags); + Py_CLEAR(clear_module_state->__pyx_n_s_flatten); + Py_CLEAR(clear_module_state->__pyx_n_s_float); + Py_CLEAR(clear_module_state->__pyx_n_s_float32); + Py_CLEAR(clear_module_state->__pyx_kp_s_float_int); + Py_CLEAR(clear_module_state->__pyx_kp_s_float_long); + Py_CLEAR(clear_module_state->__pyx_kp_s_float_short); + Py_CLEAR(clear_module_state->__pyx_n_s_format); + Py_CLEAR(clear_module_state->__pyx_n_s_fortran); + Py_CLEAR(clear_module_state->__pyx_n_u_fortran); + Py_CLEAR(clear_module_state->__pyx_n_s_fused_sigindex); + Py_CLEAR(clear_module_state->__pyx_kp_u_gc); + Py_CLEAR(clear_module_state->__pyx_n_s_get); + Py_CLEAR(clear_module_state->__pyx_n_s_get_rng); + Py_CLEAR(clear_module_state->__pyx_n_s_getstate); + Py_CLEAR(clear_module_state->__pyx_kp_u_got); + Py_CLEAR(clear_module_state->__pyx_kp_u_got_differing_extents_in_dimensi); + Py_CLEAR(clear_module_state->__pyx_n_s_high); + Py_CLEAR(clear_module_state->__pyx_n_s_i); + Py_CLEAR(clear_module_state->__pyx_n_s_id); + Py_CLEAR(clear_module_state->__pyx_n_s_idx); + Py_CLEAR(clear_module_state->__pyx_n_s_iid); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_index); + Py_CLEAR(clear_module_state->__pyx_n_s_indices); + Py_CLEAR(clear_module_state->__pyx_n_s_indptr); + Py_CLEAR(clear_module_state->__pyx_n_s_init); + Py_CLEAR(clear_module_state->__pyx_n_s_init_2); + Py_CLEAR(clear_module_state->__pyx_n_s_init_params); + Py_CLEAR(clear_module_state->__pyx_n_s_init_subclass); + Py_CLEAR(clear_module_state->__pyx_n_s_initializing); + Py_CLEAR(clear_module_state->__pyx_n_s_int); + Py_CLEAR(clear_module_state->__pyx_n_s_int32); + Py_CLEAR(clear_module_state->__pyx_n_s_intersects); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_n_s_is_unk_item); + Py_CLEAR(clear_module_state->__pyx_n_s_is_unk_user); + Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled); + Py_CLEAR(clear_module_state->__pyx_n_s_item_aspect_count); + Py_CLEAR(clear_module_state->__pyx_n_s_item_aspects); + Py_CLEAR(clear_module_state->__pyx_kp_u_item_id); + Py_CLEAR(clear_module_state->__pyx_n_s_item_idx); + Py_CLEAR(clear_module_state->__pyx_n_s_item_indices); + Py_CLEAR(clear_module_state->__pyx_n_s_item_rank); + Py_CLEAR(clear_module_state->__pyx_n_s_item_score); + Py_CLEAR(clear_module_state->__pyx_n_s_item_scores); + Py_CLEAR(clear_module_state->__pyx_n_s_item_sentiment); + Py_CLEAR(clear_module_state->__pyx_n_s_items); + Py_CLEAR(clear_module_state->__pyx_n_s_itemsize); + Py_CLEAR(clear_module_state->__pyx_kp_s_itemsize_0_for_cython_array); + Py_CLEAR(clear_module_state->__pyx_kp_u_iter); + Py_CLEAR(clear_module_state->__pyx_n_s_j); + Py_CLEAR(clear_module_state->__pyx_n_s_k); + Py_CLEAR(clear_module_state->__pyx_n_s_kind); + Py_CLEAR(clear_module_state->__pyx_n_s_known_item_scores); + Py_CLEAR(clear_module_state->__pyx_n_s_kwargs); + Py_CLEAR(clear_module_state->__pyx_n_s_lambda_h); + Py_CLEAR(clear_module_state->__pyx_n_s_lambda_u); + Py_CLEAR(clear_module_state->__pyx_n_s_lambda_v); + Py_CLEAR(clear_module_state->__pyx_n_s_lambda_x); + Py_CLEAR(clear_module_state->__pyx_n_s_lambda_y); + Py_CLEAR(clear_module_state->__pyx_n_s_long); + Py_CLEAR(clear_module_state->__pyx_kp_u_loss); + Py_CLEAR(clear_module_state->__pyx_n_s_loss_2); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_map_aspect_id); + Py_CLEAR(clear_module_state->__pyx_n_s_map_iid); + Py_CLEAR(clear_module_state->__pyx_n_s_map_uid); + Py_CLEAR(clear_module_state->__pyx_n_s_max_iter); + Py_CLEAR(clear_module_state->__pyx_n_s_memview); + Py_CLEAR(clear_module_state->__pyx_n_s_metaclass); + Py_CLEAR(clear_module_state->__pyx_n_s_min); + Py_CLEAR(clear_module_state->__pyx_n_s_mode); + Py_CLEAR(clear_module_state->__pyx_n_s_module); + Py_CLEAR(clear_module_state->__pyx_n_s_most_cared_X); + Py_CLEAR(clear_module_state->__pyx_n_s_most_cared_Y); + Py_CLEAR(clear_module_state->__pyx_n_s_most_cared_aspects_indices); + Py_CLEAR(clear_module_state->__pyx_n_s_mro_entries); + Py_CLEAR(clear_module_state->__pyx_n_s_multiprocessing); + Py_CLEAR(clear_module_state->__pyx_n_s_n_aspects); + Py_CLEAR(clear_module_state->__pyx_n_s_n_efactors); + Py_CLEAR(clear_module_state->__pyx_n_s_n_factors); + Py_CLEAR(clear_module_state->__pyx_n_s_n_items); + Py_CLEAR(clear_module_state->__pyx_n_s_n_lfactors); + Py_CLEAR(clear_module_state->__pyx_n_s_n_ratings); + Py_CLEAR(clear_module_state->__pyx_n_s_n_users); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_s_name_2); + Py_CLEAR(clear_module_state->__pyx_n_s_ndim); + Py_CLEAR(clear_module_state->__pyx_n_s_new); + Py_CLEAR(clear_module_state->__pyx_kp_s_no_default___reduce___due_to_non); + Py_CLEAR(clear_module_state->__pyx_n_s_np); + Py_CLEAR(clear_module_state->__pyx_n_s_num_aspects); + Py_CLEAR(clear_module_state->__pyx_n_s_num_explicit_factors); + Py_CLEAR(clear_module_state->__pyx_n_s_num_items); + Py_CLEAR(clear_module_state->__pyx_n_s_num_latent_factors); + Py_CLEAR(clear_module_state->__pyx_n_s_num_most_cared_aspects); + Py_CLEAR(clear_module_state->__pyx_n_s_num_threads); + Py_CLEAR(clear_module_state->__pyx_n_s_num_users); + Py_CLEAR(clear_module_state->__pyx_n_s_numpy); + Py_CLEAR(clear_module_state->__pyx_kp_u_numpy_core_multiarray_failed_to); + Py_CLEAR(clear_module_state->__pyx_kp_u_numpy_core_umath_failed_to_impor); + Py_CLEAR(clear_module_state->__pyx_n_s_obj); + Py_CLEAR(clear_module_state->__pyx_n_s_ones); + Py_CLEAR(clear_module_state->__pyx_n_s_pack); + Py_CLEAR(clear_module_state->__pyx_n_s_pickle); + Py_CLEAR(clear_module_state->__pyx_n_s_prediction); + Py_CLEAR(clear_module_state->__pyx_n_s_prepare); + Py_CLEAR(clear_module_state->__pyx_n_s_print); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_PickleError); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_checksum); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_result); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_state); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_type); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_Enum); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_vtable); + Py_CLEAR(clear_module_state->__pyx_n_s_quality_scores); + Py_CLEAR(clear_module_state->__pyx_n_s_qualname); + Py_CLEAR(clear_module_state->__pyx_n_s_random_state); + Py_CLEAR(clear_module_state->__pyx_n_s_range); + Py_CLEAR(clear_module_state->__pyx_n_s_rank); + Py_CLEAR(clear_module_state->__pyx_n_s_rating); + Py_CLEAR(clear_module_state->__pyx_n_s_rating_scale); + Py_CLEAR(clear_module_state->__pyx_n_s_ratings); + Py_CLEAR(clear_module_state->__pyx_n_s_recommender); + Py_CLEAR(clear_module_state->__pyx_n_s_reduce); + Py_CLEAR(clear_module_state->__pyx_n_s_reduce_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_reduce_ex); + Py_CLEAR(clear_module_state->__pyx_n_s_register); + Py_CLEAR(clear_module_state->__pyx_n_s_repeat); + Py_CLEAR(clear_module_state->__pyx_n_s_rng); + Py_CLEAR(clear_module_state->__pyx_n_s_s); + Py_CLEAR(clear_module_state->__pyx_n_s_scipy); + Py_CLEAR(clear_module_state->__pyx_n_s_scipy_sparse); + Py_CLEAR(clear_module_state->__pyx_n_s_score); + Py_CLEAR(clear_module_state->__pyx_n_s_seed); + Py_CLEAR(clear_module_state->__pyx_n_s_self); + Py_CLEAR(clear_module_state->__pyx_n_s_sentiment); + Py_CLEAR(clear_module_state->__pyx_n_s_sentiment_polarity); + Py_CLEAR(clear_module_state->__pyx_n_s_sentiment_tup_ids_by_item); + Py_CLEAR(clear_module_state->__pyx_n_s_sentiment_tup_ids_by_user); + Py_CLEAR(clear_module_state->__pyx_n_s_set_name); + Py_CLEAR(clear_module_state->__pyx_n_s_setstate); + Py_CLEAR(clear_module_state->__pyx_n_s_setstate_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_shape); + Py_CLEAR(clear_module_state->__pyx_n_s_short); + Py_CLEAR(clear_module_state->__pyx_n_s_signatures); + Py_CLEAR(clear_module_state->__pyx_n_s_size); + Py_CLEAR(clear_module_state->__pyx_n_s_sp); + Py_CLEAR(clear_module_state->__pyx_n_s_sparse); + Py_CLEAR(clear_module_state->__pyx_n_s_spec); + Py_CLEAR(clear_module_state->__pyx_n_s_split); + Py_CLEAR(clear_module_state->__pyx_n_s_sqrt); + Py_CLEAR(clear_module_state->__pyx_n_s_start); + Py_CLEAR(clear_module_state->__pyx_n_s_step); + Py_CLEAR(clear_module_state->__pyx_n_s_stop); + Py_CLEAR(clear_module_state->__pyx_kp_s_strided_and_direct); + Py_CLEAR(clear_module_state->__pyx_kp_s_strided_and_direct_or_indirect); + Py_CLEAR(clear_module_state->__pyx_kp_s_strided_and_indirect); + Py_CLEAR(clear_module_state->__pyx_kp_s_stringsource); + Py_CLEAR(clear_module_state->__pyx_n_s_strip); + Py_CLEAR(clear_module_state->__pyx_n_s_struct); + Py_CLEAR(clear_module_state->__pyx_n_s_super); + Py_CLEAR(clear_module_state->__pyx_n_s_sys); + Py_CLEAR(clear_module_state->__pyx_n_s_t); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_tocsc); + Py_CLEAR(clear_module_state->__pyx_n_s_total_items); + Py_CLEAR(clear_module_state->__pyx_n_s_total_sentiment); + Py_CLEAR(clear_module_state->__pyx_n_s_total_sentiment_by_aspect); + Py_CLEAR(clear_module_state->__pyx_n_s_train_set); + Py_CLEAR(clear_module_state->__pyx_n_s_trainable); + Py_CLEAR(clear_module_state->__pyx_n_s_tup); + Py_CLEAR(clear_module_state->__pyx_n_s_tup_id); + Py_CLEAR(clear_module_state->__pyx_n_s_uid); + Py_CLEAR(clear_module_state->__pyx_n_s_uir_iter); + Py_CLEAR(clear_module_state->__pyx_kp_s_unable_to_allocate_array_data); + Py_CLEAR(clear_module_state->__pyx_kp_s_unable_to_allocate_shape_and_str); + Py_CLEAR(clear_module_state->__pyx_n_s_uniform); + Py_CLEAR(clear_module_state->__pyx_n_s_unpack); + Py_CLEAR(clear_module_state->__pyx_n_s_update); + Py_CLEAR(clear_module_state->__pyx_n_s_use_item_aspect_popularity); + Py_CLEAR(clear_module_state->__pyx_n_s_user_aspect_count); + Py_CLEAR(clear_module_state->__pyx_n_s_user_aspects); + Py_CLEAR(clear_module_state->__pyx_n_s_user_idx); + Py_CLEAR(clear_module_state->__pyx_n_s_user_sentiment); + Py_CLEAR(clear_module_state->__pyx_n_s_utils); + Py_CLEAR(clear_module_state->__pyx_n_s_utils_common); + Py_CLEAR(clear_module_state->__pyx_n_s_utils_init_utils); + Py_CLEAR(clear_module_state->__pyx_n_s_val_set); + Py_CLEAR(clear_module_state->__pyx_n_s_values); + Py_CLEAR(clear_module_state->__pyx_n_s_verbose); + Py_CLEAR(clear_module_state->__pyx_n_s_version_info); + Py_CLEAR(clear_module_state->__pyx_float_5_0); + Py_CLEAR(clear_module_state->__pyx_float_0_01); + Py_CLEAR(clear_module_state->__pyx_float_0_85); + Py_CLEAR(clear_module_state->__pyx_int_0); + Py_CLEAR(clear_module_state->__pyx_int_1); + Py_CLEAR(clear_module_state->__pyx_int_2); + Py_CLEAR(clear_module_state->__pyx_int_3); + Py_CLEAR(clear_module_state->__pyx_int_15); + Py_CLEAR(clear_module_state->__pyx_int_22); + Py_CLEAR(clear_module_state->__pyx_int_40); + Py_CLEAR(clear_module_state->__pyx_int_60); + Py_CLEAR(clear_module_state->__pyx_int_100); + Py_CLEAR(clear_module_state->__pyx_int_112105877); + Py_CLEAR(clear_module_state->__pyx_int_136983863); + Py_CLEAR(clear_module_state->__pyx_int_184977713); + Py_CLEAR(clear_module_state->__pyx_int_neg_1); + Py_CLEAR(clear_module_state->__pyx_slice__5); + Py_CLEAR(clear_module_state->__pyx_tuple__4); + Py_CLEAR(clear_module_state->__pyx_tuple__8); + Py_CLEAR(clear_module_state->__pyx_tuple__9); + Py_CLEAR(clear_module_state->__pyx_slice__22); + Py_CLEAR(clear_module_state->__pyx_tuple__10); + Py_CLEAR(clear_module_state->__pyx_tuple__11); + Py_CLEAR(clear_module_state->__pyx_tuple__12); + Py_CLEAR(clear_module_state->__pyx_tuple__13); + Py_CLEAR(clear_module_state->__pyx_tuple__14); + Py_CLEAR(clear_module_state->__pyx_tuple__15); + Py_CLEAR(clear_module_state->__pyx_tuple__18); + Py_CLEAR(clear_module_state->__pyx_tuple__19); + Py_CLEAR(clear_module_state->__pyx_tuple__20); + Py_CLEAR(clear_module_state->__pyx_tuple__21); + Py_CLEAR(clear_module_state->__pyx_tuple__23); + Py_CLEAR(clear_module_state->__pyx_tuple__24); + Py_CLEAR(clear_module_state->__pyx_tuple__25); + Py_CLEAR(clear_module_state->__pyx_tuple__26); + Py_CLEAR(clear_module_state->__pyx_tuple__27); + Py_CLEAR(clear_module_state->__pyx_tuple__28); + Py_CLEAR(clear_module_state->__pyx_tuple__29); + Py_CLEAR(clear_module_state->__pyx_tuple__30); + Py_CLEAR(clear_module_state->__pyx_tuple__31); + Py_CLEAR(clear_module_state->__pyx_tuple__32); + Py_CLEAR(clear_module_state->__pyx_tuple__34); + Py_CLEAR(clear_module_state->__pyx_tuple__35); + Py_CLEAR(clear_module_state->__pyx_tuple__37); + Py_CLEAR(clear_module_state->__pyx_tuple__38); + Py_CLEAR(clear_module_state->__pyx_tuple__40); + Py_CLEAR(clear_module_state->__pyx_tuple__42); + Py_CLEAR(clear_module_state->__pyx_tuple__43); + Py_CLEAR(clear_module_state->__pyx_tuple__46); + Py_CLEAR(clear_module_state->__pyx_tuple__48); + Py_CLEAR(clear_module_state->__pyx_tuple__50); + Py_CLEAR(clear_module_state->__pyx_tuple__52); + Py_CLEAR(clear_module_state->__pyx_tuple__54); + Py_CLEAR(clear_module_state->__pyx_tuple__55); + Py_CLEAR(clear_module_state->__pyx_tuple__57); + Py_CLEAR(clear_module_state->__pyx_codeobj__33); + Py_CLEAR(clear_module_state->__pyx_codeobj__36); + Py_CLEAR(clear_module_state->__pyx_codeobj__39); + Py_CLEAR(clear_module_state->__pyx_codeobj__41); + Py_CLEAR(clear_module_state->__pyx_codeobj__44); + Py_CLEAR(clear_module_state->__pyx_codeobj__47); + Py_CLEAR(clear_module_state->__pyx_codeobj__49); + Py_CLEAR(clear_module_state->__pyx_codeobj__51); + Py_CLEAR(clear_module_state->__pyx_codeobj__53); + Py_CLEAR(clear_module_state->__pyx_codeobj__56); + return 0; } - -static double __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(int __pyx_v_n, double *__pyx_v_x, int __pyx_v_incx, double *__pyx_v_y, int __pyx_v_incy) { - double __pyx_r; - - /* "cornac/models/efm/recom_efm.pyx":43 - * return sdot(&n, x, &incx, y, &incy) - * else: - * return ddot(&n, x, &incx, y, &incy) # <<<<<<<<<<<<<< - * - * - */ - __pyx_r = __pyx_f_5scipy_6linalg_11cython_blas_ddot((&__pyx_v_n), __pyx_v_x, (&__pyx_v_incx), __pyx_v_y, (&__pyx_v_incy)); - goto __pyx_L0; - - /* "cornac/models/efm/recom_efm.pyx":38 - * - * - * cdef floating _dot(int n, floating *x, int incx, # <<<<<<<<<<<<<< - * floating *y, int incy) nogil: - * if floating is float: - */ - - /* function exit code */ - __pyx_L0:; - return __pyx_r; +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_4type_type); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_dtype); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_flatiter); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_broadcast); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_ndarray); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_generic); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_number); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_integer); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_signedinteger); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_unsignedinteger); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_inexact); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_floating); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_complexfloating); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_flexible); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_character); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_ufunc); + Py_VISIT(traverse_module_state->__pyx_array_type); + Py_VISIT(traverse_module_state->__pyx_type___pyx_array); + Py_VISIT(traverse_module_state->__pyx_MemviewEnum_type); + Py_VISIT(traverse_module_state->__pyx_type___pyx_MemviewEnum); + Py_VISIT(traverse_module_state->__pyx_memoryview_type); + Py_VISIT(traverse_module_state->__pyx_type___pyx_memoryview); + Py_VISIT(traverse_module_state->__pyx_memoryviewslice_type); + Py_VISIT(traverse_module_state->__pyx_type___pyx_memoryviewslice); + Py_VISIT(traverse_module_state->__pyx_kp_u_); + Py_VISIT(traverse_module_state->__pyx_n_s_A); + Py_VISIT(traverse_module_state->__pyx_n_s_ASCII); + Py_VISIT(traverse_module_state->__pyx_n_s_A_iids); + Py_VISIT(traverse_module_state->__pyx_n_s_A_item_counts); + Py_VISIT(traverse_module_state->__pyx_n_s_A_uids); + Py_VISIT(traverse_module_state->__pyx_n_s_A_user_counts); + Py_VISIT(traverse_module_state->__pyx_kp_s_All_dimensions_preceding_dimensi); + Py_VISIT(traverse_module_state->__pyx_n_s_AssertionError); + Py_VISIT(traverse_module_state->__pyx_kp_s_Buffer_view_does_not_expose_stri); + Py_VISIT(traverse_module_state->__pyx_kp_u_Building_matrices_completed); + Py_VISIT(traverse_module_state->__pyx_kp_s_Can_only_create_a_buffer_that_is); + Py_VISIT(traverse_module_state->__pyx_kp_u_Can_t_make_score_prediction_for); + Py_VISIT(traverse_module_state->__pyx_kp_u_Can_t_make_score_prediction_for_2); + Py_VISIT(traverse_module_state->__pyx_kp_s_Cannot_assign_to_read_only_memor); + Py_VISIT(traverse_module_state->__pyx_kp_s_Cannot_create_writable_memory_vi); + Py_VISIT(traverse_module_state->__pyx_kp_u_Cannot_index_with_type); + Py_VISIT(traverse_module_state->__pyx_kp_s_Cannot_transpose_memoryview_with); + Py_VISIT(traverse_module_state->__pyx_n_s_Counter); + Py_VISIT(traverse_module_state->__pyx_kp_s_Dimension_d_is_not_direct); + Py_VISIT(traverse_module_state->__pyx_n_s_EFM); + Py_VISIT(traverse_module_state->__pyx_n_u_EFM); + Py_VISIT(traverse_module_state->__pyx_n_s_EFM___init); + Py_VISIT(traverse_module_state->__pyx_n_s_EFM__build_matrices); + Py_VISIT(traverse_module_state->__pyx_n_s_EFM__compute_attention_score); + Py_VISIT(traverse_module_state->__pyx_n_s_EFM__compute_quality_score); + Py_VISIT(traverse_module_state->__pyx_n_s_EFM__fit_efm); + Py_VISIT(traverse_module_state->__pyx_n_s_EFM__init); + Py_VISIT(traverse_module_state->__pyx_n_s_EFM_fit); + Py_VISIT(traverse_module_state->__pyx_n_s_EFM_rank); + Py_VISIT(traverse_module_state->__pyx_n_s_EFM_score); + Py_VISIT(traverse_module_state->__pyx_n_s_Ellipsis); + Py_VISIT(traverse_module_state->__pyx_kp_s_Empty_shape_tuple_for_cython_arr); + Py_VISIT(traverse_module_state->__pyx_kp_s_Expected_at_least_d_argument_s_g); + Py_VISIT(traverse_module_state->__pyx_kp_s_Explict_Factor_Models_Parameters); + Py_VISIT(traverse_module_state->__pyx_kp_s_Function_call_with_ambiguous_arg); + Py_VISIT(traverse_module_state->__pyx_n_s_H1); + Py_VISIT(traverse_module_state->__pyx_n_u_H1); + Py_VISIT(traverse_module_state->__pyx_n_s_H1_denominator); + Py_VISIT(traverse_module_state->__pyx_n_s_H1_numerator); + Py_VISIT(traverse_module_state->__pyx_n_s_H2); + Py_VISIT(traverse_module_state->__pyx_n_u_H2); + Py_VISIT(traverse_module_state->__pyx_n_s_H2_denominator); + Py_VISIT(traverse_module_state->__pyx_n_s_H2_numerator); + Py_VISIT(traverse_module_state->__pyx_n_s_ImportError); + Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0); + Py_VISIT(traverse_module_state->__pyx_n_s_IndexError); + Py_VISIT(traverse_module_state->__pyx_kp_s_Index_out_of_bounds_axis_d); + Py_VISIT(traverse_module_state->__pyx_kp_s_Indirect_dimensions_not_supporte); + Py_VISIT(traverse_module_state->__pyx_kp_u_Invalid_mode_expected_c_or_fortr); + Py_VISIT(traverse_module_state->__pyx_kp_u_Invalid_shape_in_axis); + Py_VISIT(traverse_module_state->__pyx_n_s_MemoryError); + Py_VISIT(traverse_module_state->__pyx_kp_s_MemoryView_of_r_at_0x_x); + Py_VISIT(traverse_module_state->__pyx_kp_s_MemoryView_of_r_object); + Py_VISIT(traverse_module_state->__pyx_kp_s_No_matching_signature_found); + Py_VISIT(traverse_module_state->__pyx_n_b_O); + Py_VISIT(traverse_module_state->__pyx_kp_u_Optimization_finished); + Py_VISIT(traverse_module_state->__pyx_n_s_OrderedDict); + Py_VISIT(traverse_module_state->__pyx_kp_u_Out_of_bounds_on_buffer_access_a); + Py_VISIT(traverse_module_state->__pyx_n_s_PickleError); + Py_VISIT(traverse_module_state->__pyx_n_s_Recommender); + Py_VISIT(traverse_module_state->__pyx_n_s_ScoreException); + Py_VISIT(traverse_module_state->__pyx_n_s_Sequence); + Py_VISIT(traverse_module_state->__pyx_kp_s_Step_may_not_be_zero_axis_d); + Py_VISIT(traverse_module_state->__pyx_n_s_T); + Py_VISIT(traverse_module_state->__pyx_n_s_TypeError); + Py_VISIT(traverse_module_state->__pyx_n_s_U1); + Py_VISIT(traverse_module_state->__pyx_n_u_U1); + Py_VISIT(traverse_module_state->__pyx_n_s_U1_denominator); + Py_VISIT(traverse_module_state->__pyx_n_s_U1_numerator); + Py_VISIT(traverse_module_state->__pyx_n_s_U2); + Py_VISIT(traverse_module_state->__pyx_n_u_U2); + Py_VISIT(traverse_module_state->__pyx_n_s_U2_denominator); + Py_VISIT(traverse_module_state->__pyx_n_s_U2_numerator); + Py_VISIT(traverse_module_state->__pyx_kp_s_Unable_to_convert_item_to_object); + Py_VISIT(traverse_module_state->__pyx_n_s_V); + Py_VISIT(traverse_module_state->__pyx_n_u_V); + Py_VISIT(traverse_module_state->__pyx_n_s_V_denominator); + Py_VISIT(traverse_module_state->__pyx_n_s_V_numerator); + Py_VISIT(traverse_module_state->__pyx_n_s_ValueError); + Py_VISIT(traverse_module_state->__pyx_n_s_View_MemoryView); + Py_VISIT(traverse_module_state->__pyx_n_s_X); + Py_VISIT(traverse_module_state->__pyx_n_s_X_2); + Py_VISIT(traverse_module_state->__pyx_n_s_X_aids); + Py_VISIT(traverse_module_state->__pyx_n_s_X_aspect_counts); + Py_VISIT(traverse_module_state->__pyx_n_s_X_uids); + Py_VISIT(traverse_module_state->__pyx_n_s_X_user_counts); + Py_VISIT(traverse_module_state->__pyx_n_s_Y); + Py_VISIT(traverse_module_state->__pyx_n_s_Y_aids); + Py_VISIT(traverse_module_state->__pyx_n_s_Y_aspect_counts); + Py_VISIT(traverse_module_state->__pyx_n_s_Y_iids); + Py_VISIT(traverse_module_state->__pyx_n_s_Y_item_counts); + Py_VISIT(traverse_module_state->__pyx_kp_s__16); + Py_VISIT(traverse_module_state->__pyx_kp_s__17); + Py_VISIT(traverse_module_state->__pyx_kp_u__17); + Py_VISIT(traverse_module_state->__pyx_kp_u__2); + Py_VISIT(traverse_module_state->__pyx_n_s__3); + Py_VISIT(traverse_module_state->__pyx_n_s__45); + Py_VISIT(traverse_module_state->__pyx_n_s__58); + Py_VISIT(traverse_module_state->__pyx_kp_u__6); + Py_VISIT(traverse_module_state->__pyx_kp_u__7); + Py_VISIT(traverse_module_state->__pyx_n_s_abc); + Py_VISIT(traverse_module_state->__pyx_n_s_aid); + Py_VISIT(traverse_module_state->__pyx_n_s_all_item_scores); + Py_VISIT(traverse_module_state->__pyx_n_s_allocate_buffer); + Py_VISIT(traverse_module_state->__pyx_n_s_alpha); + Py_VISIT(traverse_module_state->__pyx_kp_u_and); + Py_VISIT(traverse_module_state->__pyx_n_s_append); + Py_VISIT(traverse_module_state->__pyx_n_s_arange); + Py_VISIT(traverse_module_state->__pyx_n_s_args); + Py_VISIT(traverse_module_state->__pyx_n_s_argsort); + Py_VISIT(traverse_module_state->__pyx_n_s_array); + Py_VISIT(traverse_module_state->__pyx_n_s_asarray); + Py_VISIT(traverse_module_state->__pyx_n_s_astype); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_attention_scores); + Py_VISIT(traverse_module_state->__pyx_n_s_avg_sentiment); + Py_VISIT(traverse_module_state->__pyx_n_s_base); + Py_VISIT(traverse_module_state->__pyx_n_s_build_matrices); + Py_VISIT(traverse_module_state->__pyx_n_s_c); + Py_VISIT(traverse_module_state->__pyx_n_u_c); + Py_VISIT(traverse_module_state->__pyx_n_s_class); + Py_VISIT(traverse_module_state->__pyx_n_s_class_getitem); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_collections); + Py_VISIT(traverse_module_state->__pyx_kp_s_collections_abc); + Py_VISIT(traverse_module_state->__pyx_n_s_compute_attention_score); + Py_VISIT(traverse_module_state->__pyx_n_s_compute_quality_score); + Py_VISIT(traverse_module_state->__pyx_kp_s_contiguous_and_direct); + Py_VISIT(traverse_module_state->__pyx_kp_s_contiguous_and_indirect); + Py_VISIT(traverse_module_state->__pyx_n_s_cornac_models_efm_recom_efm); + Py_VISIT(traverse_module_state->__pyx_kp_s_cornac_models_efm_recom_efm_pyx); + Py_VISIT(traverse_module_state->__pyx_n_s_count); + Py_VISIT(traverse_module_state->__pyx_n_s_cpu_count); + Py_VISIT(traverse_module_state->__pyx_n_s_csr_matrix); + Py_VISIT(traverse_module_state->__pyx_n_u_d); + Py_VISIT(traverse_module_state->__pyx_n_s_data); + Py_VISIT(traverse_module_state->__pyx_n_s_data_set); + Py_VISIT(traverse_module_state->__pyx_n_s_defaults); + Py_VISIT(traverse_module_state->__pyx_n_s_dict); + Py_VISIT(traverse_module_state->__pyx_kp_u_disable); + Py_VISIT(traverse_module_state->__pyx_n_s_doc); + Py_VISIT(traverse_module_state->__pyx_n_s_dot); + Py_VISIT(traverse_module_state->__pyx_n_s_double); + Py_VISIT(traverse_module_state->__pyx_kp_s_double_int); + Py_VISIT(traverse_module_state->__pyx_kp_s_double_long); + Py_VISIT(traverse_module_state->__pyx_kp_s_double_short); + Py_VISIT(traverse_module_state->__pyx_n_s_dtype); + Py_VISIT(traverse_module_state->__pyx_n_s_dtype_is_object); + Py_VISIT(traverse_module_state->__pyx_n_s_ediff1d); + Py_VISIT(traverse_module_state->__pyx_n_s_empty); + Py_VISIT(traverse_module_state->__pyx_kp_u_enable); + Py_VISIT(traverse_module_state->__pyx_n_s_encode); + Py_VISIT(traverse_module_state->__pyx_n_s_enumerate); + Py_VISIT(traverse_module_state->__pyx_n_s_eps); + Py_VISIT(traverse_module_state->__pyx_n_s_error); + Py_VISIT(traverse_module_state->__pyx_n_s_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_exp); + Py_VISIT(traverse_module_state->__pyx_n_s_explicit_scores); + Py_VISIT(traverse_module_state->__pyx_n_u_f); + Py_VISIT(traverse_module_state->__pyx_n_s_fill); + Py_VISIT(traverse_module_state->__pyx_n_s_fit); + Py_VISIT(traverse_module_state->__pyx_n_s_fit_efm); + Py_VISIT(traverse_module_state->__pyx_n_s_flags); + Py_VISIT(traverse_module_state->__pyx_n_s_flatten); + Py_VISIT(traverse_module_state->__pyx_n_s_float); + Py_VISIT(traverse_module_state->__pyx_n_s_float32); + Py_VISIT(traverse_module_state->__pyx_kp_s_float_int); + Py_VISIT(traverse_module_state->__pyx_kp_s_float_long); + Py_VISIT(traverse_module_state->__pyx_kp_s_float_short); + Py_VISIT(traverse_module_state->__pyx_n_s_format); + Py_VISIT(traverse_module_state->__pyx_n_s_fortran); + Py_VISIT(traverse_module_state->__pyx_n_u_fortran); + Py_VISIT(traverse_module_state->__pyx_n_s_fused_sigindex); + Py_VISIT(traverse_module_state->__pyx_kp_u_gc); + Py_VISIT(traverse_module_state->__pyx_n_s_get); + Py_VISIT(traverse_module_state->__pyx_n_s_get_rng); + Py_VISIT(traverse_module_state->__pyx_n_s_getstate); + Py_VISIT(traverse_module_state->__pyx_kp_u_got); + Py_VISIT(traverse_module_state->__pyx_kp_u_got_differing_extents_in_dimensi); + Py_VISIT(traverse_module_state->__pyx_n_s_high); + Py_VISIT(traverse_module_state->__pyx_n_s_i); + Py_VISIT(traverse_module_state->__pyx_n_s_id); + Py_VISIT(traverse_module_state->__pyx_n_s_idx); + Py_VISIT(traverse_module_state->__pyx_n_s_iid); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_index); + Py_VISIT(traverse_module_state->__pyx_n_s_indices); + Py_VISIT(traverse_module_state->__pyx_n_s_indptr); + Py_VISIT(traverse_module_state->__pyx_n_s_init); + Py_VISIT(traverse_module_state->__pyx_n_s_init_2); + Py_VISIT(traverse_module_state->__pyx_n_s_init_params); + Py_VISIT(traverse_module_state->__pyx_n_s_init_subclass); + Py_VISIT(traverse_module_state->__pyx_n_s_initializing); + Py_VISIT(traverse_module_state->__pyx_n_s_int); + Py_VISIT(traverse_module_state->__pyx_n_s_int32); + Py_VISIT(traverse_module_state->__pyx_n_s_intersects); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_n_s_is_unk_item); + Py_VISIT(traverse_module_state->__pyx_n_s_is_unk_user); + Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled); + Py_VISIT(traverse_module_state->__pyx_n_s_item_aspect_count); + Py_VISIT(traverse_module_state->__pyx_n_s_item_aspects); + Py_VISIT(traverse_module_state->__pyx_kp_u_item_id); + Py_VISIT(traverse_module_state->__pyx_n_s_item_idx); + Py_VISIT(traverse_module_state->__pyx_n_s_item_indices); + Py_VISIT(traverse_module_state->__pyx_n_s_item_rank); + Py_VISIT(traverse_module_state->__pyx_n_s_item_score); + Py_VISIT(traverse_module_state->__pyx_n_s_item_scores); + Py_VISIT(traverse_module_state->__pyx_n_s_item_sentiment); + Py_VISIT(traverse_module_state->__pyx_n_s_items); + Py_VISIT(traverse_module_state->__pyx_n_s_itemsize); + Py_VISIT(traverse_module_state->__pyx_kp_s_itemsize_0_for_cython_array); + Py_VISIT(traverse_module_state->__pyx_kp_u_iter); + Py_VISIT(traverse_module_state->__pyx_n_s_j); + Py_VISIT(traverse_module_state->__pyx_n_s_k); + Py_VISIT(traverse_module_state->__pyx_n_s_kind); + Py_VISIT(traverse_module_state->__pyx_n_s_known_item_scores); + Py_VISIT(traverse_module_state->__pyx_n_s_kwargs); + Py_VISIT(traverse_module_state->__pyx_n_s_lambda_h); + Py_VISIT(traverse_module_state->__pyx_n_s_lambda_u); + Py_VISIT(traverse_module_state->__pyx_n_s_lambda_v); + Py_VISIT(traverse_module_state->__pyx_n_s_lambda_x); + Py_VISIT(traverse_module_state->__pyx_n_s_lambda_y); + Py_VISIT(traverse_module_state->__pyx_n_s_long); + Py_VISIT(traverse_module_state->__pyx_kp_u_loss); + Py_VISIT(traverse_module_state->__pyx_n_s_loss_2); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_map_aspect_id); + Py_VISIT(traverse_module_state->__pyx_n_s_map_iid); + Py_VISIT(traverse_module_state->__pyx_n_s_map_uid); + Py_VISIT(traverse_module_state->__pyx_n_s_max_iter); + Py_VISIT(traverse_module_state->__pyx_n_s_memview); + Py_VISIT(traverse_module_state->__pyx_n_s_metaclass); + Py_VISIT(traverse_module_state->__pyx_n_s_min); + Py_VISIT(traverse_module_state->__pyx_n_s_mode); + Py_VISIT(traverse_module_state->__pyx_n_s_module); + Py_VISIT(traverse_module_state->__pyx_n_s_most_cared_X); + Py_VISIT(traverse_module_state->__pyx_n_s_most_cared_Y); + Py_VISIT(traverse_module_state->__pyx_n_s_most_cared_aspects_indices); + Py_VISIT(traverse_module_state->__pyx_n_s_mro_entries); + Py_VISIT(traverse_module_state->__pyx_n_s_multiprocessing); + Py_VISIT(traverse_module_state->__pyx_n_s_n_aspects); + Py_VISIT(traverse_module_state->__pyx_n_s_n_efactors); + Py_VISIT(traverse_module_state->__pyx_n_s_n_factors); + Py_VISIT(traverse_module_state->__pyx_n_s_n_items); + Py_VISIT(traverse_module_state->__pyx_n_s_n_lfactors); + Py_VISIT(traverse_module_state->__pyx_n_s_n_ratings); + Py_VISIT(traverse_module_state->__pyx_n_s_n_users); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_s_name_2); + Py_VISIT(traverse_module_state->__pyx_n_s_ndim); + Py_VISIT(traverse_module_state->__pyx_n_s_new); + Py_VISIT(traverse_module_state->__pyx_kp_s_no_default___reduce___due_to_non); + Py_VISIT(traverse_module_state->__pyx_n_s_np); + Py_VISIT(traverse_module_state->__pyx_n_s_num_aspects); + Py_VISIT(traverse_module_state->__pyx_n_s_num_explicit_factors); + Py_VISIT(traverse_module_state->__pyx_n_s_num_items); + Py_VISIT(traverse_module_state->__pyx_n_s_num_latent_factors); + Py_VISIT(traverse_module_state->__pyx_n_s_num_most_cared_aspects); + Py_VISIT(traverse_module_state->__pyx_n_s_num_threads); + Py_VISIT(traverse_module_state->__pyx_n_s_num_users); + Py_VISIT(traverse_module_state->__pyx_n_s_numpy); + Py_VISIT(traverse_module_state->__pyx_kp_u_numpy_core_multiarray_failed_to); + Py_VISIT(traverse_module_state->__pyx_kp_u_numpy_core_umath_failed_to_impor); + Py_VISIT(traverse_module_state->__pyx_n_s_obj); + Py_VISIT(traverse_module_state->__pyx_n_s_ones); + Py_VISIT(traverse_module_state->__pyx_n_s_pack); + Py_VISIT(traverse_module_state->__pyx_n_s_pickle); + Py_VISIT(traverse_module_state->__pyx_n_s_prediction); + Py_VISIT(traverse_module_state->__pyx_n_s_prepare); + Py_VISIT(traverse_module_state->__pyx_n_s_print); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_PickleError); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_checksum); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_result); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_state); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_type); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_Enum); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_vtable); + Py_VISIT(traverse_module_state->__pyx_n_s_quality_scores); + Py_VISIT(traverse_module_state->__pyx_n_s_qualname); + Py_VISIT(traverse_module_state->__pyx_n_s_random_state); + Py_VISIT(traverse_module_state->__pyx_n_s_range); + Py_VISIT(traverse_module_state->__pyx_n_s_rank); + Py_VISIT(traverse_module_state->__pyx_n_s_rating); + Py_VISIT(traverse_module_state->__pyx_n_s_rating_scale); + Py_VISIT(traverse_module_state->__pyx_n_s_ratings); + Py_VISIT(traverse_module_state->__pyx_n_s_recommender); + Py_VISIT(traverse_module_state->__pyx_n_s_reduce); + Py_VISIT(traverse_module_state->__pyx_n_s_reduce_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_reduce_ex); + Py_VISIT(traverse_module_state->__pyx_n_s_register); + Py_VISIT(traverse_module_state->__pyx_n_s_repeat); + Py_VISIT(traverse_module_state->__pyx_n_s_rng); + Py_VISIT(traverse_module_state->__pyx_n_s_s); + Py_VISIT(traverse_module_state->__pyx_n_s_scipy); + Py_VISIT(traverse_module_state->__pyx_n_s_scipy_sparse); + Py_VISIT(traverse_module_state->__pyx_n_s_score); + Py_VISIT(traverse_module_state->__pyx_n_s_seed); + Py_VISIT(traverse_module_state->__pyx_n_s_self); + Py_VISIT(traverse_module_state->__pyx_n_s_sentiment); + Py_VISIT(traverse_module_state->__pyx_n_s_sentiment_polarity); + Py_VISIT(traverse_module_state->__pyx_n_s_sentiment_tup_ids_by_item); + Py_VISIT(traverse_module_state->__pyx_n_s_sentiment_tup_ids_by_user); + Py_VISIT(traverse_module_state->__pyx_n_s_set_name); + Py_VISIT(traverse_module_state->__pyx_n_s_setstate); + Py_VISIT(traverse_module_state->__pyx_n_s_setstate_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_shape); + Py_VISIT(traverse_module_state->__pyx_n_s_short); + Py_VISIT(traverse_module_state->__pyx_n_s_signatures); + Py_VISIT(traverse_module_state->__pyx_n_s_size); + Py_VISIT(traverse_module_state->__pyx_n_s_sp); + Py_VISIT(traverse_module_state->__pyx_n_s_sparse); + Py_VISIT(traverse_module_state->__pyx_n_s_spec); + Py_VISIT(traverse_module_state->__pyx_n_s_split); + Py_VISIT(traverse_module_state->__pyx_n_s_sqrt); + Py_VISIT(traverse_module_state->__pyx_n_s_start); + Py_VISIT(traverse_module_state->__pyx_n_s_step); + Py_VISIT(traverse_module_state->__pyx_n_s_stop); + Py_VISIT(traverse_module_state->__pyx_kp_s_strided_and_direct); + Py_VISIT(traverse_module_state->__pyx_kp_s_strided_and_direct_or_indirect); + Py_VISIT(traverse_module_state->__pyx_kp_s_strided_and_indirect); + Py_VISIT(traverse_module_state->__pyx_kp_s_stringsource); + Py_VISIT(traverse_module_state->__pyx_n_s_strip); + Py_VISIT(traverse_module_state->__pyx_n_s_struct); + Py_VISIT(traverse_module_state->__pyx_n_s_super); + Py_VISIT(traverse_module_state->__pyx_n_s_sys); + Py_VISIT(traverse_module_state->__pyx_n_s_t); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_tocsc); + Py_VISIT(traverse_module_state->__pyx_n_s_total_items); + Py_VISIT(traverse_module_state->__pyx_n_s_total_sentiment); + Py_VISIT(traverse_module_state->__pyx_n_s_total_sentiment_by_aspect); + Py_VISIT(traverse_module_state->__pyx_n_s_train_set); + Py_VISIT(traverse_module_state->__pyx_n_s_trainable); + Py_VISIT(traverse_module_state->__pyx_n_s_tup); + Py_VISIT(traverse_module_state->__pyx_n_s_tup_id); + Py_VISIT(traverse_module_state->__pyx_n_s_uid); + Py_VISIT(traverse_module_state->__pyx_n_s_uir_iter); + Py_VISIT(traverse_module_state->__pyx_kp_s_unable_to_allocate_array_data); + Py_VISIT(traverse_module_state->__pyx_kp_s_unable_to_allocate_shape_and_str); + Py_VISIT(traverse_module_state->__pyx_n_s_uniform); + Py_VISIT(traverse_module_state->__pyx_n_s_unpack); + Py_VISIT(traverse_module_state->__pyx_n_s_update); + Py_VISIT(traverse_module_state->__pyx_n_s_use_item_aspect_popularity); + Py_VISIT(traverse_module_state->__pyx_n_s_user_aspect_count); + Py_VISIT(traverse_module_state->__pyx_n_s_user_aspects); + Py_VISIT(traverse_module_state->__pyx_n_s_user_idx); + Py_VISIT(traverse_module_state->__pyx_n_s_user_sentiment); + Py_VISIT(traverse_module_state->__pyx_n_s_utils); + Py_VISIT(traverse_module_state->__pyx_n_s_utils_common); + Py_VISIT(traverse_module_state->__pyx_n_s_utils_init_utils); + Py_VISIT(traverse_module_state->__pyx_n_s_val_set); + Py_VISIT(traverse_module_state->__pyx_n_s_values); + Py_VISIT(traverse_module_state->__pyx_n_s_verbose); + Py_VISIT(traverse_module_state->__pyx_n_s_version_info); + Py_VISIT(traverse_module_state->__pyx_float_5_0); + Py_VISIT(traverse_module_state->__pyx_float_0_01); + Py_VISIT(traverse_module_state->__pyx_float_0_85); + Py_VISIT(traverse_module_state->__pyx_int_0); + Py_VISIT(traverse_module_state->__pyx_int_1); + Py_VISIT(traverse_module_state->__pyx_int_2); + Py_VISIT(traverse_module_state->__pyx_int_3); + Py_VISIT(traverse_module_state->__pyx_int_15); + Py_VISIT(traverse_module_state->__pyx_int_22); + Py_VISIT(traverse_module_state->__pyx_int_40); + Py_VISIT(traverse_module_state->__pyx_int_60); + Py_VISIT(traverse_module_state->__pyx_int_100); + Py_VISIT(traverse_module_state->__pyx_int_112105877); + Py_VISIT(traverse_module_state->__pyx_int_136983863); + Py_VISIT(traverse_module_state->__pyx_int_184977713); + Py_VISIT(traverse_module_state->__pyx_int_neg_1); + Py_VISIT(traverse_module_state->__pyx_slice__5); + Py_VISIT(traverse_module_state->__pyx_tuple__4); + Py_VISIT(traverse_module_state->__pyx_tuple__8); + Py_VISIT(traverse_module_state->__pyx_tuple__9); + Py_VISIT(traverse_module_state->__pyx_slice__22); + Py_VISIT(traverse_module_state->__pyx_tuple__10); + Py_VISIT(traverse_module_state->__pyx_tuple__11); + Py_VISIT(traverse_module_state->__pyx_tuple__12); + Py_VISIT(traverse_module_state->__pyx_tuple__13); + Py_VISIT(traverse_module_state->__pyx_tuple__14); + Py_VISIT(traverse_module_state->__pyx_tuple__15); + Py_VISIT(traverse_module_state->__pyx_tuple__18); + Py_VISIT(traverse_module_state->__pyx_tuple__19); + Py_VISIT(traverse_module_state->__pyx_tuple__20); + Py_VISIT(traverse_module_state->__pyx_tuple__21); + Py_VISIT(traverse_module_state->__pyx_tuple__23); + Py_VISIT(traverse_module_state->__pyx_tuple__24); + Py_VISIT(traverse_module_state->__pyx_tuple__25); + Py_VISIT(traverse_module_state->__pyx_tuple__26); + Py_VISIT(traverse_module_state->__pyx_tuple__27); + Py_VISIT(traverse_module_state->__pyx_tuple__28); + Py_VISIT(traverse_module_state->__pyx_tuple__29); + Py_VISIT(traverse_module_state->__pyx_tuple__30); + Py_VISIT(traverse_module_state->__pyx_tuple__31); + Py_VISIT(traverse_module_state->__pyx_tuple__32); + Py_VISIT(traverse_module_state->__pyx_tuple__34); + Py_VISIT(traverse_module_state->__pyx_tuple__35); + Py_VISIT(traverse_module_state->__pyx_tuple__37); + Py_VISIT(traverse_module_state->__pyx_tuple__38); + Py_VISIT(traverse_module_state->__pyx_tuple__40); + Py_VISIT(traverse_module_state->__pyx_tuple__42); + Py_VISIT(traverse_module_state->__pyx_tuple__43); + Py_VISIT(traverse_module_state->__pyx_tuple__46); + Py_VISIT(traverse_module_state->__pyx_tuple__48); + Py_VISIT(traverse_module_state->__pyx_tuple__50); + Py_VISIT(traverse_module_state->__pyx_tuple__52); + Py_VISIT(traverse_module_state->__pyx_tuple__54); + Py_VISIT(traverse_module_state->__pyx_tuple__55); + Py_VISIT(traverse_module_state->__pyx_tuple__57); + Py_VISIT(traverse_module_state->__pyx_codeobj__33); + Py_VISIT(traverse_module_state->__pyx_codeobj__36); + Py_VISIT(traverse_module_state->__pyx_codeobj__39); + Py_VISIT(traverse_module_state->__pyx_codeobj__41); + Py_VISIT(traverse_module_state->__pyx_codeobj__44); + Py_VISIT(traverse_module_state->__pyx_codeobj__47); + Py_VISIT(traverse_module_state->__pyx_codeobj__49); + Py_VISIT(traverse_module_state->__pyx_codeobj__51); + Py_VISIT(traverse_module_state->__pyx_codeobj__53); + Py_VISIT(traverse_module_state->__pyx_codeobj__56); + return 0; } - -/* "cornac/models/efm/recom_efm.pyx":129 - * """ +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_7cpython_4type_type __pyx_mstate_global->__pyx_ptype_7cpython_4type_type +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_5numpy_dtype __pyx_mstate_global->__pyx_ptype_5numpy_dtype +#define __pyx_ptype_5numpy_flatiter __pyx_mstate_global->__pyx_ptype_5numpy_flatiter +#define __pyx_ptype_5numpy_broadcast __pyx_mstate_global->__pyx_ptype_5numpy_broadcast +#define __pyx_ptype_5numpy_ndarray __pyx_mstate_global->__pyx_ptype_5numpy_ndarray +#define __pyx_ptype_5numpy_generic __pyx_mstate_global->__pyx_ptype_5numpy_generic +#define __pyx_ptype_5numpy_number __pyx_mstate_global->__pyx_ptype_5numpy_number +#define __pyx_ptype_5numpy_integer __pyx_mstate_global->__pyx_ptype_5numpy_integer +#define __pyx_ptype_5numpy_signedinteger __pyx_mstate_global->__pyx_ptype_5numpy_signedinteger +#define __pyx_ptype_5numpy_unsignedinteger __pyx_mstate_global->__pyx_ptype_5numpy_unsignedinteger +#define __pyx_ptype_5numpy_inexact __pyx_mstate_global->__pyx_ptype_5numpy_inexact +#define __pyx_ptype_5numpy_floating __pyx_mstate_global->__pyx_ptype_5numpy_floating +#define __pyx_ptype_5numpy_complexfloating __pyx_mstate_global->__pyx_ptype_5numpy_complexfloating +#define __pyx_ptype_5numpy_flexible __pyx_mstate_global->__pyx_ptype_5numpy_flexible +#define __pyx_ptype_5numpy_character __pyx_mstate_global->__pyx_ptype_5numpy_character +#define __pyx_ptype_5numpy_ufunc __pyx_mstate_global->__pyx_ptype_5numpy_ufunc +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#define __pyx_type___pyx_array __pyx_mstate_global->__pyx_type___pyx_array +#define __pyx_type___pyx_MemviewEnum __pyx_mstate_global->__pyx_type___pyx_MemviewEnum +#define __pyx_type___pyx_memoryview __pyx_mstate_global->__pyx_type___pyx_memoryview +#define __pyx_type___pyx_memoryviewslice __pyx_mstate_global->__pyx_type___pyx_memoryviewslice +#endif +#define __pyx_array_type __pyx_mstate_global->__pyx_array_type +#define __pyx_MemviewEnum_type __pyx_mstate_global->__pyx_MemviewEnum_type +#define __pyx_memoryview_type __pyx_mstate_global->__pyx_memoryview_type +#define __pyx_memoryviewslice_type __pyx_mstate_global->__pyx_memoryviewslice_type +#define __pyx_kp_u_ __pyx_mstate_global->__pyx_kp_u_ +#define __pyx_n_s_A __pyx_mstate_global->__pyx_n_s_A +#define __pyx_n_s_ASCII __pyx_mstate_global->__pyx_n_s_ASCII +#define __pyx_n_s_A_iids __pyx_mstate_global->__pyx_n_s_A_iids +#define __pyx_n_s_A_item_counts __pyx_mstate_global->__pyx_n_s_A_item_counts +#define __pyx_n_s_A_uids __pyx_mstate_global->__pyx_n_s_A_uids +#define __pyx_n_s_A_user_counts __pyx_mstate_global->__pyx_n_s_A_user_counts +#define __pyx_kp_s_All_dimensions_preceding_dimensi __pyx_mstate_global->__pyx_kp_s_All_dimensions_preceding_dimensi +#define __pyx_n_s_AssertionError __pyx_mstate_global->__pyx_n_s_AssertionError +#define __pyx_kp_s_Buffer_view_does_not_expose_stri __pyx_mstate_global->__pyx_kp_s_Buffer_view_does_not_expose_stri +#define __pyx_kp_u_Building_matrices_completed __pyx_mstate_global->__pyx_kp_u_Building_matrices_completed +#define __pyx_kp_s_Can_only_create_a_buffer_that_is __pyx_mstate_global->__pyx_kp_s_Can_only_create_a_buffer_that_is +#define __pyx_kp_u_Can_t_make_score_prediction_for __pyx_mstate_global->__pyx_kp_u_Can_t_make_score_prediction_for +#define __pyx_kp_u_Can_t_make_score_prediction_for_2 __pyx_mstate_global->__pyx_kp_u_Can_t_make_score_prediction_for_2 +#define __pyx_kp_s_Cannot_assign_to_read_only_memor __pyx_mstate_global->__pyx_kp_s_Cannot_assign_to_read_only_memor +#define __pyx_kp_s_Cannot_create_writable_memory_vi __pyx_mstate_global->__pyx_kp_s_Cannot_create_writable_memory_vi +#define __pyx_kp_u_Cannot_index_with_type __pyx_mstate_global->__pyx_kp_u_Cannot_index_with_type +#define __pyx_kp_s_Cannot_transpose_memoryview_with __pyx_mstate_global->__pyx_kp_s_Cannot_transpose_memoryview_with +#define __pyx_n_s_Counter __pyx_mstate_global->__pyx_n_s_Counter +#define __pyx_kp_s_Dimension_d_is_not_direct __pyx_mstate_global->__pyx_kp_s_Dimension_d_is_not_direct +#define __pyx_n_s_EFM __pyx_mstate_global->__pyx_n_s_EFM +#define __pyx_n_u_EFM __pyx_mstate_global->__pyx_n_u_EFM +#define __pyx_n_s_EFM___init __pyx_mstate_global->__pyx_n_s_EFM___init +#define __pyx_n_s_EFM__build_matrices __pyx_mstate_global->__pyx_n_s_EFM__build_matrices +#define __pyx_n_s_EFM__compute_attention_score __pyx_mstate_global->__pyx_n_s_EFM__compute_attention_score +#define __pyx_n_s_EFM__compute_quality_score __pyx_mstate_global->__pyx_n_s_EFM__compute_quality_score +#define __pyx_n_s_EFM__fit_efm __pyx_mstate_global->__pyx_n_s_EFM__fit_efm +#define __pyx_n_s_EFM__init __pyx_mstate_global->__pyx_n_s_EFM__init +#define __pyx_n_s_EFM_fit __pyx_mstate_global->__pyx_n_s_EFM_fit +#define __pyx_n_s_EFM_rank __pyx_mstate_global->__pyx_n_s_EFM_rank +#define __pyx_n_s_EFM_score __pyx_mstate_global->__pyx_n_s_EFM_score +#define __pyx_n_s_Ellipsis __pyx_mstate_global->__pyx_n_s_Ellipsis +#define __pyx_kp_s_Empty_shape_tuple_for_cython_arr __pyx_mstate_global->__pyx_kp_s_Empty_shape_tuple_for_cython_arr +#define __pyx_kp_s_Expected_at_least_d_argument_s_g __pyx_mstate_global->__pyx_kp_s_Expected_at_least_d_argument_s_g +#define __pyx_kp_s_Explict_Factor_Models_Parameters __pyx_mstate_global->__pyx_kp_s_Explict_Factor_Models_Parameters +#define __pyx_kp_s_Function_call_with_ambiguous_arg __pyx_mstate_global->__pyx_kp_s_Function_call_with_ambiguous_arg +#define __pyx_n_s_H1 __pyx_mstate_global->__pyx_n_s_H1 +#define __pyx_n_u_H1 __pyx_mstate_global->__pyx_n_u_H1 +#define __pyx_n_s_H1_denominator __pyx_mstate_global->__pyx_n_s_H1_denominator +#define __pyx_n_s_H1_numerator __pyx_mstate_global->__pyx_n_s_H1_numerator +#define __pyx_n_s_H2 __pyx_mstate_global->__pyx_n_s_H2 +#define __pyx_n_u_H2 __pyx_mstate_global->__pyx_n_u_H2 +#define __pyx_n_s_H2_denominator __pyx_mstate_global->__pyx_n_s_H2_denominator +#define __pyx_n_s_H2_numerator __pyx_mstate_global->__pyx_n_s_H2_numerator +#define __pyx_n_s_ImportError __pyx_mstate_global->__pyx_n_s_ImportError +#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0 +#define __pyx_n_s_IndexError __pyx_mstate_global->__pyx_n_s_IndexError +#define __pyx_kp_s_Index_out_of_bounds_axis_d __pyx_mstate_global->__pyx_kp_s_Index_out_of_bounds_axis_d +#define __pyx_kp_s_Indirect_dimensions_not_supporte __pyx_mstate_global->__pyx_kp_s_Indirect_dimensions_not_supporte +#define __pyx_kp_u_Invalid_mode_expected_c_or_fortr __pyx_mstate_global->__pyx_kp_u_Invalid_mode_expected_c_or_fortr +#define __pyx_kp_u_Invalid_shape_in_axis __pyx_mstate_global->__pyx_kp_u_Invalid_shape_in_axis +#define __pyx_n_s_MemoryError __pyx_mstate_global->__pyx_n_s_MemoryError +#define __pyx_kp_s_MemoryView_of_r_at_0x_x __pyx_mstate_global->__pyx_kp_s_MemoryView_of_r_at_0x_x +#define __pyx_kp_s_MemoryView_of_r_object __pyx_mstate_global->__pyx_kp_s_MemoryView_of_r_object +#define __pyx_kp_s_No_matching_signature_found __pyx_mstate_global->__pyx_kp_s_No_matching_signature_found +#define __pyx_n_b_O __pyx_mstate_global->__pyx_n_b_O +#define __pyx_kp_u_Optimization_finished __pyx_mstate_global->__pyx_kp_u_Optimization_finished +#define __pyx_n_s_OrderedDict __pyx_mstate_global->__pyx_n_s_OrderedDict +#define __pyx_kp_u_Out_of_bounds_on_buffer_access_a __pyx_mstate_global->__pyx_kp_u_Out_of_bounds_on_buffer_access_a +#define __pyx_n_s_PickleError __pyx_mstate_global->__pyx_n_s_PickleError +#define __pyx_n_s_Recommender __pyx_mstate_global->__pyx_n_s_Recommender +#define __pyx_n_s_ScoreException __pyx_mstate_global->__pyx_n_s_ScoreException +#define __pyx_n_s_Sequence __pyx_mstate_global->__pyx_n_s_Sequence +#define __pyx_kp_s_Step_may_not_be_zero_axis_d __pyx_mstate_global->__pyx_kp_s_Step_may_not_be_zero_axis_d +#define __pyx_n_s_T __pyx_mstate_global->__pyx_n_s_T +#define __pyx_n_s_TypeError __pyx_mstate_global->__pyx_n_s_TypeError +#define __pyx_n_s_U1 __pyx_mstate_global->__pyx_n_s_U1 +#define __pyx_n_u_U1 __pyx_mstate_global->__pyx_n_u_U1 +#define __pyx_n_s_U1_denominator __pyx_mstate_global->__pyx_n_s_U1_denominator +#define __pyx_n_s_U1_numerator __pyx_mstate_global->__pyx_n_s_U1_numerator +#define __pyx_n_s_U2 __pyx_mstate_global->__pyx_n_s_U2 +#define __pyx_n_u_U2 __pyx_mstate_global->__pyx_n_u_U2 +#define __pyx_n_s_U2_denominator __pyx_mstate_global->__pyx_n_s_U2_denominator +#define __pyx_n_s_U2_numerator __pyx_mstate_global->__pyx_n_s_U2_numerator +#define __pyx_kp_s_Unable_to_convert_item_to_object __pyx_mstate_global->__pyx_kp_s_Unable_to_convert_item_to_object +#define __pyx_n_s_V __pyx_mstate_global->__pyx_n_s_V +#define __pyx_n_u_V __pyx_mstate_global->__pyx_n_u_V +#define __pyx_n_s_V_denominator __pyx_mstate_global->__pyx_n_s_V_denominator +#define __pyx_n_s_V_numerator __pyx_mstate_global->__pyx_n_s_V_numerator +#define __pyx_n_s_ValueError __pyx_mstate_global->__pyx_n_s_ValueError +#define __pyx_n_s_View_MemoryView __pyx_mstate_global->__pyx_n_s_View_MemoryView +#define __pyx_n_s_X __pyx_mstate_global->__pyx_n_s_X +#define __pyx_n_s_X_2 __pyx_mstate_global->__pyx_n_s_X_2 +#define __pyx_n_s_X_aids __pyx_mstate_global->__pyx_n_s_X_aids +#define __pyx_n_s_X_aspect_counts __pyx_mstate_global->__pyx_n_s_X_aspect_counts +#define __pyx_n_s_X_uids __pyx_mstate_global->__pyx_n_s_X_uids +#define __pyx_n_s_X_user_counts __pyx_mstate_global->__pyx_n_s_X_user_counts +#define __pyx_n_s_Y __pyx_mstate_global->__pyx_n_s_Y +#define __pyx_n_s_Y_aids __pyx_mstate_global->__pyx_n_s_Y_aids +#define __pyx_n_s_Y_aspect_counts __pyx_mstate_global->__pyx_n_s_Y_aspect_counts +#define __pyx_n_s_Y_iids __pyx_mstate_global->__pyx_n_s_Y_iids +#define __pyx_n_s_Y_item_counts __pyx_mstate_global->__pyx_n_s_Y_item_counts +#define __pyx_kp_s__16 __pyx_mstate_global->__pyx_kp_s__16 +#define __pyx_kp_s__17 __pyx_mstate_global->__pyx_kp_s__17 +#define __pyx_kp_u__17 __pyx_mstate_global->__pyx_kp_u__17 +#define __pyx_kp_u__2 __pyx_mstate_global->__pyx_kp_u__2 +#define __pyx_n_s__3 __pyx_mstate_global->__pyx_n_s__3 +#define __pyx_n_s__45 __pyx_mstate_global->__pyx_n_s__45 +#define __pyx_n_s__58 __pyx_mstate_global->__pyx_n_s__58 +#define __pyx_kp_u__6 __pyx_mstate_global->__pyx_kp_u__6 +#define __pyx_kp_u__7 __pyx_mstate_global->__pyx_kp_u__7 +#define __pyx_n_s_abc __pyx_mstate_global->__pyx_n_s_abc +#define __pyx_n_s_aid __pyx_mstate_global->__pyx_n_s_aid +#define __pyx_n_s_all_item_scores __pyx_mstate_global->__pyx_n_s_all_item_scores +#define __pyx_n_s_allocate_buffer __pyx_mstate_global->__pyx_n_s_allocate_buffer +#define __pyx_n_s_alpha __pyx_mstate_global->__pyx_n_s_alpha +#define __pyx_kp_u_and __pyx_mstate_global->__pyx_kp_u_and +#define __pyx_n_s_append __pyx_mstate_global->__pyx_n_s_append +#define __pyx_n_s_arange __pyx_mstate_global->__pyx_n_s_arange +#define __pyx_n_s_args __pyx_mstate_global->__pyx_n_s_args +#define __pyx_n_s_argsort __pyx_mstate_global->__pyx_n_s_argsort +#define __pyx_n_s_array __pyx_mstate_global->__pyx_n_s_array +#define __pyx_n_s_asarray __pyx_mstate_global->__pyx_n_s_asarray +#define __pyx_n_s_astype __pyx_mstate_global->__pyx_n_s_astype +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_attention_scores __pyx_mstate_global->__pyx_n_s_attention_scores +#define __pyx_n_s_avg_sentiment __pyx_mstate_global->__pyx_n_s_avg_sentiment +#define __pyx_n_s_base __pyx_mstate_global->__pyx_n_s_base +#define __pyx_n_s_build_matrices __pyx_mstate_global->__pyx_n_s_build_matrices +#define __pyx_n_s_c __pyx_mstate_global->__pyx_n_s_c +#define __pyx_n_u_c __pyx_mstate_global->__pyx_n_u_c +#define __pyx_n_s_class __pyx_mstate_global->__pyx_n_s_class +#define __pyx_n_s_class_getitem __pyx_mstate_global->__pyx_n_s_class_getitem +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_collections __pyx_mstate_global->__pyx_n_s_collections +#define __pyx_kp_s_collections_abc __pyx_mstate_global->__pyx_kp_s_collections_abc +#define __pyx_n_s_compute_attention_score __pyx_mstate_global->__pyx_n_s_compute_attention_score +#define __pyx_n_s_compute_quality_score __pyx_mstate_global->__pyx_n_s_compute_quality_score +#define __pyx_kp_s_contiguous_and_direct __pyx_mstate_global->__pyx_kp_s_contiguous_and_direct +#define __pyx_kp_s_contiguous_and_indirect __pyx_mstate_global->__pyx_kp_s_contiguous_and_indirect +#define __pyx_n_s_cornac_models_efm_recom_efm __pyx_mstate_global->__pyx_n_s_cornac_models_efm_recom_efm +#define __pyx_kp_s_cornac_models_efm_recom_efm_pyx __pyx_mstate_global->__pyx_kp_s_cornac_models_efm_recom_efm_pyx +#define __pyx_n_s_count __pyx_mstate_global->__pyx_n_s_count +#define __pyx_n_s_cpu_count __pyx_mstate_global->__pyx_n_s_cpu_count +#define __pyx_n_s_csr_matrix __pyx_mstate_global->__pyx_n_s_csr_matrix +#define __pyx_n_u_d __pyx_mstate_global->__pyx_n_u_d +#define __pyx_n_s_data __pyx_mstate_global->__pyx_n_s_data +#define __pyx_n_s_data_set __pyx_mstate_global->__pyx_n_s_data_set +#define __pyx_n_s_defaults __pyx_mstate_global->__pyx_n_s_defaults +#define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict +#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable +#define __pyx_n_s_doc __pyx_mstate_global->__pyx_n_s_doc +#define __pyx_n_s_dot __pyx_mstate_global->__pyx_n_s_dot +#define __pyx_n_s_double __pyx_mstate_global->__pyx_n_s_double +#define __pyx_kp_s_double_int __pyx_mstate_global->__pyx_kp_s_double_int +#define __pyx_kp_s_double_long __pyx_mstate_global->__pyx_kp_s_double_long +#define __pyx_kp_s_double_short __pyx_mstate_global->__pyx_kp_s_double_short +#define __pyx_n_s_dtype __pyx_mstate_global->__pyx_n_s_dtype +#define __pyx_n_s_dtype_is_object __pyx_mstate_global->__pyx_n_s_dtype_is_object +#define __pyx_n_s_ediff1d __pyx_mstate_global->__pyx_n_s_ediff1d +#define __pyx_n_s_empty __pyx_mstate_global->__pyx_n_s_empty +#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable +#define __pyx_n_s_encode __pyx_mstate_global->__pyx_n_s_encode +#define __pyx_n_s_enumerate __pyx_mstate_global->__pyx_n_s_enumerate +#define __pyx_n_s_eps __pyx_mstate_global->__pyx_n_s_eps +#define __pyx_n_s_error __pyx_mstate_global->__pyx_n_s_error +#define __pyx_n_s_exception __pyx_mstate_global->__pyx_n_s_exception +#define __pyx_n_s_exp __pyx_mstate_global->__pyx_n_s_exp +#define __pyx_n_s_explicit_scores __pyx_mstate_global->__pyx_n_s_explicit_scores +#define __pyx_n_u_f __pyx_mstate_global->__pyx_n_u_f +#define __pyx_n_s_fill __pyx_mstate_global->__pyx_n_s_fill +#define __pyx_n_s_fit __pyx_mstate_global->__pyx_n_s_fit +#define __pyx_n_s_fit_efm __pyx_mstate_global->__pyx_n_s_fit_efm +#define __pyx_n_s_flags __pyx_mstate_global->__pyx_n_s_flags +#define __pyx_n_s_flatten __pyx_mstate_global->__pyx_n_s_flatten +#define __pyx_n_s_float __pyx_mstate_global->__pyx_n_s_float +#define __pyx_n_s_float32 __pyx_mstate_global->__pyx_n_s_float32 +#define __pyx_kp_s_float_int __pyx_mstate_global->__pyx_kp_s_float_int +#define __pyx_kp_s_float_long __pyx_mstate_global->__pyx_kp_s_float_long +#define __pyx_kp_s_float_short __pyx_mstate_global->__pyx_kp_s_float_short +#define __pyx_n_s_format __pyx_mstate_global->__pyx_n_s_format +#define __pyx_n_s_fortran __pyx_mstate_global->__pyx_n_s_fortran +#define __pyx_n_u_fortran __pyx_mstate_global->__pyx_n_u_fortran +#define __pyx_n_s_fused_sigindex __pyx_mstate_global->__pyx_n_s_fused_sigindex +#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc +#define __pyx_n_s_get __pyx_mstate_global->__pyx_n_s_get +#define __pyx_n_s_get_rng __pyx_mstate_global->__pyx_n_s_get_rng +#define __pyx_n_s_getstate __pyx_mstate_global->__pyx_n_s_getstate +#define __pyx_kp_u_got __pyx_mstate_global->__pyx_kp_u_got +#define __pyx_kp_u_got_differing_extents_in_dimensi __pyx_mstate_global->__pyx_kp_u_got_differing_extents_in_dimensi +#define __pyx_n_s_high __pyx_mstate_global->__pyx_n_s_high +#define __pyx_n_s_i __pyx_mstate_global->__pyx_n_s_i +#define __pyx_n_s_id __pyx_mstate_global->__pyx_n_s_id +#define __pyx_n_s_idx __pyx_mstate_global->__pyx_n_s_idx +#define __pyx_n_s_iid __pyx_mstate_global->__pyx_n_s_iid +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_index __pyx_mstate_global->__pyx_n_s_index +#define __pyx_n_s_indices __pyx_mstate_global->__pyx_n_s_indices +#define __pyx_n_s_indptr __pyx_mstate_global->__pyx_n_s_indptr +#define __pyx_n_s_init __pyx_mstate_global->__pyx_n_s_init +#define __pyx_n_s_init_2 __pyx_mstate_global->__pyx_n_s_init_2 +#define __pyx_n_s_init_params __pyx_mstate_global->__pyx_n_s_init_params +#define __pyx_n_s_init_subclass __pyx_mstate_global->__pyx_n_s_init_subclass +#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing +#define __pyx_n_s_int __pyx_mstate_global->__pyx_n_s_int +#define __pyx_n_s_int32 __pyx_mstate_global->__pyx_n_s_int32 +#define __pyx_n_s_intersects __pyx_mstate_global->__pyx_n_s_intersects +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_n_s_is_unk_item __pyx_mstate_global->__pyx_n_s_is_unk_item +#define __pyx_n_s_is_unk_user __pyx_mstate_global->__pyx_n_s_is_unk_user +#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled +#define __pyx_n_s_item_aspect_count __pyx_mstate_global->__pyx_n_s_item_aspect_count +#define __pyx_n_s_item_aspects __pyx_mstate_global->__pyx_n_s_item_aspects +#define __pyx_kp_u_item_id __pyx_mstate_global->__pyx_kp_u_item_id +#define __pyx_n_s_item_idx __pyx_mstate_global->__pyx_n_s_item_idx +#define __pyx_n_s_item_indices __pyx_mstate_global->__pyx_n_s_item_indices +#define __pyx_n_s_item_rank __pyx_mstate_global->__pyx_n_s_item_rank +#define __pyx_n_s_item_score __pyx_mstate_global->__pyx_n_s_item_score +#define __pyx_n_s_item_scores __pyx_mstate_global->__pyx_n_s_item_scores +#define __pyx_n_s_item_sentiment __pyx_mstate_global->__pyx_n_s_item_sentiment +#define __pyx_n_s_items __pyx_mstate_global->__pyx_n_s_items +#define __pyx_n_s_itemsize __pyx_mstate_global->__pyx_n_s_itemsize +#define __pyx_kp_s_itemsize_0_for_cython_array __pyx_mstate_global->__pyx_kp_s_itemsize_0_for_cython_array +#define __pyx_kp_u_iter __pyx_mstate_global->__pyx_kp_u_iter +#define __pyx_n_s_j __pyx_mstate_global->__pyx_n_s_j +#define __pyx_n_s_k __pyx_mstate_global->__pyx_n_s_k +#define __pyx_n_s_kind __pyx_mstate_global->__pyx_n_s_kind +#define __pyx_n_s_known_item_scores __pyx_mstate_global->__pyx_n_s_known_item_scores +#define __pyx_n_s_kwargs __pyx_mstate_global->__pyx_n_s_kwargs +#define __pyx_n_s_lambda_h __pyx_mstate_global->__pyx_n_s_lambda_h +#define __pyx_n_s_lambda_u __pyx_mstate_global->__pyx_n_s_lambda_u +#define __pyx_n_s_lambda_v __pyx_mstate_global->__pyx_n_s_lambda_v +#define __pyx_n_s_lambda_x __pyx_mstate_global->__pyx_n_s_lambda_x +#define __pyx_n_s_lambda_y __pyx_mstate_global->__pyx_n_s_lambda_y +#define __pyx_n_s_long __pyx_mstate_global->__pyx_n_s_long +#define __pyx_kp_u_loss __pyx_mstate_global->__pyx_kp_u_loss +#define __pyx_n_s_loss_2 __pyx_mstate_global->__pyx_n_s_loss_2 +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_map_aspect_id __pyx_mstate_global->__pyx_n_s_map_aspect_id +#define __pyx_n_s_map_iid __pyx_mstate_global->__pyx_n_s_map_iid +#define __pyx_n_s_map_uid __pyx_mstate_global->__pyx_n_s_map_uid +#define __pyx_n_s_max_iter __pyx_mstate_global->__pyx_n_s_max_iter +#define __pyx_n_s_memview __pyx_mstate_global->__pyx_n_s_memview +#define __pyx_n_s_metaclass __pyx_mstate_global->__pyx_n_s_metaclass +#define __pyx_n_s_min __pyx_mstate_global->__pyx_n_s_min +#define __pyx_n_s_mode __pyx_mstate_global->__pyx_n_s_mode +#define __pyx_n_s_module __pyx_mstate_global->__pyx_n_s_module +#define __pyx_n_s_most_cared_X __pyx_mstate_global->__pyx_n_s_most_cared_X +#define __pyx_n_s_most_cared_Y __pyx_mstate_global->__pyx_n_s_most_cared_Y +#define __pyx_n_s_most_cared_aspects_indices __pyx_mstate_global->__pyx_n_s_most_cared_aspects_indices +#define __pyx_n_s_mro_entries __pyx_mstate_global->__pyx_n_s_mro_entries +#define __pyx_n_s_multiprocessing __pyx_mstate_global->__pyx_n_s_multiprocessing +#define __pyx_n_s_n_aspects __pyx_mstate_global->__pyx_n_s_n_aspects +#define __pyx_n_s_n_efactors __pyx_mstate_global->__pyx_n_s_n_efactors +#define __pyx_n_s_n_factors __pyx_mstate_global->__pyx_n_s_n_factors +#define __pyx_n_s_n_items __pyx_mstate_global->__pyx_n_s_n_items +#define __pyx_n_s_n_lfactors __pyx_mstate_global->__pyx_n_s_n_lfactors +#define __pyx_n_s_n_ratings __pyx_mstate_global->__pyx_n_s_n_ratings +#define __pyx_n_s_n_users __pyx_mstate_global->__pyx_n_s_n_users +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_s_name_2 __pyx_mstate_global->__pyx_n_s_name_2 +#define __pyx_n_s_ndim __pyx_mstate_global->__pyx_n_s_ndim +#define __pyx_n_s_new __pyx_mstate_global->__pyx_n_s_new +#define __pyx_kp_s_no_default___reduce___due_to_non __pyx_mstate_global->__pyx_kp_s_no_default___reduce___due_to_non +#define __pyx_n_s_np __pyx_mstate_global->__pyx_n_s_np +#define __pyx_n_s_num_aspects __pyx_mstate_global->__pyx_n_s_num_aspects +#define __pyx_n_s_num_explicit_factors __pyx_mstate_global->__pyx_n_s_num_explicit_factors +#define __pyx_n_s_num_items __pyx_mstate_global->__pyx_n_s_num_items +#define __pyx_n_s_num_latent_factors __pyx_mstate_global->__pyx_n_s_num_latent_factors +#define __pyx_n_s_num_most_cared_aspects __pyx_mstate_global->__pyx_n_s_num_most_cared_aspects +#define __pyx_n_s_num_threads __pyx_mstate_global->__pyx_n_s_num_threads +#define __pyx_n_s_num_users __pyx_mstate_global->__pyx_n_s_num_users +#define __pyx_n_s_numpy __pyx_mstate_global->__pyx_n_s_numpy +#define __pyx_kp_u_numpy_core_multiarray_failed_to __pyx_mstate_global->__pyx_kp_u_numpy_core_multiarray_failed_to +#define __pyx_kp_u_numpy_core_umath_failed_to_impor __pyx_mstate_global->__pyx_kp_u_numpy_core_umath_failed_to_impor +#define __pyx_n_s_obj __pyx_mstate_global->__pyx_n_s_obj +#define __pyx_n_s_ones __pyx_mstate_global->__pyx_n_s_ones +#define __pyx_n_s_pack __pyx_mstate_global->__pyx_n_s_pack +#define __pyx_n_s_pickle __pyx_mstate_global->__pyx_n_s_pickle +#define __pyx_n_s_prediction __pyx_mstate_global->__pyx_n_s_prediction +#define __pyx_n_s_prepare __pyx_mstate_global->__pyx_n_s_prepare +#define __pyx_n_s_print __pyx_mstate_global->__pyx_n_s_print +#define __pyx_n_s_pyx_PickleError __pyx_mstate_global->__pyx_n_s_pyx_PickleError +#define __pyx_n_s_pyx_checksum __pyx_mstate_global->__pyx_n_s_pyx_checksum +#define __pyx_n_s_pyx_result __pyx_mstate_global->__pyx_n_s_pyx_result +#define __pyx_n_s_pyx_state __pyx_mstate_global->__pyx_n_s_pyx_state +#define __pyx_n_s_pyx_type __pyx_mstate_global->__pyx_n_s_pyx_type +#define __pyx_n_s_pyx_unpickle_Enum __pyx_mstate_global->__pyx_n_s_pyx_unpickle_Enum +#define __pyx_n_s_pyx_vtable __pyx_mstate_global->__pyx_n_s_pyx_vtable +#define __pyx_n_s_quality_scores __pyx_mstate_global->__pyx_n_s_quality_scores +#define __pyx_n_s_qualname __pyx_mstate_global->__pyx_n_s_qualname +#define __pyx_n_s_random_state __pyx_mstate_global->__pyx_n_s_random_state +#define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range +#define __pyx_n_s_rank __pyx_mstate_global->__pyx_n_s_rank +#define __pyx_n_s_rating __pyx_mstate_global->__pyx_n_s_rating +#define __pyx_n_s_rating_scale __pyx_mstate_global->__pyx_n_s_rating_scale +#define __pyx_n_s_ratings __pyx_mstate_global->__pyx_n_s_ratings +#define __pyx_n_s_recommender __pyx_mstate_global->__pyx_n_s_recommender +#define __pyx_n_s_reduce __pyx_mstate_global->__pyx_n_s_reduce +#define __pyx_n_s_reduce_cython __pyx_mstate_global->__pyx_n_s_reduce_cython +#define __pyx_n_s_reduce_ex __pyx_mstate_global->__pyx_n_s_reduce_ex +#define __pyx_n_s_register __pyx_mstate_global->__pyx_n_s_register +#define __pyx_n_s_repeat __pyx_mstate_global->__pyx_n_s_repeat +#define __pyx_n_s_rng __pyx_mstate_global->__pyx_n_s_rng +#define __pyx_n_s_s __pyx_mstate_global->__pyx_n_s_s +#define __pyx_n_s_scipy __pyx_mstate_global->__pyx_n_s_scipy +#define __pyx_n_s_scipy_sparse __pyx_mstate_global->__pyx_n_s_scipy_sparse +#define __pyx_n_s_score __pyx_mstate_global->__pyx_n_s_score +#define __pyx_n_s_seed __pyx_mstate_global->__pyx_n_s_seed +#define __pyx_n_s_self __pyx_mstate_global->__pyx_n_s_self +#define __pyx_n_s_sentiment __pyx_mstate_global->__pyx_n_s_sentiment +#define __pyx_n_s_sentiment_polarity __pyx_mstate_global->__pyx_n_s_sentiment_polarity +#define __pyx_n_s_sentiment_tup_ids_by_item __pyx_mstate_global->__pyx_n_s_sentiment_tup_ids_by_item +#define __pyx_n_s_sentiment_tup_ids_by_user __pyx_mstate_global->__pyx_n_s_sentiment_tup_ids_by_user +#define __pyx_n_s_set_name __pyx_mstate_global->__pyx_n_s_set_name +#define __pyx_n_s_setstate __pyx_mstate_global->__pyx_n_s_setstate +#define __pyx_n_s_setstate_cython __pyx_mstate_global->__pyx_n_s_setstate_cython +#define __pyx_n_s_shape __pyx_mstate_global->__pyx_n_s_shape +#define __pyx_n_s_short __pyx_mstate_global->__pyx_n_s_short +#define __pyx_n_s_signatures __pyx_mstate_global->__pyx_n_s_signatures +#define __pyx_n_s_size __pyx_mstate_global->__pyx_n_s_size +#define __pyx_n_s_sp __pyx_mstate_global->__pyx_n_s_sp +#define __pyx_n_s_sparse __pyx_mstate_global->__pyx_n_s_sparse +#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec +#define __pyx_n_s_split __pyx_mstate_global->__pyx_n_s_split +#define __pyx_n_s_sqrt __pyx_mstate_global->__pyx_n_s_sqrt +#define __pyx_n_s_start __pyx_mstate_global->__pyx_n_s_start +#define __pyx_n_s_step __pyx_mstate_global->__pyx_n_s_step +#define __pyx_n_s_stop __pyx_mstate_global->__pyx_n_s_stop +#define __pyx_kp_s_strided_and_direct __pyx_mstate_global->__pyx_kp_s_strided_and_direct +#define __pyx_kp_s_strided_and_direct_or_indirect __pyx_mstate_global->__pyx_kp_s_strided_and_direct_or_indirect +#define __pyx_kp_s_strided_and_indirect __pyx_mstate_global->__pyx_kp_s_strided_and_indirect +#define __pyx_kp_s_stringsource __pyx_mstate_global->__pyx_kp_s_stringsource +#define __pyx_n_s_strip __pyx_mstate_global->__pyx_n_s_strip +#define __pyx_n_s_struct __pyx_mstate_global->__pyx_n_s_struct +#define __pyx_n_s_super __pyx_mstate_global->__pyx_n_s_super +#define __pyx_n_s_sys __pyx_mstate_global->__pyx_n_s_sys +#define __pyx_n_s_t __pyx_mstate_global->__pyx_n_s_t +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_tocsc __pyx_mstate_global->__pyx_n_s_tocsc +#define __pyx_n_s_total_items __pyx_mstate_global->__pyx_n_s_total_items +#define __pyx_n_s_total_sentiment __pyx_mstate_global->__pyx_n_s_total_sentiment +#define __pyx_n_s_total_sentiment_by_aspect __pyx_mstate_global->__pyx_n_s_total_sentiment_by_aspect +#define __pyx_n_s_train_set __pyx_mstate_global->__pyx_n_s_train_set +#define __pyx_n_s_trainable __pyx_mstate_global->__pyx_n_s_trainable +#define __pyx_n_s_tup __pyx_mstate_global->__pyx_n_s_tup +#define __pyx_n_s_tup_id __pyx_mstate_global->__pyx_n_s_tup_id +#define __pyx_n_s_uid __pyx_mstate_global->__pyx_n_s_uid +#define __pyx_n_s_uir_iter __pyx_mstate_global->__pyx_n_s_uir_iter +#define __pyx_kp_s_unable_to_allocate_array_data __pyx_mstate_global->__pyx_kp_s_unable_to_allocate_array_data +#define __pyx_kp_s_unable_to_allocate_shape_and_str __pyx_mstate_global->__pyx_kp_s_unable_to_allocate_shape_and_str +#define __pyx_n_s_uniform __pyx_mstate_global->__pyx_n_s_uniform +#define __pyx_n_s_unpack __pyx_mstate_global->__pyx_n_s_unpack +#define __pyx_n_s_update __pyx_mstate_global->__pyx_n_s_update +#define __pyx_n_s_use_item_aspect_popularity __pyx_mstate_global->__pyx_n_s_use_item_aspect_popularity +#define __pyx_n_s_user_aspect_count __pyx_mstate_global->__pyx_n_s_user_aspect_count +#define __pyx_n_s_user_aspects __pyx_mstate_global->__pyx_n_s_user_aspects +#define __pyx_n_s_user_idx __pyx_mstate_global->__pyx_n_s_user_idx +#define __pyx_n_s_user_sentiment __pyx_mstate_global->__pyx_n_s_user_sentiment +#define __pyx_n_s_utils __pyx_mstate_global->__pyx_n_s_utils +#define __pyx_n_s_utils_common __pyx_mstate_global->__pyx_n_s_utils_common +#define __pyx_n_s_utils_init_utils __pyx_mstate_global->__pyx_n_s_utils_init_utils +#define __pyx_n_s_val_set __pyx_mstate_global->__pyx_n_s_val_set +#define __pyx_n_s_values __pyx_mstate_global->__pyx_n_s_values +#define __pyx_n_s_verbose __pyx_mstate_global->__pyx_n_s_verbose +#define __pyx_n_s_version_info __pyx_mstate_global->__pyx_n_s_version_info +#define __pyx_float_5_0 __pyx_mstate_global->__pyx_float_5_0 +#define __pyx_float_0_01 __pyx_mstate_global->__pyx_float_0_01 +#define __pyx_float_0_85 __pyx_mstate_global->__pyx_float_0_85 +#define __pyx_int_0 __pyx_mstate_global->__pyx_int_0 +#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 +#define __pyx_int_2 __pyx_mstate_global->__pyx_int_2 +#define __pyx_int_3 __pyx_mstate_global->__pyx_int_3 +#define __pyx_int_15 __pyx_mstate_global->__pyx_int_15 +#define __pyx_int_22 __pyx_mstate_global->__pyx_int_22 +#define __pyx_int_40 __pyx_mstate_global->__pyx_int_40 +#define __pyx_int_60 __pyx_mstate_global->__pyx_int_60 +#define __pyx_int_100 __pyx_mstate_global->__pyx_int_100 +#define __pyx_int_112105877 __pyx_mstate_global->__pyx_int_112105877 +#define __pyx_int_136983863 __pyx_mstate_global->__pyx_int_136983863 +#define __pyx_int_184977713 __pyx_mstate_global->__pyx_int_184977713 +#define __pyx_int_neg_1 __pyx_mstate_global->__pyx_int_neg_1 +#define __pyx_slice__5 __pyx_mstate_global->__pyx_slice__5 +#define __pyx_tuple__4 __pyx_mstate_global->__pyx_tuple__4 +#define __pyx_tuple__8 __pyx_mstate_global->__pyx_tuple__8 +#define __pyx_tuple__9 __pyx_mstate_global->__pyx_tuple__9 +#define __pyx_slice__22 __pyx_mstate_global->__pyx_slice__22 +#define __pyx_tuple__10 __pyx_mstate_global->__pyx_tuple__10 +#define __pyx_tuple__11 __pyx_mstate_global->__pyx_tuple__11 +#define __pyx_tuple__12 __pyx_mstate_global->__pyx_tuple__12 +#define __pyx_tuple__13 __pyx_mstate_global->__pyx_tuple__13 +#define __pyx_tuple__14 __pyx_mstate_global->__pyx_tuple__14 +#define __pyx_tuple__15 __pyx_mstate_global->__pyx_tuple__15 +#define __pyx_tuple__18 __pyx_mstate_global->__pyx_tuple__18 +#define __pyx_tuple__19 __pyx_mstate_global->__pyx_tuple__19 +#define __pyx_tuple__20 __pyx_mstate_global->__pyx_tuple__20 +#define __pyx_tuple__21 __pyx_mstate_global->__pyx_tuple__21 +#define __pyx_tuple__23 __pyx_mstate_global->__pyx_tuple__23 +#define __pyx_tuple__24 __pyx_mstate_global->__pyx_tuple__24 +#define __pyx_tuple__25 __pyx_mstate_global->__pyx_tuple__25 +#define __pyx_tuple__26 __pyx_mstate_global->__pyx_tuple__26 +#define __pyx_tuple__27 __pyx_mstate_global->__pyx_tuple__27 +#define __pyx_tuple__28 __pyx_mstate_global->__pyx_tuple__28 +#define __pyx_tuple__29 __pyx_mstate_global->__pyx_tuple__29 +#define __pyx_tuple__30 __pyx_mstate_global->__pyx_tuple__30 +#define __pyx_tuple__31 __pyx_mstate_global->__pyx_tuple__31 +#define __pyx_tuple__32 __pyx_mstate_global->__pyx_tuple__32 +#define __pyx_tuple__34 __pyx_mstate_global->__pyx_tuple__34 +#define __pyx_tuple__35 __pyx_mstate_global->__pyx_tuple__35 +#define __pyx_tuple__37 __pyx_mstate_global->__pyx_tuple__37 +#define __pyx_tuple__38 __pyx_mstate_global->__pyx_tuple__38 +#define __pyx_tuple__40 __pyx_mstate_global->__pyx_tuple__40 +#define __pyx_tuple__42 __pyx_mstate_global->__pyx_tuple__42 +#define __pyx_tuple__43 __pyx_mstate_global->__pyx_tuple__43 +#define __pyx_tuple__46 __pyx_mstate_global->__pyx_tuple__46 +#define __pyx_tuple__48 __pyx_mstate_global->__pyx_tuple__48 +#define __pyx_tuple__50 __pyx_mstate_global->__pyx_tuple__50 +#define __pyx_tuple__52 __pyx_mstate_global->__pyx_tuple__52 +#define __pyx_tuple__54 __pyx_mstate_global->__pyx_tuple__54 +#define __pyx_tuple__55 __pyx_mstate_global->__pyx_tuple__55 +#define __pyx_tuple__57 __pyx_mstate_global->__pyx_tuple__57 +#define __pyx_codeobj__33 __pyx_mstate_global->__pyx_codeobj__33 +#define __pyx_codeobj__36 __pyx_mstate_global->__pyx_codeobj__36 +#define __pyx_codeobj__39 __pyx_mstate_global->__pyx_codeobj__39 +#define __pyx_codeobj__41 __pyx_mstate_global->__pyx_codeobj__41 +#define __pyx_codeobj__44 __pyx_mstate_global->__pyx_codeobj__44 +#define __pyx_codeobj__47 __pyx_mstate_global->__pyx_codeobj__47 +#define __pyx_codeobj__49 __pyx_mstate_global->__pyx_codeobj__49 +#define __pyx_codeobj__51 __pyx_mstate_global->__pyx_codeobj__51 +#define __pyx_codeobj__53 __pyx_mstate_global->__pyx_codeobj__53 +#define __pyx_codeobj__56 __pyx_mstate_global->__pyx_codeobj__56 +/* #### Code section: module_code ### */ + +/* "View.MemoryView":131 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): * - * def __init__(self, name="EFM", # <<<<<<<<<<<<<< - * num_explicit_factors=40, num_latent_factors=60, num_most_cared_aspects=15, - * rating_scale=5.0, alpha=0.85, */ /* Python wrapper */ -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_1__init__ = {"__init__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_1__init__, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_name = 0; - PyObject *__pyx_v_num_explicit_factors = 0; - PyObject *__pyx_v_num_latent_factors = 0; - PyObject *__pyx_v_num_most_cared_aspects = 0; - PyObject *__pyx_v_rating_scale = 0; - PyObject *__pyx_v_alpha = 0; - PyObject *__pyx_v_lambda_x = 0; - PyObject *__pyx_v_lambda_y = 0; - PyObject *__pyx_v_lambda_u = 0; - PyObject *__pyx_v_lambda_h = 0; - PyObject *__pyx_v_lambda_v = 0; - PyObject *__pyx_v_use_item_aspect_popularity = 0; - PyObject *__pyx_v_max_iter = 0; - PyObject *__pyx_v_num_threads = 0; - PyObject *__pyx_v_trainable = 0; - PyObject *__pyx_v_verbose = 0; - PyObject *__pyx_v_init_params = 0; - PyObject *__pyx_v_seed = 0; +static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_shape = 0; + Py_ssize_t __pyx_v_itemsize; + PyObject *__pyx_v_format = 0; + PyObject *__pyx_v_mode = 0; + int __pyx_v_allocate_buffer; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - PyObject *__pyx_r = 0; + int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_name,&__pyx_n_s_num_explicit_factors,&__pyx_n_s_num_latent_factors,&__pyx_n_s_num_most_cared_aspects,&__pyx_n_s_rating_scale,&__pyx_n_s_alpha,&__pyx_n_s_lambda_x,&__pyx_n_s_lambda_y,&__pyx_n_s_lambda_u,&__pyx_n_s_lambda_h,&__pyx_n_s_lambda_v,&__pyx_n_s_use_item_aspect_popularity,&__pyx_n_s_max_iter,&__pyx_n_s_num_threads,&__pyx_n_s_trainable,&__pyx_n_s_verbose,&__pyx_n_s_init_params,&__pyx_n_s_seed,0}; - PyObject* values[19] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - values[1] = ((PyObject *)((PyObject*)__pyx_n_u_EFM)); - values[2] = ((PyObject *)((PyObject *)__pyx_int_40)); - values[3] = ((PyObject *)((PyObject *)__pyx_int_60)); - values[4] = ((PyObject *)((PyObject *)__pyx_int_15)); - values[5] = ((PyObject *)((PyObject*)__pyx_float_5_0)); - values[6] = ((PyObject *)((PyObject*)__pyx_float_0_85)); - values[7] = ((PyObject *)((PyObject *)__pyx_int_1)); - values[8] = ((PyObject *)((PyObject *)__pyx_int_1)); - values[9] = ((PyObject *)((PyObject*)__pyx_float_0_01)); - values[10] = ((PyObject *)((PyObject*)__pyx_float_0_01)); - values[11] = ((PyObject *)((PyObject*)__pyx_float_0_01)); - - /* "cornac/models/efm/recom_efm.pyx":133 - * rating_scale=5.0, alpha=0.85, - * lambda_x=1, lambda_y=1, lambda_u=0.01, lambda_h=0.01, lambda_v=0.01, - * use_item_aspect_popularity=True, max_iter=100, # <<<<<<<<<<<<<< - * num_threads=0, trainable=True, verbose=False, init_params=None, seed=None): - * - */ - values[12] = ((PyObject *)((PyObject *)Py_True)); - values[13] = ((PyObject *)((PyObject *)__pyx_int_100)); - values[14] = ((PyObject *)((PyObject *)__pyx_int_0)); - - /* "cornac/models/efm/recom_efm.pyx":134 - * lambda_x=1, lambda_y=1, lambda_u=0.01, lambda_h=0.01, lambda_v=0.01, - * use_item_aspect_popularity=True, max_iter=100, - * num_threads=0, trainable=True, verbose=False, init_params=None, seed=None): # <<<<<<<<<<<<<< - * - * Recommender.__init__(self, name=name, trainable=trainable, verbose=verbose) - */ - values[15] = ((PyObject *)((PyObject *)Py_True)); - values[16] = ((PyObject *)((PyObject *)Py_False)); - values[17] = ((PyObject *)((PyObject *)Py_None)); - values[18] = ((PyObject *)((PyObject *)Py_None)); - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shape,&__pyx_n_s_itemsize,&__pyx_n_s_format,&__pyx_n_s_mode,&__pyx_n_s_allocate_buffer,0}; + PyObject* values[5] = {0,0,0,0,0}; + values[3] = ((PyObject *)__pyx_n_s_c); + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - CYTHON_FALLTHROUGH; - case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - CYTHON_FALLTHROUGH; - case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - CYTHON_FALLTHROUGH; - case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - CYTHON_FALLTHROUGH; - case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - CYTHON_FALLTHROUGH; - case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - CYTHON_FALLTHROUGH; - case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - CYTHON_FALLTHROUGH; - case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - CYTHON_FALLTHROUGH; - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_shape)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name); - if (value) { values[1] = value; kw_args--; } + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_itemsize)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); __PYX_ERR(1, 131, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_explicit_factors); - if (value) { values[2] = value; kw_args--; } + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_format)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); __PYX_ERR(1, 131, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_latent_factors); + PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mode); if (value) { values[3] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_most_cared_aspects); + PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_allocate_buffer); if (value) { values[4] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 5: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rating_scale); - if (value) { values[5] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 6: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_alpha); - if (value) { values[6] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 7: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lambda_x); - if (value) { values[7] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 8: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lambda_y); - if (value) { values[8] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 9: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lambda_u); - if (value) { values[9] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 10: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lambda_h); - if (value) { values[10] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 11: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lambda_v); - if (value) { values[11] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 12: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_use_item_aspect_popularity); - if (value) { values[12] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 13: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_iter); - if (value) { values[13] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 14: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads); - if (value) { values[14] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 15: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_trainable); - if (value) { values[15] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 16: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_verbose); - if (value) { values[16] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 17: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_params); - if (value) { values[17] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 18: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_seed); - if (value) { values[18] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 129, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__cinit__") < 0)) __PYX_ERR(1, 131, __pyx_L3_error) } } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - CYTHON_FALLTHROUGH; - case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - CYTHON_FALLTHROUGH; - case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - CYTHON_FALLTHROUGH; - case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - CYTHON_FALLTHROUGH; - case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); CYTHON_FALLTHROUGH; - case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); CYTHON_FALLTHROUGH; - case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - CYTHON_FALLTHROUGH; - case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - CYTHON_FALLTHROUGH; - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } - __pyx_v_self = values[0]; - __pyx_v_name = values[1]; - __pyx_v_num_explicit_factors = values[2]; - __pyx_v_num_latent_factors = values[3]; - __pyx_v_num_most_cared_aspects = values[4]; - __pyx_v_rating_scale = values[5]; - __pyx_v_alpha = values[6]; - __pyx_v_lambda_x = values[7]; - __pyx_v_lambda_y = values[8]; - __pyx_v_lambda_u = values[9]; - __pyx_v_lambda_h = values[10]; - __pyx_v_lambda_v = values[11]; - __pyx_v_use_item_aspect_popularity = values[12]; - __pyx_v_max_iter = values[13]; - __pyx_v_num_threads = values[14]; - __pyx_v_trainable = values[15]; - __pyx_v_verbose = values[16]; - __pyx_v_init_params = values[17]; - __pyx_v_seed = values[18]; - } + __pyx_v_shape = ((PyObject*)values[0]); + __pyx_v_itemsize = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_itemsize == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error) + __pyx_v_format = values[2]; + __pyx_v_mode = values[3]; + if (values[4]) { + __pyx_v_allocate_buffer = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_allocate_buffer == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 132, __pyx_L3_error) + } else { + + /* "View.MemoryView":132 + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, + * mode="c", bint allocate_buffer=True): # <<<<<<<<<<<<<< + * + * cdef int idx + */ + __pyx_v_allocate_buffer = ((int)1); + } + } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 19, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 129, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, __pyx_nargs); __PYX_ERR(1, 131, __pyx_L3_error) __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); - return NULL; + return -1; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM___init__(__pyx_self, __pyx_v_self, __pyx_v_name, __pyx_v_num_explicit_factors, __pyx_v_num_latent_factors, __pyx_v_num_most_cared_aspects, __pyx_v_rating_scale, __pyx_v_alpha, __pyx_v_lambda_x, __pyx_v_lambda_y, __pyx_v_lambda_u, __pyx_v_lambda_h, __pyx_v_lambda_v, __pyx_v_use_item_aspect_popularity, __pyx_v_max_iter, __pyx_v_num_threads, __pyx_v_trainable, __pyx_v_verbose, __pyx_v_init_params, __pyx_v_seed); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shape), (&PyTuple_Type), 1, "shape", 1))) __PYX_ERR(1, 131, __pyx_L1_error) + if (unlikely(((PyObject *)__pyx_v_format) == Py_None)) { + PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "format"); __PYX_ERR(1, 131, __pyx_L1_error) + } + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v_shape, __pyx_v_itemsize, __pyx_v_format, __pyx_v_mode, __pyx_v_allocate_buffer); - /* "cornac/models/efm/recom_efm.pyx":129 - * """ + /* "View.MemoryView":131 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): * - * def __init__(self, name="EFM", # <<<<<<<<<<<<<< - * num_explicit_factors=40, num_latent_factors=60, num_most_cared_aspects=15, - * rating_scale=5.0, alpha=0.85, */ /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_num_explicit_factors, PyObject *__pyx_v_num_latent_factors, PyObject *__pyx_v_num_most_cared_aspects, PyObject *__pyx_v_rating_scale, PyObject *__pyx_v_alpha, PyObject *__pyx_v_lambda_x, PyObject *__pyx_v_lambda_y, PyObject *__pyx_v_lambda_u, PyObject *__pyx_v_lambda_h, PyObject *__pyx_v_lambda_v, PyObject *__pyx_v_use_item_aspect_popularity, PyObject *__pyx_v_max_iter, PyObject *__pyx_v_num_threads, PyObject *__pyx_v_trainable, PyObject *__pyx_v_verbose, PyObject *__pyx_v_init_params, PyObject *__pyx_v_seed) { - PyObject *__pyx_r = NULL; +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer) { + int __pyx_v_idx; + Py_ssize_t __pyx_v_dim; + char __pyx_v_order; + int __pyx_r; __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_t_6; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + char *__pyx_t_8; + Py_ssize_t __pyx_t_9; + Py_UCS4 __pyx_t_10; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); + __Pyx_RefNannySetupContext("__cinit__", 0); + __Pyx_INCREF(__pyx_v_format); - /* "cornac/models/efm/recom_efm.pyx":136 - * num_threads=0, trainable=True, verbose=False, init_params=None, seed=None): + /* "View.MemoryView":137 + * cdef Py_ssize_t dim + * + * self.ndim = len(shape) # <<<<<<<<<<<<<< + * self.itemsize = itemsize * - * Recommender.__init__(self, name=name, trainable=trainable, verbose=verbose) # <<<<<<<<<<<<<< - * self.num_explicit_factors = num_explicit_factors - * self.num_latent_factors = num_latent_factors */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Recommender); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 136, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 136, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 136, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 136, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_name, __pyx_v_name) < 0) __PYX_ERR(0, 136, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_trainable, __pyx_v_trainable) < 0) __PYX_ERR(0, 136, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_verbose, __pyx_v_verbose) < 0) __PYX_ERR(0, 136, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 136, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(__pyx_v_shape == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 137, __pyx_L1_error) + } + __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(1, 137, __pyx_L1_error) + __pyx_v_self->ndim = ((int)__pyx_t_1); - /* "cornac/models/efm/recom_efm.pyx":137 + /* "View.MemoryView":138 * - * Recommender.__init__(self, name=name, trainable=trainable, verbose=verbose) - * self.num_explicit_factors = num_explicit_factors # <<<<<<<<<<<<<< - * self.num_latent_factors = num_latent_factors - * self.num_most_cared_aspects = num_most_cared_aspects + * self.ndim = len(shape) + * self.itemsize = itemsize # <<<<<<<<<<<<<< + * + * if not self.ndim: */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_num_explicit_factors, __pyx_v_num_explicit_factors) < 0) __PYX_ERR(0, 137, __pyx_L1_error) + __pyx_v_self->itemsize = __pyx_v_itemsize; - /* "cornac/models/efm/recom_efm.pyx":138 - * Recommender.__init__(self, name=name, trainable=trainable, verbose=verbose) - * self.num_explicit_factors = num_explicit_factors - * self.num_latent_factors = num_latent_factors # <<<<<<<<<<<<<< - * self.num_most_cared_aspects = num_most_cared_aspects - * self.rating_scale = rating_scale + /* "View.MemoryView":140 + * self.itemsize = itemsize + * + * if not self.ndim: # <<<<<<<<<<<<<< + * raise ValueError, "Empty shape tuple for cython.array" + * */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_num_latent_factors, __pyx_v_num_latent_factors) < 0) __PYX_ERR(0, 138, __pyx_L1_error) + __pyx_t_2 = (!(__pyx_v_self->ndim != 0)); + if (unlikely(__pyx_t_2)) { - /* "cornac/models/efm/recom_efm.pyx":139 - * self.num_explicit_factors = num_explicit_factors - * self.num_latent_factors = num_latent_factors - * self.num_most_cared_aspects = num_most_cared_aspects # <<<<<<<<<<<<<< - * self.rating_scale = rating_scale - * self.alpha = alpha + /* "View.MemoryView":141 + * + * if not self.ndim: + * raise ValueError, "Empty shape tuple for cython.array" # <<<<<<<<<<<<<< + * + * if itemsize <= 0: */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_num_most_cared_aspects, __pyx_v_num_most_cared_aspects) < 0) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Empty_shape_tuple_for_cython_arr, 0, 0); + __PYX_ERR(1, 141, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":140 - * self.num_latent_factors = num_latent_factors - * self.num_most_cared_aspects = num_most_cared_aspects - * self.rating_scale = rating_scale # <<<<<<<<<<<<<< - * self.alpha = alpha - * self.lambda_x = lambda_x + /* "View.MemoryView":140 + * self.itemsize = itemsize + * + * if not self.ndim: # <<<<<<<<<<<<<< + * raise ValueError, "Empty shape tuple for cython.array" + * */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_rating_scale, __pyx_v_rating_scale) < 0) __PYX_ERR(0, 140, __pyx_L1_error) + } - /* "cornac/models/efm/recom_efm.pyx":141 - * self.num_most_cared_aspects = num_most_cared_aspects - * self.rating_scale = rating_scale - * self.alpha = alpha # <<<<<<<<<<<<<< - * self.lambda_x = lambda_x - * self.lambda_y = lambda_y + /* "View.MemoryView":143 + * raise ValueError, "Empty shape tuple for cython.array" + * + * if itemsize <= 0: # <<<<<<<<<<<<<< + * raise ValueError, "itemsize <= 0 for cython.array" + * */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_alpha, __pyx_v_alpha) < 0) __PYX_ERR(0, 141, __pyx_L1_error) + __pyx_t_2 = (__pyx_v_itemsize <= 0); + if (unlikely(__pyx_t_2)) { - /* "cornac/models/efm/recom_efm.pyx":142 - * self.rating_scale = rating_scale - * self.alpha = alpha - * self.lambda_x = lambda_x # <<<<<<<<<<<<<< - * self.lambda_y = lambda_y - * self.lambda_u = lambda_u + /* "View.MemoryView":144 + * + * if itemsize <= 0: + * raise ValueError, "itemsize <= 0 for cython.array" # <<<<<<<<<<<<<< + * + * if not isinstance(format, bytes): */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lambda_x, __pyx_v_lambda_x) < 0) __PYX_ERR(0, 142, __pyx_L1_error) + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_itemsize_0_for_cython_array, 0, 0); + __PYX_ERR(1, 144, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":143 - * self.alpha = alpha - * self.lambda_x = lambda_x - * self.lambda_y = lambda_y # <<<<<<<<<<<<<< - * self.lambda_u = lambda_u - * self.lambda_h = lambda_h + /* "View.MemoryView":143 + * raise ValueError, "Empty shape tuple for cython.array" + * + * if itemsize <= 0: # <<<<<<<<<<<<<< + * raise ValueError, "itemsize <= 0 for cython.array" + * */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lambda_y, __pyx_v_lambda_y) < 0) __PYX_ERR(0, 143, __pyx_L1_error) + } - /* "cornac/models/efm/recom_efm.pyx":144 - * self.lambda_x = lambda_x - * self.lambda_y = lambda_y - * self.lambda_u = lambda_u # <<<<<<<<<<<<<< - * self.lambda_h = lambda_h - * self.lambda_v = lambda_v + /* "View.MemoryView":146 + * raise ValueError, "itemsize <= 0 for cython.array" + * + * if not isinstance(format, bytes): # <<<<<<<<<<<<<< + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lambda_u, __pyx_v_lambda_u) < 0) __PYX_ERR(0, 144, __pyx_L1_error) + __pyx_t_2 = PyBytes_Check(__pyx_v_format); + __pyx_t_3 = (!__pyx_t_2); + if (__pyx_t_3) { - /* "cornac/models/efm/recom_efm.pyx":145 - * self.lambda_y = lambda_y - * self.lambda_u = lambda_u - * self.lambda_h = lambda_h # <<<<<<<<<<<<<< - * self.lambda_v = lambda_v - * self.use_item_aspect_popularity = use_item_aspect_popularity + /* "View.MemoryView":147 + * + * if not isinstance(format, bytes): + * format = format.encode('ASCII') # <<<<<<<<<<<<<< + * self._format = format # keep a reference to the byte string + * self.format = self._format */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lambda_h, __pyx_v_lambda_h) < 0) __PYX_ERR(0, 145, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_format, __pyx_n_s_encode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_n_s_ASCII}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_4); + __pyx_t_4 = 0; - /* "cornac/models/efm/recom_efm.pyx":146 - * self.lambda_u = lambda_u - * self.lambda_h = lambda_h - * self.lambda_v = lambda_v # <<<<<<<<<<<<<< - * self.use_item_aspect_popularity = use_item_aspect_popularity - * self.max_iter = max_iter + /* "View.MemoryView":146 + * raise ValueError, "itemsize <= 0 for cython.array" + * + * if not isinstance(format, bytes): # <<<<<<<<<<<<<< + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lambda_v, __pyx_v_lambda_v) < 0) __PYX_ERR(0, 146, __pyx_L1_error) + } - /* "cornac/models/efm/recom_efm.pyx":147 - * self.lambda_h = lambda_h - * self.lambda_v = lambda_v - * self.use_item_aspect_popularity = use_item_aspect_popularity # <<<<<<<<<<<<<< - * self.max_iter = max_iter - * self.seed = seed + /* "View.MemoryView":148 + * if not isinstance(format, bytes): + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string # <<<<<<<<<<<<<< + * self.format = self._format + * */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_use_item_aspect_popularity, __pyx_v_use_item_aspect_popularity) < 0) __PYX_ERR(0, 147, __pyx_L1_error) + if (!(likely(PyBytes_CheckExact(__pyx_v_format))||((__pyx_v_format) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_v_format))) __PYX_ERR(1, 148, __pyx_L1_error) + __pyx_t_4 = __pyx_v_format; + __Pyx_INCREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + __Pyx_GOTREF(__pyx_v_self->_format); + __Pyx_DECREF(__pyx_v_self->_format); + __pyx_v_self->_format = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; - /* "cornac/models/efm/recom_efm.pyx":148 - * self.lambda_v = lambda_v - * self.use_item_aspect_popularity = use_item_aspect_popularity - * self.max_iter = max_iter # <<<<<<<<<<<<<< - * self.seed = seed + /* "View.MemoryView":149 + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + * self.format = self._format # <<<<<<<<<<<<<< + * * */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_max_iter, __pyx_v_max_iter) < 0) __PYX_ERR(0, 148, __pyx_L1_error) + if (unlikely(__pyx_v_self->_format == Py_None)) { + PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found"); + __PYX_ERR(1, 149, __pyx_L1_error) + } + __pyx_t_8 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->_format); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(1, 149, __pyx_L1_error) + __pyx_v_self->format = __pyx_t_8; - /* "cornac/models/efm/recom_efm.pyx":149 - * self.use_item_aspect_popularity = use_item_aspect_popularity - * self.max_iter = max_iter - * self.seed = seed # <<<<<<<<<<<<<< + /* "View.MemoryView":152 + * + * + * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) # <<<<<<<<<<<<<< + * self._strides = self._shape + self.ndim * - * if seed is not None: */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_seed, __pyx_v_seed) < 0) __PYX_ERR(0, 149, __pyx_L1_error) + __pyx_v_self->_shape = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * __pyx_v_self->ndim) * 2))); - /* "cornac/models/efm/recom_efm.pyx":151 - * self.seed = seed + /* "View.MemoryView":153 * - * if seed is not None: # <<<<<<<<<<<<<< - * self.num_threads = 1 - * elif num_threads > 0 and num_threads < multiprocessing.cpu_count(): + * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) + * self._strides = self._shape + self.ndim # <<<<<<<<<<<<<< + * + * if not self._shape: */ - __pyx_t_5 = (__pyx_v_seed != Py_None); - __pyx_t_6 = (__pyx_t_5 != 0); - if (__pyx_t_6) { + __pyx_v_self->_strides = (__pyx_v_self->_shape + __pyx_v_self->ndim); - /* "cornac/models/efm/recom_efm.pyx":152 + /* "View.MemoryView":155 + * self._strides = self._shape + self.ndim + * + * if not self._shape: # <<<<<<<<<<<<<< + * raise MemoryError, "unable to allocate shape and strides." * - * if seed is not None: - * self.num_threads = 1 # <<<<<<<<<<<<<< - * elif num_threads > 0 and num_threads < multiprocessing.cpu_count(): - * self.num_threads = num_threads */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_num_threads, __pyx_int_1) < 0) __PYX_ERR(0, 152, __pyx_L1_error) + __pyx_t_3 = (!(__pyx_v_self->_shape != 0)); + if (unlikely(__pyx_t_3)) { - /* "cornac/models/efm/recom_efm.pyx":151 - * self.seed = seed + /* "View.MemoryView":156 + * + * if not self._shape: + * raise MemoryError, "unable to allocate shape and strides." # <<<<<<<<<<<<<< + * * - * if seed is not None: # <<<<<<<<<<<<<< - * self.num_threads = 1 - * elif num_threads > 0 and num_threads < multiprocessing.cpu_count(): */ - goto __pyx_L3; - } + __Pyx_Raise(__pyx_builtin_MemoryError, __pyx_kp_s_unable_to_allocate_shape_and_str, 0, 0); + __PYX_ERR(1, 156, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":153 - * if seed is not None: - * self.num_threads = 1 - * elif num_threads > 0 and num_threads < multiprocessing.cpu_count(): # <<<<<<<<<<<<<< - * self.num_threads = num_threads - * else: + /* "View.MemoryView":155 + * self._strides = self._shape + self.ndim + * + * if not self._shape: # <<<<<<<<<<<<<< + * raise MemoryError, "unable to allocate shape and strides." + * */ - __pyx_t_4 = PyObject_RichCompare(__pyx_v_num_threads, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 153, __pyx_L1_error) - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 153, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_5) { - } else { - __pyx_t_6 = __pyx_t_5; - goto __pyx_L4_bool_binop_done; } - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_multiprocessing); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 153, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_cpu_count); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + + /* "View.MemoryView":159 + * + * + * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< + * if dim <= 0: + * raise ValueError, f"Invalid shape in axis {idx}: {dim}." + */ + __pyx_t_7 = 0; + __pyx_t_4 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_4); __pyx_t_1 = 0; + for (;;) { + if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely((0 < 0))) __PYX_ERR(1, 159, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 159, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 159, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_dim = __pyx_t_9; + __pyx_v_idx = __pyx_t_7; + __pyx_t_7 = (__pyx_t_7 + 1); + + /* "View.MemoryView":160 + * + * for idx, dim in enumerate(shape): + * if dim <= 0: # <<<<<<<<<<<<<< + * raise ValueError, f"Invalid shape in axis {idx}: {dim}." + * self._shape[idx] = dim + */ + __pyx_t_3 = (__pyx_v_dim <= 0); + if (unlikely(__pyx_t_3)) { + + /* "View.MemoryView":161 + * for idx, dim in enumerate(shape): + * if dim <= 0: + * raise ValueError, f"Invalid shape in axis {idx}: {dim}." # <<<<<<<<<<<<<< + * self._shape[idx] = dim + * + */ + __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_9 = 0; + __pyx_t_10 = 127; + __Pyx_INCREF(__pyx_kp_u_Invalid_shape_in_axis); + __pyx_t_9 += 22; + __Pyx_GIVEREF(__pyx_kp_u_Invalid_shape_in_axis); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Invalid_shape_in_axis); + __pyx_t_6 = __Pyx_PyUnicode_From_int(__pyx_v_idx, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u_); + __pyx_t_9 += 2; + __Pyx_GIVEREF(__pyx_kp_u_); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_); + __pyx_t_6 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_dim, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u__2); + __pyx_t_9 += 1; + __Pyx_GIVEREF(__pyx_kp_u__2); + PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u__2); + __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_5, 5, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_6, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(1, 161, __pyx_L1_error) + + /* "View.MemoryView":160 + * + * for idx, dim in enumerate(shape): + * if dim <= 0: # <<<<<<<<<<<<<< + * raise ValueError, f"Invalid shape in axis {idx}: {dim}." + * self._shape[idx] = dim + */ } + + /* "View.MemoryView":162 + * if dim <= 0: + * raise ValueError, f"Invalid shape in axis {idx}: {dim}." + * self._shape[idx] = dim # <<<<<<<<<<<<<< + * + * cdef char order + */ + (__pyx_v_self->_shape[__pyx_v_idx]) = __pyx_v_dim; + + /* "View.MemoryView":159 + * + * + * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< + * if dim <= 0: + * raise ValueError, f"Invalid shape in axis {idx}: {dim}." + */ } - __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 153, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_RichCompare(__pyx_v_num_threads, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 153, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_6 = __pyx_t_5; - __pyx_L4_bool_binop_done:; - if (__pyx_t_6) { - /* "cornac/models/efm/recom_efm.pyx":154 - * self.num_threads = 1 - * elif num_threads > 0 and num_threads < multiprocessing.cpu_count(): - * self.num_threads = num_threads # <<<<<<<<<<<<<< + /* "View.MemoryView":165 + * + * cdef char order + * if mode == 'c': # <<<<<<<<<<<<<< + * order = b'C' + * self.mode = u'c' + */ + __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 165, __pyx_L1_error) + if (__pyx_t_3) { + + /* "View.MemoryView":166 + * cdef char order + * if mode == 'c': + * order = b'C' # <<<<<<<<<<<<<< + * self.mode = u'c' + * elif mode == 'fortran': + */ + __pyx_v_order = 'C'; + + /* "View.MemoryView":167 + * if mode == 'c': + * order = b'C' + * self.mode = u'c' # <<<<<<<<<<<<<< + * elif mode == 'fortran': + * order = b'F' + */ + __Pyx_INCREF(__pyx_n_u_c); + __Pyx_GIVEREF(__pyx_n_u_c); + __Pyx_GOTREF(__pyx_v_self->mode); + __Pyx_DECREF(__pyx_v_self->mode); + __pyx_v_self->mode = __pyx_n_u_c; + + /* "View.MemoryView":165 + * + * cdef char order + * if mode == 'c': # <<<<<<<<<<<<<< + * order = b'C' + * self.mode = u'c' + */ + goto __pyx_L11; + } + + /* "View.MemoryView":168 + * order = b'C' + * self.mode = u'c' + * elif mode == 'fortran': # <<<<<<<<<<<<<< + * order = b'F' + * self.mode = u'fortran' + */ + __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_fortran, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 168, __pyx_L1_error) + if (likely(__pyx_t_3)) { + + /* "View.MemoryView":169 + * self.mode = u'c' + * elif mode == 'fortran': + * order = b'F' # <<<<<<<<<<<<<< + * self.mode = u'fortran' * else: - * self.num_threads = multiprocessing.cpu_count() */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_num_threads, __pyx_v_num_threads) < 0) __PYX_ERR(0, 154, __pyx_L1_error) + __pyx_v_order = 'F'; - /* "cornac/models/efm/recom_efm.pyx":153 - * if seed is not None: - * self.num_threads = 1 - * elif num_threads > 0 and num_threads < multiprocessing.cpu_count(): # <<<<<<<<<<<<<< - * self.num_threads = num_threads + /* "View.MemoryView":170 + * elif mode == 'fortran': + * order = b'F' + * self.mode = u'fortran' # <<<<<<<<<<<<<< * else: + * raise ValueError, f"Invalid mode, expected 'c' or 'fortran', got {mode}" */ - goto __pyx_L3; + __Pyx_INCREF(__pyx_n_u_fortran); + __Pyx_GIVEREF(__pyx_n_u_fortran); + __Pyx_GOTREF(__pyx_v_self->mode); + __Pyx_DECREF(__pyx_v_self->mode); + __pyx_v_self->mode = __pyx_n_u_fortran; + + /* "View.MemoryView":168 + * order = b'C' + * self.mode = u'c' + * elif mode == 'fortran': # <<<<<<<<<<<<<< + * order = b'F' + * self.mode = u'fortran' + */ + goto __pyx_L11; } - /* "cornac/models/efm/recom_efm.pyx":156 - * self.num_threads = num_threads + /* "View.MemoryView":172 + * self.mode = u'fortran' * else: - * self.num_threads = multiprocessing.cpu_count() # <<<<<<<<<<<<<< + * raise ValueError, f"Invalid mode, expected 'c' or 'fortran', got {mode}" # <<<<<<<<<<<<<< * - * # Init params if provided + * self.len = fill_contig_strides_array(self._shape, self._strides, itemsize, self.ndim, order) */ /*else*/ { - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_multiprocessing); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 156, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_mode, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 172, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_cpu_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 156, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_mode_expected_c_or_fortr, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 172, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 156, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_num_threads, __pyx_t_1) < 0) __PYX_ERR(0, 156, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_6, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(1, 172, __pyx_L1_error) } - __pyx_L3:; + __pyx_L11:; - /* "cornac/models/efm/recom_efm.pyx":159 + /* "View.MemoryView":174 + * raise ValueError, f"Invalid mode, expected 'c' or 'fortran', got {mode}" * - * # Init params if provided - * self.init_params = {} if init_params is None else init_params # <<<<<<<<<<<<<< - * self.U1 = self.init_params.get('U1', None) - * self.U2 = self.init_params.get('U2', None) + * self.len = fill_contig_strides_array(self._shape, self._strides, itemsize, self.ndim, order) # <<<<<<<<<<<<<< + * + * self.free_data = allocate_buffer */ - __pyx_t_6 = (__pyx_v_init_params == Py_None); - if ((__pyx_t_6 != 0)) { - __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 159, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __pyx_t_3; - __pyx_t_3 = 0; - } else { - __Pyx_INCREF(__pyx_v_init_params); - __pyx_t_1 = __pyx_v_init_params; - } - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_init_params, __pyx_t_1) < 0) __PYX_ERR(0, 159, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_self->len = __pyx_fill_contig_strides_array(__pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_itemsize, __pyx_v_self->ndim, __pyx_v_order); - /* "cornac/models/efm/recom_efm.pyx":160 - * # Init params if provided - * self.init_params = {} if init_params is None else init_params - * self.U1 = self.init_params.get('U1', None) # <<<<<<<<<<<<<< - * self.U2 = self.init_params.get('U2', None) - * self.V = self.init_params.get('V', None) + /* "View.MemoryView":176 + * self.len = fill_contig_strides_array(self._shape, self._strides, itemsize, self.ndim, order) + * + * self.free_data = allocate_buffer # <<<<<<<<<<<<<< + * self.dtype_is_object = format == b'O' + * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_init_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 160, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_U1, __pyx_t_1) < 0) __PYX_ERR(0, 160, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_self->free_data = __pyx_v_allocate_buffer; - /* "cornac/models/efm/recom_efm.pyx":161 - * self.init_params = {} if init_params is None else init_params - * self.U1 = self.init_params.get('U1', None) - * self.U2 = self.init_params.get('U2', None) # <<<<<<<<<<<<<< - * self.V = self.init_params.get('V', None) - * self.H1 = self.init_params.get('H1', None) + /* "View.MemoryView":177 + * + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' # <<<<<<<<<<<<<< + * + * if allocate_buffer: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_init_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 161, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 161, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 161, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_U2, __pyx_t_1) < 0) __PYX_ERR(0, 161, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_6 = PyObject_RichCompare(__pyx_v_format, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 177, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 177, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_self->dtype_is_object = __pyx_t_3; - /* "cornac/models/efm/recom_efm.pyx":162 - * self.U1 = self.init_params.get('U1', None) - * self.U2 = self.init_params.get('U2', None) - * self.V = self.init_params.get('V', None) # <<<<<<<<<<<<<< - * self.H1 = self.init_params.get('H1', None) - * self.H2 = self.init_params.get('H2', None) + /* "View.MemoryView":179 + * self.dtype_is_object = format == b'O' + * + * if allocate_buffer: # <<<<<<<<<<<<<< + * _allocate_buffer(self) + * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_init_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 162, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 162, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 162, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_V, __pyx_t_1) < 0) __PYX_ERR(0, 162, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_v_allocate_buffer) { - /* "cornac/models/efm/recom_efm.pyx":163 - * self.U2 = self.init_params.get('U2', None) - * self.V = self.init_params.get('V', None) - * self.H1 = self.init_params.get('H1', None) # <<<<<<<<<<<<<< - * self.H2 = self.init_params.get('H2', None) + /* "View.MemoryView":180 + * + * if allocate_buffer: + * _allocate_buffer(self) # <<<<<<<<<<<<<< * + * @cname('getbuffer') */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_init_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 163, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_H1, __pyx_t_1) < 0) __PYX_ERR(0, 163, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_7 = __pyx_array_allocate_buffer(__pyx_v_self); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(1, 180, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":164 - * self.V = self.init_params.get('V', None) - * self.H1 = self.init_params.get('H1', None) - * self.H2 = self.init_params.get('H2', None) # <<<<<<<<<<<<<< + /* "View.MemoryView":179 + * self.dtype_is_object = format == b'O' + * + * if allocate_buffer: # <<<<<<<<<<<<<< + * _allocate_buffer(self) * - * def _init(self): */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_init_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 164, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 164, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 164, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_H2, __pyx_t_1) < 0) __PYX_ERR(0, 164, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } - /* "cornac/models/efm/recom_efm.pyx":129 - * """ + /* "View.MemoryView":131 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): * - * def __init__(self, name="EFM", # <<<<<<<<<<<<<< - * num_explicit_factors=40, num_latent_factors=60, num_most_cared_aspects=15, - * rating_scale=5.0, alpha=0.85, */ /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); + __Pyx_XDECREF(__pyx_v_format); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "cornac/models/efm/recom_efm.pyx":166 - * self.H2 = self.init_params.get('H2', None) +/* "View.MemoryView":182 + * _allocate_buffer(self) * - * def _init(self): # <<<<<<<<<<<<<< - * rng = get_rng(self.seed) - * n_users, n_items = self.train_set.num_users, self.train_set.num_items + * @cname('getbuffer') # <<<<<<<<<<<<<< + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 */ /* Python wrapper */ -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_3_init(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_3_init = {"_init", (PyCFunction)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_3_init, METH_O, 0}; -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_3_init(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; +CYTHON_UNUSED static int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +CYTHON_UNUSED static int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_init (wrapper)", 0); - __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_2_init(__pyx_self, ((PyObject *)__pyx_v_self)); + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(((struct __pyx_array_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_2_init(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_rng = NULL; - PyObject *__pyx_v_n_users = NULL; - PyObject *__pyx_v_n_items = NULL; - PyObject *__pyx_v_n_aspects = NULL; - PyObject *__pyx_v_n_efactors = NULL; - PyObject *__pyx_v_n_lfactors = NULL; - PyObject *__pyx_v_n_factors = NULL; - PyObject *__pyx_v_high = NULL; - PyObject *__pyx_r = NULL; +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_v_bufmode; + int __pyx_r; __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_t_6; + int __pyx_t_1; + char *__pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + Py_ssize_t *__pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_init", 0); + if (unlikely(__pyx_v_info == NULL)) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; + } + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); - /* "cornac/models/efm/recom_efm.pyx":167 - * - * def _init(self): - * rng = get_rng(self.seed) # <<<<<<<<<<<<<< - * n_users, n_items = self.train_set.num_users, self.train_set.num_items - * n_aspects = self.train_set.sentiment.num_aspects + /* "View.MemoryView":184 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 # <<<<<<<<<<<<<< + * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS): + * if self.mode == u"c": */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_rng); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 167, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_seed); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 167, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_v_bufmode = -1; + + /* "View.MemoryView":185 + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 + * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS): # <<<<<<<<<<<<<< + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ + __pyx_t_1 = ((__pyx_v_flags & ((PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS) | PyBUF_ANY_CONTIGUOUS)) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":186 + * cdef int bufmode = -1 + * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS): + * if self.mode == u"c": # <<<<<<<<<<<<<< + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + */ + __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_c, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 186, __pyx_L1_error) + if (__pyx_t_1) { + + /* "View.MemoryView":187 + * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS): + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ + __pyx_v_bufmode = (PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); + + /* "View.MemoryView":186 + * cdef int bufmode = -1 + * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS): + * if self.mode == u"c": # <<<<<<<<<<<<<< + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + */ + goto __pyx_L4; } - } - __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 167, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_rng = __pyx_t_1; - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":168 - * def _init(self): - * rng = get_rng(self.seed) - * n_users, n_items = self.train_set.num_users, self.train_set.num_items # <<<<<<<<<<<<<< - * n_aspects = self.train_set.sentiment.num_aspects - * n_efactors = self.num_explicit_factors + /* "View.MemoryView":188 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": # <<<<<<<<<<<<<< + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_n_users = __pyx_t_2; - __pyx_t_2 = 0; - __pyx_v_n_items = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_fortran, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 188, __pyx_L1_error) + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":169 - * rng = get_rng(self.seed) - * n_users, n_items = self.train_set.num_users, self.train_set.num_items - * n_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< - * n_efactors = self.num_explicit_factors - * n_lfactors = self.num_latent_factors + /* "View.MemoryView":189 + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< + * if not (flags & bufmode): + * raise ValueError, "Can only create a buffer that is contiguous in memory." */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 169, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 169, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 169, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_n_aspects = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_v_bufmode = (PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); - /* "cornac/models/efm/recom_efm.pyx":170 - * n_users, n_items = self.train_set.num_users, self.train_set.num_items - * n_aspects = self.train_set.sentiment.num_aspects - * n_efactors = self.num_explicit_factors # <<<<<<<<<<<<<< - * n_lfactors = self.num_latent_factors - * n_factors = n_efactors + n_lfactors + /* "View.MemoryView":188 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": # <<<<<<<<<<<<<< + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_explicit_factors); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 170, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_n_efactors = __pyx_t_3; - __pyx_t_3 = 0; + } + __pyx_L4:; - /* "cornac/models/efm/recom_efm.pyx":171 - * n_aspects = self.train_set.sentiment.num_aspects - * n_efactors = self.num_explicit_factors - * n_lfactors = self.num_latent_factors # <<<<<<<<<<<<<< - * n_factors = n_efactors + n_lfactors - * high = np.sqrt(self.rating_scale / n_factors) + /* "View.MemoryView":190 + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): # <<<<<<<<<<<<<< + * raise ValueError, "Can only create a buffer that is contiguous in memory." + * info.buf = self.data */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_latent_factors); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 171, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_n_lfactors = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_t_1 = (!((__pyx_v_flags & __pyx_v_bufmode) != 0)); + if (unlikely(__pyx_t_1)) { - /* "cornac/models/efm/recom_efm.pyx":172 - * n_efactors = self.num_explicit_factors - * n_lfactors = self.num_latent_factors - * n_factors = n_efactors + n_lfactors # <<<<<<<<<<<<<< - * high = np.sqrt(self.rating_scale / n_factors) - * + /* "View.MemoryView":191 + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + * raise ValueError, "Can only create a buffer that is contiguous in memory." # <<<<<<<<<<<<<< + * info.buf = self.data + * info.len = self.len */ - __pyx_t_3 = PyNumber_Add(__pyx_v_n_efactors, __pyx_v_n_lfactors); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 172, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_n_factors = __pyx_t_3; - __pyx_t_3 = 0; + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Can_only_create_a_buffer_that_is, 0, 0); + __PYX_ERR(1, 191, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":173 - * n_lfactors = self.num_latent_factors - * n_factors = n_efactors + n_lfactors - * high = np.sqrt(self.rating_scale / n_factors) # <<<<<<<<<<<<<< - * - * if self.U1 is None: + /* "View.MemoryView":190 + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): # <<<<<<<<<<<<<< + * raise ValueError, "Can only create a buffer that is contiguous in memory." + * info.buf = self.data */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rating_scale); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_v_n_factors); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); } + + /* "View.MemoryView":185 + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 + * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS): # <<<<<<<<<<<<<< + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ } - __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_high = __pyx_t_3; - __pyx_t_3 = 0; - /* "cornac/models/efm/recom_efm.pyx":175 - * high = np.sqrt(self.rating_scale / n_factors) + /* "View.MemoryView":192 + * if not (flags & bufmode): + * raise ValueError, "Can only create a buffer that is contiguous in memory." + * info.buf = self.data # <<<<<<<<<<<<<< + * info.len = self.len * - * if self.U1 is None: # <<<<<<<<<<<<<< - * self.U1 = uniform((n_users, n_efactors), high=high, random_state=rng) - * if self.U2 is None: */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 175, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = (__pyx_t_3 == Py_None); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = (__pyx_t_5 != 0); - if (__pyx_t_6) { + __pyx_t_2 = __pyx_v_self->data; + __pyx_v_info->buf = __pyx_t_2; - /* "cornac/models/efm/recom_efm.pyx":176 + /* "View.MemoryView":193 + * raise ValueError, "Can only create a buffer that is contiguous in memory." + * info.buf = self.data + * info.len = self.len # <<<<<<<<<<<<<< * - * if self.U1 is None: - * self.U1 = uniform((n_users, n_efactors), high=high, random_state=rng) # <<<<<<<<<<<<<< - * if self.U2 is None: - * self.U2 = uniform((n_items, n_efactors), high=high, random_state=rng) + * if flags & PyBUF_STRIDES: */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_uniform); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_n_users); - __Pyx_GIVEREF(__pyx_v_n_users); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_n_users); - __Pyx_INCREF(__pyx_v_n_efactors); - __Pyx_GIVEREF(__pyx_v_n_efactors); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_n_efactors); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_high, __pyx_v_high) < 0) __PYX_ERR(0, 176, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_random_state, __pyx_v_rng) < 0) __PYX_ERR(0, 176, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_U1, __pyx_t_2) < 0) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __pyx_v_self->len; + __pyx_v_info->len = __pyx_t_3; - /* "cornac/models/efm/recom_efm.pyx":175 - * high = np.sqrt(self.rating_scale / n_factors) + /* "View.MemoryView":195 + * info.len = self.len * - * if self.U1 is None: # <<<<<<<<<<<<<< - * self.U1 = uniform((n_users, n_efactors), high=high, random_state=rng) - * if self.U2 is None: + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.ndim = self.ndim + * info.shape = self._shape */ - } + __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":177 - * if self.U1 is None: - * self.U1 = uniform((n_users, n_efactors), high=high, random_state=rng) - * if self.U2 is None: # <<<<<<<<<<<<<< - * self.U2 = uniform((n_items, n_efactors), high=high, random_state=rng) - * if self.V is None: + /* "View.MemoryView":196 + * + * if flags & PyBUF_STRIDES: + * info.ndim = self.ndim # <<<<<<<<<<<<<< + * info.shape = self._shape + * info.strides = self._strides */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = (__pyx_t_2 == Py_None); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_5 = (__pyx_t_6 != 0); - if (__pyx_t_5) { + __pyx_t_4 = __pyx_v_self->ndim; + __pyx_v_info->ndim = __pyx_t_4; - /* "cornac/models/efm/recom_efm.pyx":178 - * self.U1 = uniform((n_users, n_efactors), high=high, random_state=rng) - * if self.U2 is None: - * self.U2 = uniform((n_items, n_efactors), high=high, random_state=rng) # <<<<<<<<<<<<<< - * if self.V is None: - * self.V = uniform((n_aspects, n_efactors), high=high, random_state=rng) + /* "View.MemoryView":197 + * if flags & PyBUF_STRIDES: + * info.ndim = self.ndim + * info.shape = self._shape # <<<<<<<<<<<<<< + * info.strides = self._strides + * else: */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_uniform); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 178, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_n_items); - __Pyx_GIVEREF(__pyx_v_n_items); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_n_items); - __Pyx_INCREF(__pyx_v_n_efactors); - __Pyx_GIVEREF(__pyx_v_n_efactors); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_n_efactors); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 178, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_high, __pyx_v_high) < 0) __PYX_ERR(0, 178, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_random_state, __pyx_v_rng) < 0) __PYX_ERR(0, 178, __pyx_L1_error) - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 178, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_U2, __pyx_t_3) < 0) __PYX_ERR(0, 178, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_5 = __pyx_v_self->_shape; + __pyx_v_info->shape = __pyx_t_5; - /* "cornac/models/efm/recom_efm.pyx":177 - * if self.U1 is None: - * self.U1 = uniform((n_users, n_efactors), high=high, random_state=rng) - * if self.U2 is None: # <<<<<<<<<<<<<< - * self.U2 = uniform((n_items, n_efactors), high=high, random_state=rng) - * if self.V is None: + /* "View.MemoryView":198 + * info.ndim = self.ndim + * info.shape = self._shape + * info.strides = self._strides # <<<<<<<<<<<<<< + * else: + * info.ndim = 1 + */ + __pyx_t_5 = __pyx_v_self->_strides; + __pyx_v_info->strides = __pyx_t_5; + + /* "View.MemoryView":195 + * info.len = self.len + * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.ndim = self.ndim + * info.shape = self._shape */ + goto __pyx_L6; } - /* "cornac/models/efm/recom_efm.pyx":179 - * if self.U2 is None: - * self.U2 = uniform((n_items, n_efactors), high=high, random_state=rng) - * if self.V is None: # <<<<<<<<<<<<<< - * self.V = uniform((n_aspects, n_efactors), high=high, random_state=rng) - * if self.H1 is None: + /* "View.MemoryView":200 + * info.strides = self._strides + * else: + * info.ndim = 1 # <<<<<<<<<<<<<< + * info.shape = &self.len if flags & PyBUF_ND else NULL + * info.strides = NULL */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_V); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = (__pyx_t_3 == Py_None); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = (__pyx_t_5 != 0); - if (__pyx_t_6) { + /*else*/ { + __pyx_v_info->ndim = 1; - /* "cornac/models/efm/recom_efm.pyx":180 - * self.U2 = uniform((n_items, n_efactors), high=high, random_state=rng) - * if self.V is None: - * self.V = uniform((n_aspects, n_efactors), high=high, random_state=rng) # <<<<<<<<<<<<<< - * if self.H1 is None: - * self.H1 = uniform((n_users, n_lfactors), high=high, random_state=rng) + /* "View.MemoryView":201 + * else: + * info.ndim = 1 + * info.shape = &self.len if flags & PyBUF_ND else NULL # <<<<<<<<<<<<<< + * info.strides = NULL + * */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_uniform); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 180, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_n_aspects); - __Pyx_GIVEREF(__pyx_v_n_aspects); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_n_aspects); - __Pyx_INCREF(__pyx_v_n_efactors); - __Pyx_GIVEREF(__pyx_v_n_efactors); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_n_efactors); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 180, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_high, __pyx_v_high) < 0) __PYX_ERR(0, 180, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_random_state, __pyx_v_rng) < 0) __PYX_ERR(0, 180, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 180, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_V, __pyx_t_2) < 0) __PYX_ERR(0, 180, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (((__pyx_v_flags & PyBUF_ND) != 0)) { + __pyx_t_5 = (&__pyx_v_self->len); + } else { + __pyx_t_5 = NULL; + } + __pyx_v_info->shape = __pyx_t_5; - /* "cornac/models/efm/recom_efm.pyx":179 - * if self.U2 is None: - * self.U2 = uniform((n_items, n_efactors), high=high, random_state=rng) - * if self.V is None: # <<<<<<<<<<<<<< - * self.V = uniform((n_aspects, n_efactors), high=high, random_state=rng) - * if self.H1 is None: + /* "View.MemoryView":202 + * info.ndim = 1 + * info.shape = &self.len if flags & PyBUF_ND else NULL + * info.strides = NULL # <<<<<<<<<<<<<< + * + * info.suboffsets = NULL */ + __pyx_v_info->strides = NULL; } + __pyx_L6:; - /* "cornac/models/efm/recom_efm.pyx":181 - * if self.V is None: - * self.V = uniform((n_aspects, n_efactors), high=high, random_state=rng) - * if self.H1 is None: # <<<<<<<<<<<<<< - * self.H1 = uniform((n_users, n_lfactors), high=high, random_state=rng) - * if self.H2 is None: + /* "View.MemoryView":204 + * info.strides = NULL + * + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * info.itemsize = self.itemsize + * info.readonly = 0 */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_H1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 181, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = (__pyx_t_2 == Py_None); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_5 = (__pyx_t_6 != 0); - if (__pyx_t_5) { + __pyx_v_info->suboffsets = NULL; - /* "cornac/models/efm/recom_efm.pyx":182 - * self.V = uniform((n_aspects, n_efactors), high=high, random_state=rng) - * if self.H1 is None: - * self.H1 = uniform((n_users, n_lfactors), high=high, random_state=rng) # <<<<<<<<<<<<<< - * if self.H2 is None: - * self.H2 = uniform((n_items, n_lfactors), high=high, random_state=rng) - */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_uniform); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 182, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 182, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_n_users); - __Pyx_GIVEREF(__pyx_v_n_users); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_n_users); - __Pyx_INCREF(__pyx_v_n_lfactors); - __Pyx_GIVEREF(__pyx_v_n_lfactors); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_n_lfactors); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 182, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 182, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_high, __pyx_v_high) < 0) __PYX_ERR(0, 182, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_random_state, __pyx_v_rng) < 0) __PYX_ERR(0, 182, __pyx_L1_error) - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 182, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_H1, __pyx_t_3) < 0) __PYX_ERR(0, 182, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "cornac/models/efm/recom_efm.pyx":181 - * if self.V is None: - * self.V = uniform((n_aspects, n_efactors), high=high, random_state=rng) - * if self.H1 is None: # <<<<<<<<<<<<<< - * self.H1 = uniform((n_users, n_lfactors), high=high, random_state=rng) - * if self.H2 is None: + /* "View.MemoryView":205 + * + * info.suboffsets = NULL + * info.itemsize = self.itemsize # <<<<<<<<<<<<<< + * info.readonly = 0 + * info.format = self.format if flags & PyBUF_FORMAT else NULL */ - } + __pyx_t_3 = __pyx_v_self->itemsize; + __pyx_v_info->itemsize = __pyx_t_3; - /* "cornac/models/efm/recom_efm.pyx":183 - * if self.H1 is None: - * self.H1 = uniform((n_users, n_lfactors), high=high, random_state=rng) - * if self.H2 is None: # <<<<<<<<<<<<<< - * self.H2 = uniform((n_items, n_lfactors), high=high, random_state=rng) - * + /* "View.MemoryView":206 + * info.suboffsets = NULL + * info.itemsize = self.itemsize + * info.readonly = 0 # <<<<<<<<<<<<<< + * info.format = self.format if flags & PyBUF_FORMAT else NULL + * info.obj = self */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_H2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 183, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = (__pyx_t_3 == Py_None); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = (__pyx_t_5 != 0); - if (__pyx_t_6) { + __pyx_v_info->readonly = 0; - /* "cornac/models/efm/recom_efm.pyx":184 - * self.H1 = uniform((n_users, n_lfactors), high=high, random_state=rng) - * if self.H2 is None: - * self.H2 = uniform((n_items, n_lfactors), high=high, random_state=rng) # <<<<<<<<<<<<<< + /* "View.MemoryView":207 + * info.itemsize = self.itemsize + * info.readonly = 0 + * info.format = self.format if flags & PyBUF_FORMAT else NULL # <<<<<<<<<<<<<< + * info.obj = self * - * def fit(self, train_set, val_set=None): */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_uniform); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_n_items); - __Pyx_GIVEREF(__pyx_v_n_items); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_n_items); - __Pyx_INCREF(__pyx_v_n_lfactors); - __Pyx_GIVEREF(__pyx_v_n_lfactors); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_n_lfactors); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 184, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_high, __pyx_v_high) < 0) __PYX_ERR(0, 184, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_random_state, __pyx_v_rng) < 0) __PYX_ERR(0, 184, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_H2, __pyx_t_2) < 0) __PYX_ERR(0, 184, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (((__pyx_v_flags & PyBUF_FORMAT) != 0)) { + __pyx_t_2 = __pyx_v_self->format; + } else { + __pyx_t_2 = NULL; + } + __pyx_v_info->format = __pyx_t_2; - /* "cornac/models/efm/recom_efm.pyx":183 - * if self.H1 is None: - * self.H1 = uniform((n_users, n_lfactors), high=high, random_state=rng) - * if self.H2 is None: # <<<<<<<<<<<<<< - * self.H2 = uniform((n_items, n_lfactors), high=high, random_state=rng) + /* "View.MemoryView":208 + * info.readonly = 0 + * info.format = self.format if flags & PyBUF_FORMAT else NULL + * info.obj = self # <<<<<<<<<<<<<< * + * def __dealloc__(array self): */ - } + __Pyx_INCREF((PyObject *)__pyx_v_self); + __Pyx_GIVEREF((PyObject *)__pyx_v_self); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); - /* "cornac/models/efm/recom_efm.pyx":166 - * self.H2 = self.init_params.get('H2', None) + /* "View.MemoryView":182 + * _allocate_buffer(self) * - * def _init(self): # <<<<<<<<<<<<<< - * rng = get_rng(self.seed) - * n_users, n_items = self.train_set.num_users, self.train_set.num_items + * @cname('getbuffer') # <<<<<<<<<<<<<< + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 */ /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._init", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; + __Pyx_AddTraceback("View.MemoryView.array.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_rng); - __Pyx_XDECREF(__pyx_v_n_users); - __Pyx_XDECREF(__pyx_v_n_items); - __Pyx_XDECREF(__pyx_v_n_aspects); - __Pyx_XDECREF(__pyx_v_n_efactors); - __Pyx_XDECREF(__pyx_v_n_lfactors); - __Pyx_XDECREF(__pyx_v_n_factors); - __Pyx_XDECREF(__pyx_v_high); - __Pyx_XGIVEREF(__pyx_r); + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "cornac/models/efm/recom_efm.pyx":186 - * self.H2 = uniform((n_items, n_lfactors), high=high, random_state=rng) - * - * def fit(self, train_set, val_set=None): # <<<<<<<<<<<<<< - * """Fit the model to observations. +/* "View.MemoryView":210 + * info.obj = self * + * def __dealloc__(array self): # <<<<<<<<<<<<<< + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) */ /* Python wrapper */ -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_5fit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_4fit[] = "Fit the model to observations.\n\n Parameters\n ----------\n train_set: :obj:`cornac.data.Dataset`, required\n User-Item preference data as well as additional modalities.\n\n val_set: :obj:`cornac.data.Dataset`, optional, default: None\n User-Item preference data for model selection purposes (e.g., early stopping).\n\n Returns\n -------\n self : object\n "; -static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_5fit = {"fit", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_5fit, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_4fit}; -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_5fit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_train_set = 0; - PyObject *__pyx_v_val_set = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; +static void __pyx_array___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_array___dealloc__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("fit (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_train_set,&__pyx_n_s_val_set,0}; - PyObject* values[3] = {0,0,0}; - values[2] = ((PyObject *)((PyObject *)Py_None)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_train_set)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("fit", 0, 2, 3, 1); __PYX_ERR(0, 186, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_val_set); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fit") < 0)) __PYX_ERR(0, 186, __pyx_L3_error) - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":211 + * + * def __dealloc__(array self): + * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< + * self.callback_free_data(self.data) + * elif self.free_data and self.data is not NULL: + */ + __pyx_t_1 = (__pyx_v_self->callback_free_data != NULL); + if (__pyx_t_1) { + + /* "View.MemoryView":212 + * def __dealloc__(array self): + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) # <<<<<<<<<<<<<< + * elif self.free_data and self.data is not NULL: + * if self.dtype_is_object: + */ + __pyx_v_self->callback_free_data(__pyx_v_self->data); + + /* "View.MemoryView":211 + * + * def __dealloc__(array self): + * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< + * self.callback_free_data(self.data) + * elif self.free_data and self.data is not NULL: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":213 + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + * elif self.free_data and self.data is not NULL: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False) + */ + if (__pyx_v_self->free_data) { + } else { + __pyx_t_1 = __pyx_v_self->free_data; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_self->data != NULL); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (__pyx_t_1) { + + /* "View.MemoryView":214 + * self.callback_free_data(self.data) + * elif self.free_data and self.data is not NULL: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False) + * free(self.data) + */ + if (__pyx_v_self->dtype_is_object) { + + /* "View.MemoryView":215 + * elif self.free_data and self.data is not NULL: + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False) # <<<<<<<<<<<<<< + * free(self.data) + * PyObject_Free(self._shape) + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_self->data, __pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_self->ndim, 0); + + /* "View.MemoryView":214 + * self.callback_free_data(self.data) + * elif self.free_data and self.data is not NULL: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False) + * free(self.data) + */ } - __pyx_v_self = values[0]; - __pyx_v_train_set = values[1]; - __pyx_v_val_set = values[2]; + + /* "View.MemoryView":216 + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False) + * free(self.data) # <<<<<<<<<<<<<< + * PyObject_Free(self._shape) + * + */ + free(__pyx_v_self->data); + + /* "View.MemoryView":213 + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + * elif self.free_data and self.data is not NULL: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False) + */ } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("fit", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 186, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L3:; + + /* "View.MemoryView":217 + * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False) + * free(self.data) + * PyObject_Free(self._shape) # <<<<<<<<<<<<<< + * + * @property + */ + PyObject_Free(__pyx_v_self->_shape); + + /* "View.MemoryView":210 + * info.obj = self + * + * def __dealloc__(array self): # <<<<<<<<<<<<<< + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + */ + + /* function exit code */ __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_4fit(__pyx_self, __pyx_v_self, __pyx_v_train_set, __pyx_v_val_set); +} + +/* "View.MemoryView":219 + * PyObject_Free(self._shape) + * + * @property # <<<<<<<<<<<<<< + * def memview(self): + * return self.get_memview() + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_5array_7memview___get__(((struct __pyx_array_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_4fit(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_train_set, PyObject *__pyx_v_val_set) { - PyObject *__pyx_v_A = NULL; - PyObject *__pyx_v_X = NULL; - PyObject *__pyx_v_Y = NULL; - PyObject *__pyx_v_A_user_counts = NULL; - PyObject *__pyx_v_A_item_counts = NULL; - PyObject *__pyx_v_A_uids = NULL; - PyObject *__pyx_v_X_user_counts = NULL; - PyObject *__pyx_v_X_aspect_counts = NULL; - PyObject *__pyx_v_X_uids = NULL; - PyObject *__pyx_v_Y_item_counts = NULL; - PyObject *__pyx_v_Y_aspect_counts = NULL; - PyObject *__pyx_v_Y_iids = NULL; +static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":221 + * @property + * def memview(self): + * return self.get_memview() # <<<<<<<<<<<<<< + * + * @cname('get_memview') + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((struct __pyx_vtabstruct_array *)__pyx_v_self->__pyx_vtab)->get_memview(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 221, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":219 + * PyObject_Free(self._shape) + * + * @property # <<<<<<<<<<<<<< + * def memview(self): + * return self.get_memview() + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":224 + * + * @cname('get_memview') + * cdef get_memview(self): # <<<<<<<<<<<<<< + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) + */ + +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self) { + int __pyx_v_flags; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - PyObject *(*__pyx_t_8)(PyObject *); - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - PyObject *__pyx_t_16 = NULL; - PyObject *__pyx_t_17 = NULL; - PyObject *__pyx_t_18 = NULL; - PyObject *__pyx_t_19 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("fit", 0); + __Pyx_RefNannySetupContext("get_memview", 0); - /* "cornac/models/efm/recom_efm.pyx":201 - * self : object - * """ - * Recommender.fit(self, train_set, val_set) # <<<<<<<<<<<<<< + /* "View.MemoryView":225 + * @cname('get_memview') + * cdef get_memview(self): + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE # <<<<<<<<<<<<<< + * return memoryview(self, flags, self.dtype_is_object) * - * self._init() */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Recommender); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 201, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_fit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 201, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - __pyx_t_4 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_4 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_self, __pyx_v_train_set, __pyx_v_val_set}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 201, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_self, __pyx_v_train_set, __pyx_v_val_set}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 201, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - { - __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 201, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (__pyx_t_2) { - __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL; - } - __Pyx_INCREF(__pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_self); - __Pyx_INCREF(__pyx_v_train_set); - __Pyx_GIVEREF(__pyx_v_train_set); - PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_train_set); - __Pyx_INCREF(__pyx_v_val_set); - __Pyx_GIVEREF(__pyx_v_val_set); - PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_val_set); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 201, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_flags = ((PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) | PyBUF_WRITABLE); - /* "cornac/models/efm/recom_efm.pyx":203 - * Recommender.fit(self, train_set, val_set) - * - * self._init() # <<<<<<<<<<<<<< + /* "View.MemoryView":226 + * cdef get_memview(self): + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) # <<<<<<<<<<<<<< * - * if self.trainable: + * def __len__(self): */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_init_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 203, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 226, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 226, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF((PyObject *)__pyx_v_self); + __Pyx_GIVEREF((PyObject *)__pyx_v_self); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 226, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":205 - * self._init() + /* "View.MemoryView":224 * - * if self.trainable: # <<<<<<<<<<<<<< - * A, X, Y = self._build_matrices(self.train_set) - * A_user_counts = np.ediff1d(A.indptr) + * @cname('get_memview') + * cdef get_memview(self): # <<<<<<<<<<<<<< + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_trainable); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 205, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 205, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_6) { - /* "cornac/models/efm/recom_efm.pyx":206 + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.array.get_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":228 + * return memoryview(self, flags, self.dtype_is_object) + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._shape[0] * - * if self.trainable: - * A, X, Y = self._build_matrices(self.train_set) # <<<<<<<<<<<<<< - * A_user_counts = np.ediff1d(A.indptr) - * A_item_counts = np.ediff1d(A.tocsc().indptr) */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_build_matrices); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 206, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 206, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 206, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { - PyObject* sequence = __pyx_t_1; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 3)) { - if (size > 3) __Pyx_RaiseTooManyValuesError(3); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 206, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); - } else { - __pyx_t_3 = PyList_GET_ITEM(sequence, 0); - __pyx_t_5 = PyList_GET_ITEM(sequence, 1); - __pyx_t_2 = PyList_GET_ITEM(sequence, 2); - } - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(__pyx_t_2); - #else - __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 206, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 206, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_2 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 206, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 206, __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_3 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed; - __Pyx_GOTREF(__pyx_t_3); - index = 1; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; - __Pyx_GOTREF(__pyx_t_5); - index = 2; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L4_unpacking_failed; - __Pyx_GOTREF(__pyx_t_2); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(0, 206, __pyx_L1_error) - __pyx_t_8 = NULL; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L5_unpacking_done; - __pyx_L4_unpacking_failed:; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_8 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 206, __pyx_L1_error) - __pyx_L5_unpacking_done:; - } - __pyx_v_A = __pyx_t_3; - __pyx_t_3 = 0; - __pyx_v_X = __pyx_t_5; - __pyx_t_5 = 0; - __pyx_v_Y = __pyx_t_2; - __pyx_t_2 = 0; - - /* "cornac/models/efm/recom_efm.pyx":207 - * if self.trainable: - * A, X, Y = self._build_matrices(self.train_set) - * A_user_counts = np.ediff1d(A.indptr) # <<<<<<<<<<<<<< - * A_item_counts = np.ediff1d(A.tocsc().indptr) - * A_uids = np.repeat(np.arange(self.train_set.num_users), A_user_counts).astype(A.indices.dtype) - */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 207, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ediff1d); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 207, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_A, __pyx_n_s_indptr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 207, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - } - } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 207, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_A_user_counts = __pyx_t_1; - __pyx_t_1 = 0; - - /* "cornac/models/efm/recom_efm.pyx":208 - * A, X, Y = self._build_matrices(self.train_set) - * A_user_counts = np.ediff1d(A.indptr) - * A_item_counts = np.ediff1d(A.tocsc().indptr) # <<<<<<<<<<<<<< - * A_uids = np.repeat(np.arange(self.train_set.num_users), A_user_counts).astype(A.indices.dtype) - * X_user_counts = np.ediff1d(X.indptr) - */ - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 208, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ediff1d); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 208, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_A, __pyx_n_s_tocsc); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 208, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 208, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_indptr); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 208, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && 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); - } - } - __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_A_item_counts = __pyx_t_1; - __pyx_t_1 = 0; - - /* "cornac/models/efm/recom_efm.pyx":209 - * A_user_counts = np.ediff1d(A.indptr) - * A_item_counts = np.ediff1d(A.tocsc().indptr) - * A_uids = np.repeat(np.arange(self.train_set.num_users), A_user_counts).astype(A.indices.dtype) # <<<<<<<<<<<<<< - * X_user_counts = np.ediff1d(X.indptr) - * X_aspect_counts = np.ediff1d(X.tocsc().indptr) - */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_repeat); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_arange); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_num_users); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); - } - } - __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_7, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = NULL; - __pyx_t_4 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - __pyx_t_4 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_5)) { - PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_3, __pyx_v_A_user_counts}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { - PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_3, __pyx_v_A_user_counts}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else - #endif - { - __pyx_t_10 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - if (__pyx_t_9) { - __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL; - } - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_4, __pyx_t_3); - __Pyx_INCREF(__pyx_v_A_user_counts); - __Pyx_GIVEREF(__pyx_v_A_user_counts); - PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_4, __pyx_v_A_user_counts); - __pyx_t_3 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_astype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_A, __pyx_n_s_indices); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_dtype); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - } - } - __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_10); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_A_uids = __pyx_t_1; - __pyx_t_1 = 0; - - /* "cornac/models/efm/recom_efm.pyx":210 - * A_item_counts = np.ediff1d(A.tocsc().indptr) - * A_uids = np.repeat(np.arange(self.train_set.num_users), A_user_counts).astype(A.indices.dtype) - * X_user_counts = np.ediff1d(X.indptr) # <<<<<<<<<<<<<< - * X_aspect_counts = np.ediff1d(X.tocsc().indptr) - * X_uids = np.repeat(np.arange(self.train_set.num_users), X_user_counts).astype(X.indices.dtype) - */ - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 210, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ediff1d); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 210, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_X, __pyx_n_s_indptr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 210, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_10); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_10, function); - } - } - __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 210, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_v_X_user_counts = __pyx_t_1; - __pyx_t_1 = 0; - - /* "cornac/models/efm/recom_efm.pyx":211 - * A_uids = np.repeat(np.arange(self.train_set.num_users), A_user_counts).astype(A.indices.dtype) - * X_user_counts = np.ediff1d(X.indptr) - * X_aspect_counts = np.ediff1d(X.tocsc().indptr) # <<<<<<<<<<<<<< - * X_uids = np.repeat(np.arange(self.train_set.num_users), X_user_counts).astype(X.indices.dtype) - * Y_item_counts = np.ediff1d(Y.indptr) - */ - __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 211, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_ediff1d); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 211, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_X, __pyx_n_s_tocsc); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 211, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_10 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 211, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_indptr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 211, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = NULL; - if (CYTHON_UNPACK_METHODS && 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); - } - } - __pyx_t_1 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_10, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2); - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 211, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_X_aspect_counts = __pyx_t_1; - __pyx_t_1 = 0; - - /* "cornac/models/efm/recom_efm.pyx":212 - * X_user_counts = np.ediff1d(X.indptr) - * X_aspect_counts = np.ediff1d(X.tocsc().indptr) - * X_uids = np.repeat(np.arange(self.train_set.num_users), X_user_counts).astype(X.indices.dtype) # <<<<<<<<<<<<<< - * Y_item_counts = np.ediff1d(Y.indptr) - * Y_aspect_counts = np.ediff1d(Y.tocsc().indptr) - */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 212, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_repeat); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 212, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 212, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_arange); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 212, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 212, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_num_users); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 212, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); - } - } - __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_3, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_7); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 212, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = NULL; - __pyx_t_4 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_10, function); - __pyx_t_4 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_10)) { - PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_2, __pyx_v_X_user_counts}; - __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 212, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) { - PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_2, __pyx_v_X_user_counts}; - __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 212, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } else - #endif - { - __pyx_t_7 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 212, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - if (__pyx_t_9) { - __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_9); __pyx_t_9 = NULL; - } - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_4, __pyx_t_2); - __Pyx_INCREF(__pyx_v_X_user_counts); - __Pyx_GIVEREF(__pyx_v_X_user_counts); - PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_4, __pyx_v_X_user_counts); - __pyx_t_2 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 212, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_astype); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 212, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_X, __pyx_n_s_indices); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 212, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 212, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_10); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_10, function); - } - } - __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_5, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_7); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 212, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_v_X_uids = __pyx_t_1; - __pyx_t_1 = 0; - - /* "cornac/models/efm/recom_efm.pyx":213 - * X_aspect_counts = np.ediff1d(X.tocsc().indptr) - * X_uids = np.repeat(np.arange(self.train_set.num_users), X_user_counts).astype(X.indices.dtype) - * Y_item_counts = np.ediff1d(Y.indptr) # <<<<<<<<<<<<<< - * Y_aspect_counts = np.ediff1d(Y.tocsc().indptr) - * Y_iids = np.repeat(np.arange(self.train_set.num_items), Y_item_counts).astype(Y.indices.dtype) - */ - __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 213, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_ediff1d); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 213, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_Y, __pyx_n_s_indptr); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 213, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_5, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_10); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 213, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_v_Y_item_counts = __pyx_t_1; - __pyx_t_1 = 0; - - /* "cornac/models/efm/recom_efm.pyx":214 - * X_uids = np.repeat(np.arange(self.train_set.num_users), X_user_counts).astype(X.indices.dtype) - * Y_item_counts = np.ediff1d(Y.indptr) - * Y_aspect_counts = np.ediff1d(Y.tocsc().indptr) # <<<<<<<<<<<<<< - * Y_iids = np.repeat(np.arange(self.train_set.num_items), Y_item_counts).astype(Y.indices.dtype) - * - */ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 214, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_ediff1d); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 214, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_Y, __pyx_n_s_tocsc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 214, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - } - } - __pyx_t_7 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 214, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_indptr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 214, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_10); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_10, function); - } - } - __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_7, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 214, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_v_Y_aspect_counts = __pyx_t_1; - __pyx_t_1 = 0; - - /* "cornac/models/efm/recom_efm.pyx":215 - * Y_item_counts = np.ediff1d(Y.indptr) - * Y_aspect_counts = np.ediff1d(Y.tocsc().indptr) - * Y_iids = np.repeat(np.arange(self.train_set.num_items), Y_item_counts).astype(Y.indices.dtype) # <<<<<<<<<<<<<< - * - * self._fit_efm( - */ - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_repeat); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_arange); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); - } - } - __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_3); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = NULL; - __pyx_t_4 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - __pyx_t_4 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_7)) { - PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_5, __pyx_v_Y_item_counts}; - __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) { - PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_5, __pyx_v_Y_item_counts}; - __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } else - #endif - { - __pyx_t_3 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (__pyx_t_9) { - __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9); __pyx_t_9 = NULL; - } - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_4, __pyx_t_5); - __Pyx_INCREF(__pyx_v_Y_item_counts); - __Pyx_GIVEREF(__pyx_v_Y_item_counts); - PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_4, __pyx_v_Y_item_counts); - __pyx_t_5 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_3, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_astype); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_Y, __pyx_n_s_indices); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_10)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_10); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_1 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_10, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_3); - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_v_Y_iids = __pyx_t_1; - __pyx_t_1 = 0; - - /* "cornac/models/efm/recom_efm.pyx":217 - * Y_iids = np.repeat(np.arange(self.train_set.num_items), Y_item_counts).astype(Y.indices.dtype) - * - * self._fit_efm( # <<<<<<<<<<<<<< - * self.num_threads, - * A.data.astype(np.float32), A_uids, A.indices, A_user_counts, A_item_counts, - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_fit_efm); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 217, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - - /* "cornac/models/efm/recom_efm.pyx":218 - * - * self._fit_efm( - * self.num_threads, # <<<<<<<<<<<<<< - * A.data.astype(np.float32), A_uids, A.indices, A_user_counts, A_item_counts, - * X.data.astype(np.float32), X_uids, X.indices, X_user_counts, X_aspect_counts, - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_threads); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - - /* "cornac/models/efm/recom_efm.pyx":219 - * self._fit_efm( - * self.num_threads, - * A.data.astype(np.float32), A_uids, A.indices, A_user_counts, A_item_counts, # <<<<<<<<<<<<<< - * X.data.astype(np.float32), X_uids, X.indices, X_user_counts, X_aspect_counts, - * Y.data.astype(np.float32), Y_iids, Y.indices, Y_item_counts, Y_aspect_counts, - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_A, __pyx_n_s_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 219, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_astype); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 219, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 219, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 219, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); - } - } - __pyx_t_10 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_2); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 219, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_A, __pyx_n_s_indices); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 219, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - - /* "cornac/models/efm/recom_efm.pyx":220 - * self.num_threads, - * A.data.astype(np.float32), A_uids, A.indices, A_user_counts, A_item_counts, - * X.data.astype(np.float32), X_uids, X.indices, X_user_counts, X_aspect_counts, # <<<<<<<<<<<<<< - * Y.data.astype(np.float32), Y_iids, Y.indices, Y_item_counts, Y_aspect_counts, - * self.U1, self.U2, self.V, self.H1, self.H2 - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_X, __pyx_n_s_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 220, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_astype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 220, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 220, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_float32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 220, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_11); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_11, function); - } - } - __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_5, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_12); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 220, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_X, __pyx_n_s_indices); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 220, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - - /* "cornac/models/efm/recom_efm.pyx":221 - * A.data.astype(np.float32), A_uids, A.indices, A_user_counts, A_item_counts, - * X.data.astype(np.float32), X_uids, X.indices, X_user_counts, X_aspect_counts, - * Y.data.astype(np.float32), Y_iids, Y.indices, Y_item_counts, Y_aspect_counts, # <<<<<<<<<<<<<< - * self.U1, self.U2, self.V, self.H1, self.H2 - * ) - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_Y, __pyx_n_s_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 221, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 221, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 221, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_float32); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 221, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_12 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_5, __pyx_t_14) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_14); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 221, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_Y, __pyx_n_s_indices); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 221, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - - /* "cornac/models/efm/recom_efm.pyx":222 - * X.data.astype(np.float32), X_uids, X.indices, X_user_counts, X_aspect_counts, - * Y.data.astype(np.float32), Y_iids, Y.indices, Y_item_counts, Y_aspect_counts, - * self.U1, self.U2, self.V, self.H1, self.H2 # <<<<<<<<<<<<<< - * ) - * - */ - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 222, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 222, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_V); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 222, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_H1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 222, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_16); - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_H2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 222, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_18 = NULL; - __pyx_t_4 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_18)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_18); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - __pyx_t_4 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_7)) { - PyObject *__pyx_temp[22] = {__pyx_t_18, __pyx_t_3, __pyx_t_10, __pyx_v_A_uids, __pyx_t_9, __pyx_v_A_user_counts, __pyx_v_A_item_counts, __pyx_t_2, __pyx_v_X_uids, __pyx_t_11, __pyx_v_X_user_counts, __pyx_v_X_aspect_counts, __pyx_t_12, __pyx_v_Y_iids, __pyx_t_13, __pyx_v_Y_item_counts, __pyx_v_Y_aspect_counts, __pyx_t_14, __pyx_t_5, __pyx_t_15, __pyx_t_16, __pyx_t_17}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_4, 21+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 217, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) { - PyObject *__pyx_temp[22] = {__pyx_t_18, __pyx_t_3, __pyx_t_10, __pyx_v_A_uids, __pyx_t_9, __pyx_v_A_user_counts, __pyx_v_A_item_counts, __pyx_t_2, __pyx_v_X_uids, __pyx_t_11, __pyx_v_X_user_counts, __pyx_v_X_aspect_counts, __pyx_t_12, __pyx_v_Y_iids, __pyx_t_13, __pyx_v_Y_item_counts, __pyx_v_Y_aspect_counts, __pyx_t_14, __pyx_t_5, __pyx_t_15, __pyx_t_16, __pyx_t_17}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_4, 21+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 217, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - } else - #endif - { - __pyx_t_19 = PyTuple_New(21+__pyx_t_4); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 217, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_19); - if (__pyx_t_18) { - __Pyx_GIVEREF(__pyx_t_18); PyTuple_SET_ITEM(__pyx_t_19, 0, __pyx_t_18); __pyx_t_18 = NULL; - } - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_19, 0+__pyx_t_4, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_19, 1+__pyx_t_4, __pyx_t_10); - __Pyx_INCREF(__pyx_v_A_uids); - __Pyx_GIVEREF(__pyx_v_A_uids); - PyTuple_SET_ITEM(__pyx_t_19, 2+__pyx_t_4, __pyx_v_A_uids); - __Pyx_GIVEREF(__pyx_t_9); - PyTuple_SET_ITEM(__pyx_t_19, 3+__pyx_t_4, __pyx_t_9); - __Pyx_INCREF(__pyx_v_A_user_counts); - __Pyx_GIVEREF(__pyx_v_A_user_counts); - PyTuple_SET_ITEM(__pyx_t_19, 4+__pyx_t_4, __pyx_v_A_user_counts); - __Pyx_INCREF(__pyx_v_A_item_counts); - __Pyx_GIVEREF(__pyx_v_A_item_counts); - PyTuple_SET_ITEM(__pyx_t_19, 5+__pyx_t_4, __pyx_v_A_item_counts); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_19, 6+__pyx_t_4, __pyx_t_2); - __Pyx_INCREF(__pyx_v_X_uids); - __Pyx_GIVEREF(__pyx_v_X_uids); - PyTuple_SET_ITEM(__pyx_t_19, 7+__pyx_t_4, __pyx_v_X_uids); - __Pyx_GIVEREF(__pyx_t_11); - PyTuple_SET_ITEM(__pyx_t_19, 8+__pyx_t_4, __pyx_t_11); - __Pyx_INCREF(__pyx_v_X_user_counts); - __Pyx_GIVEREF(__pyx_v_X_user_counts); - PyTuple_SET_ITEM(__pyx_t_19, 9+__pyx_t_4, __pyx_v_X_user_counts); - __Pyx_INCREF(__pyx_v_X_aspect_counts); - __Pyx_GIVEREF(__pyx_v_X_aspect_counts); - PyTuple_SET_ITEM(__pyx_t_19, 10+__pyx_t_4, __pyx_v_X_aspect_counts); - __Pyx_GIVEREF(__pyx_t_12); - PyTuple_SET_ITEM(__pyx_t_19, 11+__pyx_t_4, __pyx_t_12); - __Pyx_INCREF(__pyx_v_Y_iids); - __Pyx_GIVEREF(__pyx_v_Y_iids); - PyTuple_SET_ITEM(__pyx_t_19, 12+__pyx_t_4, __pyx_v_Y_iids); - __Pyx_GIVEREF(__pyx_t_13); - PyTuple_SET_ITEM(__pyx_t_19, 13+__pyx_t_4, __pyx_t_13); - __Pyx_INCREF(__pyx_v_Y_item_counts); - __Pyx_GIVEREF(__pyx_v_Y_item_counts); - PyTuple_SET_ITEM(__pyx_t_19, 14+__pyx_t_4, __pyx_v_Y_item_counts); - __Pyx_INCREF(__pyx_v_Y_aspect_counts); - __Pyx_GIVEREF(__pyx_v_Y_aspect_counts); - PyTuple_SET_ITEM(__pyx_t_19, 15+__pyx_t_4, __pyx_v_Y_aspect_counts); - __Pyx_GIVEREF(__pyx_t_14); - PyTuple_SET_ITEM(__pyx_t_19, 16+__pyx_t_4, __pyx_t_14); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_19, 17+__pyx_t_4, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_15); - PyTuple_SET_ITEM(__pyx_t_19, 18+__pyx_t_4, __pyx_t_15); - __Pyx_GIVEREF(__pyx_t_16); - PyTuple_SET_ITEM(__pyx_t_19, 19+__pyx_t_4, __pyx_t_16); - __Pyx_GIVEREF(__pyx_t_17); - PyTuple_SET_ITEM(__pyx_t_19, 20+__pyx_t_4, __pyx_t_17); - __pyx_t_3 = 0; - __pyx_t_10 = 0; - __pyx_t_9 = 0; - __pyx_t_2 = 0; - __pyx_t_11 = 0; - __pyx_t_12 = 0; - __pyx_t_13 = 0; - __pyx_t_14 = 0; - __pyx_t_5 = 0; - __pyx_t_15 = 0; - __pyx_t_16 = 0; - __pyx_t_17 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_19, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 217, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "cornac/models/efm/recom_efm.pyx":205 - * self._init() - * - * if self.trainable: # <<<<<<<<<<<<<< - * A, X, Y = self._build_matrices(self.train_set) - * A_user_counts = np.ediff1d(A.indptr) - */ - } - - /* "cornac/models/efm/recom_efm.pyx":225 - * ) - * - * return self # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self); - __pyx_r = __pyx_v_self; - goto __pyx_L0; - - /* "cornac/models/efm/recom_efm.pyx":186 - * self.H2 = uniform((n_items, n_lfactors), high=high, random_state=rng) - * - * def fit(self, train_set, val_set=None): # <<<<<<<<<<<<<< - * """Fit the model to observations. - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_XDECREF(__pyx_t_13); - __Pyx_XDECREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_15); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_XDECREF(__pyx_t_17); - __Pyx_XDECREF(__pyx_t_18); - __Pyx_XDECREF(__pyx_t_19); - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_A); - __Pyx_XDECREF(__pyx_v_X); - __Pyx_XDECREF(__pyx_v_Y); - __Pyx_XDECREF(__pyx_v_A_user_counts); - __Pyx_XDECREF(__pyx_v_A_item_counts); - __Pyx_XDECREF(__pyx_v_A_uids); - __Pyx_XDECREF(__pyx_v_X_user_counts); - __Pyx_XDECREF(__pyx_v_X_aspect_counts); - __Pyx_XDECREF(__pyx_v_X_uids); - __Pyx_XDECREF(__pyx_v_Y_item_counts); - __Pyx_XDECREF(__pyx_v_Y_aspect_counts); - __Pyx_XDECREF(__pyx_v_Y_iids); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "cornac/models/efm/recom_efm.pyx":230 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def _fit_efm(self, int num_threads, # <<<<<<<<<<<<<< - * floating[:] A, integral[:] A_uids, integral[:] A_iids, integral[:] A_user_counts, integral[:] A_item_counts, - * floating[:] X, integral[:] X_uids, integral[:] X_aids, integral[:] X_user_counts, integral[:] X_aspect_counts, - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_7_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm[] = "Fit the model parameters (U1, U2, V, H1, H2)\n "; -static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_7_fit_efm = {"_fit_efm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_7_fit_efm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm}; -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_7_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_signatures = 0; - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; - CYTHON_UNUSED PyObject *__pyx_v_defaults = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0}; - PyObject* values[4] = {0,0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signatures)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 1); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 2); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 3); __PYX_ERR(0, 230, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 230, __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_signatures = values[0]; - __pyx_v_args = values[1]; - __pyx_v_kwargs = values[2]; - __pyx_v_defaults = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 230, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) { - PyObject *__pyx_v_dest_sig = NULL; - Py_ssize_t __pyx_v_i; - PyTypeObject *__pyx_v_ndarray = 0; - __Pyx_memviewslice __pyx_v_memslice; - Py_ssize_t __pyx_v_itemsize; - int __pyx_v_dtype_signed; - char __pyx_v_kind; - int __pyx_v_short_is_signed; - int __pyx_v_int_is_signed; - int __pyx_v_long_is_signed; - PyObject *__pyx_v_arg = NULL; - PyObject *__pyx_v_dtype = NULL; - PyObject *__pyx_v_arg_base = NULL; - PyObject *__pyx_v_candidates = NULL; - PyObject *__pyx_v_sig = NULL; - int __pyx_v_match_found; - PyObject *__pyx_v_src_sig = NULL; - PyObject *__pyx_v_dst_type = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - Py_ssize_t __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - long __pyx_t_7; - __Pyx_memviewslice __pyx_t_8; - Py_ssize_t __pyx_t_9; - int __pyx_t_10; - int __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - Py_ssize_t __pyx_t_15; - Py_ssize_t __pyx_t_16; - Py_ssize_t __pyx_t_17; - int __pyx_t_18; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_fit_efm", 0); - __Pyx_INCREF(__pyx_v_kwargs); - __pyx_t_1 = PyList_New(1 * 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - { Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < 2; __pyx_temp++) { - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyList_SET_ITEM(__pyx_t_1, __pyx_temp, Py_None); - } - } - __pyx_v_dest_sig = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_v_kwargs != Py_None); - __pyx_t_4 = (__pyx_t_3 != 0); - if (__pyx_t_4) { - } else { - __pyx_t_2 = __pyx_t_4; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 230, __pyx_L1_error) - __pyx_t_3 = ((!__pyx_t_4) != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L4_bool_binop_done:; - if (__pyx_t_2) { - __Pyx_INCREF(Py_None); - __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None); - } - __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1); - __pyx_t_1 = 0; - __pyx_v_itemsize = -1L; - __pyx_v_short_is_signed = (!((((short)-1L) > 0) != 0)); - __pyx_v_int_is_signed = (!((((int)-1L) > 0) != 0)); - __pyx_v_long_is_signed = (!((((long)-1L) > 0) != 0)); - if (unlikely(__pyx_v_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(0, 230, __pyx_L1_error) - } - __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 230, __pyx_L1_error) - __pyx_t_2 = ((2 < __pyx_t_5) != 0); - if (__pyx_t_2) { - if (unlikely(__pyx_v_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 230, __pyx_L1_error) - } - __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 2); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_arg = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L6; - } - __pyx_t_3 = (__pyx_v_kwargs != Py_None); - __pyx_t_4 = (__pyx_t_3 != 0); - if (__pyx_t_4) { - } else { - __pyx_t_2 = __pyx_t_4; - goto __pyx_L7_bool_binop_done; - } - if (unlikely(__pyx_v_kwargs == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 230, __pyx_L1_error) - } - __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_A, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 230, __pyx_L1_error) - __pyx_t_3 = (__pyx_t_4 != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L7_bool_binop_done:; - if (__pyx_t_2) { - if (unlikely(__pyx_v_kwargs == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 230, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_A); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_arg = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L6; - } - /*else*/ { - if (unlikely(__pyx_v_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(0, 230, __pyx_L1_error) - } - __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 230, __pyx_L1_error) - __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_int_22); - __Pyx_GIVEREF(__pyx_int_22); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_22); - __Pyx_INCREF(__pyx_n_s_s); - __Pyx_GIVEREF(__pyx_n_s_s); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_Raise(__pyx_t_6, 0, 0, 0); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __PYX_ERR(0, 230, __pyx_L1_error) - } - __pyx_L6:; - while (1) { - __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None)); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); - __pyx_t_2 = (__pyx_t_3 != 0); - if (__pyx_t_2) { - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_dtype = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L12; - } - __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_arg_base = __pyx_t_6; - __pyx_t_6 = 0; - __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); - __pyx_t_2 = (__pyx_t_3 != 0); - if (__pyx_t_2) { - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_dtype = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L13; - } - /*else*/ { - __Pyx_INCREF(Py_None); - __pyx_v_dtype = Py_None; - } - __pyx_L13:; - goto __pyx_L12; - } - /*else*/ { - __Pyx_INCREF(Py_None); - __pyx_v_dtype = Py_None; - } - __pyx_L12:; - __pyx_v_itemsize = -1L; - __pyx_t_2 = (__pyx_v_dtype != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_itemsize = __pyx_t_5; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_kind = __pyx_t_7; - __pyx_v_dtype_signed = (__pyx_v_kind == 'i'); - switch (__pyx_v_kind) { - case 'i': - case 'u': - break; - case 'f': - __pyx_t_2 = (((sizeof(float)) == __pyx_v_itemsize) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L16_bool_binop_done; - } - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 1) != 0); - __pyx_t_3 = __pyx_t_2; - __pyx_L16_bool_binop_done:; - if (__pyx_t_3) { - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 230, __pyx_L1_error) - goto __pyx_L10_break; - } - __pyx_t_2 = (((sizeof(double)) == __pyx_v_itemsize) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L19_bool_binop_done; - } - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 1) != 0); - __pyx_t_3 = __pyx_t_2; - __pyx_L19_bool_binop_done:; - if (__pyx_t_3) { - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 230, __pyx_L1_error) - goto __pyx_L10_break; - } - break; - case 'c': - break; - case 'O': - break; - default: break; - } - } - } - __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0); - if (!__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L22_bool_binop_done; - } - __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(float))) != 0); - __pyx_t_3 = __pyx_t_2; - __pyx_L22_bool_binop_done:; - if (__pyx_t_3) { - __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_v_arg, 0); - __pyx_v_memslice = __pyx_t_8; - __pyx_t_3 = (__pyx_v_memslice.memview != 0); - if (__pyx_t_3) { - __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 230, __pyx_L1_error) - goto __pyx_L10_break; - } - /*else*/ { - PyErr_Clear(); - } - } - __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0); - if (!__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L26_bool_binop_done; - } - __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(double))) != 0); - __pyx_t_3 = __pyx_t_2; - __pyx_L26_bool_binop_done:; - if (__pyx_t_3) { - __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_arg, 0); - __pyx_v_memslice = __pyx_t_8; - __pyx_t_3 = (__pyx_v_memslice.memview != 0); - if (__pyx_t_3) { - __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 230, __pyx_L1_error) - goto __pyx_L10_break; - } - /*else*/ { - PyErr_Clear(); - } - } - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 230, __pyx_L1_error) - goto __pyx_L10_break; - } - __pyx_L10_break:; - if (unlikely(__pyx_v_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(0, 230, __pyx_L1_error) - } - __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 230, __pyx_L1_error) - __pyx_t_3 = ((3 < __pyx_t_5) != 0); - if (__pyx_t_3) { - if (unlikely(__pyx_v_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 230, __pyx_L1_error) - } - __pyx_t_6 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 3); - __Pyx_INCREF(__pyx_t_6); - __Pyx_DECREF_SET(__pyx_v_arg, __pyx_t_6); - __pyx_t_6 = 0; - goto __pyx_L29; - } - __pyx_t_2 = (__pyx_v_kwargs != Py_None); - __pyx_t_4 = (__pyx_t_2 != 0); - if (__pyx_t_4) { - } else { - __pyx_t_3 = __pyx_t_4; - goto __pyx_L30_bool_binop_done; - } - if (unlikely(__pyx_v_kwargs == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 230, __pyx_L1_error) - } - __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_A_uids, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 230, __pyx_L1_error) - __pyx_t_2 = (__pyx_t_4 != 0); - __pyx_t_3 = __pyx_t_2; - __pyx_L30_bool_binop_done:; - if (__pyx_t_3) { - if (unlikely(__pyx_v_kwargs == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 230, __pyx_L1_error) - } - __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_A_uids); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF_SET(__pyx_v_arg, __pyx_t_6); - __pyx_t_6 = 0; - goto __pyx_L29; - } - /*else*/ { - if (unlikely(__pyx_v_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(0, 230, __pyx_L1_error) - } - __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 230, __pyx_L1_error) - __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_int_22); - __Pyx_GIVEREF(__pyx_int_22); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_22); - __Pyx_INCREF(__pyx_n_s_s); - __Pyx_GIVEREF(__pyx_n_s_s); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_s); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_6); - __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(0, 230, __pyx_L1_error) - } - __pyx_L29:; - while (1) { - __pyx_t_3 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None)); - __pyx_t_2 = (__pyx_t_3 != 0); - if (__pyx_t_2) { - __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_1); - __pyx_t_1 = 0; - goto __pyx_L35; - } - __pyx_t_3 = __pyx_memoryview_check(__pyx_v_arg); - __pyx_t_2 = (__pyx_t_3 != 0); - if (__pyx_t_2) { - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XDECREF_SET(__pyx_v_arg_base, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_1); - __pyx_t_1 = 0; - goto __pyx_L36; - } - /*else*/ { - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_dtype, Py_None); - } - __pyx_L36:; - goto __pyx_L35; - } - /*else*/ { - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_dtype, Py_None); - } - __pyx_L35:; - __pyx_v_itemsize = -1L; - __pyx_t_3 = (__pyx_v_dtype != Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); - if (__pyx_t_2) { - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_itemsize = __pyx_t_5; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_1); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_kind = __pyx_t_7; - __pyx_v_dtype_signed = (__pyx_v_kind == 'i'); - switch (__pyx_v_kind) { - case 'i': - case 'u': - __pyx_t_3 = (((sizeof(short)) == __pyx_v_itemsize) != 0); - if (__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L39_bool_binop_done; - } - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = ((((Py_ssize_t)__pyx_t_5) == 1) != 0); - if (__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L39_bool_binop_done; - } - __pyx_t_3 = ((!((__pyx_v_short_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L39_bool_binop_done:; - if (__pyx_t_2) { - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 230, __pyx_L1_error) - goto __pyx_L33_break; - } - __pyx_t_3 = (((sizeof(int)) == __pyx_v_itemsize) != 0); - if (__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L43_bool_binop_done; - } - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = ((((Py_ssize_t)__pyx_t_5) == 1) != 0); - if (__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L43_bool_binop_done; - } - __pyx_t_3 = ((!((__pyx_v_int_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L43_bool_binop_done:; - if (__pyx_t_2) { - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 230, __pyx_L1_error) - goto __pyx_L33_break; - } - __pyx_t_3 = (((sizeof(long)) == __pyx_v_itemsize) != 0); - if (__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L47_bool_binop_done; - } - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = ((((Py_ssize_t)__pyx_t_5) == 1) != 0); - if (__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L47_bool_binop_done; - } - __pyx_t_3 = ((!((__pyx_v_long_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L47_bool_binop_done:; - if (__pyx_t_2) { - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 230, __pyx_L1_error) - goto __pyx_L33_break; - } - break; - case 'f': - break; - case 'c': - break; - case 'O': - break; - default: break; - } - } - } - __pyx_t_3 = ((__pyx_v_itemsize == -1L) != 0); - if (!__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L51_bool_binop_done; - } - __pyx_t_3 = ((__pyx_v_itemsize == (sizeof(short))) != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L51_bool_binop_done:; - if (__pyx_t_2) { - __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_short(__pyx_v_arg, 0); - __pyx_v_memslice = __pyx_t_8; - __pyx_t_2 = (__pyx_v_memslice.memview != 0); - if (__pyx_t_2) { - __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 230, __pyx_L1_error) - goto __pyx_L33_break; - } - /*else*/ { - PyErr_Clear(); - } - } - __pyx_t_3 = ((__pyx_v_itemsize == -1L) != 0); - if (!__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L55_bool_binop_done; - } - __pyx_t_3 = ((__pyx_v_itemsize == (sizeof(int))) != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L55_bool_binop_done:; - if (__pyx_t_2) { - __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_int(__pyx_v_arg, 0); - __pyx_v_memslice = __pyx_t_8; - __pyx_t_2 = (__pyx_v_memslice.memview != 0); - if (__pyx_t_2) { - __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 230, __pyx_L1_error) - goto __pyx_L33_break; - } - /*else*/ { - PyErr_Clear(); - } - } - __pyx_t_3 = ((__pyx_v_itemsize == -1L) != 0); - if (!__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L59_bool_binop_done; - } - __pyx_t_3 = ((__pyx_v_itemsize == (sizeof(long))) != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L59_bool_binop_done:; - if (__pyx_t_2) { - __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_long(__pyx_v_arg, 0); - __pyx_v_memslice = __pyx_t_8; - __pyx_t_2 = (__pyx_v_memslice.memview != 0); - if (__pyx_t_2) { - __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 230, __pyx_L1_error) - goto __pyx_L33_break; - } - /*else*/ { - PyErr_Clear(); - } - } - if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 1, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 230, __pyx_L1_error) - goto __pyx_L33_break; - } - __pyx_L33_break:; - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_candidates = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_5 = 0; - if (unlikely(__pyx_v_signatures == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 230, __pyx_L1_error) - } - __pyx_t_6 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_1); - __pyx_t_1 = __pyx_t_6; - __pyx_t_6 = 0; - while (1) { - __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_9, &__pyx_t_5, &__pyx_t_6, NULL, NULL, __pyx_t_10); - if (unlikely(__pyx_t_11 == 0)) break; - if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_6); - __pyx_t_6 = 0; - __pyx_v_match_found = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_14 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_14)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_14); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s__6) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__6); - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_13, function); - } - } - __pyx_t_6 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__7) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__7); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_6); - __pyx_t_6 = 0; - __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 230, __pyx_L1_error) - __pyx_t_16 = __pyx_t_15; - for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { - __pyx_v_i = __pyx_t_17; - __pyx_t_6 = PyList_GET_ITEM(__pyx_v_dest_sig, __pyx_v_i); - __Pyx_INCREF(__pyx_t_6); - __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_6); - __pyx_t_6 = 0; - __pyx_t_2 = (__pyx_v_dst_type != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_13 = PyObject_RichCompare(__pyx_t_6, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - if (__pyx_t_3) { - __pyx_v_match_found = 1; - goto __pyx_L67; - } - /*else*/ { - __pyx_v_match_found = 0; - goto __pyx_L65_break; - } - __pyx_L67:; - } - } - __pyx_L65_break:; - __pyx_t_3 = (__pyx_v_match_found != 0); - if (__pyx_t_3) { - __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 230, __pyx_L1_error) - } - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (PyList_GET_SIZE(__pyx_v_candidates) != 0); - __pyx_t_2 = ((!__pyx_t_3) != 0); - if (__pyx_t_2) { - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(0, 230, __pyx_L1_error) - } - __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 230, __pyx_L1_error) - __pyx_t_2 = ((__pyx_t_9 > 1) != 0); - if (__pyx_t_2) { - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(0, 230, __pyx_L1_error) - } - /*else*/ { - __Pyx_XDECREF(__pyx_r); - if (unlikely(__pyx_v_signatures == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 230, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __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_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_XDECREF(__pyx_t_13); - __Pyx_XDECREF(__pyx_t_14); - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_dest_sig); - __Pyx_XDECREF(__pyx_v_ndarray); - __Pyx_XDECREF(__pyx_v_arg); - __Pyx_XDECREF(__pyx_v_dtype); - __Pyx_XDECREF(__pyx_v_arg_base); - __Pyx_XDECREF(__pyx_v_candidates); - __Pyx_XDECREF(__pyx_v_sig); - __Pyx_XDECREF(__pyx_v_src_sig); - __Pyx_XDECREF(__pyx_v_dst_type); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_fuse_0_0__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_19_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_fuse_0_0__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_19_fit_efm = {"__pyx_fuse_0_0_fit_efm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0_0__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_19_fit_efm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm}; -static PyObject *__pyx_fuse_0_0__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_19_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - int __pyx_v_num_threads; - __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_V = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_H1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_H2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_fit_efm (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_num_threads,&__pyx_n_s_A,&__pyx_n_s_A_uids,&__pyx_n_s_A_iids,&__pyx_n_s_A_user_counts,&__pyx_n_s_A_item_counts,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_aids,&__pyx_n_s_X_user_counts,&__pyx_n_s_X_aspect_counts,&__pyx_n_s_Y,&__pyx_n_s_Y_iids,&__pyx_n_s_Y_aids,&__pyx_n_s_Y_item_counts,&__pyx_n_s_Y_aspect_counts,&__pyx_n_s_U1,&__pyx_n_s_U2,&__pyx_n_s_V,&__pyx_n_s_H1,&__pyx_n_s_H2,0}; - PyObject* values[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - CYTHON_FALLTHROUGH; - case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - CYTHON_FALLTHROUGH; - case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - CYTHON_FALLTHROUGH; - case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - CYTHON_FALLTHROUGH; - case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - CYTHON_FALLTHROUGH; - case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - CYTHON_FALLTHROUGH; - case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - CYTHON_FALLTHROUGH; - case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - CYTHON_FALLTHROUGH; - case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - CYTHON_FALLTHROUGH; - case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - CYTHON_FALLTHROUGH; - case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - CYTHON_FALLTHROUGH; - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 1); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 2); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 3); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 4); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_user_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 5); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_item_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 6); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 7); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 8); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 9: - if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 9); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 10: - if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_user_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 10); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 11: - if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aspect_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 11); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 12: - if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 12); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 13: - if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 13); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 14: - if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 14); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 15: - if (likely((values[15] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_item_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 15); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 16: - if (likely((values[16] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_aspect_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 16); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 17: - if (likely((values[17] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 17); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 18: - if (likely((values[18] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 18); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 19: - if (likely((values[19] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 19); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 20: - if (likely((values[20] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_H1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 20); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 21: - if (likely((values[21] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_H2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 21); __PYX_ERR(0, 230, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_fit_efm") < 0)) __PYX_ERR(0, 230, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 22) { - 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); - values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - } - __pyx_v_self = values[0]; - __pyx_v_num_threads = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L3_error) - __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_uids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_iids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_user_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_item_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_user_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aspect_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_Y = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_iids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_item_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aspect_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_U1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_U2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_V = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_V.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_H1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[20], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_H2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 230, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_18_fit_efm(__pyx_self, __pyx_v_self, __pyx_v_num_threads, __pyx_v_A, __pyx_v_A_uids, __pyx_v_A_iids, __pyx_v_A_user_counts, __pyx_v_A_item_counts, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_aids, __pyx_v_X_user_counts, __pyx_v_X_aspect_counts, __pyx_v_Y, __pyx_v_Y_iids, __pyx_v_Y_aids, __pyx_v_Y_item_counts, __pyx_v_Y_aspect_counts, __pyx_v_U1, __pyx_v_U2, __pyx_v_V, __pyx_v_H1, __pyx_v_H2); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_18_fit_efm(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_A_uids, __Pyx_memviewslice __pyx_v_A_iids, __Pyx_memviewslice __pyx_v_A_user_counts, __Pyx_memviewslice __pyx_v_A_item_counts, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_X_user_counts, __Pyx_memviewslice __pyx_v_X_aspect_counts, __Pyx_memviewslice __pyx_v_Y, __Pyx_memviewslice __pyx_v_Y_iids, __Pyx_memviewslice __pyx_v_Y_aids, __Pyx_memviewslice __pyx_v_Y_item_counts, __Pyx_memviewslice __pyx_v_Y_aspect_counts, __Pyx_memviewslice __pyx_v_U1, __Pyx_memviewslice __pyx_v_U2, __Pyx_memviewslice __pyx_v_V, __Pyx_memviewslice __pyx_v_H1, __Pyx_memviewslice __pyx_v_H2) { - long __pyx_v_num_users; - long __pyx_v_num_items; - long __pyx_v_num_aspects; - int __pyx_v_num_explicit_factors; - int __pyx_v_num_latent_factors; - float __pyx_v_lambda_x; - float __pyx_v_lambda_y; - float __pyx_v_lambda_u; - float __pyx_v_lambda_h; - float __pyx_v_lambda_v; - float __pyx_v_prediction; - float __pyx_v_score; - float __pyx_v_loss; - PyArrayObject *__pyx_v_U1_numerator = 0; - PyArrayObject *__pyx_v_U1_denominator = 0; - PyArrayObject *__pyx_v_U2_numerator = 0; - PyArrayObject *__pyx_v_U2_denominator = 0; - PyArrayObject *__pyx_v_V_numerator = 0; - PyArrayObject *__pyx_v_V_denominator = 0; - PyArrayObject *__pyx_v_H1_numerator = 0; - PyArrayObject *__pyx_v_H1_denominator = 0; - PyArrayObject *__pyx_v_H2_numerator = 0; - PyArrayObject *__pyx_v_H2_denominator = 0; - int __pyx_v_i; - int __pyx_v_j; - int __pyx_v_k; - int __pyx_v_idx; - float __pyx_v_eps; - PyObject *__pyx_v_t = NULL; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_denominator; - __Pyx_Buffer __pyx_pybuffer_H1_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_numerator; - __Pyx_Buffer __pyx_pybuffer_H1_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_denominator; - __Pyx_Buffer __pyx_pybuffer_H2_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_numerator; - __Pyx_Buffer __pyx_pybuffer_H2_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_denominator; - __Pyx_Buffer __pyx_pybuffer_U1_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_numerator; - __Pyx_Buffer __pyx_pybuffer_U1_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_denominator; - __Pyx_Buffer __pyx_pybuffer_U2_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_numerator; - __Pyx_Buffer __pyx_pybuffer_U2_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_V_denominator; - __Pyx_Buffer __pyx_pybuffer_V_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_V_numerator; - __Pyx_Buffer __pyx_pybuffer_V_numerator; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - long __pyx_t_3; - int __pyx_t_4; - float __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyArrayObject *__pyx_t_9 = NULL; - PyArrayObject *__pyx_t_10 = NULL; - PyArrayObject *__pyx_t_11 = NULL; - PyArrayObject *__pyx_t_12 = NULL; - PyArrayObject *__pyx_t_13 = NULL; - PyArrayObject *__pyx_t_14 = NULL; - PyArrayObject *__pyx_t_15 = NULL; - PyArrayObject *__pyx_t_16 = NULL; - PyArrayObject *__pyx_t_17 = NULL; - PyArrayObject *__pyx_t_18 = NULL; - Py_ssize_t __pyx_t_19; - PyObject *(*__pyx_t_20)(PyObject *); - Py_ssize_t __pyx_t_21; - Py_ssize_t __pyx_t_22; - Py_ssize_t __pyx_t_23; - Py_ssize_t __pyx_t_24; - Py_ssize_t __pyx_t_25; - Py_ssize_t __pyx_t_26; - Py_ssize_t __pyx_t_27; - Py_ssize_t __pyx_t_28; - Py_ssize_t __pyx_t_29; - Py_ssize_t __pyx_t_30; - Py_ssize_t __pyx_t_31; - int __pyx_t_32; - int __pyx_t_33; - long __pyx_t_34; - long __pyx_t_35; - __pyx_t_5numpy_float32_t __pyx_t_36; - __pyx_t_5numpy_float32_t __pyx_t_37; - int __pyx_t_38; - Py_UCS4 __pyx_t_39; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_fuse_0_0_fit_efm", 0); - __pyx_pybuffer_U1_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_U1_numerator.refcount = 0; - __pyx_pybuffernd_U1_numerator.data = NULL; - __pyx_pybuffernd_U1_numerator.rcbuffer = &__pyx_pybuffer_U1_numerator; - __pyx_pybuffer_U1_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_U1_denominator.refcount = 0; - __pyx_pybuffernd_U1_denominator.data = NULL; - __pyx_pybuffernd_U1_denominator.rcbuffer = &__pyx_pybuffer_U1_denominator; - __pyx_pybuffer_U2_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_U2_numerator.refcount = 0; - __pyx_pybuffernd_U2_numerator.data = NULL; - __pyx_pybuffernd_U2_numerator.rcbuffer = &__pyx_pybuffer_U2_numerator; - __pyx_pybuffer_U2_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_U2_denominator.refcount = 0; - __pyx_pybuffernd_U2_denominator.data = NULL; - __pyx_pybuffernd_U2_denominator.rcbuffer = &__pyx_pybuffer_U2_denominator; - __pyx_pybuffer_V_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_V_numerator.refcount = 0; - __pyx_pybuffernd_V_numerator.data = NULL; - __pyx_pybuffernd_V_numerator.rcbuffer = &__pyx_pybuffer_V_numerator; - __pyx_pybuffer_V_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_V_denominator.refcount = 0; - __pyx_pybuffernd_V_denominator.data = NULL; - __pyx_pybuffernd_V_denominator.rcbuffer = &__pyx_pybuffer_V_denominator; - __pyx_pybuffer_H1_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_H1_numerator.refcount = 0; - __pyx_pybuffernd_H1_numerator.data = NULL; - __pyx_pybuffernd_H1_numerator.rcbuffer = &__pyx_pybuffer_H1_numerator; - __pyx_pybuffer_H1_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_H1_denominator.refcount = 0; - __pyx_pybuffernd_H1_denominator.data = NULL; - __pyx_pybuffernd_H1_denominator.rcbuffer = &__pyx_pybuffer_H1_denominator; - __pyx_pybuffer_H2_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_H2_numerator.refcount = 0; - __pyx_pybuffernd_H2_numerator.data = NULL; - __pyx_pybuffernd_H2_numerator.rcbuffer = &__pyx_pybuffer_H2_numerator; - __pyx_pybuffer_H2_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_H2_denominator.refcount = 0; - __pyx_pybuffernd_H2_denominator.data = NULL; - __pyx_pybuffernd_H2_denominator.rcbuffer = &__pyx_pybuffer_H2_denominator; - - /* "cornac/models/efm/recom_efm.pyx":238 - * """ - * cdef: - * long num_users = self.train_set.num_users # <<<<<<<<<<<<<< - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_num_users = __pyx_t_3; - - /* "cornac/models/efm/recom_efm.pyx":239 - * cdef: - * long num_users = self.train_set.num_users - * long num_items = self.train_set.num_items # <<<<<<<<<<<<<< - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_items = __pyx_t_3; - - /* "cornac/models/efm/recom_efm.pyx":240 - * long num_users = self.train_set.num_users - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< - * int num_explicit_factors = self.num_explicit_factors - * int num_latent_factors = self.num_latent_factors - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_aspects = __pyx_t_3; - - /* "cornac/models/efm/recom_efm.pyx":241 - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors # <<<<<<<<<<<<<< - * int num_latent_factors = self.num_latent_factors - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_explicit_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 241, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_explicit_factors = __pyx_t_4; - - /* "cornac/models/efm/recom_efm.pyx":242 - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors - * int num_latent_factors = self.num_latent_factors # <<<<<<<<<<<<<< - * - * floating lambda_x = self.lambda_x - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_latent_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 242, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_latent_factors = __pyx_t_4; - - /* "cornac/models/efm/recom_efm.pyx":244 - * int num_latent_factors = self.num_latent_factors - * - * floating lambda_x = self.lambda_x # <<<<<<<<<<<<<< - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_x = __pyx_t_5; - - /* "cornac/models/efm/recom_efm.pyx":245 - * - * floating lambda_x = self.lambda_x - * floating lambda_y = self.lambda_y # <<<<<<<<<<<<<< - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 245, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_y = __pyx_t_5; - - /* "cornac/models/efm/recom_efm.pyx":246 - * floating lambda_x = self.lambda_x - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u # <<<<<<<<<<<<<< - * floating lambda_h = self.lambda_h - * floating lambda_v = self.lambda_v - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_u); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_u = __pyx_t_5; - - /* "cornac/models/efm/recom_efm.pyx":247 - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h # <<<<<<<<<<<<<< - * floating lambda_v = self.lambda_v - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_h); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_h = __pyx_t_5; - - /* "cornac/models/efm/recom_efm.pyx":248 - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h - * floating lambda_v = self.lambda_v # <<<<<<<<<<<<<< - * - * floating prediction, score, loss - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_v); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 248, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 248, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_v = __pyx_t_5; - - /* "cornac/models/efm/recom_efm.pyx":252 - * floating prediction, score, loss - * - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 252, __pyx_L1_error) - __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 252, __pyx_L1_error) - } else {__pyx_pybuffernd_U1_numerator.diminfo[0].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_numerator.diminfo[0].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_numerator.diminfo[1].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_numerator.diminfo[1].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_9 = 0; - __pyx_v_U1_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; - - /* "cornac/models/efm/recom_efm.pyx":253 - * - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 253, __pyx_L1_error) - __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 253, __pyx_L1_error) - } else {__pyx_pybuffernd_U1_denominator.diminfo[0].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_denominator.diminfo[0].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_denominator.diminfo[1].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_denominator.diminfo[1].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_10 = 0; - __pyx_v_U1_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "cornac/models/efm/recom_efm.pyx":254 - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 254, __pyx_L1_error) - __pyx_t_11 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 254, __pyx_L1_error) - } else {__pyx_pybuffernd_U2_numerator.diminfo[0].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_numerator.diminfo[0].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_numerator.diminfo[1].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_numerator.diminfo[1].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_11 = 0; - __pyx_v_U2_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; - - /* "cornac/models/efm/recom_efm.pyx":255 - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 255, __pyx_L1_error) - __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 255, __pyx_L1_error) - } else {__pyx_pybuffernd_U2_denominator.diminfo[0].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_denominator.diminfo[0].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_denominator.diminfo[1].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_denominator.diminfo[1].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_12 = 0; - __pyx_v_U2_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "cornac/models/efm/recom_efm.pyx":256 - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 256, __pyx_L1_error) - __pyx_t_13 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_V_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 256, __pyx_L1_error) - } else {__pyx_pybuffernd_V_numerator.diminfo[0].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_numerator.diminfo[0].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_numerator.diminfo[1].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_numerator.diminfo[1].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_13 = 0; - __pyx_v_V_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; - - /* "cornac/models/efm/recom_efm.pyx":257 - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 257, __pyx_L1_error) - __pyx_t_14 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_V_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 257, __pyx_L1_error) - } else {__pyx_pybuffernd_V_denominator.diminfo[0].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_denominator.diminfo[0].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_denominator.diminfo[1].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_denominator.diminfo[1].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_14 = 0; - __pyx_v_V_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "cornac/models/efm/recom_efm.pyx":258 - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 258, __pyx_L1_error) - __pyx_t_15 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 258, __pyx_L1_error) - } else {__pyx_pybuffernd_H1_numerator.diminfo[0].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_numerator.diminfo[0].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_numerator.diminfo[1].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_numerator.diminfo[1].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_15 = 0; - __pyx_v_H1_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; - - /* "cornac/models/efm/recom_efm.pyx":259 - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) - */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 259, __pyx_L1_error) - __pyx_t_16 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 259, __pyx_L1_error) - } else {__pyx_pybuffernd_H1_denominator.diminfo[0].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_denominator.diminfo[0].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_denominator.diminfo[1].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_denominator.diminfo[1].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_16 = 0; - __pyx_v_H1_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "cornac/models/efm/recom_efm.pyx":260 - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * int i, j, k, idx - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 260, __pyx_L1_error) - __pyx_t_17 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 260, __pyx_L1_error) - } else {__pyx_pybuffernd_H2_numerator.diminfo[0].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_numerator.diminfo[0].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_numerator.diminfo[1].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_numerator.diminfo[1].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_17 = 0; - __pyx_v_H2_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; - - /* "cornac/models/efm/recom_efm.pyx":261 - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * int i, j, k, idx - * long n_ratings - */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 261, __pyx_L1_error) - __pyx_t_18 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 261, __pyx_L1_error) - } else {__pyx_pybuffernd_H2_denominator.diminfo[0].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_denominator.diminfo[0].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_denominator.diminfo[1].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_denominator.diminfo[1].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_18 = 0; - __pyx_v_H2_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "cornac/models/efm/recom_efm.pyx":265 - * long n_ratings - * - * floating eps = 1e-9 # <<<<<<<<<<<<<< - * - * for t in range(1, self.max_iter + 1): - */ - __pyx_v_eps = 1e-9; - - /* "cornac/models/efm/recom_efm.pyx":267 - * floating eps = 1e-9 - * - * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< - * loss = 0. - * U1_numerator.fill(0) - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_max_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_int_1); - __Pyx_GIVEREF(__pyx_int_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_19 = 0; - __pyx_t_20 = NULL; - } else { - __pyx_t_19 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_20 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 267, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (likely(!__pyx_t_20)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 267, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } else { - if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 267, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } - } else { - __pyx_t_2 = __pyx_t_20(__pyx_t_1); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 267, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2); - __pyx_t_2 = 0; - - /* "cornac/models/efm/recom_efm.pyx":268 - * - * for t in range(1, self.max_iter + 1): - * loss = 0. # <<<<<<<<<<<<<< - * U1_numerator.fill(0) - * U1_denominator.fill(0) - */ - __pyx_v_loss = 0.; - - /* "cornac/models/efm/recom_efm.pyx":269 - * for t in range(1, self.max_iter + 1): - * loss = 0. - * U1_numerator.fill(0) # <<<<<<<<<<<<<< - * U1_denominator.fill(0) - * U2_numerator.fill(0) - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 269, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "cornac/models/efm/recom_efm.pyx":270 - * loss = 0. - * U1_numerator.fill(0) - * U1_denominator.fill(0) # <<<<<<<<<<<<<< - * U2_numerator.fill(0) - * U2_denominator.fill(0) - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "cornac/models/efm/recom_efm.pyx":271 - * U1_numerator.fill(0) - * U1_denominator.fill(0) - * U2_numerator.fill(0) # <<<<<<<<<<<<<< - * U2_denominator.fill(0) - * V_numerator.fill(0) - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "cornac/models/efm/recom_efm.pyx":272 - * U1_denominator.fill(0) - * U2_numerator.fill(0) - * U2_denominator.fill(0) # <<<<<<<<<<<<<< - * V_numerator.fill(0) - * V_denominator.fill(0) - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 272, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "cornac/models/efm/recom_efm.pyx":273 - * U2_numerator.fill(0) - * U2_denominator.fill(0) - * V_numerator.fill(0) # <<<<<<<<<<<<<< - * V_denominator.fill(0) - * H1_numerator.fill(0) - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "cornac/models/efm/recom_efm.pyx":274 - * U2_denominator.fill(0) - * V_numerator.fill(0) - * V_denominator.fill(0) # <<<<<<<<<<<<<< - * H1_numerator.fill(0) - * H1_denominator.fill(0) - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 274, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "cornac/models/efm/recom_efm.pyx":275 - * V_numerator.fill(0) - * V_denominator.fill(0) - * H1_numerator.fill(0) # <<<<<<<<<<<<<< - * H1_denominator.fill(0) - * H2_numerator.fill(0) - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 275, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 275, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "cornac/models/efm/recom_efm.pyx":276 - * V_denominator.fill(0) - * H1_numerator.fill(0) - * H1_denominator.fill(0) # <<<<<<<<<<<<<< - * H2_numerator.fill(0) - * H2_denominator.fill(0) - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "cornac/models/efm/recom_efm.pyx":277 - * H1_numerator.fill(0) - * H1_denominator.fill(0) - * H2_numerator.fill(0) # <<<<<<<<<<<<<< - * H2_denominator.fill(0) - * - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 277, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "cornac/models/efm/recom_efm.pyx":278 - * H1_denominator.fill(0) - * H2_numerator.fill(0) - * H2_denominator.fill(0) # <<<<<<<<<<<<<< - * - * with nogil, parallel(num_threads=num_threads): - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "cornac/models/efm/recom_efm.pyx":280 - * H2_denominator.fill(0) - * - * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): - */ - { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); - #endif - /*try:*/ { - { - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) - #endif - #ifdef _OPENMP - #pragma omp parallel reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) private(__pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_3, __pyx_t_30, __pyx_t_31, __pyx_t_32, __pyx_t_33, __pyx_t_34, __pyx_t_35, __pyx_t_36, __pyx_t_37, __pyx_t_4) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_num_threads) - #endif /* _OPENMP */ - { - #ifdef _OPENMP - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - Py_BEGIN_ALLOW_THREADS - #endif /* _OPENMP */ - - /* "cornac/models/efm/recom_efm.pyx":282 - * with nogil, parallel(num_threads=num_threads): - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): # <<<<<<<<<<<<<< - * i = A_uids[idx] - * j = A_iids[idx] - */ - if (unlikely(!__pyx_v_A.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("A"); __PYX_ERR(0, 282, __pyx_L12_error) } - __pyx_t_21 = (__pyx_v_A.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_23 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((float)__PYX_NAN()); - __pyx_v_score = ((float)__PYX_NAN()); - - /* "cornac/models/efm/recom_efm.pyx":283 - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): - * i = A_uids[idx] # <<<<<<<<<<<<<< - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_i = (*((short *) ( /* dim=0 */ (__pyx_v_A_uids.data + __pyx_t_24 * __pyx_v_A_uids.strides[0]) ))); - - /* "cornac/models/efm/recom_efm.pyx":284 - * for idx in prange(A.shape[0]): - * i = A_uids[idx] - * j = A_iids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_j = (*((short *) ( /* dim=0 */ (__pyx_v_A_iids.data + __pyx_t_24 * __pyx_v_A_iids.strides[0]) ))); - - /* "cornac/models/efm/recom_efm.pyx":285 - * i = A_uids[idx] - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ # <<<<<<<<<<<<<< - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] - */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = 0; - __pyx_t_26 = __pyx_v_j; - __pyx_t_27 = 0; - - /* "cornac/models/efm/recom_efm.pyx":286 - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) # <<<<<<<<<<<<<< - * score = A[idx] - * loss += (prediction - score) * (prediction - score) - */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = 0; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = 0; - __pyx_v_prediction = (__pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) )))), 1) + __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_latent_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_28 * __pyx_v_H1.strides[0]) ) + __pyx_t_29 * __pyx_v_H1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_31 * __pyx_v_H2.strides[1]) )))), 1)); - - /* "cornac/models/efm/recom_efm.pyx":287 - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_A.data + __pyx_t_31 * __pyx_v_A.strides[0]) ))); - - /* "cornac/models/efm/recom_efm.pyx":288 - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] - */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - - /* "cornac/models/efm/recom_efm.pyx":289 - * score = A[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] - */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; - - /* "cornac/models/efm/recom_efm.pyx":290 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] # <<<<<<<<<<<<<< - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] - */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_31 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))); - - /* "cornac/models/efm/recom_efm.pyx":291 - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] # <<<<<<<<<<<<<< - * U2_numerator[j, k] += score * U1[i, k] - * U2_denominator[j, k] += prediction * U1[i, k] - */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_31 * __pyx_v_U2.strides[1]) )))); - - /* "cornac/models/efm/recom_efm.pyx":292 - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] # <<<<<<<<<<<<<< - * U2_denominator[j, k] += prediction * U1[i, k] - * - */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))); - - /* "cornac/models/efm/recom_efm.pyx":293 - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] - * U2_denominator[j, k] += prediction * U1[i, k] # <<<<<<<<<<<<<< - * - * for k in range(num_latent_factors): - */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )))); - } - - /* "cornac/models/efm/recom_efm.pyx":295 - * U2_denominator[j, k] += prediction * U1[i, k] - * - * for k in range(num_latent_factors): # <<<<<<<<<<<<<< - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] - */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; - - /* "cornac/models/efm/recom_efm.pyx":296 - * - * for k in range(num_latent_factors): - * H1_numerator[i, k] += score * H2[j, k] # <<<<<<<<<<<<<< - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] - */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_31 * __pyx_v_H2.strides[0]) ) + __pyx_t_30 * __pyx_v_H2.strides[1]) )))); - - /* "cornac/models/efm/recom_efm.pyx":297 - * for k in range(num_latent_factors): - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] # <<<<<<<<<<<<<< - * H2_numerator[j, k] += score * H1[i, k] - * H2_denominator[j, k] += prediction * H1[i, k] - */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_31 * __pyx_v_H2.strides[1]) )))); - - /* "cornac/models/efm/recom_efm.pyx":298 - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] # <<<<<<<<<<<<<< - * H2_denominator[j, k] += prediction * H1[i, k] - * - */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_31 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))); - - /* "cornac/models/efm/recom_efm.pyx":299 - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] - * H2_denominator[j, k] += prediction * H1[i, k] # <<<<<<<<<<<<<< - * - * for idx in prange(X.shape[0]): - */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_30 * __pyx_v_H1.strides[0]) ) + __pyx_t_31 * __pyx_v_H1.strides[1]) )))); - } - } - } - } - } - - /* "cornac/models/efm/recom_efm.pyx":301 - * H2_denominator[j, k] += prediction * H1[i, k] - * - * for idx in prange(X.shape[0]): # <<<<<<<<<<<<<< - * i = X_uids[idx] - * j = X_aids[idx] - */ - if (unlikely(!__pyx_v_X.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("X"); __PYX_ERR(0, 301, __pyx_L12_error) } - __pyx_t_23 = (__pyx_v_X.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_21 = (__pyx_t_23 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_21 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((float)__PYX_NAN()); - __pyx_v_score = ((float)__PYX_NAN()); - - /* "cornac/models/efm/recom_efm.pyx":302 - * - * for idx in prange(X.shape[0]): - * i = X_uids[idx] # <<<<<<<<<<<<<< - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_i = (*((short *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_31 * __pyx_v_X_uids.strides[0]) ))); - - /* "cornac/models/efm/recom_efm.pyx":303 - * for idx in prange(X.shape[0]): - * i = X_uids[idx] - * j = X_aids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] - */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_j = (*((short *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_31 * __pyx_v_X_aids.strides[0]) ))); - - /* "cornac/models/efm/recom_efm.pyx":304 - * i = X_uids[idx] - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< - * score = X[idx] - * loss += (prediction - score) * (prediction - score) - */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = 0; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = 0; - __pyx_v_prediction = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) )))), 1); - - /* "cornac/models/efm/recom_efm.pyx":305 - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_28 * __pyx_v_X.strides[0]) ))); - - /* "cornac/models/efm/recom_efm.pyx":306 - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] - */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - - /* "cornac/models/efm/recom_efm.pyx":307 - * score = X[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; - - /* "cornac/models/efm/recom_efm.pyx":308 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] # <<<<<<<<<<<<<< - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] - */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_28 * __pyx_v_U1.strides[0]) ) + __pyx_t_29 * __pyx_v_U1.strides[1]) )))); - - /* "cornac/models/efm/recom_efm.pyx":309 - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] # <<<<<<<<<<<<<< - * U1_numerator[i, k] += lambda_x * score * V[j, k] - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] - */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_29 * __pyx_v_U1.strides[0]) ) + __pyx_t_28 * __pyx_v_U1.strides[1]) )))); - - /* "cornac/models/efm/recom_efm.pyx":310 - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] # <<<<<<<<<<<<<< - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] - * - */ - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_28 * __pyx_v_V.strides[0]) ) + __pyx_t_29 * __pyx_v_V.strides[1]) )))); - - /* "cornac/models/efm/recom_efm.pyx":311 - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] # <<<<<<<<<<<<<< - * - * for idx in prange(Y.shape[0]): - */ - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) )))); - } - } - } - } - } - - /* "cornac/models/efm/recom_efm.pyx":313 - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] - * - * for idx in prange(Y.shape[0]): # <<<<<<<<<<<<<< - * i = Y_iids[idx] - * j = Y_aids[idx] - */ - if (unlikely(!__pyx_v_Y.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("Y"); __PYX_ERR(0, 313, __pyx_L12_error) } - __pyx_t_21 = (__pyx_v_Y.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_23 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((float)__PYX_NAN()); - __pyx_v_score = ((float)__PYX_NAN()); - - /* "cornac/models/efm/recom_efm.pyx":314 - * - * for idx in prange(Y.shape[0]): - * i = Y_iids[idx] # <<<<<<<<<<<<<< - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_i = (*((short *) ( /* dim=0 */ (__pyx_v_Y_iids.data + __pyx_t_28 * __pyx_v_Y_iids.strides[0]) ))); - - /* "cornac/models/efm/recom_efm.pyx":315 - * for idx in prange(Y.shape[0]): - * i = Y_iids[idx] - * j = Y_aids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] - */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_j = (*((short *) ( /* dim=0 */ (__pyx_v_Y_aids.data + __pyx_t_28 * __pyx_v_Y_aids.strides[0]) ))); - - /* "cornac/models/efm/recom_efm.pyx":316 - * i = Y_iids[idx] - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) - */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = 0; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = 0; - __pyx_v_prediction = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_28 * __pyx_v_U2.strides[0]) ) + __pyx_t_29 * __pyx_v_U2.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))), 1); - - /* "cornac/models/efm/recom_efm.pyx":317 - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_Y.data + __pyx_t_31 * __pyx_v_Y.strides[0]) ))); - - /* "cornac/models/efm/recom_efm.pyx":318 - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] - */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - - /* "cornac/models/efm/recom_efm.pyx":319 - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; - - /* "cornac/models/efm/recom_efm.pyx":320 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] # <<<<<<<<<<<<<< - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] - */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_31 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))); - - /* "cornac/models/efm/recom_efm.pyx":321 - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] # <<<<<<<<<<<<<< - * U2_numerator[i, k] += lambda_y * score * V[j, k] - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] - */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_31 * __pyx_v_U2.strides[1]) )))); - - /* "cornac/models/efm/recom_efm.pyx":322 - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] # <<<<<<<<<<<<<< - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] - * - */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )))); - - /* "cornac/models/efm/recom_efm.pyx":323 - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] # <<<<<<<<<<<<<< - * - * # update V - */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))); - } - } - } - } - } - - /* "cornac/models/efm/recom_efm.pyx":326 - * - * # update V - * for i in prange(num_aspects): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] - */ - __pyx_t_3 = __pyx_v_num_aspects; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - float __pyx_parallel_temp2 = ((float)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_35 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_35 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_35; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); - - /* "cornac/models/efm/recom_efm.pyx":327 - * # update V - * for i in prange(num_aspects): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps - */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; - - /* "cornac/models/efm/recom_efm.pyx":328 - * for i in prange(num_aspects): - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] # <<<<<<<<<<<<<< - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) - */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_v * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) ))))); - - /* "cornac/models/efm/recom_efm.pyx":329 - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps # <<<<<<<<<<<<<< - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) - * - */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_27 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += (((((*((short *) ( /* dim=0 */ (__pyx_v_X_aspect_counts.data + __pyx_t_28 * __pyx_v_X_aspect_counts.strides[0]) ))) + (*((short *) ( /* dim=0 */ (__pyx_v_Y_aspect_counts.data + __pyx_t_29 * __pyx_v_Y_aspect_counts.strides[0]) )))) * __pyx_v_lambda_v) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))) + __pyx_v_eps); - - /* "cornac/models/efm/recom_efm.pyx":330 - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) # <<<<<<<<<<<<<< - * - * # update U1, H1 - */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_V_numerator.diminfo[1].strides)); - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_V_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 330, __pyx_L42_error) - } - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L47; - __pyx_L42_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L46; - __pyx_L46:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates0) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L47:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } - - /* "cornac/models/efm/recom_efm.pyx":333 - * - * # update U1, H1 - * for i in prange(num_users): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] - */ - __pyx_t_35 = __pyx_v_num_users; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - float __pyx_parallel_temp2 = ((float)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_3 = (__pyx_t_35 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_3 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_3; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); - - /* "cornac/models/efm/recom_efm.pyx":334 - * # update U1, H1 - * for i in prange(num_users): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; - - /* "cornac/models/efm/recom_efm.pyx":335 - * for i in prange(num_users): - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] # <<<<<<<<<<<<<< - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_29 * __pyx_v_U1.strides[0]) ) + __pyx_t_28 * __pyx_v_U1.strides[1]) ))))); - - /* "cornac/models/efm/recom_efm.pyx":336 - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps # <<<<<<<<<<<<<< - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): - */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_26 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (((((*((short *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_28 * __pyx_v_A_user_counts.strides[0]) ))) + (*((short *) ( /* dim=0 */ (__pyx_v_X_user_counts.data + __pyx_t_29 * __pyx_v_X_user_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))) + __pyx_v_eps); - - /* "cornac/models/efm/recom_efm.pyx":337 - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) # <<<<<<<<<<<<<< - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] - */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_U1_numerator.diminfo[1].strides)); - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U1_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_36 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 337, __pyx_L50_error) - } - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )) *= sqrt((__pyx_t_37 / __pyx_t_36)); - } - - /* "cornac/models/efm/recom_efm.pyx":338 - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): # <<<<<<<<<<<<<< - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps - */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; - - /* "cornac/models/efm/recom_efm.pyx":339 - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] # <<<<<<<<<<<<<< - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) - */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_31 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_29 * __pyx_v_H1.strides[0]) ) + __pyx_t_28 * __pyx_v_H1.strides[1]) ))))); - - /* "cornac/models/efm/recom_efm.pyx":340 - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps # <<<<<<<<<<<<<< - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) - * - */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += ((((*((short *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_28 * __pyx_v_A_user_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_29 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))) + __pyx_v_eps); - - /* "cornac/models/efm/recom_efm.pyx":341 - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) # <<<<<<<<<<<<<< - * - * # update U2, H2 - */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H1_numerator.diminfo[1].strides)); - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_H1_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 341, __pyx_L50_error) - } - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_30 * __pyx_v_H1.strides[0]) ) + __pyx_t_29 * __pyx_v_H1.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L57; - __pyx_L50_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L56; - __pyx_L56:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates1) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L57:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } - - /* "cornac/models/efm/recom_efm.pyx":344 - * - * # update U2, H2 - * for i in prange(num_items): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] - */ - __pyx_t_3 = __pyx_v_num_items; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - float __pyx_parallel_temp2 = ((float)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_35 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_35 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_35; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); - - /* "cornac/models/efm/recom_efm.pyx":345 - * # update U2, H2 - * for i in prange(num_items): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; - - /* "cornac/models/efm/recom_efm.pyx":346 - * for i in prange(num_items): - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] # <<<<<<<<<<<<<< - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_28 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_29 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_28 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) ))))); - - /* "cornac/models/efm/recom_efm.pyx":347 - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps # <<<<<<<<<<<<<< - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): - */ - __pyx_t_27 = __pyx_v_i; - __pyx_t_28 = __pyx_v_i; - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_31 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (((((*((short *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_27 * __pyx_v_A_item_counts.strides[0]) ))) + (*((short *) ( /* dim=0 */ (__pyx_v_Y_item_counts.data + __pyx_t_28 * __pyx_v_Y_item_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_29 * __pyx_v_U2.strides[1]) )))) + __pyx_v_eps); - - /* "cornac/models/efm/recom_efm.pyx":348 - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) # <<<<<<<<<<<<<< - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] - */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U2_numerator.diminfo[1].strides)); - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_36 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 348, __pyx_L60_error) - } - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_29 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )) *= sqrt((__pyx_t_37 / __pyx_t_36)); - } - - /* "cornac/models/efm/recom_efm.pyx":349 - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): # <<<<<<<<<<<<<< - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps - */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; - - /* "cornac/models/efm/recom_efm.pyx":350 - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] # <<<<<<<<<<<<<< - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) - */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_29 * __pyx_v_H2.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_28 * __pyx_v_H2.strides[0]) ) + __pyx_t_27 * __pyx_v_H2.strides[1]) ))))); - - /* "cornac/models/efm/recom_efm.pyx":351 - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps # <<<<<<<<<<<<<< - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) - * - */ - __pyx_t_27 = __pyx_v_i; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_30 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += ((((*((short *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_27 * __pyx_v_A_item_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_28 * __pyx_v_H2.strides[0]) ) + __pyx_t_29 * __pyx_v_H2.strides[1]) )))) + __pyx_v_eps); - /* "cornac/models/efm/recom_efm.pyx":352 - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) # <<<<<<<<<<<<<< - * - * if self.verbose: - */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H2_numerator.diminfo[1].strides)); - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H2_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 352, __pyx_L60_error) - } - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_29 * __pyx_v_H2.strides[0]) ) + __pyx_t_28 * __pyx_v_H2.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L67; - __pyx_L60_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L66; - __pyx_L66:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates2) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L67:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } - goto __pyx_L69; - __pyx_L12_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L69; - __pyx_L69:; - #ifdef _OPENMP - Py_END_ALLOW_THREADS - #else -{ -#ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #endif /* _OPENMP */ - /* Clean up any temporaries */ - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - #ifndef _OPENMP +/* Python wrapper */ +static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -#endif /* _OPENMP */ - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L8_error; - } - } - } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } - /* "cornac/models/efm/recom_efm.pyx":280 - * H2_denominator.fill(0) - * - * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): - */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L9; - } - __pyx_L8_error: { - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L1_error; - } - __pyx_L9:; - } - } +static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__", 0); - /* "cornac/models/efm/recom_efm.pyx":354 - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + /* "View.MemoryView":229 * - * if self.verbose: # <<<<<<<<<<<<<< - * print('iter: %d, loss: %f' % (t, loss)) + * def __len__(self): + * return self._shape[0] # <<<<<<<<<<<<<< * + * def __getattr__(self, attr): */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 354, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_38 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_38 < 0)) __PYX_ERR(0, 354, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_38) { + __pyx_r = (__pyx_v_self->_shape[0]); + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":355 + /* "View.MemoryView":228 + * return memoryview(self, flags, self.dtype_is_object) * - * if self.verbose: - * print('iter: %d, loss: %f' % (t, loss)) # <<<<<<<<<<<<<< + * def __len__(self): # <<<<<<<<<<<<<< + * return self._shape[0] * - * if self.verbose: */ - __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_23 = 0; - __pyx_t_39 = 127; - __Pyx_INCREF(__pyx_kp_u_iter); - __pyx_t_23 += 6; - __Pyx_GIVEREF(__pyx_kp_u_iter); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_iter); - __pyx_t_6 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_t), __pyx_n_u_d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_39 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_39) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_39; - __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_6 = 0; - __Pyx_INCREF(__pyx_kp_u_loss); - __pyx_t_23 += 8; - __Pyx_GIVEREF(__pyx_kp_u_loss); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_loss); - __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_Format(__pyx_t_6, __pyx_n_u_f); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_39 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_39) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_39; - __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_23, __pyx_t_39); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":354 - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":231 + * return self._shape[0] * - * if self.verbose: # <<<<<<<<<<<<<< - * print('iter: %d, loss: %f' % (t, loss)) + * def __getattr__(self, attr): # <<<<<<<<<<<<<< + * return getattr(self.memview, attr) * */ - } - /* "cornac/models/efm/recom_efm.pyx":267 - * floating eps = 1e-9 +/* Python wrapper */ +static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/ +static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_attr)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getattr__", 0); + + /* "View.MemoryView":232 * - * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< - * loss = 0. - * U1_numerator.fill(0) + * def __getattr__(self, attr): + * return getattr(self.memview, attr) # <<<<<<<<<<<<<< + * + * def __getitem__(self, item): */ - } + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 232, __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; - /* "cornac/models/efm/recom_efm.pyx":357 - * print('iter: %d, loss: %f' % (t, loss)) + /* "View.MemoryView":231 + * return self._shape[0] * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Optimization finished!') + * def __getattr__(self, attr): # <<<<<<<<<<<<<< + * return getattr(self.memview, attr) * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_38 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_38 < 0)) __PYX_ERR(0, 357, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_38) { - /* "cornac/models/efm/recom_efm.pyx":358 + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.array.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":234 + * return getattr(self.memview, attr) * - * if self.verbose: - * print('Optimization finished!') # <<<<<<<<<<<<<< + * def __getitem__(self, item): # <<<<<<<<<<<<<< + * return self.memview[item] * - * def _build_matrices(self, data_set): */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":357 - * print('iter: %d, loss: %f' % (t, loss)) +/* Python wrapper */ +static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ +static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getitem__", 0); + + /* "View.MemoryView":235 * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Optimization finished!') + * def __getitem__(self, item): + * return self.memview[item] # <<<<<<<<<<<<<< * + * def __setitem__(self, item, value): */ - } + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 235, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 235, __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; - /* "cornac/models/efm/recom_efm.pyx":230 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def _fit_efm(self, int num_threads, # <<<<<<<<<<<<<< - * floating[:] A, integral[:] A_uids, integral[:] A_iids, integral[:] A_user_counts, integral[:] A_item_counts, - * floating[:] X, integral[:] X_uids, integral[:] X_aids, integral[:] X_user_counts, integral[:] X_aspect_counts, + /* "View.MemoryView":234 + * return getattr(self.memview, attr) + * + * def __getitem__(self, item): # <<<<<<<<<<<<<< + * return self.memview[item] + * */ /* 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_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("View.MemoryView.array.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; - goto __pyx_L2; __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_U1_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_U1_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_U2_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_U2_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_V_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_V_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_H1_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_H1_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_H2_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_H2_denominator); - __Pyx_XDECREF(__pyx_v_t); - __PYX_XDEC_MEMVIEW(&__pyx_v_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_user_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_item_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_user_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aspect_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_item_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_V, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_H1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_H2, 1); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } +/* "View.MemoryView":237 + * return self.memview[item] + * + * def __setitem__(self, item, value): # <<<<<<<<<<<<<< + * self.memview[item] = value + * + */ + /* Python wrapper */ -static PyObject *__pyx_fuse_0_1__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_21_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_fuse_0_1__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_21_fit_efm = {"__pyx_fuse_0_1_fit_efm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0_1__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_21_fit_efm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm}; -static PyObject *__pyx_fuse_0_1__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_21_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - int __pyx_v_num_threads; - __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_V = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_H1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_H2 = { 0, 0, { 0 }, { 0 }, { 0 } }; +static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setitem__", 0); + + /* "View.MemoryView":238 + * + * def __setitem__(self, item, value): + * self.memview[item] = value # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely((PyObject_SetItem(__pyx_t_1, __pyx_v_item, __pyx_v_value) < 0))) __PYX_ERR(1, 238, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "View.MemoryView":237 + * return self.memview[item] + * + * def __setitem__(self, item, value): # <<<<<<<<<<<<<< + * self.memview[item] = value + * + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_fit_efm (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_num_threads,&__pyx_n_s_A,&__pyx_n_s_A_uids,&__pyx_n_s_A_iids,&__pyx_n_s_A_user_counts,&__pyx_n_s_A_item_counts,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_aids,&__pyx_n_s_X_user_counts,&__pyx_n_s_X_aspect_counts,&__pyx_n_s_Y,&__pyx_n_s_Y_iids,&__pyx_n_s_Y_aids,&__pyx_n_s_Y_item_counts,&__pyx_n_s_Y_aspect_counts,&__pyx_n_s_U1,&__pyx_n_s_U2,&__pyx_n_s_V,&__pyx_n_s_H1,&__pyx_n_s_H2,0}; - PyObject* values[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - CYTHON_FALLTHROUGH; - case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - CYTHON_FALLTHROUGH; - case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - CYTHON_FALLTHROUGH; - case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - CYTHON_FALLTHROUGH; - case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - CYTHON_FALLTHROUGH; - case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - CYTHON_FALLTHROUGH; - case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - CYTHON_FALLTHROUGH; - case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - CYTHON_FALLTHROUGH; - case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - CYTHON_FALLTHROUGH; - case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - CYTHON_FALLTHROUGH; - case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - CYTHON_FALLTHROUGH; - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 1); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 2); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 3); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 4); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_user_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 5); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_item_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 6); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 7); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 8); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 9: - if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 9); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 10: - if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_user_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 10); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 11: - if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aspect_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 11); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 12: - if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 12); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 13: - if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 13); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 14: - if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 14); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 15: - if (likely((values[15] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_item_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 15); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 16: - if (likely((values[16] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_aspect_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 16); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 17: - if (likely((values[17] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 17); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 18: - if (likely((values[18] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 18); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 19: - if (likely((values[19] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 19); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 20: - if (likely((values[20] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_H1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 20); __PYX_ERR(0, 230, __pyx_L3_error) - } + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; + __pyx_r = __pyx_pf___pyx_array___reduce_cython__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + */ + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0); + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.array.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + PyObject* values[1] = {0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; - case 21: - if (likely((values[21] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_H2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 21); __PYX_ERR(0, 230, __pyx_L3_error) - } + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_fit_efm") < 0)) __PYX_ERR(0, 230, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 22) { + } else if (unlikely(__pyx_nargs != 1)) { 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); - values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - values[21] = PyTuple_GET_ITEM(__pyx_args, 21); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); } - __pyx_v_self = values[0]; - __pyx_v_num_threads = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L3_error) - __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_uids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_iids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_user_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_item_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_user_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aspect_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_Y = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_iids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_item_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aspect_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_U1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_U2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_V = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_V.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_H1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[20], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_H2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v___pyx_state = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 230, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error) __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_20_fit_efm(__pyx_self, __pyx_v_self, __pyx_v_num_threads, __pyx_v_A, __pyx_v_A_uids, __pyx_v_A_iids, __pyx_v_A_user_counts, __pyx_v_A_item_counts, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_aids, __pyx_v_X_user_counts, __pyx_v_X_aspect_counts, __pyx_v_Y, __pyx_v_Y_iids, __pyx_v_Y_aids, __pyx_v_Y_item_counts, __pyx_v_Y_aspect_counts, __pyx_v_U1, __pyx_v_U2, __pyx_v_V, __pyx_v_H1, __pyx_v_H2); + __pyx_r = __pyx_pf___pyx_array_2__setstate_cython__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v___pyx_state); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_20_fit_efm(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_A_uids, __Pyx_memviewslice __pyx_v_A_iids, __Pyx_memviewslice __pyx_v_A_user_counts, __Pyx_memviewslice __pyx_v_A_item_counts, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_X_user_counts, __Pyx_memviewslice __pyx_v_X_aspect_counts, __Pyx_memviewslice __pyx_v_Y, __Pyx_memviewslice __pyx_v_Y_iids, __Pyx_memviewslice __pyx_v_Y_aids, __Pyx_memviewslice __pyx_v_Y_item_counts, __Pyx_memviewslice __pyx_v_Y_aspect_counts, __Pyx_memviewslice __pyx_v_U1, __Pyx_memviewslice __pyx_v_U2, __Pyx_memviewslice __pyx_v_V, __Pyx_memviewslice __pyx_v_H1, __Pyx_memviewslice __pyx_v_H2) { - long __pyx_v_num_users; - long __pyx_v_num_items; - long __pyx_v_num_aspects; - int __pyx_v_num_explicit_factors; - int __pyx_v_num_latent_factors; - float __pyx_v_lambda_x; - float __pyx_v_lambda_y; - float __pyx_v_lambda_u; - float __pyx_v_lambda_h; - float __pyx_v_lambda_v; - float __pyx_v_prediction; - float __pyx_v_score; - float __pyx_v_loss; - PyArrayObject *__pyx_v_U1_numerator = 0; - PyArrayObject *__pyx_v_U1_denominator = 0; - PyArrayObject *__pyx_v_U2_numerator = 0; - PyArrayObject *__pyx_v_U2_denominator = 0; - PyArrayObject *__pyx_v_V_numerator = 0; - PyArrayObject *__pyx_v_V_denominator = 0; - PyArrayObject *__pyx_v_H1_numerator = 0; - PyArrayObject *__pyx_v_H1_denominator = 0; - PyArrayObject *__pyx_v_H2_numerator = 0; - PyArrayObject *__pyx_v_H2_denominator = 0; - int __pyx_v_i; - int __pyx_v_j; - int __pyx_v_k; - int __pyx_v_idx; - float __pyx_v_eps; - PyObject *__pyx_v_t = NULL; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_denominator; - __Pyx_Buffer __pyx_pybuffer_H1_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_numerator; - __Pyx_Buffer __pyx_pybuffer_H1_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_denominator; - __Pyx_Buffer __pyx_pybuffer_H2_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_numerator; - __Pyx_Buffer __pyx_pybuffer_H2_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_denominator; - __Pyx_Buffer __pyx_pybuffer_U1_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_numerator; - __Pyx_Buffer __pyx_pybuffer_U1_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_denominator; - __Pyx_Buffer __pyx_pybuffer_U2_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_numerator; - __Pyx_Buffer __pyx_pybuffer_U2_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_V_denominator; - __Pyx_Buffer __pyx_pybuffer_V_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_V_numerator; - __Pyx_Buffer __pyx_pybuffer_V_numerator; +static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - long __pyx_t_3; - int __pyx_t_4; - float __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyArrayObject *__pyx_t_9 = NULL; - PyArrayObject *__pyx_t_10 = NULL; - PyArrayObject *__pyx_t_11 = NULL; - PyArrayObject *__pyx_t_12 = NULL; - PyArrayObject *__pyx_t_13 = NULL; - PyArrayObject *__pyx_t_14 = NULL; - PyArrayObject *__pyx_t_15 = NULL; - PyArrayObject *__pyx_t_16 = NULL; - PyArrayObject *__pyx_t_17 = NULL; - PyArrayObject *__pyx_t_18 = NULL; - Py_ssize_t __pyx_t_19; - PyObject *(*__pyx_t_20)(PyObject *); - Py_ssize_t __pyx_t_21; - Py_ssize_t __pyx_t_22; - Py_ssize_t __pyx_t_23; - Py_ssize_t __pyx_t_24; - Py_ssize_t __pyx_t_25; - Py_ssize_t __pyx_t_26; - Py_ssize_t __pyx_t_27; - Py_ssize_t __pyx_t_28; - Py_ssize_t __pyx_t_29; - Py_ssize_t __pyx_t_30; - Py_ssize_t __pyx_t_31; - int __pyx_t_32; - int __pyx_t_33; - long __pyx_t_34; - long __pyx_t_35; - __pyx_t_5numpy_float32_t __pyx_t_36; - __pyx_t_5numpy_float32_t __pyx_t_37; - int __pyx_t_38; - Py_UCS4 __pyx_t_39; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_fuse_0_1_fit_efm", 0); - __pyx_pybuffer_U1_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_U1_numerator.refcount = 0; - __pyx_pybuffernd_U1_numerator.data = NULL; - __pyx_pybuffernd_U1_numerator.rcbuffer = &__pyx_pybuffer_U1_numerator; - __pyx_pybuffer_U1_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_U1_denominator.refcount = 0; - __pyx_pybuffernd_U1_denominator.data = NULL; - __pyx_pybuffernd_U1_denominator.rcbuffer = &__pyx_pybuffer_U1_denominator; - __pyx_pybuffer_U2_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_U2_numerator.refcount = 0; - __pyx_pybuffernd_U2_numerator.data = NULL; - __pyx_pybuffernd_U2_numerator.rcbuffer = &__pyx_pybuffer_U2_numerator; - __pyx_pybuffer_U2_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_U2_denominator.refcount = 0; - __pyx_pybuffernd_U2_denominator.data = NULL; - __pyx_pybuffernd_U2_denominator.rcbuffer = &__pyx_pybuffer_U2_denominator; - __pyx_pybuffer_V_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_V_numerator.refcount = 0; - __pyx_pybuffernd_V_numerator.data = NULL; - __pyx_pybuffernd_V_numerator.rcbuffer = &__pyx_pybuffer_V_numerator; - __pyx_pybuffer_V_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_V_denominator.refcount = 0; - __pyx_pybuffernd_V_denominator.data = NULL; - __pyx_pybuffernd_V_denominator.rcbuffer = &__pyx_pybuffer_V_denominator; - __pyx_pybuffer_H1_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_H1_numerator.refcount = 0; - __pyx_pybuffernd_H1_numerator.data = NULL; - __pyx_pybuffernd_H1_numerator.rcbuffer = &__pyx_pybuffer_H1_numerator; - __pyx_pybuffer_H1_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_H1_denominator.refcount = 0; - __pyx_pybuffernd_H1_denominator.data = NULL; - __pyx_pybuffernd_H1_denominator.rcbuffer = &__pyx_pybuffer_H1_denominator; - __pyx_pybuffer_H2_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_H2_numerator.refcount = 0; - __pyx_pybuffernd_H2_numerator.data = NULL; - __pyx_pybuffernd_H2_numerator.rcbuffer = &__pyx_pybuffer_H2_numerator; - __pyx_pybuffer_H2_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_H2_denominator.refcount = 0; - __pyx_pybuffernd_H2_denominator.data = NULL; - __pyx_pybuffernd_H2_denominator.rcbuffer = &__pyx_pybuffer_H2_denominator; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); - /* "cornac/models/efm/recom_efm.pyx":238 - * """ - * cdef: - * long num_users = self.train_set.num_users # <<<<<<<<<<<<<< - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects + /* "(tree fragment)":4 + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<< */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_num_users = __pyx_t_3; + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0); + __PYX_ERR(1, 4, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":239 - * cdef: - * long num_users = self.train_set.num_users - * long num_items = self.train_set.num_items # <<<<<<<<<<<<<< - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_items = __pyx_t_3; - /* "cornac/models/efm/recom_efm.pyx":240 - * long num_users = self.train_set.num_users - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< - * int num_explicit_factors = self.num_explicit_factors - * int num_latent_factors = self.num_latent_factors - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_aspects = __pyx_t_3; + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/efm/recom_efm.pyx":241 - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors # <<<<<<<<<<<<<< - * int num_latent_factors = self.num_latent_factors +/* "View.MemoryView":248 * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_explicit_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 241, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_explicit_factors = __pyx_t_4; - - /* "cornac/models/efm/recom_efm.pyx":242 - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors - * int num_latent_factors = self.num_latent_factors # <<<<<<<<<<<<<< + * @cname("__pyx_array_allocate_buffer") + * cdef int _allocate_buffer(array self) except -1: # <<<<<<<<<<<<<< * - * floating lambda_x = self.lambda_x - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_latent_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 242, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_latent_factors = __pyx_t_4; - - /* "cornac/models/efm/recom_efm.pyx":244 - * int num_latent_factors = self.num_latent_factors * - * floating lambda_x = self.lambda_x # <<<<<<<<<<<<<< - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_x = __pyx_t_5; - /* "cornac/models/efm/recom_efm.pyx":245 - * - * floating lambda_x = self.lambda_x - * floating lambda_y = self.lambda_y # <<<<<<<<<<<<<< - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 245, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_y = __pyx_t_5; +static int __pyx_array_allocate_buffer(struct __pyx_array_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_i; + PyObject **__pyx_v_p; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_allocate_buffer", 0); - /* "cornac/models/efm/recom_efm.pyx":246 - * floating lambda_x = self.lambda_x - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u # <<<<<<<<<<<<<< - * floating lambda_h = self.lambda_h - * floating lambda_v = self.lambda_v + /* "View.MemoryView":254 + * cdef PyObject **p + * + * self.free_data = True # <<<<<<<<<<<<<< + * self.data = malloc(self.len) + * if not self.data: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_u); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_u = __pyx_t_5; + __pyx_v_self->free_data = 1; - /* "cornac/models/efm/recom_efm.pyx":247 - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h # <<<<<<<<<<<<<< - * floating lambda_v = self.lambda_v + /* "View.MemoryView":255 * + * self.free_data = True + * self.data = malloc(self.len) # <<<<<<<<<<<<<< + * if not self.data: + * raise MemoryError, "unable to allocate array data." */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_h); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_h = __pyx_t_5; + __pyx_v_self->data = ((char *)malloc(__pyx_v_self->len)); - /* "cornac/models/efm/recom_efm.pyx":248 - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h - * floating lambda_v = self.lambda_v # <<<<<<<<<<<<<< + /* "View.MemoryView":256 + * self.free_data = True + * self.data = malloc(self.len) + * if not self.data: # <<<<<<<<<<<<<< + * raise MemoryError, "unable to allocate array data." * - * floating prediction, score, loss */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_v); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 248, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 248, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_v = __pyx_t_5; + __pyx_t_1 = (!(__pyx_v_self->data != 0)); + if (unlikely(__pyx_t_1)) { - /* "cornac/models/efm/recom_efm.pyx":252 - * floating prediction, score, loss + /* "View.MemoryView":257 + * self.data = malloc(self.len) + * if not self.data: + * raise MemoryError, "unable to allocate array data." # <<<<<<<<<<<<<< * - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * if self.dtype_is_object: */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 252, __pyx_L1_error) - __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 252, __pyx_L1_error) - } else {__pyx_pybuffernd_U1_numerator.diminfo[0].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_numerator.diminfo[0].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_numerator.diminfo[1].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_numerator.diminfo[1].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_9 = 0; - __pyx_v_U1_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; + __Pyx_Raise(__pyx_builtin_MemoryError, __pyx_kp_s_unable_to_allocate_array_data, 0, 0); + __PYX_ERR(1, 257, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":253 + /* "View.MemoryView":256 + * self.free_data = True + * self.data = malloc(self.len) + * if not self.data: # <<<<<<<<<<<<<< + * raise MemoryError, "unable to allocate array data." * - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 253, __pyx_L1_error) - __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 253, __pyx_L1_error) - } else {__pyx_pybuffernd_U1_denominator.diminfo[0].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_denominator.diminfo[0].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_denominator.diminfo[1].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_denominator.diminfo[1].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[1]; - } } - __pyx_t_10 = 0; - __pyx_v_U1_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":254 - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + /* "View.MemoryView":259 + * raise MemoryError, "unable to allocate array data." + * + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * p = self.data + * for i in range(self.len // self.itemsize): */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 254, __pyx_L1_error) - __pyx_t_11 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 254, __pyx_L1_error) - } else {__pyx_pybuffernd_U2_numerator.diminfo[0].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_numerator.diminfo[0].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_numerator.diminfo[1].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_numerator.diminfo[1].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_11 = 0; - __pyx_v_U2_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; + if (__pyx_v_self->dtype_is_object) { - /* "cornac/models/efm/recom_efm.pyx":255 - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + /* "View.MemoryView":260 + * + * if self.dtype_is_object: + * p = self.data # <<<<<<<<<<<<<< + * for i in range(self.len // self.itemsize): + * p[i] = Py_None */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 255, __pyx_L1_error) - __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 255, __pyx_L1_error) - } else {__pyx_pybuffernd_U2_denominator.diminfo[0].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_denominator.diminfo[0].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_denominator.diminfo[1].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_denominator.diminfo[1].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[1]; + __pyx_v_p = ((PyObject **)__pyx_v_self->data); + + /* "View.MemoryView":261 + * if self.dtype_is_object: + * p = self.data + * for i in range(self.len // self.itemsize): # <<<<<<<<<<<<<< + * p[i] = Py_None + * Py_INCREF(Py_None) + */ + if (unlikely(__pyx_v_self->itemsize == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(1, 261, __pyx_L1_error) } - } - __pyx_t_12 = 0; - __pyx_v_U2_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; + else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_self->itemsize == (Py_ssize_t)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_self->len))) { + PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); + __PYX_ERR(1, 261, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_div_Py_ssize_t(__pyx_v_self->len, __pyx_v_self->itemsize); + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; - /* "cornac/models/efm/recom_efm.pyx":256 - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + /* "View.MemoryView":262 + * p = self.data + * for i in range(self.len // self.itemsize): + * p[i] = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * return 0 */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 256, __pyx_L1_error) - __pyx_t_13 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_V_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 256, __pyx_L1_error) - } else {__pyx_pybuffernd_V_numerator.diminfo[0].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_numerator.diminfo[0].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_numerator.diminfo[1].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_numerator.diminfo[1].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[1]; + (__pyx_v_p[__pyx_v_i]) = Py_None; + + /* "View.MemoryView":263 + * for i in range(self.len // self.itemsize): + * p[i] = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * return 0 + * + */ + Py_INCREF(Py_None); } + + /* "View.MemoryView":259 + * raise MemoryError, "unable to allocate array data." + * + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * p = self.data + * for i in range(self.len // self.itemsize): + */ } - __pyx_t_13 = 0; - __pyx_v_V_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; - /* "cornac/models/efm/recom_efm.pyx":257 - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + /* "View.MemoryView":264 + * p[i] = Py_None + * Py_INCREF(Py_None) + * return 0 # <<<<<<<<<<<<<< + * + * */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 257, __pyx_L1_error) - __pyx_t_14 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_V_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 257, __pyx_L1_error) - } else {__pyx_pybuffernd_V_denominator.diminfo[0].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_denominator.diminfo[0].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_denominator.diminfo[1].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_denominator.diminfo[1].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[1]; - } + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":248 + * + * @cname("__pyx_array_allocate_buffer") + * cdef int _allocate_buffer(array self) except -1: # <<<<<<<<<<<<<< + * + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView._allocate_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":268 + * + * @cname("__pyx_array_new") + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, char *c_mode, char *buf): # <<<<<<<<<<<<<< + * cdef array result + * cdef str mode = "fortran" if c_mode[0] == b'f' else "c" # this often comes from a constant C string. + */ + +static struct __pyx_array_obj *__pyx_array_new(PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, char *__pyx_v_format, char *__pyx_v_c_mode, char *__pyx_v_buf) { + struct __pyx_array_obj *__pyx_v_result = 0; + PyObject *__pyx_v_mode = 0; + struct __pyx_array_obj *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("array_cwrapper", 0); + + /* "View.MemoryView":270 + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, char *c_mode, char *buf): + * cdef array result + * cdef str mode = "fortran" if c_mode[0] == b'f' else "c" # this often comes from a constant C string. # <<<<<<<<<<<<<< + * + * if buf is NULL: + */ + if (((__pyx_v_c_mode[0]) == 'f')) { + __Pyx_INCREF(__pyx_n_s_fortran); + __pyx_t_1 = __pyx_n_s_fortran; + } else { + __Pyx_INCREF(__pyx_n_s_c); + __pyx_t_1 = __pyx_n_s_c; } - __pyx_t_14 = 0; - __pyx_v_V_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_v_mode = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":258 - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + /* "View.MemoryView":272 + * cdef str mode = "fortran" if c_mode[0] == b'f' else "c" # this often comes from a constant C string. + * + * if buf is NULL: # <<<<<<<<<<<<<< + * result = array.__new__(array, shape, itemsize, format, mode) + * else: */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 258, __pyx_L1_error) - __pyx_t_15 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 258, __pyx_L1_error) - } else {__pyx_pybuffernd_H1_numerator.diminfo[0].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_numerator.diminfo[0].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_numerator.diminfo[1].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_numerator.diminfo[1].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_15 = 0; - __pyx_v_H1_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; + __pyx_t_2 = (__pyx_v_buf == NULL); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":259 - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) + /* "View.MemoryView":273 + * + * if buf is NULL: + * result = array.__new__(array, shape, itemsize, format, mode) # <<<<<<<<<<<<<< + * else: + * result = array.__new__(array, shape, itemsize, format, mode, allocate_buffer=False) */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 259, __pyx_L1_error) - __pyx_t_16 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 259, __pyx_L1_error) - } else {__pyx_pybuffernd_H1_denominator.diminfo[0].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_denominator.diminfo[0].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_denominator.diminfo[1].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_denominator.diminfo[1].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[1]; - } + __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_v_shape); + __Pyx_GIVEREF(__pyx_v_shape); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_shape); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); + __Pyx_INCREF(__pyx_v_mode); + __Pyx_GIVEREF(__pyx_v_mode); + PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_mode); + __pyx_t_1 = 0; + __pyx_t_3 = 0; + __pyx_t_3 = ((PyObject *)__pyx_tp_new_array(((PyTypeObject *)__pyx_array_type), __pyx_t_4, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 273, __pyx_L1_error) + __Pyx_GOTREF((PyObject *)__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":272 + * cdef str mode = "fortran" if c_mode[0] == b'f' else "c" # this often comes from a constant C string. + * + * if buf is NULL: # <<<<<<<<<<<<<< + * result = array.__new__(array, shape, itemsize, format, mode) + * else: + */ + goto __pyx_L3; } - __pyx_t_16 = 0; - __pyx_v_H1_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":260 - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * int i, j, k, idx + /* "View.MemoryView":275 + * result = array.__new__(array, shape, itemsize, format, mode) + * else: + * result = array.__new__(array, shape, itemsize, format, mode, allocate_buffer=False) # <<<<<<<<<<<<<< + * result.data = buf + * */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 260, __pyx_L1_error) - __pyx_t_17 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 260, __pyx_L1_error) - } else {__pyx_pybuffernd_H2_numerator.diminfo[0].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_numerator.diminfo[0].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_numerator.diminfo[1].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_numerator.diminfo[1].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[1]; - } + /*else*/ { + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_shape); + __Pyx_GIVEREF(__pyx_v_shape); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_shape); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4); + __Pyx_INCREF(__pyx_v_mode); + __Pyx_GIVEREF(__pyx_v_mode); + PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_mode); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(1, 275, __pyx_L1_error) + __pyx_t_3 = ((PyObject *)__pyx_tp_new_array(((PyTypeObject *)__pyx_array_type), __pyx_t_1, __pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 275, __pyx_L1_error) + __Pyx_GOTREF((PyObject *)__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":276 + * else: + * result = array.__new__(array, shape, itemsize, format, mode, allocate_buffer=False) + * result.data = buf # <<<<<<<<<<<<<< + * + * return result + */ + __pyx_v_result->data = __pyx_v_buf; } - __pyx_t_17 = 0; - __pyx_v_H2_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; + __pyx_L3:; - /* "cornac/models/efm/recom_efm.pyx":261 - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * int i, j, k, idx - * long n_ratings + /* "View.MemoryView":278 + * result.data = buf + * + * return result # <<<<<<<<<<<<<< + * + * */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 261, __pyx_L1_error) - __pyx_t_18 = ((PyArrayObject *)__pyx_t_1); + __Pyx_XDECREF((PyObject *)__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "View.MemoryView":268 + * + * @cname("__pyx_array_new") + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, char *c_mode, char *buf): # <<<<<<<<<<<<<< + * cdef array result + * cdef str mode = "fortran" if c_mode[0] == b'f' else "c" # this often comes from a constant C string. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.array_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XDECREF(__pyx_v_mode); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":304 + * cdef class Enum(object): + * cdef object name + * def __init__(self, name): # <<<<<<<<<<<<<< + * self.name = name + * def __repr__(self): + */ + +/* Python wrapper */ +static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_name = 0; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 261, __pyx_L1_error) - } else {__pyx_pybuffernd_H2_denominator.diminfo[0].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_denominator.diminfo[0].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_denominator.diminfo[1].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_denominator.diminfo[1].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[1]; + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0}; + PyObject* values[1] = {0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_name)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 304, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(1, 304, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); } + __pyx_v_name = values[0]; } - __pyx_t_18 = 0; - __pyx_v_H2_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 304, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.Enum.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v_name); - /* "cornac/models/efm/recom_efm.pyx":265 - * long n_ratings + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__", 0); + + /* "View.MemoryView":305 + * cdef object name + * def __init__(self, name): + * self.name = name # <<<<<<<<<<<<<< + * def __repr__(self): + * return self.name + */ + __Pyx_INCREF(__pyx_v_name); + __Pyx_GIVEREF(__pyx_v_name); + __Pyx_GOTREF(__pyx_v_self->name); + __Pyx_DECREF(__pyx_v_self->name); + __pyx_v_self->name = __pyx_v_name; + + /* "View.MemoryView":304 + * cdef class Enum(object): + * cdef object name + * def __init__(self, name): # <<<<<<<<<<<<<< + * self.name = name + * def __repr__(self): + */ + + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":306 + * def __init__(self, name): + * self.name = name + * def __repr__(self): # <<<<<<<<<<<<<< + * return self.name * - * floating eps = 1e-9 # <<<<<<<<<<<<<< + */ + +/* Python wrapper */ +static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "View.MemoryView":307 + * self.name = name + * def __repr__(self): + * return self.name # <<<<<<<<<<<<<< * - * for t in range(1, self.max_iter + 1): + * cdef generic = Enum("") */ - __pyx_v_eps = 1e-9; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->name); + __pyx_r = __pyx_v_self->name; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":267 - * floating eps = 1e-9 + /* "View.MemoryView":306 + * def __init__(self, name): + * self.name = name + * def __repr__(self): # <<<<<<<<<<<<<< + * return self.name * - * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< - * loss = 0. - * U1_numerator.fill(0) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_max_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; + __pyx_r = __pyx_pf___pyx_MemviewEnum___reduce_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v__dict = 0; + int __pyx_v_use_setstate; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.name,) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_INCREF(__pyx_v_self->name); + __Pyx_GIVEREF(__pyx_v_self->name); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name); + __pyx_v_state = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_int_1); - __Pyx_GIVEREF(__pyx_int_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_19 = 0; - __pyx_t_20 = NULL; - } else { - __pyx_t_19 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_20 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 267, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (likely(!__pyx_t_20)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 267, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } else { - if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 267, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } - } else { - __pyx_t_2 = __pyx_t_20(__pyx_t_1); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 267, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2); - __pyx_t_2 = 0; + __pyx_v__dict = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":268 - * - * for t in range(1, self.max_iter + 1): - * loss = 0. # <<<<<<<<<<<<<< - * U1_numerator.fill(0) - * U1_denominator.fill(0) + /* "(tree fragment)":7 + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True */ - __pyx_v_loss = 0.; + __pyx_t_2 = (__pyx_v__dict != Py_None); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":269 - * for t in range(1, self.max_iter + 1): - * loss = 0. - * U1_numerator.fill(0) # <<<<<<<<<<<<<< - * U1_denominator.fill(0) - * U2_numerator.fill(0) + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 269, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); + __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; - /* "cornac/models/efm/recom_efm.pyx":270 - * loss = 0. - * U1_numerator.fill(0) - * U1_denominator.fill(0) # <<<<<<<<<<<<<< - * U2_numerator.fill(0) - * U2_denominator.fill(0) + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self.name is not None */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_use_setstate = 1; - /* "cornac/models/efm/recom_efm.pyx":271 - * U1_numerator.fill(0) - * U1_denominator.fill(0) - * U2_numerator.fill(0) # <<<<<<<<<<<<<< - * U2_denominator.fill(0) - * V_numerator.fill(0) + /* "(tree fragment)":7 + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L3; + } - /* "cornac/models/efm/recom_efm.pyx":272 - * U1_denominator.fill(0) - * U2_numerator.fill(0) - * U2_denominator.fill(0) # <<<<<<<<<<<<<< - * V_numerator.fill(0) - * V_denominator.fill(0) + /* "(tree fragment)":11 + * use_setstate = True + * else: + * use_setstate = self.name is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, None), state */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 272, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /*else*/ { + __pyx_t_2 = (__pyx_v_self->name != Py_None); + __pyx_v_use_setstate = __pyx_t_2; + } + __pyx_L3:; - /* "cornac/models/efm/recom_efm.pyx":273 - * U2_numerator.fill(0) - * U2_denominator.fill(0) - * V_numerator.fill(0) # <<<<<<<<<<<<<< - * V_denominator.fill(0) - * H1_numerator.fill(0) + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, None), state + * else: */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_v_use_setstate) { - /* "cornac/models/efm/recom_efm.pyx":274 - * U2_denominator.fill(0) - * V_numerator.fill(0) - * V_denominator.fill(0) # <<<<<<<<<<<<<< - * H1_numerator.fill(0) - * H1_denominator.fill(0) + /* "(tree fragment)":13 + * use_setstate = self.name is not None + * if use_setstate: + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, state) */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 274, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_136983863); + __Pyx_GIVEREF(__pyx_int_136983863); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_136983863); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_state); + __pyx_t_3 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":275 - * V_numerator.fill(0) - * V_denominator.fill(0) - * H1_numerator.fill(0) # <<<<<<<<<<<<<< - * H1_denominator.fill(0) - * H2_numerator.fill(0) + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, None), state + * else: */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 275, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 275, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } - /* "cornac/models/efm/recom_efm.pyx":276 - * V_denominator.fill(0) - * H1_numerator.fill(0) - * H1_denominator.fill(0) # <<<<<<<<<<<<<< - * H2_numerator.fill(0) - * H2_denominator.fill(0) + /* "(tree fragment)":15 + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, None), state + * else: + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_Enum__set_state(self, __pyx_state) */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_136983863); + __Pyx_GIVEREF(__pyx_int_136983863); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_136983863); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + } - /* "cornac/models/efm/recom_efm.pyx":277 - * H1_numerator.fill(0) - * H1_denominator.fill(0) - * H2_numerator.fill(0) # <<<<<<<<<<<<<< - * H2_denominator.fill(0) - * + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 277, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":278 - * H1_denominator.fill(0) - * H2_numerator.fill(0) - * H2_denominator.fill(0) # <<<<<<<<<<<<<< - * - * with nogil, parallel(num_threads=num_threads): + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.Enum.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_state); + __Pyx_XDECREF(__pyx_v__dict); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":16 + * else: + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state(self, __pyx_state) */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + PyObject* values[1] = {0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 16, __pyx_L3_error) } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 16, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf___pyx_MemviewEnum_2__setstate_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v___pyx_state); - /* "cornac/models/efm/recom_efm.pyx":280 - * H2_denominator.fill(0) - * - * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): - */ - { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); - #endif - /*try:*/ { - { - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) - #endif - #ifdef _OPENMP - #pragma omp parallel reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) private(__pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_3, __pyx_t_30, __pyx_t_31, __pyx_t_32, __pyx_t_33, __pyx_t_34, __pyx_t_35, __pyx_t_36, __pyx_t_37, __pyx_t_4) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_num_threads) - #endif /* _OPENMP */ - { - #ifdef _OPENMP - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - Py_BEGIN_ALLOW_THREADS - #endif /* _OPENMP */ + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/efm/recom_efm.pyx":282 - * with nogil, parallel(num_threads=num_threads): - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): # <<<<<<<<<<<<<< - * i = A_uids[idx] - * j = A_iids[idx] - */ - if (unlikely(!__pyx_v_A.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("A"); __PYX_ERR(0, 282, __pyx_L12_error) } - __pyx_t_21 = (__pyx_v_A.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_23 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((float)__PYX_NAN()); - __pyx_v_score = ((float)__PYX_NAN()); +static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); - /* "cornac/models/efm/recom_efm.pyx":283 - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): - * i = A_uids[idx] # <<<<<<<<<<<<<< - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + /* "(tree fragment)":17 + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_Enum__set_state(self, __pyx_state) # <<<<<<<<<<<<<< */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_i = (*((int *) ( /* dim=0 */ (__pyx_v_A_uids.data + __pyx_t_24 * __pyx_v_A_uids.strides[0]) ))); + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_unpickle_Enum__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":284 - * for idx in prange(A.shape[0]): - * i = A_uids[idx] - * j = A_iids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_Enum, (type(self), 0x82a3537, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state(self, __pyx_state) */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_j = (*((int *) ( /* dim=0 */ (__pyx_v_A_iids.data + __pyx_t_24 * __pyx_v_A_iids.strides[0]) ))); - /* "cornac/models/efm/recom_efm.pyx":285 - * i = A_uids[idx] - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ # <<<<<<<<<<<<<< - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] - */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = 0; - __pyx_t_26 = __pyx_v_j; - __pyx_t_27 = 0; + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/efm/recom_efm.pyx":286 - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) # <<<<<<<<<<<<<< - * score = A[idx] - * loss += (prediction - score) * (prediction - score) +/* "View.MemoryView":349 + * cdef __Pyx_TypeInfo *typeinfo + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< + * self.obj = obj + * self.flags = flags */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = 0; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = 0; - __pyx_v_prediction = (__pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) )))), 1) + __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_latent_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_28 * __pyx_v_H1.strides[0]) ) + __pyx_t_29 * __pyx_v_H1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_31 * __pyx_v_H2.strides[1]) )))), 1)); - /* "cornac/models/efm/recom_efm.pyx":287 - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_A.data + __pyx_t_31 * __pyx_v_A.strides[0]) ))); +/* Python wrapper */ +static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_obj = 0; + int __pyx_v_flags; + int __pyx_v_dtype_is_object; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_flags,&__pyx_n_s_dtype_is_object,0}; + PyObject* values[3] = {0,0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 349, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_flags)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 349, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(1, 349, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_dtype_is_object); + if (value) { values[2] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 349, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__cinit__") < 0)) __PYX_ERR(1, 349, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj = values[0]; + __pyx_v_flags = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_flags == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 349, __pyx_L3_error) + if (values[2]) { + __pyx_v_dtype_is_object = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_dtype_is_object == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 349, __pyx_L3_error) + } else { + __pyx_v_dtype_is_object = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, __pyx_nargs); __PYX_ERR(1, 349, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_obj, __pyx_v_flags, __pyx_v_dtype_is_object); - /* "cornac/models/efm/recom_efm.pyx":288 - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + Py_intptr_t __pyx_t_4; + size_t __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__cinit__", 0); + + /* "View.MemoryView":350 + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): + * self.obj = obj # <<<<<<<<<<<<<< + * self.flags = flags + * if type(self) is memoryview or obj is not None: */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); + __Pyx_INCREF(__pyx_v_obj); + __Pyx_GIVEREF(__pyx_v_obj); + __Pyx_GOTREF(__pyx_v_self->obj); + __Pyx_DECREF(__pyx_v_self->obj); + __pyx_v_self->obj = __pyx_v_obj; - /* "cornac/models/efm/recom_efm.pyx":289 - * score = A[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] + /* "View.MemoryView":351 + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): + * self.obj = obj + * self.flags = flags # <<<<<<<<<<<<<< + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; + __pyx_v_self->flags = __pyx_v_flags; - /* "cornac/models/efm/recom_efm.pyx":290 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] # <<<<<<<<<<<<<< - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] + /* "View.MemoryView":352 + * self.obj = obj + * self.flags = flags + * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_31 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))); + __pyx_t_2 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))) == ((PyObject *)__pyx_memoryview_type)); + if (!__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_obj != Py_None); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":291 - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] # <<<<<<<<<<<<<< - * U2_numerator[j, k] += score * U1[i, k] - * U2_denominator[j, k] += prediction * U1[i, k] + /* "View.MemoryView":353 + * self.flags = flags + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) # <<<<<<<<<<<<<< + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_31 * __pyx_v_U2.strides[1]) )))); + __pyx_t_3 = __Pyx_GetBuffer(__pyx_v_obj, (&__pyx_v_self->view), __pyx_v_flags); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 353, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":292 - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] # <<<<<<<<<<<<<< - * U2_denominator[j, k] += prediction * U1[i, k] - * + /* "View.MemoryView":354 + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))); + __pyx_t_1 = (((PyObject *)__pyx_v_self->view.obj) == NULL); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":293 - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] - * U2_denominator[j, k] += prediction * U1[i, k] # <<<<<<<<<<<<<< + /* "View.MemoryView":355 + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) * - * for k in range(num_latent_factors): */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )))); - } + ((Py_buffer *)(&__pyx_v_self->view))->obj = Py_None; - /* "cornac/models/efm/recom_efm.pyx":295 - * U2_denominator[j, k] += prediction * U1[i, k] + /* "View.MemoryView":356 + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< * - * for k in range(num_latent_factors): # <<<<<<<<<<<<<< - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] + * if not __PYX_CYTHON_ATOMICS_ENABLED(): */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; + Py_INCREF(Py_None); - /* "cornac/models/efm/recom_efm.pyx":296 - * - * for k in range(num_latent_factors): - * H1_numerator[i, k] += score * H2[j, k] # <<<<<<<<<<<<<< - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] + /* "View.MemoryView":354 + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_31 * __pyx_v_H2.strides[0]) ) + __pyx_t_30 * __pyx_v_H2.strides[1]) )))); + } - /* "cornac/models/efm/recom_efm.pyx":297 - * for k in range(num_latent_factors): - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] # <<<<<<<<<<<<<< - * H2_numerator[j, k] += score * H1[i, k] - * H2_denominator[j, k] += prediction * H1[i, k] + /* "View.MemoryView":352 + * self.obj = obj + * self.flags = flags + * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_31 * __pyx_v_H2.strides[1]) )))); + } - /* "cornac/models/efm/recom_efm.pyx":298 - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] # <<<<<<<<<<<<<< - * H2_denominator[j, k] += prediction * H1[i, k] + /* "View.MemoryView":358 + * Py_INCREF(Py_None) * + * if not __PYX_CYTHON_ATOMICS_ENABLED(): # <<<<<<<<<<<<<< + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < 8: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_31 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))); + __pyx_t_1 = (!__PYX_CYTHON_ATOMICS_ENABLED()); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":299 - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] - * H2_denominator[j, k] += prediction * H1[i, k] # <<<<<<<<<<<<<< - * - * for idx in prange(X.shape[0]): + /* "View.MemoryView":360 + * if not __PYX_CYTHON_ATOMICS_ENABLED(): + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < 8: # <<<<<<<<<<<<<< + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_30 * __pyx_v_H1.strides[0]) ) + __pyx_t_31 * __pyx_v_H1.strides[1]) )))); - } - } - } - } - } + __pyx_t_1 = (__pyx_memoryview_thread_locks_used < 8); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":301 - * H2_denominator[j, k] += prediction * H1[i, k] - * - * for idx in prange(X.shape[0]): # <<<<<<<<<<<<<< - * i = X_uids[idx] - * j = X_aids[idx] + /* "View.MemoryView":361 + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < 8: + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: */ - if (unlikely(!__pyx_v_X.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("X"); __PYX_ERR(0, 301, __pyx_L12_error) } - __pyx_t_23 = (__pyx_v_X.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_21 = (__pyx_t_23 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_21 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((float)__PYX_NAN()); - __pyx_v_score = ((float)__PYX_NAN()); + __pyx_v_self->lock = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); - /* "cornac/models/efm/recom_efm.pyx":302 - * - * for idx in prange(X.shape[0]): - * i = X_uids[idx] # <<<<<<<<<<<<<< - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + /* "View.MemoryView":362 + * if __pyx_memoryview_thread_locks_used < 8: + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 # <<<<<<<<<<<<<< + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_i = (*((int *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_31 * __pyx_v_X_uids.strides[0]) ))); + __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used + 1); - /* "cornac/models/efm/recom_efm.pyx":303 - * for idx in prange(X.shape[0]): - * i = X_uids[idx] - * j = X_aids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] + /* "View.MemoryView":360 + * if not __PYX_CYTHON_ATOMICS_ENABLED(): + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < 8: # <<<<<<<<<<<<<< + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_j = (*((int *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_31 * __pyx_v_X_aids.strides[0]) ))); + } - /* "cornac/models/efm/recom_efm.pyx":304 - * i = X_uids[idx] - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< - * score = X[idx] - * loss += (prediction - score) * (prediction - score) + /* "View.MemoryView":363 + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: # <<<<<<<<<<<<<< + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = 0; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = 0; - __pyx_v_prediction = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) )))), 1); + __pyx_t_1 = (__pyx_v_self->lock == NULL); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":305 - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): + /* "View.MemoryView":364 + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() # <<<<<<<<<<<<<< + * if self.lock is NULL: + * raise MemoryError + */ + __pyx_v_self->lock = PyThread_allocate_lock(); + + /* "View.MemoryView":365 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_28 * __pyx_v_X.strides[0]) ))); + __pyx_t_1 = (__pyx_v_self->lock == NULL); + if (unlikely(__pyx_t_1)) { - /* "cornac/models/efm/recom_efm.pyx":306 - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] + /* "View.MemoryView":366 + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + * raise MemoryError # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); + PyErr_NoMemory(); __PYX_ERR(1, 366, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":307 - * score = X[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + /* "View.MemoryView":365 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; + } - /* "cornac/models/efm/recom_efm.pyx":308 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] # <<<<<<<<<<<<<< - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] + /* "View.MemoryView":363 + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: # <<<<<<<<<<<<<< + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_28 * __pyx_v_U1.strides[0]) ) + __pyx_t_29 * __pyx_v_U1.strides[1]) )))); + } - /* "cornac/models/efm/recom_efm.pyx":309 - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] # <<<<<<<<<<<<<< - * U1_numerator[i, k] += lambda_x * score * V[j, k] - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] + /* "View.MemoryView":358 + * Py_INCREF(Py_None) + * + * if not __PYX_CYTHON_ATOMICS_ENABLED(): # <<<<<<<<<<<<<< + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < 8: */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_29 * __pyx_v_U1.strides[0]) ) + __pyx_t_28 * __pyx_v_U1.strides[1]) )))); + } - /* "cornac/models/efm/recom_efm.pyx":310 - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] # <<<<<<<<<<<<<< - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] + /* "View.MemoryView":368 + * raise MemoryError * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: */ - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_28 * __pyx_v_V.strides[0]) ) + __pyx_t_29 * __pyx_v_V.strides[1]) )))); + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":311 - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] # <<<<<<<<<<<<<< + /* "View.MemoryView":369 * - * for idx in prange(Y.shape[0]): + * if flags & PyBUF_FORMAT: + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') # <<<<<<<<<<<<<< + * else: + * self.dtype_is_object = dtype_is_object */ - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) )))); - } - } - } - } - } + __pyx_t_2 = ((__pyx_v_self->view.format[0]) == 'O'); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L12_bool_binop_done; + } + __pyx_t_2 = ((__pyx_v_self->view.format[1]) == '\x00'); + __pyx_t_1 = __pyx_t_2; + __pyx_L12_bool_binop_done:; + __pyx_v_self->dtype_is_object = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":313 - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] + /* "View.MemoryView":368 + * raise MemoryError * - * for idx in prange(Y.shape[0]): # <<<<<<<<<<<<<< - * i = Y_iids[idx] - * j = Y_aids[idx] + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: */ - if (unlikely(!__pyx_v_Y.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("Y"); __PYX_ERR(0, 313, __pyx_L12_error) } - __pyx_t_21 = (__pyx_v_Y.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_23 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((float)__PYX_NAN()); - __pyx_v_score = ((float)__PYX_NAN()); + goto __pyx_L11; + } - /* "cornac/models/efm/recom_efm.pyx":314 + /* "View.MemoryView":371 + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + * self.dtype_is_object = dtype_is_object # <<<<<<<<<<<<<< * - * for idx in prange(Y.shape[0]): - * i = Y_iids[idx] # <<<<<<<<<<<<<< - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * assert (&self.acquisition_count) % sizeof(__pyx_atomic_int_type) == 0 */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_i = (*((int *) ( /* dim=0 */ (__pyx_v_Y_iids.data + __pyx_t_28 * __pyx_v_Y_iids.strides[0]) ))); + /*else*/ { + __pyx_v_self->dtype_is_object = __pyx_v_dtype_is_object; + } + __pyx_L11:; - /* "cornac/models/efm/recom_efm.pyx":315 - * for idx in prange(Y.shape[0]): - * i = Y_iids[idx] - * j = Y_aids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] + /* "View.MemoryView":373 + * self.dtype_is_object = dtype_is_object + * + * assert (&self.acquisition_count) % sizeof(__pyx_atomic_int_type) == 0 # <<<<<<<<<<<<<< + * self.typeinfo = NULL + * */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_j = (*((int *) ( /* dim=0 */ (__pyx_v_Y_aids.data + __pyx_t_28 * __pyx_v_Y_aids.strides[0]) ))); + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(__pyx_assertions_enabled())) { + __pyx_t_4 = ((Py_intptr_t)((void *)(&__pyx_v_self->acquisition_count))); + __pyx_t_5 = (sizeof(__pyx_atomic_int_type)); + if (unlikely(__pyx_t_5 == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(1, 373, __pyx_L1_error) + } + __pyx_t_1 = ((__pyx_t_4 % __pyx_t_5) == 0); + if (unlikely(!__pyx_t_1)) { + __Pyx_Raise(__pyx_builtin_AssertionError, 0, 0, 0); + __PYX_ERR(1, 373, __pyx_L1_error) + } + } + #else + if ((1)); else __PYX_ERR(1, 373, __pyx_L1_error) + #endif - /* "cornac/models/efm/recom_efm.pyx":316 - * i = Y_iids[idx] - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) + /* "View.MemoryView":374 + * + * assert (&self.acquisition_count) % sizeof(__pyx_atomic_int_type) == 0 + * self.typeinfo = NULL # <<<<<<<<<<<<<< + * + * def __dealloc__(memoryview self): */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = 0; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = 0; - __pyx_v_prediction = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_28 * __pyx_v_U2.strides[0]) ) + __pyx_t_29 * __pyx_v_U2.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))), 1); + __pyx_v_self->typeinfo = NULL; - /* "cornac/models/efm/recom_efm.pyx":317 - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): + /* "View.MemoryView":349 + * cdef __Pyx_TypeInfo *typeinfo + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< + * self.obj = obj + * self.flags = flags */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_Y.data + __pyx_t_31 * __pyx_v_Y.strides[0]) ))); - /* "cornac/models/efm/recom_efm.pyx":318 - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":376 + * self.typeinfo = NULL + * + * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - /* "cornac/models/efm/recom_efm.pyx":319 - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] +/* Python wrapper */ +static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self) { + int __pyx_v_i; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + PyThread_type_lock __pyx_t_5; + PyThread_type_lock __pyx_t_6; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":377 + * + * def __dealloc__(memoryview self): + * if self.obj is not None: # <<<<<<<<<<<<<< + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; + __pyx_t_1 = (__pyx_v_self->obj != Py_None); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":320 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] # <<<<<<<<<<<<<< - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] + /* "View.MemoryView":378 + * def __dealloc__(memoryview self): + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) # <<<<<<<<<<<<<< + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + * */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_31 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))); + __Pyx_ReleaseBuffer((&__pyx_v_self->view)); - /* "cornac/models/efm/recom_efm.pyx":321 - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] # <<<<<<<<<<<<<< - * U2_numerator[i, k] += lambda_y * score * V[j, k] - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] + /* "View.MemoryView":377 + * + * def __dealloc__(memoryview self): + * if self.obj is not None: # <<<<<<<<<<<<<< + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_31 * __pyx_v_U2.strides[1]) )))); + goto __pyx_L3; + } - /* "cornac/models/efm/recom_efm.pyx":322 - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] # <<<<<<<<<<<<<< - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] + /* "View.MemoryView":379 + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< * + * (<__pyx_buffer *> &self.view).obj = NULL */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )))); + __pyx_t_1 = (((Py_buffer *)(&__pyx_v_self->view))->obj == Py_None); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":323 - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] # <<<<<<<<<<<<<< + /* "View.MemoryView":381 + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + * + * (<__pyx_buffer *> &self.view).obj = NULL # <<<<<<<<<<<<<< + * Py_DECREF(Py_None) * - * # update V */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))); - } - } - } - } - } + ((Py_buffer *)(&__pyx_v_self->view))->obj = NULL; - /* "cornac/models/efm/recom_efm.pyx":326 + /* "View.MemoryView":382 * - * # update V - * for i in prange(num_aspects): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] + * (<__pyx_buffer *> &self.view).obj = NULL + * Py_DECREF(Py_None) # <<<<<<<<<<<<<< + * + * cdef int i */ - __pyx_t_3 = __pyx_v_num_aspects; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - float __pyx_parallel_temp2 = ((float)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_35 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_35 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_35; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + Py_DECREF(Py_None); - /* "cornac/models/efm/recom_efm.pyx":327 - * # update V - * for i in prange(num_aspects): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + /* "View.MemoryView":379 + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< + * + * (<__pyx_buffer *> &self.view).obj = NULL */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + } + __pyx_L3:; - /* "cornac/models/efm/recom_efm.pyx":328 - * for i in prange(num_aspects): - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] # <<<<<<<<<<<<<< - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) + /* "View.MemoryView":386 + * cdef int i + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: # <<<<<<<<<<<<<< + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_v * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) ))))); + __pyx_t_1 = (__pyx_v_self->lock != NULL); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":329 - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps # <<<<<<<<<<<<<< - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) - * + /* "View.MemoryView":387 + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): # <<<<<<<<<<<<<< + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_27 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += (((((*((int *) ( /* dim=0 */ (__pyx_v_X_aspect_counts.data + __pyx_t_28 * __pyx_v_X_aspect_counts.strides[0]) ))) + (*((int *) ( /* dim=0 */ (__pyx_v_Y_aspect_counts.data + __pyx_t_29 * __pyx_v_Y_aspect_counts.strides[0]) )))) * __pyx_v_lambda_v) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))) + __pyx_v_eps); + __pyx_t_2 = __pyx_memoryview_thread_locks_used; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; - /* "cornac/models/efm/recom_efm.pyx":330 - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) # <<<<<<<<<<<<<< - * - * # update U1, H1 + /* "View.MemoryView":388 + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_V_numerator.diminfo[1].strides)); - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_V_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 330, __pyx_L42_error) - } - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L47; - __pyx_L42_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L46; - __pyx_L46:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates3) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L47:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } + __pyx_t_1 = ((__pyx_memoryview_thread_locks[__pyx_v_i]) == __pyx_v_self->lock); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":333 - * - * # update U1, H1 - * for i in prange(num_users): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] + /* "View.MemoryView":389 + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 # <<<<<<<<<<<<<< + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( */ - __pyx_t_35 = __pyx_v_num_users; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - float __pyx_parallel_temp2 = ((float)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_3 = (__pyx_t_35 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_3 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_3; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used - 1); - /* "cornac/models/efm/recom_efm.pyx":334 - * # update U1, H1 - * for i in prange(num_users): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + /* "View.MemoryView":390 + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + __pyx_t_1 = (__pyx_v_i != __pyx_memoryview_thread_locks_used); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":335 - * for i in prange(num_users): - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] # <<<<<<<<<<<<<< - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + /* "View.MemoryView":392 + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) # <<<<<<<<<<<<<< + * break + * else: */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_29 * __pyx_v_U1.strides[0]) ) + __pyx_t_28 * __pyx_v_U1.strides[1]) ))))); + __pyx_t_5 = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); + __pyx_t_6 = (__pyx_memoryview_thread_locks[__pyx_v_i]); - /* "cornac/models/efm/recom_efm.pyx":336 - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps # <<<<<<<<<<<<<< - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): + /* "View.MemoryView":391 + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + * break */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_26 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (((((*((int *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_28 * __pyx_v_A_user_counts.strides[0]) ))) + (*((int *) ( /* dim=0 */ (__pyx_v_X_user_counts.data + __pyx_t_29 * __pyx_v_X_user_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))) + __pyx_v_eps); + (__pyx_memoryview_thread_locks[__pyx_v_i]) = __pyx_t_5; + (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]) = __pyx_t_6; - /* "cornac/models/efm/recom_efm.pyx":337 - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) # <<<<<<<<<<<<<< - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] + /* "View.MemoryView":390 + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_U1_numerator.diminfo[1].strides)); - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U1_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_36 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 337, __pyx_L50_error) - } - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )) *= sqrt((__pyx_t_37 / __pyx_t_36)); - } + } - /* "cornac/models/efm/recom_efm.pyx":338 - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): # <<<<<<<<<<<<<< - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + /* "View.MemoryView":393 + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + * break # <<<<<<<<<<<<<< + * else: + * PyThread_free_lock(self.lock) */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + goto __pyx_L6_break; - /* "cornac/models/efm/recom_efm.pyx":339 - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] # <<<<<<<<<<<<<< - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) + /* "View.MemoryView":388 + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_31 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_29 * __pyx_v_H1.strides[0]) ) + __pyx_t_28 * __pyx_v_H1.strides[1]) ))))); + } + } + /*else*/ { - /* "cornac/models/efm/recom_efm.pyx":340 - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps # <<<<<<<<<<<<<< - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) + /* "View.MemoryView":395 + * break + * else: + * PyThread_free_lock(self.lock) # <<<<<<<<<<<<<< * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += ((((*((int *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_28 * __pyx_v_A_user_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_29 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))) + __pyx_v_eps); + PyThread_free_lock(__pyx_v_self->lock); + } + __pyx_L6_break:; - /* "cornac/models/efm/recom_efm.pyx":341 - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) # <<<<<<<<<<<<<< - * - * # update U2, H2 + /* "View.MemoryView":386 + * cdef int i + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: # <<<<<<<<<<<<<< + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H1_numerator.diminfo[1].strides)); - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_H1_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 341, __pyx_L50_error) - } - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_30 * __pyx_v_H1.strides[0]) ) + __pyx_t_29 * __pyx_v_H1.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L57; - __pyx_L50_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L56; - __pyx_L56:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates4) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L57:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } + } - /* "cornac/models/efm/recom_efm.pyx":344 + /* "View.MemoryView":376 + * self.typeinfo = NULL * - * # update U2, H2 - * for i in prange(num_items): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] + * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) */ - __pyx_t_3 = __pyx_v_num_items; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - float __pyx_parallel_temp2 = ((float)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_35 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_35 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_35; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); - /* "cornac/models/efm/recom_efm.pyx":345 - * # update U2, H2 - * for i in prange(num_items): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":397 + * PyThread_free_lock(self.lock) + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; - /* "cornac/models/efm/recom_efm.pyx":346 - * for i in prange(num_items): - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] # <<<<<<<<<<<<<< - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) +static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { + Py_ssize_t __pyx_v_dim; + char *__pyx_v_itemp; + PyObject *__pyx_v_idx = NULL; + char *__pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + PyObject *(*__pyx_t_4)(PyObject *); + PyObject *__pyx_t_5 = NULL; + Py_ssize_t __pyx_t_6; + char *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_item_pointer", 0); + + /* "View.MemoryView":399 + * cdef char *get_item_pointer(memoryview self, object index) except NULL: + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf # <<<<<<<<<<<<<< + * + * for dim, idx in enumerate(index): */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_28 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_29 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_28 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) ))))); + __pyx_v_itemp = ((char *)__pyx_v_self->view.buf); - /* "cornac/models/efm/recom_efm.pyx":347 - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps # <<<<<<<<<<<<<< - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): + /* "View.MemoryView":401 + * cdef char *itemp = self.view.buf + * + * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * */ - __pyx_t_27 = __pyx_v_i; - __pyx_t_28 = __pyx_v_i; - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_31 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (((((*((int *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_27 * __pyx_v_A_item_counts.strides[0]) ))) + (*((int *) ( /* dim=0 */ (__pyx_v_Y_item_counts.data + __pyx_t_28 * __pyx_v_Y_item_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_29 * __pyx_v_U2.strides[1]) )))) + __pyx_v_eps); + __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_v_index)) || PyTuple_CheckExact(__pyx_v_index)) { + __pyx_t_2 = __pyx_v_index; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; + __pyx_t_4 = NULL; + } else { + __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 401, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 401, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_4)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(1, 401, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 401, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } else { + if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(1, 401, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 401, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } + } else { + __pyx_t_5 = __pyx_t_4(__pyx_t_2); + if (unlikely(!__pyx_t_5)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(1, 401, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_5); + } + __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_v_dim = __pyx_t_1; + __pyx_t_1 = (__pyx_t_1 + 1); - /* "cornac/models/efm/recom_efm.pyx":348 - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) # <<<<<<<<<<<<<< - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] + /* "View.MemoryView":402 + * + * for dim, idx in enumerate(index): + * itemp = pybuffer_index(&self.view, itemp, idx, dim) # <<<<<<<<<<<<<< + * + * return itemp */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U2_numerator.diminfo[1].strides)); - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_36 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 348, __pyx_L60_error) - } - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_29 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )) *= sqrt((__pyx_t_37 / __pyx_t_36)); - } + __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 402, __pyx_L1_error) + __pyx_t_7 = __pyx_pybuffer_index((&__pyx_v_self->view), __pyx_v_itemp, __pyx_t_6, __pyx_v_dim); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(1, 402, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_7; - /* "cornac/models/efm/recom_efm.pyx":349 - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): # <<<<<<<<<<<<<< - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + /* "View.MemoryView":401 + * cdef char *itemp = self.view.buf + * + * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":350 - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] # <<<<<<<<<<<<<< - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + /* "View.MemoryView":404 + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + * return itemp # <<<<<<<<<<<<<< + * + * */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_29 * __pyx_v_H2.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_28 * __pyx_v_H2.strides[0]) ) + __pyx_t_27 * __pyx_v_H2.strides[1]) ))))); + __pyx_r = __pyx_v_itemp; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":351 - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps # <<<<<<<<<<<<<< - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + /* "View.MemoryView":397 + * PyThread_free_lock(self.lock) * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf */ - __pyx_t_27 = __pyx_v_i; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_30 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += ((((*((int *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_27 * __pyx_v_A_item_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_28 * __pyx_v_H2.strides[0]) ) + __pyx_t_29 * __pyx_v_H2.strides[1]) )))) + __pyx_v_eps); - /* "cornac/models/efm/recom_efm.pyx":352 - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) # <<<<<<<<<<<<<< + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.get_item_pointer", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_idx); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":407 * - * if self.verbose: + * + * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< + * if index is Ellipsis: + * return self */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H2_numerator.diminfo[1].strides)); - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H2_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 352, __pyx_L60_error) - } - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_29 * __pyx_v_H2.strides[0]) ) + __pyx_t_28 * __pyx_v_H2.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L67; - __pyx_L60_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L66; - __pyx_L66:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates5) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L67:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } - goto __pyx_L69; - __pyx_L12_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L69; - __pyx_L69:; - #ifdef _OPENMP - Py_END_ALLOW_THREADS - #else -{ -#ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #endif /* _OPENMP */ - /* Clean up any temporaries */ - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - #ifndef _OPENMP + +/* Python wrapper */ +static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/ +static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -#endif /* _OPENMP */ - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L8_error; - } - } - } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } - /* "cornac/models/efm/recom_efm.pyx":280 - * H2_denominator.fill(0) +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_v_have_slices = NULL; + PyObject *__pyx_v_indices = NULL; + char *__pyx_v_itemp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + char *__pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getitem__", 0); + + /* "View.MemoryView":408 + * + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: # <<<<<<<<<<<<<< + * return self * - * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L9; - } - __pyx_L8_error: { - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L1_error; - } - __pyx_L9:; - } - } + __pyx_t_1 = (__pyx_v_index == __pyx_builtin_Ellipsis); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":354 - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) - * - * if self.verbose: # <<<<<<<<<<<<<< - * print('iter: %d, loss: %f' % (t, loss)) + /* "View.MemoryView":409 + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: + * return self # <<<<<<<<<<<<<< * + * have_slices, indices = _unellipsify(index, self.view.ndim) */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 354, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_38 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_38 < 0)) __PYX_ERR(0, 354, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_38) { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_self); + __pyx_r = ((PyObject *)__pyx_v_self); + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":355 + /* "View.MemoryView":408 * - * if self.verbose: - * print('iter: %d, loss: %f' % (t, loss)) # <<<<<<<<<<<<<< + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: # <<<<<<<<<<<<<< + * return self * - * if self.verbose: */ - __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_23 = 0; - __pyx_t_39 = 127; - __Pyx_INCREF(__pyx_kp_u_iter); - __pyx_t_23 += 6; - __Pyx_GIVEREF(__pyx_kp_u_iter); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_iter); - __pyx_t_6 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_t), __pyx_n_u_d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_39 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_39) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_39; - __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_6 = 0; - __Pyx_INCREF(__pyx_kp_u_loss); - __pyx_t_23 += 8; - __Pyx_GIVEREF(__pyx_kp_u_loss); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_loss); - __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_Format(__pyx_t_6, __pyx_n_u_f); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_39 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_39) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_39; - __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_23, __pyx_t_39); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } - /* "cornac/models/efm/recom_efm.pyx":354 - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + /* "View.MemoryView":411 + * return self * - * if self.verbose: # <<<<<<<<<<<<<< - * print('iter: %d, loss: %f' % (t, loss)) + * have_slices, indices = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< * + * cdef char *itemp */ + __pyx_t_2 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (likely(__pyx_t_2 != Py_None)) { + PyObject* sequence = __pyx_t_2; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(1, 411, __pyx_L1_error) } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 411, __pyx_L1_error) + } + __pyx_v_have_slices = __pyx_t_3; + __pyx_t_3 = 0; + __pyx_v_indices = __pyx_t_4; + __pyx_t_4 = 0; - /* "cornac/models/efm/recom_efm.pyx":267 - * floating eps = 1e-9 + /* "View.MemoryView":414 * - * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< - * loss = 0. - * U1_numerator.fill(0) + * cdef char *itemp + * if have_slices: # <<<<<<<<<<<<<< + * return memview_slice(self, indices) + * else: */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 414, __pyx_L1_error) + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":357 - * print('iter: %d, loss: %f' % (t, loss)) - * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Optimization finished!') - * + /* "View.MemoryView":415 + * cdef char *itemp + * if have_slices: + * return memview_slice(self, indices) # <<<<<<<<<<<<<< + * else: + * itemp = self.get_item_pointer(indices) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_38 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_38 < 0)) __PYX_ERR(0, 357, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_38) { + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = ((PyObject *)__pyx_memview_slice(__pyx_v_self, __pyx_v_indices)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":358 - * - * if self.verbose: - * print('Optimization finished!') # <<<<<<<<<<<<<< + /* "View.MemoryView":414 * - * def _build_matrices(self, data_set): + * cdef char *itemp + * if have_slices: # <<<<<<<<<<<<<< + * return memview_slice(self, indices) + * else: */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } - /* "cornac/models/efm/recom_efm.pyx":357 - * print('iter: %d, loss: %f' % (t, loss)) + /* "View.MemoryView":417 + * return memview_slice(self, indices) + * else: + * itemp = self.get_item_pointer(indices) # <<<<<<<<<<<<<< + * return self.convert_item_to_object(itemp) * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Optimization finished!') + */ + /*else*/ { + __pyx_t_5 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_indices); if (unlikely(__pyx_t_5 == ((char *)NULL))) __PYX_ERR(1, 417, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_5; + + /* "View.MemoryView":418 + * else: + * itemp = self.get_item_pointer(indices) + * return self.convert_item_to_object(itemp) # <<<<<<<<<<<<<< * + * def __setitem__(memoryview self, object index, object value): */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->convert_item_to_object(__pyx_v_self, __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; } - /* "cornac/models/efm/recom_efm.pyx":230 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def _fit_efm(self, int num_threads, # <<<<<<<<<<<<<< - * floating[:] A, integral[:] A_uids, integral[:] A_iids, integral[:] A_user_counts, integral[:] A_item_counts, - * floating[:] X, integral[:] X_uids, integral[:] X_aids, integral[:] X_user_counts, integral[:] X_aspect_counts, + /* "View.MemoryView":407 + * + * + * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< + * if index is Ellipsis: + * return self */ /* 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_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.memoryview.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; - goto __pyx_L2; __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_U1_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_U1_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_U2_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_U2_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_V_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_V_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_H1_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_H1_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_H2_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_H2_denominator); - __Pyx_XDECREF(__pyx_v_t); - __PYX_XDEC_MEMVIEW(&__pyx_v_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_user_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_item_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_user_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aspect_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_item_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_V, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_H1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_H2, 1); + __Pyx_XDECREF(__pyx_v_have_slices); + __Pyx_XDECREF(__pyx_v_indices); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } +/* "View.MemoryView":420 + * return self.convert_item_to_object(itemp) + * + * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< + * if self.view.readonly: + * raise TypeError, "Cannot assign to read-only memoryview" + */ + /* Python wrapper */ -static PyObject *__pyx_fuse_0_2__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_23_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_fuse_0_2__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_23_fit_efm = {"__pyx_fuse_0_2_fit_efm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0_2__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_23_fit_efm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm}; -static PyObject *__pyx_fuse_0_2__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_23_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - int __pyx_v_num_threads; - __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_V = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_H1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_H2 = { 0, 0, { 0 }, { 0 }, { 0 } }; +static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + PyObject *__pyx_v_have_slices = NULL; + PyObject *__pyx_v_obj = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_fit_efm (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_num_threads,&__pyx_n_s_A,&__pyx_n_s_A_uids,&__pyx_n_s_A_iids,&__pyx_n_s_A_user_counts,&__pyx_n_s_A_item_counts,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_aids,&__pyx_n_s_X_user_counts,&__pyx_n_s_X_aspect_counts,&__pyx_n_s_Y,&__pyx_n_s_Y_iids,&__pyx_n_s_Y_aids,&__pyx_n_s_Y_item_counts,&__pyx_n_s_Y_aspect_counts,&__pyx_n_s_U1,&__pyx_n_s_U2,&__pyx_n_s_V,&__pyx_n_s_H1,&__pyx_n_s_H2,0}; - PyObject* values[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - CYTHON_FALLTHROUGH; - case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - CYTHON_FALLTHROUGH; - case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - CYTHON_FALLTHROUGH; - case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - CYTHON_FALLTHROUGH; - case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - CYTHON_FALLTHROUGH; - case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - CYTHON_FALLTHROUGH; - case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - CYTHON_FALLTHROUGH; - case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - CYTHON_FALLTHROUGH; - case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - CYTHON_FALLTHROUGH; - case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - CYTHON_FALLTHROUGH; - case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - CYTHON_FALLTHROUGH; - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 1); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 2); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 3); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 4); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_user_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 5); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_item_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 6); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 7); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 8); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 9: - if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 9); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 10: - if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_user_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 10); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 11: - if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aspect_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 11); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 12: - if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 12); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 13: - if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 13); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 14: - if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 14); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 15: - if (likely((values[15] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_item_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 15); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 16: - if (likely((values[16] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_aspect_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 16); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 17: - if (likely((values[17] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 17); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 18: - if (likely((values[18] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 18); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 19: - if (likely((values[19] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 19); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 20: - if (likely((values[20] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_H1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 20); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 21: - if (likely((values[21] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_H2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 21); __PYX_ERR(0, 230, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_fit_efm") < 0)) __PYX_ERR(0, 230, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 22) { - 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); - values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - values[21] = PyTuple_GET_ITEM(__pyx_args, 21); + __Pyx_RefNannySetupContext("__setitem__", 0); + __Pyx_INCREF(__pyx_v_index); + + /* "View.MemoryView":421 + * + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: # <<<<<<<<<<<<<< + * raise TypeError, "Cannot assign to read-only memoryview" + * + */ + if (unlikely(__pyx_v_self->view.readonly)) { + + /* "View.MemoryView":422 + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: + * raise TypeError, "Cannot assign to read-only memoryview" # <<<<<<<<<<<<<< + * + * have_slices, index = _unellipsify(index, self.view.ndim) + */ + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_Cannot_assign_to_read_only_memor, 0, 0); + __PYX_ERR(1, 422, __pyx_L1_error) + + /* "View.MemoryView":421 + * + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: # <<<<<<<<<<<<<< + * raise TypeError, "Cannot assign to read-only memoryview" + * + */ + } + + /* "View.MemoryView":424 + * raise TypeError, "Cannot assign to read-only memoryview" + * + * have_slices, index = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + * + * if have_slices: + */ + __pyx_t_1 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (likely(__pyx_t_1 != Py_None)) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(1, 424, __pyx_L1_error) } - __pyx_v_self = values[0]; - __pyx_v_num_threads = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L3_error) - __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_uids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_iids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_user_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_item_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_user_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aspect_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_Y = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_iids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_item_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aspect_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_U1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_U2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_V = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_V.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_H1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[20], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_H2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + #else + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 424, __pyx_L1_error) + } + __pyx_v_have_slices = __pyx_t_2; + __pyx_t_2 = 0; + __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":426 + * have_slices, index = _unellipsify(index, self.view.ndim) + * + * if have_slices: # <<<<<<<<<<<<<< + * obj = self.is_slice(value) + * if obj: + */ + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(1, 426, __pyx_L1_error) + if (__pyx_t_4) { + + /* "View.MemoryView":427 + * + * if have_slices: + * obj = self.is_slice(value) # <<<<<<<<<<<<<< + * if obj: + * self.setitem_slice_assignment(self[index], obj) + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_obj = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":428 + * if have_slices: + * obj = self.is_slice(value) + * if obj: # <<<<<<<<<<<<<< + * self.setitem_slice_assignment(self[index], obj) + * else: + */ + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(1, 428, __pyx_L1_error) + if (__pyx_t_4) { + + /* "View.MemoryView":429 + * obj = self.is_slice(value) + * if obj: + * self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<< + * else: + * self.setitem_slice_assign_scalar(self[index], value) + */ + __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assignment(__pyx_v_self, __pyx_t_1, __pyx_v_obj); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":428 + * if have_slices: + * obj = self.is_slice(value) + * if obj: # <<<<<<<<<<<<<< + * self.setitem_slice_assignment(self[index], obj) + * else: + */ + goto __pyx_L5; + } + + /* "View.MemoryView":431 + * self.setitem_slice_assignment(self[index], obj) + * else: + * self.setitem_slice_assign_scalar(self[index], value) # <<<<<<<<<<<<<< + * else: + * self.setitem_indexed(index, value) + */ + /*else*/ { + __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 431, __pyx_L1_error) + __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assign_scalar(__pyx_v_self, ((struct __pyx_memoryview_obj *)__pyx_t_3), __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_L5:; + + /* "View.MemoryView":426 + * have_slices, index = _unellipsify(index, self.view.ndim) + * + * if have_slices: # <<<<<<<<<<<<<< + * obj = self.is_slice(value) + * if obj: + */ + goto __pyx_L4; } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 230, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_22_fit_efm(__pyx_self, __pyx_v_self, __pyx_v_num_threads, __pyx_v_A, __pyx_v_A_uids, __pyx_v_A_iids, __pyx_v_A_user_counts, __pyx_v_A_item_counts, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_aids, __pyx_v_X_user_counts, __pyx_v_X_aspect_counts, __pyx_v_Y, __pyx_v_Y_iids, __pyx_v_Y_aids, __pyx_v_Y_item_counts, __pyx_v_Y_aspect_counts, __pyx_v_U1, __pyx_v_U2, __pyx_v_V, __pyx_v_H1, __pyx_v_H2); + + /* "View.MemoryView":433 + * self.setitem_slice_assign_scalar(self[index], value) + * else: + * self.setitem_indexed(index, value) # <<<<<<<<<<<<<< + * + * cdef is_slice(self, obj): + */ + /*else*/ { + __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_indexed(__pyx_v_self, __pyx_v_index, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_L4:; + + /* "View.MemoryView":420 + * return self.convert_item_to_object(itemp) + * + * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< + * if self.view.readonly: + * raise TypeError, "Cannot assign to read-only memoryview" + */ /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_have_slices); + __Pyx_XDECREF(__pyx_v_obj); + __Pyx_XDECREF(__pyx_v_index); __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_22_fit_efm(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_A_uids, __Pyx_memviewslice __pyx_v_A_iids, __Pyx_memviewslice __pyx_v_A_user_counts, __Pyx_memviewslice __pyx_v_A_item_counts, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_X_user_counts, __Pyx_memviewslice __pyx_v_X_aspect_counts, __Pyx_memviewslice __pyx_v_Y, __Pyx_memviewslice __pyx_v_Y_iids, __Pyx_memviewslice __pyx_v_Y_aids, __Pyx_memviewslice __pyx_v_Y_item_counts, __Pyx_memviewslice __pyx_v_Y_aspect_counts, __Pyx_memviewslice __pyx_v_U1, __Pyx_memviewslice __pyx_v_U2, __Pyx_memviewslice __pyx_v_V, __Pyx_memviewslice __pyx_v_H1, __Pyx_memviewslice __pyx_v_H2) { - long __pyx_v_num_users; - long __pyx_v_num_items; - long __pyx_v_num_aspects; - int __pyx_v_num_explicit_factors; - int __pyx_v_num_latent_factors; - float __pyx_v_lambda_x; - float __pyx_v_lambda_y; - float __pyx_v_lambda_u; - float __pyx_v_lambda_h; - float __pyx_v_lambda_v; - float __pyx_v_prediction; - float __pyx_v_score; - float __pyx_v_loss; - PyArrayObject *__pyx_v_U1_numerator = 0; - PyArrayObject *__pyx_v_U1_denominator = 0; - PyArrayObject *__pyx_v_U2_numerator = 0; - PyArrayObject *__pyx_v_U2_denominator = 0; - PyArrayObject *__pyx_v_V_numerator = 0; - PyArrayObject *__pyx_v_V_denominator = 0; - PyArrayObject *__pyx_v_H1_numerator = 0; - PyArrayObject *__pyx_v_H1_denominator = 0; - PyArrayObject *__pyx_v_H2_numerator = 0; - PyArrayObject *__pyx_v_H2_denominator = 0; - int __pyx_v_i; - int __pyx_v_j; - int __pyx_v_k; - int __pyx_v_idx; - float __pyx_v_eps; - PyObject *__pyx_v_t = NULL; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_denominator; - __Pyx_Buffer __pyx_pybuffer_H1_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_numerator; - __Pyx_Buffer __pyx_pybuffer_H1_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_denominator; - __Pyx_Buffer __pyx_pybuffer_H2_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_numerator; - __Pyx_Buffer __pyx_pybuffer_H2_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_denominator; - __Pyx_Buffer __pyx_pybuffer_U1_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_numerator; - __Pyx_Buffer __pyx_pybuffer_U1_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_denominator; - __Pyx_Buffer __pyx_pybuffer_U2_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_numerator; - __Pyx_Buffer __pyx_pybuffer_U2_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_V_denominator; - __Pyx_Buffer __pyx_pybuffer_V_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_V_numerator; - __Pyx_Buffer __pyx_pybuffer_V_numerator; +/* "View.MemoryView":435 + * self.setitem_indexed(index, value) + * + * cdef is_slice(self, obj): # <<<<<<<<<<<<<< + * if not isinstance(obj, memoryview): + * try: + */ + +static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - long __pyx_t_3; - int __pyx_t_4; - float __pyx_t_5; + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; - PyArrayObject *__pyx_t_9 = NULL; - PyArrayObject *__pyx_t_10 = NULL; - PyArrayObject *__pyx_t_11 = NULL; - PyArrayObject *__pyx_t_12 = NULL; - PyArrayObject *__pyx_t_13 = NULL; - PyArrayObject *__pyx_t_14 = NULL; - PyArrayObject *__pyx_t_15 = NULL; - PyArrayObject *__pyx_t_16 = NULL; - PyArrayObject *__pyx_t_17 = NULL; - PyArrayObject *__pyx_t_18 = NULL; - Py_ssize_t __pyx_t_19; - PyObject *(*__pyx_t_20)(PyObject *); - Py_ssize_t __pyx_t_21; - Py_ssize_t __pyx_t_22; - Py_ssize_t __pyx_t_23; - Py_ssize_t __pyx_t_24; - Py_ssize_t __pyx_t_25; - Py_ssize_t __pyx_t_26; - Py_ssize_t __pyx_t_27; - Py_ssize_t __pyx_t_28; - Py_ssize_t __pyx_t_29; - Py_ssize_t __pyx_t_30; - Py_ssize_t __pyx_t_31; - int __pyx_t_32; - int __pyx_t_33; - long __pyx_t_34; - long __pyx_t_35; - __pyx_t_5numpy_float32_t __pyx_t_36; - __pyx_t_5numpy_float32_t __pyx_t_37; - int __pyx_t_38; - Py_UCS4 __pyx_t_39; + int __pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_fuse_0_2_fit_efm", 0); - __pyx_pybuffer_U1_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_U1_numerator.refcount = 0; - __pyx_pybuffernd_U1_numerator.data = NULL; - __pyx_pybuffernd_U1_numerator.rcbuffer = &__pyx_pybuffer_U1_numerator; - __pyx_pybuffer_U1_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_U1_denominator.refcount = 0; - __pyx_pybuffernd_U1_denominator.data = NULL; - __pyx_pybuffernd_U1_denominator.rcbuffer = &__pyx_pybuffer_U1_denominator; - __pyx_pybuffer_U2_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_U2_numerator.refcount = 0; - __pyx_pybuffernd_U2_numerator.data = NULL; - __pyx_pybuffernd_U2_numerator.rcbuffer = &__pyx_pybuffer_U2_numerator; - __pyx_pybuffer_U2_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_U2_denominator.refcount = 0; - __pyx_pybuffernd_U2_denominator.data = NULL; - __pyx_pybuffernd_U2_denominator.rcbuffer = &__pyx_pybuffer_U2_denominator; - __pyx_pybuffer_V_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_V_numerator.refcount = 0; - __pyx_pybuffernd_V_numerator.data = NULL; - __pyx_pybuffernd_V_numerator.rcbuffer = &__pyx_pybuffer_V_numerator; - __pyx_pybuffer_V_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_V_denominator.refcount = 0; - __pyx_pybuffernd_V_denominator.data = NULL; - __pyx_pybuffernd_V_denominator.rcbuffer = &__pyx_pybuffer_V_denominator; - __pyx_pybuffer_H1_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_H1_numerator.refcount = 0; - __pyx_pybuffernd_H1_numerator.data = NULL; - __pyx_pybuffernd_H1_numerator.rcbuffer = &__pyx_pybuffer_H1_numerator; - __pyx_pybuffer_H1_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_H1_denominator.refcount = 0; - __pyx_pybuffernd_H1_denominator.data = NULL; - __pyx_pybuffernd_H1_denominator.rcbuffer = &__pyx_pybuffer_H1_denominator; - __pyx_pybuffer_H2_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_H2_numerator.refcount = 0; - __pyx_pybuffernd_H2_numerator.data = NULL; - __pyx_pybuffernd_H2_numerator.rcbuffer = &__pyx_pybuffer_H2_numerator; - __pyx_pybuffer_H2_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_H2_denominator.refcount = 0; - __pyx_pybuffernd_H2_denominator.data = NULL; - __pyx_pybuffernd_H2_denominator.rcbuffer = &__pyx_pybuffer_H2_denominator; + __Pyx_RefNannySetupContext("is_slice", 0); + __Pyx_INCREF(__pyx_v_obj); - /* "cornac/models/efm/recom_efm.pyx":238 - * """ - * cdef: - * long num_users = self.train_set.num_users # <<<<<<<<<<<<<< - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects + /* "View.MemoryView":436 + * + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_num_users = __pyx_t_3; + __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_memoryview_type); + __pyx_t_2 = (!__pyx_t_1); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":239 - * cdef: - * long num_users = self.train_set.num_users - * long num_items = self.train_set.num_items # <<<<<<<<<<<<<< - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors + /* "View.MemoryView":437 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_items = __pyx_t_3; + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); + /*try:*/ { - /* "cornac/models/efm/recom_efm.pyx":240 - * long num_users = self.train_set.num_users - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< - * int num_explicit_factors = self.num_explicit_factors - * int num_latent_factors = self.num_latent_factors + /* "View.MemoryView":438 + * if not isinstance(obj, memoryview): + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< + * self.dtype_is_object) + * except TypeError: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_aspects = __pyx_t_3; + __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_self->flags & (~PyBUF_WRITABLE)) | PyBUF_ANY_CONTIGUOUS)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 438, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); - /* "cornac/models/efm/recom_efm.pyx":241 - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors # <<<<<<<<<<<<<< - * int num_latent_factors = self.num_latent_factors - * + /* "View.MemoryView":439 + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) # <<<<<<<<<<<<<< + * except TypeError: + * return None */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_explicit_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 241, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_explicit_factors = __pyx_t_4; + __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 439, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); - /* "cornac/models/efm/recom_efm.pyx":242 - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors - * int num_latent_factors = self.num_latent_factors # <<<<<<<<<<<<<< - * - * floating lambda_x = self.lambda_x + /* "View.MemoryView":438 + * if not isinstance(obj, memoryview): + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< + * self.dtype_is_object) + * except TypeError: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_latent_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 242, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_latent_factors = __pyx_t_4; + __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 438, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_obj); + __Pyx_GIVEREF(__pyx_v_obj); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_obj); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 438, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_7); + __pyx_t_7 = 0; - /* "cornac/models/efm/recom_efm.pyx":244 - * int num_latent_factors = self.num_latent_factors + /* "View.MemoryView":437 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + } + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L9_try_end; + __pyx_L4_error:; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "View.MemoryView":440 + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + * except TypeError: # <<<<<<<<<<<<<< + * return None * - * floating lambda_x = self.lambda_x # <<<<<<<<<<<<<< - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_x = __pyx_t_5; + __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError); + if (__pyx_t_9) { + __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(1, 440, __pyx_L6_except_error) + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_6); - /* "cornac/models/efm/recom_efm.pyx":245 + /* "View.MemoryView":441 + * self.dtype_is_object) + * except TypeError: + * return None # <<<<<<<<<<<<<< * - * floating lambda_x = self.lambda_x - * floating lambda_y = self.lambda_y # <<<<<<<<<<<<<< - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h + * return obj */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 245, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_y = __pyx_t_5; + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_except_return; + } + goto __pyx_L6_except_error; - /* "cornac/models/efm/recom_efm.pyx":246 - * floating lambda_x = self.lambda_x - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u # <<<<<<<<<<<<<< - * floating lambda_h = self.lambda_h - * floating lambda_v = self.lambda_v + /* "View.MemoryView":437 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_u); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_u = __pyx_t_5; + __pyx_L6_except_error:; + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L1_error; + __pyx_L7_except_return:; + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L0; + __pyx_L9_try_end:; + } - /* "cornac/models/efm/recom_efm.pyx":247 - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h # <<<<<<<<<<<<<< - * floating lambda_v = self.lambda_v + /* "View.MemoryView":436 * + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_h); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_h = __pyx_t_5; + } - /* "cornac/models/efm/recom_efm.pyx":248 - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h - * floating lambda_v = self.lambda_v # <<<<<<<<<<<<<< + /* "View.MemoryView":443 + * return None * - * floating prediction, score, loss + * return obj # <<<<<<<<<<<<<< + * + * cdef setitem_slice_assignment(self, dst, src): */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_v); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 248, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 248, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_v = __pyx_t_5; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_obj); + __pyx_r = __pyx_v_obj; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":252 - * floating prediction, score, loss + /* "View.MemoryView":435 + * self.setitem_indexed(index, value) * - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * cdef is_slice(self, obj): # <<<<<<<<<<<<<< + * if not isinstance(obj, memoryview): + * try: */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 252, __pyx_L1_error) - __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 252, __pyx_L1_error) - } else {__pyx_pybuffernd_U1_numerator.diminfo[0].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_numerator.diminfo[0].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_numerator.diminfo[1].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_numerator.diminfo[1].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_9 = 0; - __pyx_v_U1_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; - /* "cornac/models/efm/recom_efm.pyx":253 + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_obj); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":445 + * return obj + * + * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice + */ + +static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src) { + __Pyx_memviewslice __pyx_v_dst_slice; + __Pyx_memviewslice __pyx_v_src_slice; + __Pyx_memviewslice __pyx_v_msrc; + __Pyx_memviewslice __pyx_v_mdst; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_slice_assignment", 0); + + /* "View.MemoryView":448 + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice + * cdef __Pyx_memviewslice msrc = get_slice_from_memview(src, &src_slice)[0] # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mdst = get_slice_from_memview(dst, &dst_slice)[0] * - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 253, __pyx_L1_error) - __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 253, __pyx_L1_error) - } else {__pyx_pybuffernd_U1_denominator.diminfo[0].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_denominator.diminfo[0].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_denominator.diminfo[1].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_denominator.diminfo[1].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_10 = 0; - __pyx_v_U1_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; + if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(1, 448, __pyx_L1_error) + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 448, __pyx_L1_error) + __pyx_v_msrc = (__pyx_t_1[0]); - /* "cornac/models/efm/recom_efm.pyx":254 - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + /* "View.MemoryView":449 + * cdef __Pyx_memviewslice src_slice + * cdef __Pyx_memviewslice msrc = get_slice_from_memview(src, &src_slice)[0] + * cdef __Pyx_memviewslice mdst = get_slice_from_memview(dst, &dst_slice)[0] # <<<<<<<<<<<<<< + * + * memoryview_copy_contents(msrc, mdst, src.ndim, dst.ndim, self.dtype_is_object) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 254, __pyx_L1_error) - __pyx_t_11 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 254, __pyx_L1_error) - } else {__pyx_pybuffernd_U2_numerator.diminfo[0].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_numerator.diminfo[0].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_numerator.diminfo[1].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_numerator.diminfo[1].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_11 = 0; - __pyx_v_U2_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; + if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(1, 449, __pyx_L1_error) + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 449, __pyx_L1_error) + __pyx_v_mdst = (__pyx_t_1[0]); - /* "cornac/models/efm/recom_efm.pyx":255 - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + /* "View.MemoryView":451 + * cdef __Pyx_memviewslice mdst = get_slice_from_memview(dst, &dst_slice)[0] + * + * memoryview_copy_contents(msrc, mdst, src.ndim, dst.ndim, self.dtype_is_object) # <<<<<<<<<<<<<< + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 451, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 451, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 451, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 451, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 255, __pyx_L1_error) - __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 255, __pyx_L1_error) - } else {__pyx_pybuffernd_U2_denominator.diminfo[0].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_denominator.diminfo[0].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_denominator.diminfo[1].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_denominator.diminfo[1].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_12 = 0; - __pyx_v_U2_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; + __pyx_t_5 = __pyx_memoryview_copy_contents(__pyx_v_msrc, __pyx_v_mdst, __pyx_t_3, __pyx_t_4, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 451, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":256 - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + /* "View.MemoryView":445 + * return obj + * + * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 256, __pyx_L1_error) - __pyx_t_13 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_V_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 256, __pyx_L1_error) - } else {__pyx_pybuffernd_V_numerator.diminfo[0].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_numerator.diminfo[0].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_numerator.diminfo[1].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_numerator.diminfo[1].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_13 = 0; - __pyx_v_V_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; - /* "cornac/models/efm/recom_efm.pyx":257 - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":453 + * memoryview_copy_contents(msrc, mdst, src.ndim, dst.ndim, self.dtype_is_object) + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< + * cdef int array[128] + * cdef void *tmp = NULL */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 257, __pyx_L1_error) - __pyx_t_14 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_V_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 257, __pyx_L1_error) - } else {__pyx_pybuffernd_V_denominator.diminfo[0].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_denominator.diminfo[0].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_denominator.diminfo[1].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_denominator.diminfo[1].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_14 = 0; - __pyx_v_V_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":258 - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) +static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value) { + int __pyx_v_array[0x80]; + void *__pyx_v_tmp; + void *__pyx_v_item; + __Pyx_memviewslice *__pyx_v_dst_slice; + __Pyx_memviewslice __pyx_v_tmp_slice; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + char const *__pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0); + + /* "View.MemoryView":455 + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): + * cdef int array[128] + * cdef void *tmp = NULL # <<<<<<<<<<<<<< + * cdef void *item + * */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 258, __pyx_L1_error) - __pyx_t_15 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 258, __pyx_L1_error) - } else {__pyx_pybuffernd_H1_numerator.diminfo[0].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_numerator.diminfo[0].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_numerator.diminfo[1].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_numerator.diminfo[1].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_15 = 0; - __pyx_v_H1_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; + __pyx_v_tmp = NULL; - /* "cornac/models/efm/recom_efm.pyx":259 - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) + /* "View.MemoryView":460 + * cdef __Pyx_memviewslice *dst_slice + * cdef __Pyx_memviewslice tmp_slice + * dst_slice = get_slice_from_memview(dst, &tmp_slice) # <<<<<<<<<<<<<< + * + * if self.view.itemsize > sizeof(array): */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 259, __pyx_L1_error) - __pyx_t_16 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 259, __pyx_L1_error) - } else {__pyx_pybuffernd_H1_denominator.diminfo[0].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_denominator.diminfo[0].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_denominator.diminfo[1].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_denominator.diminfo[1].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_16 = 0; - __pyx_v_H1_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 460, __pyx_L1_error) + __pyx_v_dst_slice = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":260 - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * int i, j, k, idx + /* "View.MemoryView":462 + * dst_slice = get_slice_from_memview(dst, &tmp_slice) + * + * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 260, __pyx_L1_error) - __pyx_t_17 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 260, __pyx_L1_error) - } else {__pyx_pybuffernd_H2_numerator.diminfo[0].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_numerator.diminfo[0].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_numerator.diminfo[1].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_numerator.diminfo[1].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_17 = 0; - __pyx_v_H2_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; + __pyx_t_2 = (((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))); + if (__pyx_t_2) { + + /* "View.MemoryView":463 + * + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) # <<<<<<<<<<<<<< + * if tmp == NULL: + * raise MemoryError + */ + __pyx_v_tmp = PyMem_Malloc(__pyx_v_self->view.itemsize); - /* "cornac/models/efm/recom_efm.pyx":261 - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * int i, j, k, idx - * long n_ratings + /* "View.MemoryView":464 + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * item = tmp + */ + __pyx_t_2 = (__pyx_v_tmp == NULL); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":465 + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + * raise MemoryError # <<<<<<<<<<<<<< + * item = tmp + * else: + */ + PyErr_NoMemory(); __PYX_ERR(1, 465, __pyx_L1_error) + + /* "View.MemoryView":464 + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * item = tmp */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 261, __pyx_L1_error) - __pyx_t_18 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 261, __pyx_L1_error) - } else {__pyx_pybuffernd_H2_denominator.diminfo[0].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_denominator.diminfo[0].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_denominator.diminfo[1].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_denominator.diminfo[1].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[1]; } - } - __pyx_t_18 = 0; - __pyx_v_H2_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":265 - * long n_ratings - * - * floating eps = 1e-9 # <<<<<<<<<<<<<< + /* "View.MemoryView":466 + * if tmp == NULL: + * raise MemoryError + * item = tmp # <<<<<<<<<<<<<< + * else: + * item = array + */ + __pyx_v_item = __pyx_v_tmp; + + /* "View.MemoryView":462 + * dst_slice = get_slice_from_memview(dst, &tmp_slice) * - * for t in range(1, self.max_iter + 1): + * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: */ - __pyx_v_eps = 1e-9; + goto __pyx_L3; + } - /* "cornac/models/efm/recom_efm.pyx":267 - * floating eps = 1e-9 + /* "View.MemoryView":468 + * item = tmp + * else: + * item = array # <<<<<<<<<<<<<< * - * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< - * loss = 0. - * U1_numerator.fill(0) + * try: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_max_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_int_1); - __Pyx_GIVEREF(__pyx_int_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_19 = 0; - __pyx_t_20 = NULL; - } else { - __pyx_t_19 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_20 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 267, __pyx_L1_error) + /*else*/ { + __pyx_v_item = ((void *)__pyx_v_array); } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (likely(!__pyx_t_20)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 267, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } else { - if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 267, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } - } else { - __pyx_t_2 = __pyx_t_20(__pyx_t_1); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 267, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2); - __pyx_t_2 = 0; + __pyx_L3:; - /* "cornac/models/efm/recom_efm.pyx":268 + /* "View.MemoryView":470 + * item = array * - * for t in range(1, self.max_iter + 1): - * loss = 0. # <<<<<<<<<<<<<< - * U1_numerator.fill(0) - * U1_denominator.fill(0) + * try: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * ( item)[0] = value */ - __pyx_v_loss = 0.; + /*try:*/ { - /* "cornac/models/efm/recom_efm.pyx":269 - * for t in range(1, self.max_iter + 1): - * loss = 0. - * U1_numerator.fill(0) # <<<<<<<<<<<<<< - * U1_denominator.fill(0) - * U2_numerator.fill(0) + /* "View.MemoryView":471 + * + * try: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * ( item)[0] = value + * else: */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 269, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_v_self->dtype_is_object) { - /* "cornac/models/efm/recom_efm.pyx":270 - * loss = 0. - * U1_numerator.fill(0) - * U1_denominator.fill(0) # <<<<<<<<<<<<<< - * U2_numerator.fill(0) - * U2_denominator.fill(0) + /* "View.MemoryView":472 + * try: + * if self.dtype_is_object: + * ( item)[0] = value # <<<<<<<<<<<<<< + * else: + * self.assign_item_from_object( item, value) */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + (((PyObject **)__pyx_v_item)[0]) = ((PyObject *)__pyx_v_value); - /* "cornac/models/efm/recom_efm.pyx":271 - * U1_numerator.fill(0) - * U1_denominator.fill(0) - * U2_numerator.fill(0) # <<<<<<<<<<<<<< - * U2_denominator.fill(0) - * V_numerator.fill(0) + /* "View.MemoryView":471 + * + * try: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * ( item)[0] = value + * else: */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } + goto __pyx_L8; } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":272 - * U1_denominator.fill(0) - * U2_numerator.fill(0) - * U2_denominator.fill(0) # <<<<<<<<<<<<<< - * V_numerator.fill(0) - * V_denominator.fill(0) + /* "View.MemoryView":474 + * ( item)[0] = value + * else: + * self.assign_item_from_object( item, value) # <<<<<<<<<<<<<< + * + * */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 272, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } + /*else*/ { + __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 474, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_L8:; - /* "cornac/models/efm/recom_efm.pyx":273 - * U2_numerator.fill(0) - * U2_denominator.fill(0) - * V_numerator.fill(0) # <<<<<<<<<<<<<< - * V_denominator.fill(0) - * H1_numerator.fill(0) + /* "View.MemoryView":478 + * + * + * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = (__pyx_v_self->view.suboffsets != NULL); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":274 - * U2_denominator.fill(0) - * V_numerator.fill(0) - * V_denominator.fill(0) # <<<<<<<<<<<<<< - * H1_numerator.fill(0) - * H1_denominator.fill(0) + /* "View.MemoryView":479 + * + * if self.view.suboffsets != NULL: + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) # <<<<<<<<<<<<<< + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + * item, self.dtype_is_object) */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 274, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 479, __pyx_L6_error) - /* "cornac/models/efm/recom_efm.pyx":275 - * V_numerator.fill(0) - * V_denominator.fill(0) - * H1_numerator.fill(0) # <<<<<<<<<<<<<< - * H1_denominator.fill(0) - * H2_numerator.fill(0) + /* "View.MemoryView":478 + * + * + * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 275, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 275, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":276 - * V_denominator.fill(0) - * H1_numerator.fill(0) - * H1_denominator.fill(0) # <<<<<<<<<<<<<< - * H2_numerator.fill(0) - * H2_denominator.fill(0) + /* "View.MemoryView":480 + * if self.view.suboffsets != NULL: + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, # <<<<<<<<<<<<<< + * item, self.dtype_is_object) + * finally: */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_memoryview_slice_assign_scalar(__pyx_v_dst_slice, __pyx_v_dst->view.ndim, __pyx_v_self->view.itemsize, __pyx_v_item, __pyx_v_self->dtype_is_object); + } - /* "cornac/models/efm/recom_efm.pyx":277 - * H1_numerator.fill(0) - * H1_denominator.fill(0) - * H2_numerator.fill(0) # <<<<<<<<<<<<<< - * H2_denominator.fill(0) + /* "View.MemoryView":483 + * item, self.dtype_is_object) + * finally: + * PyMem_Free(tmp) # <<<<<<<<<<<<<< * + * cdef setitem_indexed(self, index, value): */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 277, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); + /*finally:*/ { + /*normal exit:*/{ + PyMem_Free(__pyx_v_tmp); + goto __pyx_L7; + } + __pyx_L6_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename; + { + PyMem_Free(__pyx_v_tmp); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); } + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9); + __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; + __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6; + goto __pyx_L1_error; } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_L7:; + } - /* "cornac/models/efm/recom_efm.pyx":278 - * H1_denominator.fill(0) - * H2_numerator.fill(0) - * H2_denominator.fill(0) # <<<<<<<<<<<<<< + /* "View.MemoryView":453 + * memoryview_copy_contents(msrc, mdst, src.ndim, dst.ndim, self.dtype_is_object) * - * with nogil, parallel(num_threads=num_threads): + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< + * cdef int array[128] + * cdef void *tmp = NULL */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":280 - * H2_denominator.fill(0) + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":485 + * PyMem_Free(tmp) + * + * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) + */ + +static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + char *__pyx_v_itemp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_indexed", 0); + + /* "View.MemoryView":486 + * + * cdef setitem_indexed(self, index, value): + * cdef char *itemp = self.get_item_pointer(index) # <<<<<<<<<<<<<< + * self.assign_item_from_object(itemp, value) * - * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): */ - { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); - #endif - /*try:*/ { - { - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) - #endif - #ifdef _OPENMP - #pragma omp parallel reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) private(__pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_3, __pyx_t_30, __pyx_t_31, __pyx_t_32, __pyx_t_33, __pyx_t_34, __pyx_t_35, __pyx_t_36, __pyx_t_37, __pyx_t_4) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_num_threads) - #endif /* _OPENMP */ - { - #ifdef _OPENMP - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - Py_BEGIN_ALLOW_THREADS - #endif /* _OPENMP */ + __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_index); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(1, 486, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":282 - * with nogil, parallel(num_threads=num_threads): - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): # <<<<<<<<<<<<<< - * i = A_uids[idx] - * j = A_iids[idx] + /* "View.MemoryView":487 + * cdef setitem_indexed(self, index, value): + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) # <<<<<<<<<<<<<< + * + * cdef convert_item_to_object(self, char *itemp): */ - if (unlikely(!__pyx_v_A.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("A"); __PYX_ERR(0, 282, __pyx_L12_error) } - __pyx_t_21 = (__pyx_v_A.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_23 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((float)__PYX_NAN()); - __pyx_v_score = ((float)__PYX_NAN()); + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 487, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":283 - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): - * i = A_uids[idx] # <<<<<<<<<<<<<< - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + /* "View.MemoryView":485 + * PyMem_Free(tmp) + * + * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_i = (*((long *) ( /* dim=0 */ (__pyx_v_A_uids.data + __pyx_t_24 * __pyx_v_A_uids.strides[0]) ))); - /* "cornac/models/efm/recom_efm.pyx":284 - * for idx in prange(A.shape[0]): - * i = A_uids[idx] - * j = A_iids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_j = (*((long *) ( /* dim=0 */ (__pyx_v_A_iids.data + __pyx_t_24 * __pyx_v_A_iids.strides[0]) ))); + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/efm/recom_efm.pyx":285 - * i = A_uids[idx] - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ # <<<<<<<<<<<<<< - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] +/* "View.MemoryView":489 + * self.assign_item_from_object(itemp, value) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = 0; - __pyx_t_26 = __pyx_v_j; - __pyx_t_27 = 0; - /* "cornac/models/efm/recom_efm.pyx":286 - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) # <<<<<<<<<<<<<< - * score = A[idx] - * loss += (prediction - score) * (prediction - score) +static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp) { + PyObject *__pyx_v_struct = NULL; + PyObject *__pyx_v_bytesitem = 0; + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + Py_ssize_t __pyx_t_9; + int __pyx_t_10; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("convert_item_to_object", 0); + + /* "View.MemoryView":492 + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + * import struct # <<<<<<<<<<<<<< + * cdef bytes bytesitem + * */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = 0; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = 0; - __pyx_v_prediction = (__pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) )))), 1) + __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_latent_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_28 * __pyx_v_H1.strides[0]) ) + __pyx_t_29 * __pyx_v_H1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_31 * __pyx_v_H2.strides[1]) )))), 1)); + __pyx_t_1 = __Pyx_ImportDottedModule(__pyx_n_s_struct, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 492, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_struct = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":287 - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): + /* "View.MemoryView":495 + * cdef bytes bytesitem + * + * bytesitem = itemp[:self.view.itemsize] # <<<<<<<<<<<<<< + * try: + * result = struct.unpack(self.view.format, bytesitem) */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_A.data + __pyx_t_31 * __pyx_v_A.strides[0]) ))); + __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_itemp + 0, __pyx_v_self->view.itemsize - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_bytesitem = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":288 - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] + /* "View.MemoryView":496 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { - /* "cornac/models/efm/recom_efm.pyx":289 - * score = A[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] + /* "View.MemoryView":497 + * bytesitem = itemp[:self.view.itemsize] + * try: + * result = struct.unpack(self.view.format, bytesitem) # <<<<<<<<<<<<<< + * except struct.error: + * raise ValueError, "Unable to convert item to object" */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_unpack); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 497, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 497, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + { + PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 497, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_v_result = __pyx_t_1; + __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":290 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] # <<<<<<<<<<<<<< - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] + /* "View.MemoryView":496 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_31 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))); + } - /* "cornac/models/efm/recom_efm.pyx":291 - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] # <<<<<<<<<<<<<< - * U2_numerator[j, k] += score * U1[i, k] - * U2_denominator[j, k] += prediction * U1[i, k] + /* "View.MemoryView":501 + * raise ValueError, "Unable to convert item to object" + * else: + * if len(self.view.format) == 1: # <<<<<<<<<<<<<< + * return result[0] + * return result */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_31 * __pyx_v_U2.strides[1]) )))); + /*else:*/ { + __pyx_t_9 = __Pyx_ssize_strlen(__pyx_v_self->view.format); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(1, 501, __pyx_L5_except_error) + __pyx_t_10 = (__pyx_t_9 == 1); + if (__pyx_t_10) { - /* "cornac/models/efm/recom_efm.pyx":292 - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] # <<<<<<<<<<<<<< - * U2_denominator[j, k] += prediction * U1[i, k] + /* "View.MemoryView":502 + * else: + * if len(self.view.format) == 1: + * return result[0] # <<<<<<<<<<<<<< + * return result * */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_result, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 502, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L6_except_return; - /* "cornac/models/efm/recom_efm.pyx":293 - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] - * U2_denominator[j, k] += prediction * U1[i, k] # <<<<<<<<<<<<<< - * - * for k in range(num_latent_factors): + /* "View.MemoryView":501 + * raise ValueError, "Unable to convert item to object" + * else: + * if len(self.view.format) == 1: # <<<<<<<<<<<<<< + * return result[0] + * return result */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )))); - } + } - /* "cornac/models/efm/recom_efm.pyx":295 - * U2_denominator[j, k] += prediction * U1[i, k] + /* "View.MemoryView":503 + * if len(self.view.format) == 1: + * return result[0] + * return result # <<<<<<<<<<<<<< * - * for k in range(num_latent_factors): # <<<<<<<<<<<<<< - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] + * cdef assign_item_from_object(self, char *itemp, object value): */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L6_except_return; + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "cornac/models/efm/recom_efm.pyx":296 - * - * for k in range(num_latent_factors): - * H1_numerator[i, k] += score * H2[j, k] # <<<<<<<<<<<<<< - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] + /* "View.MemoryView":498 + * try: + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: # <<<<<<<<<<<<<< + * raise ValueError, "Unable to convert item to object" + * else: */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_31 * __pyx_v_H2.strides[0]) ) + __pyx_t_30 * __pyx_v_H2.strides[1]) )))); + __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 498, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_7); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_6); + __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0; + if (__pyx_t_8) { + __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(1, 498, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_1); - /* "cornac/models/efm/recom_efm.pyx":297 - * for k in range(num_latent_factors): - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] # <<<<<<<<<<<<<< - * H2_numerator[j, k] += score * H1[i, k] - * H2_denominator[j, k] += prediction * H1[i, k] + /* "View.MemoryView":499 + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + * raise ValueError, "Unable to convert item to object" # <<<<<<<<<<<<<< + * else: + * if len(self.view.format) == 1: */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_31 * __pyx_v_H2.strides[1]) )))); + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Unable_to_convert_item_to_object, 0, 0); + __PYX_ERR(1, 499, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; - /* "cornac/models/efm/recom_efm.pyx":298 - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] # <<<<<<<<<<<<<< - * H2_denominator[j, k] += prediction * H1[i, k] + /* "View.MemoryView":496 * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_31 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))); + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } - /* "cornac/models/efm/recom_efm.pyx":299 - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] - * H2_denominator[j, k] += prediction * H1[i, k] # <<<<<<<<<<<<<< + /* "View.MemoryView":489 + * self.assign_item_from_object(itemp, value) * - * for idx in prange(X.shape[0]): + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_30 * __pyx_v_H1.strides[0]) ) + __pyx_t_31 * __pyx_v_H1.strides[1]) )))); - } - } - } - } - } - /* "cornac/models/efm/recom_efm.pyx":301 - * H2_denominator[j, k] += prediction * H1[i, k] + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_struct); + __Pyx_XDECREF(__pyx_v_bytesitem); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":505 + * return result * - * for idx in prange(X.shape[0]): # <<<<<<<<<<<<<< - * i = X_uids[idx] - * j = X_aids[idx] + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" */ - if (unlikely(!__pyx_v_X.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("X"); __PYX_ERR(0, 301, __pyx_L12_error) } - __pyx_t_23 = (__pyx_v_X.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_21 = (__pyx_t_23 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_21 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((float)__PYX_NAN()); - __pyx_v_score = ((float)__PYX_NAN()); - /* "cornac/models/efm/recom_efm.pyx":302 +static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { + PyObject *__pyx_v_struct = NULL; + char __pyx_v_c; + PyObject *__pyx_v_bytesvalue = 0; + Py_ssize_t __pyx_v_i; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + Py_ssize_t __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + char *__pyx_t_9; + char *__pyx_t_10; + char *__pyx_t_11; + char *__pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assign_item_from_object", 0); + + /* "View.MemoryView":508 + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + * import struct # <<<<<<<<<<<<<< + * cdef char c + * cdef bytes bytesvalue + */ + __pyx_t_1 = __Pyx_ImportDottedModule(__pyx_n_s_struct, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 508, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_struct = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":513 + * cdef Py_ssize_t i * - * for idx in prange(X.shape[0]): - * i = X_uids[idx] # <<<<<<<<<<<<<< - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * if isinstance(value, tuple): # <<<<<<<<<<<<<< + * bytesvalue = struct.pack(self.view.format, *value) + * else: */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_i = (*((long *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_31 * __pyx_v_X_uids.strides[0]) ))); + __pyx_t_2 = PyTuple_Check(__pyx_v_value); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":303 - * for idx in prange(X.shape[0]): - * i = X_uids[idx] - * j = X_aids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] + /* "View.MemoryView":514 + * + * if isinstance(value, tuple): + * bytesvalue = struct.pack(self.view.format, *value) # <<<<<<<<<<<<<< + * else: + * bytesvalue = struct.pack(self.view.format, value) */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_j = (*((long *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_31 * __pyx_v_X_aids.strides[0]) ))); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 514, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 514, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 514, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 514, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyNumber_Add(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 514, __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_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 514, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (!(likely(PyBytes_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_3))) __PYX_ERR(1, 514, __pyx_L1_error) + __pyx_v_bytesvalue = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; - /* "cornac/models/efm/recom_efm.pyx":304 - * i = X_uids[idx] - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< - * score = X[idx] - * loss += (prediction - score) * (prediction - score) + /* "View.MemoryView":513 + * cdef Py_ssize_t i + * + * if isinstance(value, tuple): # <<<<<<<<<<<<<< + * bytesvalue = struct.pack(self.view.format, *value) + * else: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = 0; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = 0; - __pyx_v_prediction = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) )))), 1); + goto __pyx_L3; + } - /* "cornac/models/efm/recom_efm.pyx":305 - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): + /* "View.MemoryView":516 + * bytesvalue = struct.pack(self.view.format, *value) + * else: + * bytesvalue = struct.pack(self.view.format, value) # <<<<<<<<<<<<<< + * + * for i, c in enumerate(bytesvalue): */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_28 * __pyx_v_X.strides[0]) ))); + /*else*/ { + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_6 = 1; + } + } + { + PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_1, __pyx_v_value}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (!(likely(PyBytes_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_3))) __PYX_ERR(1, 516, __pyx_L1_error) + __pyx_v_bytesvalue = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + } + __pyx_L3:; - /* "cornac/models/efm/recom_efm.pyx":306 - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] + /* "View.MemoryView":518 + * bytesvalue = struct.pack(self.view.format, value) + * + * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< + * itemp[i] = c + * */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); + __pyx_t_7 = 0; + if (unlikely(__pyx_v_bytesvalue == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable"); + __PYX_ERR(1, 518, __pyx_L1_error) + } + __Pyx_INCREF(__pyx_v_bytesvalue); + __pyx_t_8 = __pyx_v_bytesvalue; + __pyx_t_10 = PyBytes_AS_STRING(__pyx_t_8); + __pyx_t_11 = (__pyx_t_10 + PyBytes_GET_SIZE(__pyx_t_8)); + for (__pyx_t_12 = __pyx_t_10; __pyx_t_12 < __pyx_t_11; __pyx_t_12++) { + __pyx_t_9 = __pyx_t_12; + __pyx_v_c = (__pyx_t_9[0]); - /* "cornac/models/efm/recom_efm.pyx":307 - * score = X[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + /* "View.MemoryView":519 + * + * for i, c in enumerate(bytesvalue): + * itemp[i] = c # <<<<<<<<<<<<<< + * + * @cname('getbuffer') */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; + __pyx_v_i = __pyx_t_7; - /* "cornac/models/efm/recom_efm.pyx":308 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] # <<<<<<<<<<<<<< - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] + /* "View.MemoryView":518 + * bytesvalue = struct.pack(self.view.format, value) + * + * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< + * itemp[i] = c + * */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_28 * __pyx_v_U1.strides[0]) ) + __pyx_t_29 * __pyx_v_U1.strides[1]) )))); + __pyx_t_7 = (__pyx_t_7 + 1); - /* "cornac/models/efm/recom_efm.pyx":309 - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] # <<<<<<<<<<<<<< - * U1_numerator[i, k] += lambda_x * score * V[j, k] - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] + /* "View.MemoryView":519 + * + * for i, c in enumerate(bytesvalue): + * itemp[i] = c # <<<<<<<<<<<<<< + * + * @cname('getbuffer') */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_29 * __pyx_v_U1.strides[0]) ) + __pyx_t_28 * __pyx_v_U1.strides[1]) )))); + (__pyx_v_itemp[__pyx_v_i]) = __pyx_v_c; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "cornac/models/efm/recom_efm.pyx":310 - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] # <<<<<<<<<<<<<< - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] + /* "View.MemoryView":505 + * return result * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" */ - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_28 * __pyx_v_V.strides[0]) ) + __pyx_t_29 * __pyx_v_V.strides[1]) )))); - /* "cornac/models/efm/recom_efm.pyx":311 - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] # <<<<<<<<<<<<<< + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.memoryview.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_struct); + __Pyx_XDECREF(__pyx_v_bytesvalue); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":521 + * itemp[i] = c * - * for idx in prange(Y.shape[0]): + * @cname('getbuffer') # <<<<<<<<<<<<<< + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: */ - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) )))); - } - } - } - } - } - /* "cornac/models/efm/recom_efm.pyx":313 - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] +/* Python wrapper */ +CYTHON_UNUSED static int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +CYTHON_UNUSED static int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + Py_ssize_t *__pyx_t_3; + char *__pyx_t_4; + void *__pyx_t_5; + int __pyx_t_6; + Py_ssize_t __pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (unlikely(__pyx_v_info == NULL)) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; + } + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + + /* "View.MemoryView":523 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< + * raise ValueError, "Cannot create writable memory view from read-only memoryview" * - * for idx in prange(Y.shape[0]): # <<<<<<<<<<<<<< - * i = Y_iids[idx] - * j = Y_aids[idx] */ - if (unlikely(!__pyx_v_Y.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("Y"); __PYX_ERR(0, 313, __pyx_L12_error) } - __pyx_t_21 = (__pyx_v_Y.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_23 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((float)__PYX_NAN()); - __pyx_v_score = ((float)__PYX_NAN()); + __pyx_t_2 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_1 = __pyx_v_self->view.readonly; + __pyx_L4_bool_binop_done:; + if (unlikely(__pyx_t_1)) { - /* "cornac/models/efm/recom_efm.pyx":314 + /* "View.MemoryView":524 + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError, "Cannot create writable memory view from read-only memoryview" # <<<<<<<<<<<<<< * - * for idx in prange(Y.shape[0]): - * i = Y_iids[idx] # <<<<<<<<<<<<<< - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * if flags & PyBUF_ND: */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_i = (*((long *) ( /* dim=0 */ (__pyx_v_Y_iids.data + __pyx_t_28 * __pyx_v_Y_iids.strides[0]) ))); + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Cannot_create_writable_memory_vi, 0, 0); + __PYX_ERR(1, 524, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":315 - * for idx in prange(Y.shape[0]): - * i = Y_iids[idx] - * j = Y_aids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] + /* "View.MemoryView":523 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< + * raise ValueError, "Cannot create writable memory view from read-only memoryview" + * */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_j = (*((long *) ( /* dim=0 */ (__pyx_v_Y_aids.data + __pyx_t_28 * __pyx_v_Y_aids.strides[0]) ))); + } - /* "cornac/models/efm/recom_efm.pyx":316 - * i = Y_iids[idx] - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) + /* "View.MemoryView":526 + * raise ValueError, "Cannot create writable memory view from read-only memoryview" + * + * if flags & PyBUF_ND: # <<<<<<<<<<<<<< + * info.shape = self.view.shape + * else: */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = 0; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = 0; - __pyx_v_prediction = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_28 * __pyx_v_U2.strides[0]) ) + __pyx_t_29 * __pyx_v_U2.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))), 1); + __pyx_t_1 = ((__pyx_v_flags & PyBUF_ND) != 0); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":317 - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): + /* "View.MemoryView":527 + * + * if flags & PyBUF_ND: + * info.shape = self.view.shape # <<<<<<<<<<<<<< + * else: + * info.shape = NULL */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_Y.data + __pyx_t_31 * __pyx_v_Y.strides[0]) ))); + __pyx_t_3 = __pyx_v_self->view.shape; + __pyx_v_info->shape = __pyx_t_3; - /* "cornac/models/efm/recom_efm.pyx":318 - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] + /* "View.MemoryView":526 + * raise ValueError, "Cannot create writable memory view from read-only memoryview" + * + * if flags & PyBUF_ND: # <<<<<<<<<<<<<< + * info.shape = self.view.shape + * else: */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); + goto __pyx_L6; + } - /* "cornac/models/efm/recom_efm.pyx":319 - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + /* "View.MemoryView":529 + * info.shape = self.view.shape + * else: + * info.shape = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_STRIDES: */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; + /*else*/ { + __pyx_v_info->shape = NULL; + } + __pyx_L6:; - /* "cornac/models/efm/recom_efm.pyx":320 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] # <<<<<<<<<<<<<< - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] + /* "View.MemoryView":531 + * info.shape = NULL + * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.strides = self.view.strides + * else: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_31 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))); + __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":321 - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] # <<<<<<<<<<<<<< - * U2_numerator[i, k] += lambda_y * score * V[j, k] - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] + /* "View.MemoryView":532 + * + * if flags & PyBUF_STRIDES: + * info.strides = self.view.strides # <<<<<<<<<<<<<< + * else: + * info.strides = NULL */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_31 * __pyx_v_U2.strides[1]) )))); + __pyx_t_3 = __pyx_v_self->view.strides; + __pyx_v_info->strides = __pyx_t_3; - /* "cornac/models/efm/recom_efm.pyx":322 - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] # <<<<<<<<<<<<<< - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] + /* "View.MemoryView":531 + * info.shape = NULL * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.strides = self.view.strides + * else: */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )))); + goto __pyx_L7; + } - /* "cornac/models/efm/recom_efm.pyx":323 - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] # <<<<<<<<<<<<<< + /* "View.MemoryView":534 + * info.strides = self.view.strides + * else: + * info.strides = NULL # <<<<<<<<<<<<<< * - * # update V + * if flags & PyBUF_INDIRECT: */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))); - } - } - } - } - } + /*else*/ { + __pyx_v_info->strides = NULL; + } + __pyx_L7:; - /* "cornac/models/efm/recom_efm.pyx":326 + /* "View.MemoryView":536 + * info.strides = NULL * - * # update V - * for i in prange(num_aspects): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] + * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< + * info.suboffsets = self.view.suboffsets + * else: */ - __pyx_t_3 = __pyx_v_num_aspects; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - float __pyx_parallel_temp2 = ((float)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_35 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_35 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_35; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + __pyx_t_1 = ((__pyx_v_flags & PyBUF_INDIRECT) != 0); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":327 - * # update V - * for i in prange(num_aspects): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + /* "View.MemoryView":537 + * + * if flags & PyBUF_INDIRECT: + * info.suboffsets = self.view.suboffsets # <<<<<<<<<<<<<< + * else: + * info.suboffsets = NULL */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + __pyx_t_3 = __pyx_v_self->view.suboffsets; + __pyx_v_info->suboffsets = __pyx_t_3; - /* "cornac/models/efm/recom_efm.pyx":328 - * for i in prange(num_aspects): - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] # <<<<<<<<<<<<<< - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) + /* "View.MemoryView":536 + * info.strides = NULL + * + * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< + * info.suboffsets = self.view.suboffsets + * else: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_v * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) ))))); + goto __pyx_L8; + } - /* "cornac/models/efm/recom_efm.pyx":329 - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps # <<<<<<<<<<<<<< - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) + /* "View.MemoryView":539 + * info.suboffsets = self.view.suboffsets + * else: + * info.suboffsets = NULL # <<<<<<<<<<<<<< * + * if flags & PyBUF_FORMAT: */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_27 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += (((((*((long *) ( /* dim=0 */ (__pyx_v_X_aspect_counts.data + __pyx_t_28 * __pyx_v_X_aspect_counts.strides[0]) ))) + (*((long *) ( /* dim=0 */ (__pyx_v_Y_aspect_counts.data + __pyx_t_29 * __pyx_v_Y_aspect_counts.strides[0]) )))) * __pyx_v_lambda_v) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))) + __pyx_v_eps); + /*else*/ { + __pyx_v_info->suboffsets = NULL; + } + __pyx_L8:; - /* "cornac/models/efm/recom_efm.pyx":330 - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) # <<<<<<<<<<<<<< + /* "View.MemoryView":541 + * info.suboffsets = NULL * - * # update U1, H1 + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.view.format + * else: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_V_numerator.diminfo[1].strides)); - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_V_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 330, __pyx_L42_error) - } - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L47; - __pyx_L42_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L46; - __pyx_L46:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates6) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L47:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":333 + /* "View.MemoryView":542 * - * # update U1, H1 - * for i in prange(num_users): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] + * if flags & PyBUF_FORMAT: + * info.format = self.view.format # <<<<<<<<<<<<<< + * else: + * info.format = NULL */ - __pyx_t_35 = __pyx_v_num_users; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - float __pyx_parallel_temp2 = ((float)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_3 = (__pyx_t_35 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_3 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_3; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + __pyx_t_4 = __pyx_v_self->view.format; + __pyx_v_info->format = __pyx_t_4; - /* "cornac/models/efm/recom_efm.pyx":334 - * # update U1, H1 - * for i in prange(num_users): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + /* "View.MemoryView":541 + * info.suboffsets = NULL + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.view.format + * else: */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + goto __pyx_L9; + } - /* "cornac/models/efm/recom_efm.pyx":335 - * for i in prange(num_users): - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] # <<<<<<<<<<<<<< - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + /* "View.MemoryView":544 + * info.format = self.view.format + * else: + * info.format = NULL # <<<<<<<<<<<<<< + * + * info.buf = self.view.buf */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_29 * __pyx_v_U1.strides[0]) ) + __pyx_t_28 * __pyx_v_U1.strides[1]) ))))); + /*else*/ { + __pyx_v_info->format = NULL; + } + __pyx_L9:; - /* "cornac/models/efm/recom_efm.pyx":336 - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps # <<<<<<<<<<<<<< - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): + /* "View.MemoryView":546 + * info.format = NULL + * + * info.buf = self.view.buf # <<<<<<<<<<<<<< + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_26 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (((((*((long *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_28 * __pyx_v_A_user_counts.strides[0]) ))) + (*((long *) ( /* dim=0 */ (__pyx_v_X_user_counts.data + __pyx_t_29 * __pyx_v_X_user_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))) + __pyx_v_eps); + __pyx_t_5 = __pyx_v_self->view.buf; + __pyx_v_info->buf = __pyx_t_5; - /* "cornac/models/efm/recom_efm.pyx":337 - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) # <<<<<<<<<<<<<< - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] + /* "View.MemoryView":547 + * + * info.buf = self.view.buf + * info.ndim = self.view.ndim # <<<<<<<<<<<<<< + * info.itemsize = self.view.itemsize + * info.len = self.view.len */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_U1_numerator.diminfo[1].strides)); - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U1_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_36 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 337, __pyx_L50_error) - } - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )) *= sqrt((__pyx_t_37 / __pyx_t_36)); - } + __pyx_t_6 = __pyx_v_self->view.ndim; + __pyx_v_info->ndim = __pyx_t_6; - /* "cornac/models/efm/recom_efm.pyx":338 - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): # <<<<<<<<<<<<<< - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + /* "View.MemoryView":548 + * info.buf = self.view.buf + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize # <<<<<<<<<<<<<< + * info.len = self.view.len + * info.readonly = self.view.readonly */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + __pyx_t_7 = __pyx_v_self->view.itemsize; + __pyx_v_info->itemsize = __pyx_t_7; - /* "cornac/models/efm/recom_efm.pyx":339 - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] # <<<<<<<<<<<<<< - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) + /* "View.MemoryView":549 + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize + * info.len = self.view.len # <<<<<<<<<<<<<< + * info.readonly = self.view.readonly + * info.obj = self */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_31 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_29 * __pyx_v_H1.strides[0]) ) + __pyx_t_28 * __pyx_v_H1.strides[1]) ))))); + __pyx_t_7 = __pyx_v_self->view.len; + __pyx_v_info->len = __pyx_t_7; - /* "cornac/models/efm/recom_efm.pyx":340 - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps # <<<<<<<<<<<<<< - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) + /* "View.MemoryView":550 + * info.itemsize = self.view.itemsize + * info.len = self.view.len + * info.readonly = self.view.readonly # <<<<<<<<<<<<<< + * info.obj = self * */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += ((((*((long *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_28 * __pyx_v_A_user_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_29 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))) + __pyx_v_eps); + __pyx_t_1 = __pyx_v_self->view.readonly; + __pyx_v_info->readonly = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":341 - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) # <<<<<<<<<<<<<< + /* "View.MemoryView":551 + * info.len = self.view.len + * info.readonly = self.view.readonly + * info.obj = self # <<<<<<<<<<<<<< + * * - * # update U2, H2 */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H1_numerator.diminfo[1].strides)); - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_H1_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 341, __pyx_L50_error) - } - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_30 * __pyx_v_H1.strides[0]) ) + __pyx_t_29 * __pyx_v_H1.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L57; - __pyx_L50_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L56; - __pyx_L56:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates7) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L57:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } + __Pyx_INCREF((PyObject *)__pyx_v_self); + __Pyx_GIVEREF((PyObject *)__pyx_v_self); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); - /* "cornac/models/efm/recom_efm.pyx":344 + /* "View.MemoryView":521 + * itemp[i] = c * - * # update U2, H2 - * for i in prange(num_items): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] + * @cname('getbuffer') # <<<<<<<<<<<<<< + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: */ - __pyx_t_3 = __pyx_v_num_items; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - float __pyx_parallel_temp2 = ((float)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_35 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_35 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_35; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); - /* "cornac/models/efm/recom_efm.pyx":345 - * # update U2, H2 - * for i in prange(num_items): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":554 + * + * + * @property # <<<<<<<<<<<<<< + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; - /* "cornac/models/efm/recom_efm.pyx":346 - * for i in prange(num_items): - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] # <<<<<<<<<<<<<< - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":556 + * @property + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) # <<<<<<<<<<<<<< + * transpose_memslice(&result.from_slice) + * return result */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_28 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_29 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_28 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) ))))); + __pyx_t_1 = __pyx_memoryview_copy_object(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_memoryviewslice_type))))) __PYX_ERR(1, 556, __pyx_L1_error) + __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_1); + __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":347 - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps # <<<<<<<<<<<<<< - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): + /* "View.MemoryView":557 + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) # <<<<<<<<<<<<<< + * return result + * */ - __pyx_t_27 = __pyx_v_i; - __pyx_t_28 = __pyx_v_i; - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_31 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (((((*((long *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_27 * __pyx_v_A_item_counts.strides[0]) ))) + (*((long *) ( /* dim=0 */ (__pyx_v_Y_item_counts.data + __pyx_t_28 * __pyx_v_Y_item_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_29 * __pyx_v_U2.strides[1]) )))) + __pyx_v_eps); + __pyx_t_2 = __pyx_memslice_transpose((&__pyx_v_result->from_slice)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 557, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":348 - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) # <<<<<<<<<<<<<< - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] + /* "View.MemoryView":558 + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + * return result # <<<<<<<<<<<<<< + * + * @property */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U2_numerator.diminfo[1].strides)); - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_36 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 348, __pyx_L60_error) - } - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_29 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )) *= sqrt((__pyx_t_37 / __pyx_t_36)); - } + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_result); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":349 - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): # <<<<<<<<<<<<<< - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + /* "View.MemoryView":554 + * + * + * @property # <<<<<<<<<<<<<< + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; - /* "cornac/models/efm/recom_efm.pyx":350 - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] # <<<<<<<<<<<<<< - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.T.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":560 + * return result + * + * @property # <<<<<<<<<<<<<< + * def base(self): + * return self._get_base() */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_29 * __pyx_v_H2.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_28 * __pyx_v_H2.strides[0]) ) + __pyx_t_27 * __pyx_v_H2.strides[1]) ))))); - /* "cornac/models/efm/recom_efm.pyx":351 - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps # <<<<<<<<<<<<<< - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":562 + * @property + * def base(self): + * return self._get_base() # <<<<<<<<<<<<<< * + * cdef _get_base(self): */ - __pyx_t_27 = __pyx_v_i; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_30 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += ((((*((long *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_27 * __pyx_v_A_item_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_28 * __pyx_v_H2.strides[0]) ) + __pyx_t_29 * __pyx_v_H2.strides[1]) )))) + __pyx_v_eps); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->_get_base(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 562, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":352 - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) # <<<<<<<<<<<<<< + /* "View.MemoryView":560 + * return result * - * if self.verbose: + * @property # <<<<<<<<<<<<<< + * def base(self): + * return self._get_base() */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H2_numerator.diminfo[1].strides)); - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H2_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 352, __pyx_L60_error) - } - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_29 * __pyx_v_H2.strides[0]) ) + __pyx_t_28 * __pyx_v_H2.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L67; - __pyx_L60_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L66; - __pyx_L66:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates8) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L67:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } - goto __pyx_L69; - __pyx_L12_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L69; - __pyx_L69:; - #ifdef _OPENMP - Py_END_ALLOW_THREADS - #else -{ -#ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #endif /* _OPENMP */ - /* Clean up any temporaries */ - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - #ifndef _OPENMP + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.base.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -#endif /* _OPENMP */ - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L8_error; - } - } - } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } - /* "cornac/models/efm/recom_efm.pyx":280 - * H2_denominator.fill(0) +/* "View.MemoryView":564 + * return self._get_base() + * + * cdef _get_base(self): # <<<<<<<<<<<<<< + * return self.obj * - * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L9; - } - __pyx_L8_error: { - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L1_error; - } - __pyx_L9:; - } - } - /* "cornac/models/efm/recom_efm.pyx":354 - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) +static PyObject *__pyx_memoryview__get_base(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_get_base", 0); + + /* "View.MemoryView":565 * - * if self.verbose: # <<<<<<<<<<<<<< - * print('iter: %d, loss: %f' % (t, loss)) + * cdef _get_base(self): + * return self.obj # <<<<<<<<<<<<<< * + * @property */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 354, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_38 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_38 < 0)) __PYX_ERR(0, 354, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_38) { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->obj); + __pyx_r = __pyx_v_self->obj; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":355 + /* "View.MemoryView":564 + * return self._get_base() * - * if self.verbose: - * print('iter: %d, loss: %f' % (t, loss)) # <<<<<<<<<<<<<< + * cdef _get_base(self): # <<<<<<<<<<<<<< + * return self.obj * - * if self.verbose: */ - __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_23 = 0; - __pyx_t_39 = 127; - __Pyx_INCREF(__pyx_kp_u_iter); - __pyx_t_23 += 6; - __Pyx_GIVEREF(__pyx_kp_u_iter); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_iter); - __pyx_t_6 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_t), __pyx_n_u_d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_39 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_39) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_39; - __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_6 = 0; - __Pyx_INCREF(__pyx_kp_u_loss); - __pyx_t_23 += 8; - __Pyx_GIVEREF(__pyx_kp_u_loss); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_loss); - __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_Format(__pyx_t_6, __pyx_n_u_f); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_39 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_39) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_39; - __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_23, __pyx_t_39); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":354 - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":567 + * return self.obj * - * if self.verbose: # <<<<<<<<<<<<<< - * print('iter: %d, loss: %f' % (t, loss)) + * @property # <<<<<<<<<<<<<< + * def shape(self): + * return tuple([length for length in self.view.shape[:self.view.ndim]]) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_7genexpr__pyx_v_length; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":569 + * @property + * def shape(self): + * return tuple([length for length in self.view.shape[:self.view.ndim]]) # <<<<<<<<<<<<<< * + * @property */ + __Pyx_XDECREF(__pyx_r); + { /* enter inner scope */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 569, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); + for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_7genexpr__pyx_v_length = (__pyx_t_2[0]); + __pyx_t_5 = PyInt_FromSsize_t(__pyx_7genexpr__pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 569, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(1, 569, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } + } /* exit inner scope */ + __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 569, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":267 - * floating eps = 1e-9 + /* "View.MemoryView":567 + * return self.obj * - * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< - * loss = 0. - * U1_numerator.fill(0) + * @property # <<<<<<<<<<<<<< + * def shape(self): + * return tuple([length for length in self.view.shape[:self.view.ndim]]) */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":357 - * print('iter: %d, loss: %f' % (t, loss)) + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.shape.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":571 + * return tuple([length for length in self.view.shape[:self.view.ndim]]) * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Optimization finished!') + * @property # <<<<<<<<<<<<<< + * def strides(self): + * if self.view.strides == NULL: + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_8genexpr1__pyx_v_stride; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":573 + * @property + * def strides(self): + * if self.view.strides == NULL: # <<<<<<<<<<<<<< * + * raise ValueError, "Buffer view does not expose strides" */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_38 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_38 < 0)) __PYX_ERR(0, 357, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_38) { + __pyx_t_1 = (__pyx_v_self->view.strides == NULL); + if (unlikely(__pyx_t_1)) { - /* "cornac/models/efm/recom_efm.pyx":358 + /* "View.MemoryView":575 + * if self.view.strides == NULL: * - * if self.verbose: - * print('Optimization finished!') # <<<<<<<<<<<<<< + * raise ValueError, "Buffer view does not expose strides" # <<<<<<<<<<<<<< * - * def _build_matrices(self, data_set): + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Buffer_view_does_not_expose_stri, 0, 0); + __PYX_ERR(1, 575, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":357 - * print('iter: %d, loss: %f' % (t, loss)) - * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Optimization finished!') + /* "View.MemoryView":573 + * @property + * def strides(self): + * if self.view.strides == NULL: # <<<<<<<<<<<<<< * + * raise ValueError, "Buffer view does not expose strides" */ } - /* "cornac/models/efm/recom_efm.pyx":230 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def _fit_efm(self, int num_threads, # <<<<<<<<<<<<<< - * floating[:] A, integral[:] A_uids, integral[:] A_iids, integral[:] A_user_counts, integral[:] A_item_counts, - * floating[:] X, integral[:] X_uids, integral[:] X_aids, integral[:] X_user_counts, integral[:] X_aspect_counts, + /* "View.MemoryView":577 + * raise ValueError, "Buffer view does not expose strides" + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + { /* enter inner scope */ + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = (__pyx_v_self->view.strides + __pyx_v_self->view.ndim); + for (__pyx_t_5 = __pyx_v_self->view.strides; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { + __pyx_t_3 = __pyx_t_5; + __pyx_8genexpr1__pyx_v_stride = (__pyx_t_3[0]); + __pyx_t_6 = PyInt_FromSsize_t(__pyx_8genexpr1__pyx_v_stride); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + } /* exit inner scope */ + __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "View.MemoryView":571 + * return tuple([length for length in self.view.shape[:self.view.ndim]]) + * + * @property # <<<<<<<<<<<<<< + * def strides(self): + * if self.view.strides == NULL: */ /* 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_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("View.MemoryView.memoryview.strides.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; - goto __pyx_L2; __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_U1_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_U1_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_U2_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_U2_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_V_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_V_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_H1_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_H1_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_H2_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_H2_denominator); - __Pyx_XDECREF(__pyx_v_t); - __PYX_XDEC_MEMVIEW(&__pyx_v_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_user_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_item_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_user_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aspect_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_item_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_V, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_H1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_H2, 1); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } +/* "View.MemoryView":579 + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + * + * @property # <<<<<<<<<<<<<< + * def suboffsets(self): + * if self.view.suboffsets == NULL: + */ + /* Python wrapper */ -static PyObject *__pyx_fuse_1_0__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_25_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_fuse_1_0__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_25_fit_efm = {"__pyx_fuse_1_0_fit_efm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1_0__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_25_fit_efm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm}; -static PyObject *__pyx_fuse_1_0__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_25_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - int __pyx_v_num_threads; - __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_V = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_H1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_H2 = { 0, 0, { 0 }, { 0 }, { 0 } }; +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_8genexpr2__pyx_v_suboffset; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + PyObject *__pyx_t_6 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_fit_efm (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_num_threads,&__pyx_n_s_A,&__pyx_n_s_A_uids,&__pyx_n_s_A_iids,&__pyx_n_s_A_user_counts,&__pyx_n_s_A_item_counts,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_aids,&__pyx_n_s_X_user_counts,&__pyx_n_s_X_aspect_counts,&__pyx_n_s_Y,&__pyx_n_s_Y_iids,&__pyx_n_s_Y_aids,&__pyx_n_s_Y_item_counts,&__pyx_n_s_Y_aspect_counts,&__pyx_n_s_U1,&__pyx_n_s_U2,&__pyx_n_s_V,&__pyx_n_s_H1,&__pyx_n_s_H2,0}; - PyObject* values[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - CYTHON_FALLTHROUGH; - case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - CYTHON_FALLTHROUGH; - case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - CYTHON_FALLTHROUGH; - case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - CYTHON_FALLTHROUGH; - case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - CYTHON_FALLTHROUGH; - case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - CYTHON_FALLTHROUGH; - case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - CYTHON_FALLTHROUGH; - case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - CYTHON_FALLTHROUGH; - case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - CYTHON_FALLTHROUGH; - case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - CYTHON_FALLTHROUGH; - case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - CYTHON_FALLTHROUGH; - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 1); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 2); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 3); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 4); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_user_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 5); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_item_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 6); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 7); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 8); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 9: - if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 9); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 10: - if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_user_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 10); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 11: - if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aspect_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 11); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 12: - if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 12); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 13: - if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 13); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 14: - if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 14); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 15: - if (likely((values[15] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_item_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 15); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 16: - if (likely((values[16] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_aspect_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 16); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 17: - if (likely((values[17] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 17); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 18: - if (likely((values[18] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 18); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 19: - if (likely((values[19] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 19); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 20: - if (likely((values[20] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_H1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 20); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 21: - if (likely((values[21] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_H2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 21); __PYX_ERR(0, 230, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_fit_efm") < 0)) __PYX_ERR(0, 230, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 22) { - 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); - values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - } - __pyx_v_self = values[0]; - __pyx_v_num_threads = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L3_error) - __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_uids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_iids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_user_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_item_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_user_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aspect_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_Y = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_iids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_item_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aspect_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_U1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_U2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_V = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_V.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_H1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[20], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_H2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":581 + * @property + * def suboffsets(self): + * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< + * return (-1,) * self.view.ndim + * + */ + __pyx_t_1 = (__pyx_v_self->view.suboffsets == NULL); + if (__pyx_t_1) { + + /* "View.MemoryView":582 + * def suboffsets(self): + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PySequence_Multiply(__pyx_tuple__4, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 582, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":581 + * @property + * def suboffsets(self): + * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< + * return (-1,) * self.view.ndim + * + */ } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 230, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); + + /* "View.MemoryView":584 + * return (-1,) * self.view.ndim + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + { /* enter inner scope */ + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 584, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = (__pyx_v_self->view.suboffsets + __pyx_v_self->view.ndim); + for (__pyx_t_5 = __pyx_v_self->view.suboffsets; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { + __pyx_t_3 = __pyx_t_5; + __pyx_8genexpr2__pyx_v_suboffset = (__pyx_t_3[0]); + __pyx_t_6 = PyInt_FromSsize_t(__pyx_8genexpr2__pyx_v_suboffset); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 584, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(1, 584, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + } /* exit inner scope */ + __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 584, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "View.MemoryView":579 + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + * + * @property # <<<<<<<<<<<<<< + * def suboffsets(self): + * if self.view.suboffsets == NULL: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.memoryview.suboffsets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_24_fit_efm(__pyx_self, __pyx_v_self, __pyx_v_num_threads, __pyx_v_A, __pyx_v_A_uids, __pyx_v_A_iids, __pyx_v_A_user_counts, __pyx_v_A_item_counts, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_aids, __pyx_v_X_user_counts, __pyx_v_X_aspect_counts, __pyx_v_Y, __pyx_v_Y_iids, __pyx_v_Y_aids, __pyx_v_Y_item_counts, __pyx_v_Y_aspect_counts, __pyx_v_U1, __pyx_v_U2, __pyx_v_V, __pyx_v_H1, __pyx_v_H2); + return __pyx_r; +} + +/* "View.MemoryView":586 + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + * + * @property # <<<<<<<<<<<<<< + * def ndim(self): + * return self.view.ndim + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_24_fit_efm(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_A_uids, __Pyx_memviewslice __pyx_v_A_iids, __Pyx_memviewslice __pyx_v_A_user_counts, __Pyx_memviewslice __pyx_v_A_item_counts, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_X_user_counts, __Pyx_memviewslice __pyx_v_X_aspect_counts, __Pyx_memviewslice __pyx_v_Y, __Pyx_memviewslice __pyx_v_Y_iids, __Pyx_memviewslice __pyx_v_Y_aids, __Pyx_memviewslice __pyx_v_Y_item_counts, __Pyx_memviewslice __pyx_v_Y_aspect_counts, __Pyx_memviewslice __pyx_v_U1, __Pyx_memviewslice __pyx_v_U2, __Pyx_memviewslice __pyx_v_V, __Pyx_memviewslice __pyx_v_H1, __Pyx_memviewslice __pyx_v_H2) { - long __pyx_v_num_users; - long __pyx_v_num_items; - long __pyx_v_num_aspects; - int __pyx_v_num_explicit_factors; - int __pyx_v_num_latent_factors; - double __pyx_v_lambda_x; - double __pyx_v_lambda_y; - double __pyx_v_lambda_u; - double __pyx_v_lambda_h; - double __pyx_v_lambda_v; - double __pyx_v_prediction; - double __pyx_v_score; - double __pyx_v_loss; - PyArrayObject *__pyx_v_U1_numerator = 0; - PyArrayObject *__pyx_v_U1_denominator = 0; - PyArrayObject *__pyx_v_U2_numerator = 0; - PyArrayObject *__pyx_v_U2_denominator = 0; - PyArrayObject *__pyx_v_V_numerator = 0; - PyArrayObject *__pyx_v_V_denominator = 0; - PyArrayObject *__pyx_v_H1_numerator = 0; - PyArrayObject *__pyx_v_H1_denominator = 0; - PyArrayObject *__pyx_v_H2_numerator = 0; - PyArrayObject *__pyx_v_H2_denominator = 0; - int __pyx_v_i; - int __pyx_v_j; - int __pyx_v_k; - int __pyx_v_idx; - double __pyx_v_eps; - PyObject *__pyx_v_t = NULL; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_denominator; - __Pyx_Buffer __pyx_pybuffer_H1_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_numerator; - __Pyx_Buffer __pyx_pybuffer_H1_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_denominator; - __Pyx_Buffer __pyx_pybuffer_H2_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_numerator; - __Pyx_Buffer __pyx_pybuffer_H2_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_denominator; - __Pyx_Buffer __pyx_pybuffer_U1_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_numerator; - __Pyx_Buffer __pyx_pybuffer_U1_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_denominator; - __Pyx_Buffer __pyx_pybuffer_U2_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_numerator; - __Pyx_Buffer __pyx_pybuffer_U2_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_V_denominator; - __Pyx_Buffer __pyx_pybuffer_V_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_V_numerator; - __Pyx_Buffer __pyx_pybuffer_V_numerator; +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - long __pyx_t_3; - int __pyx_t_4; - double __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyArrayObject *__pyx_t_9 = NULL; - PyArrayObject *__pyx_t_10 = NULL; - PyArrayObject *__pyx_t_11 = NULL; - PyArrayObject *__pyx_t_12 = NULL; - PyArrayObject *__pyx_t_13 = NULL; - PyArrayObject *__pyx_t_14 = NULL; - PyArrayObject *__pyx_t_15 = NULL; - PyArrayObject *__pyx_t_16 = NULL; - PyArrayObject *__pyx_t_17 = NULL; - PyArrayObject *__pyx_t_18 = NULL; - Py_ssize_t __pyx_t_19; - PyObject *(*__pyx_t_20)(PyObject *); - Py_ssize_t __pyx_t_21; - Py_ssize_t __pyx_t_22; - Py_ssize_t __pyx_t_23; - Py_ssize_t __pyx_t_24; - Py_ssize_t __pyx_t_25; - Py_ssize_t __pyx_t_26; - Py_ssize_t __pyx_t_27; - Py_ssize_t __pyx_t_28; - Py_ssize_t __pyx_t_29; - Py_ssize_t __pyx_t_30; - Py_ssize_t __pyx_t_31; - int __pyx_t_32; - int __pyx_t_33; - long __pyx_t_34; - long __pyx_t_35; - __pyx_t_5numpy_float32_t __pyx_t_36; - __pyx_t_5numpy_float32_t __pyx_t_37; - int __pyx_t_38; - Py_UCS4 __pyx_t_39; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_fuse_1_0_fit_efm", 0); - __pyx_pybuffer_U1_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_U1_numerator.refcount = 0; - __pyx_pybuffernd_U1_numerator.data = NULL; - __pyx_pybuffernd_U1_numerator.rcbuffer = &__pyx_pybuffer_U1_numerator; - __pyx_pybuffer_U1_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_U1_denominator.refcount = 0; - __pyx_pybuffernd_U1_denominator.data = NULL; - __pyx_pybuffernd_U1_denominator.rcbuffer = &__pyx_pybuffer_U1_denominator; - __pyx_pybuffer_U2_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_U2_numerator.refcount = 0; - __pyx_pybuffernd_U2_numerator.data = NULL; - __pyx_pybuffernd_U2_numerator.rcbuffer = &__pyx_pybuffer_U2_numerator; - __pyx_pybuffer_U2_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_U2_denominator.refcount = 0; - __pyx_pybuffernd_U2_denominator.data = NULL; - __pyx_pybuffernd_U2_denominator.rcbuffer = &__pyx_pybuffer_U2_denominator; - __pyx_pybuffer_V_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_V_numerator.refcount = 0; - __pyx_pybuffernd_V_numerator.data = NULL; - __pyx_pybuffernd_V_numerator.rcbuffer = &__pyx_pybuffer_V_numerator; - __pyx_pybuffer_V_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_V_denominator.refcount = 0; - __pyx_pybuffernd_V_denominator.data = NULL; - __pyx_pybuffernd_V_denominator.rcbuffer = &__pyx_pybuffer_V_denominator; - __pyx_pybuffer_H1_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_H1_numerator.refcount = 0; - __pyx_pybuffernd_H1_numerator.data = NULL; - __pyx_pybuffernd_H1_numerator.rcbuffer = &__pyx_pybuffer_H1_numerator; - __pyx_pybuffer_H1_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_H1_denominator.refcount = 0; - __pyx_pybuffernd_H1_denominator.data = NULL; - __pyx_pybuffernd_H1_denominator.rcbuffer = &__pyx_pybuffer_H1_denominator; - __pyx_pybuffer_H2_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_H2_numerator.refcount = 0; - __pyx_pybuffernd_H2_numerator.data = NULL; - __pyx_pybuffernd_H2_numerator.rcbuffer = &__pyx_pybuffer_H2_numerator; - __pyx_pybuffer_H2_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_H2_denominator.refcount = 0; - __pyx_pybuffernd_H2_denominator.data = NULL; - __pyx_pybuffernd_H2_denominator.rcbuffer = &__pyx_pybuffer_H2_denominator; + __Pyx_RefNannySetupContext("__get__", 0); - /* "cornac/models/efm/recom_efm.pyx":238 - * """ - * cdef: - * long num_users = self.train_set.num_users # <<<<<<<<<<<<<< - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects + /* "View.MemoryView":588 + * @property + * def ndim(self): + * return self.view.ndim # <<<<<<<<<<<<<< + * + * @property */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 588, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_num_users = __pyx_t_3; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":239 - * cdef: - * long num_users = self.train_set.num_users - * long num_items = self.train_set.num_items # <<<<<<<<<<<<<< - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors + /* "View.MemoryView":586 + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + * + * @property # <<<<<<<<<<<<<< + * def ndim(self): + * return self.view.ndim */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_items = __pyx_t_3; - /* "cornac/models/efm/recom_efm.pyx":240 - * long num_users = self.train_set.num_users - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< - * int num_explicit_factors = self.num_explicit_factors - * int num_latent_factors = self.num_latent_factors + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":590 + * return self.view.ndim + * + * @property # <<<<<<<<<<<<<< + * def itemsize(self): + * return self.view.itemsize */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_aspects = __pyx_t_3; - /* "cornac/models/efm/recom_efm.pyx":241 - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors # <<<<<<<<<<<<<< - * int num_latent_factors = self.num_latent_factors +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":592 + * @property + * def itemsize(self): + * return self.view.itemsize # <<<<<<<<<<<<<< * + * @property */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_explicit_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 592, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 241, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_explicit_factors = __pyx_t_4; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":242 - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors - * int num_latent_factors = self.num_latent_factors # <<<<<<<<<<<<<< + /* "View.MemoryView":590 + * return self.view.ndim * - * floating lambda_x = self.lambda_x + * @property # <<<<<<<<<<<<<< + * def itemsize(self): + * return self.view.itemsize */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_latent_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 242, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_latent_factors = __pyx_t_4; - /* "cornac/models/efm/recom_efm.pyx":244 - * int num_latent_factors = self.num_latent_factors + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.itemsize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":594 + * return self.view.itemsize * - * floating lambda_x = self.lambda_x # <<<<<<<<<<<<<< - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u + * @property # <<<<<<<<<<<<<< + * def nbytes(self): + * return self.size * self.view.itemsize */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_x = __pyx_t_5; - /* "cornac/models/efm/recom_efm.pyx":245 +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":596 + * @property + * def nbytes(self): + * return self.size * self.view.itemsize # <<<<<<<<<<<<<< * - * floating lambda_x = self.lambda_x - * floating lambda_y = self.lambda_y # <<<<<<<<<<<<<< - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h + * @property */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 245, __pyx_L1_error) + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 596, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 596, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_y = __pyx_t_5; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":246 - * floating lambda_x = self.lambda_x - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u # <<<<<<<<<<<<<< - * floating lambda_h = self.lambda_h - * floating lambda_v = self.lambda_v + /* "View.MemoryView":594 + * return self.view.itemsize + * + * @property # <<<<<<<<<<<<<< + * def nbytes(self): + * return self.size * self.view.itemsize */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_u); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_u = __pyx_t_5; - /* "cornac/models/efm/recom_efm.pyx":247 - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h # <<<<<<<<<<<<<< - * floating lambda_v = self.lambda_v + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":598 + * return self.size * self.view.itemsize * + * @property # <<<<<<<<<<<<<< + * def size(self): + * if self._size is None: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_h); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_h = __pyx_t_5; - /* "cornac/models/efm/recom_efm.pyx":248 - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h - * floating lambda_v = self.lambda_v # <<<<<<<<<<<<<< +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_v_length = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":600 + * @property + * def size(self): + * if self._size is None: # <<<<<<<<<<<<<< + * result = 1 * - * floating prediction, score, loss */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_v); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 248, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 248, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_v = __pyx_t_5; + __pyx_t_1 = (__pyx_v_self->_size == Py_None); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":252 - * floating prediction, score, loss + /* "View.MemoryView":601 + * def size(self): + * if self._size is None: + * result = 1 # <<<<<<<<<<<<<< * - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * for length in self.view.shape[:self.view.ndim]: */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 252, __pyx_L1_error) - __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 252, __pyx_L1_error) - } else {__pyx_pybuffernd_U1_numerator.diminfo[0].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_numerator.diminfo[0].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_numerator.diminfo[1].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_numerator.diminfo[1].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_9 = 0; - __pyx_v_U1_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; + __Pyx_INCREF(__pyx_int_1); + __pyx_v_result = __pyx_int_1; + + /* "View.MemoryView":603 + * result = 1 + * + * for length in self.view.shape[:self.view.ndim]: # <<<<<<<<<<<<<< + * result *= length + * + */ + __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); + for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_t_5 = PyInt_FromSsize_t((__pyx_t_2[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 603, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_5); + __pyx_t_5 = 0; - /* "cornac/models/efm/recom_efm.pyx":253 + /* "View.MemoryView":604 * - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * for length in self.view.shape[:self.view.ndim]: + * result *= length # <<<<<<<<<<<<<< + * + * self._size = result */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 253, __pyx_L1_error) - __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 253, __pyx_L1_error) - } else {__pyx_pybuffernd_U1_denominator.diminfo[0].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_denominator.diminfo[0].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_denominator.diminfo[1].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_denominator.diminfo[1].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[1]; + __pyx_t_5 = PyNumber_InPlaceMultiply(__pyx_v_result, __pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 604, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_5); + __pyx_t_5 = 0; } - } - __pyx_t_10 = 0; - __pyx_v_U1_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":254 - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + /* "View.MemoryView":606 + * result *= length + * + * self._size = result # <<<<<<<<<<<<<< + * + * return self._size */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 254, __pyx_L1_error) - __pyx_t_11 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 254, __pyx_L1_error) - } else {__pyx_pybuffernd_U2_numerator.diminfo[0].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_numerator.diminfo[0].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_numerator.diminfo[1].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_numerator.diminfo[1].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_11 = 0; - __pyx_v_U2_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; + __Pyx_INCREF(__pyx_v_result); + __Pyx_GIVEREF(__pyx_v_result); + __Pyx_GOTREF(__pyx_v_self->_size); + __Pyx_DECREF(__pyx_v_self->_size); + __pyx_v_self->_size = __pyx_v_result; - /* "cornac/models/efm/recom_efm.pyx":255 - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + /* "View.MemoryView":600 + * @property + * def size(self): + * if self._size is None: # <<<<<<<<<<<<<< + * result = 1 + * */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 255, __pyx_L1_error) - __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 255, __pyx_L1_error) - } else {__pyx_pybuffernd_U2_denominator.diminfo[0].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_denominator.diminfo[0].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_denominator.diminfo[1].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_denominator.diminfo[1].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[1]; - } } - __pyx_t_12 = 0; - __pyx_v_U2_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":256 - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + /* "View.MemoryView":608 + * self._size = result + * + * return self._size # <<<<<<<<<<<<<< + * + * def __len__(self): */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 256, __pyx_L1_error) - __pyx_t_13 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_V_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 256, __pyx_L1_error) - } else {__pyx_pybuffernd_V_numerator.diminfo[0].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_numerator.diminfo[0].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_numerator.diminfo[1].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_numerator.diminfo[1].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_13 = 0; - __pyx_v_V_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->_size); + __pyx_r = __pyx_v_self->_size; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":257 - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + /* "View.MemoryView":598 + * return self.size * self.view.itemsize + * + * @property # <<<<<<<<<<<<<< + * def size(self): + * if self._size is None: */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 257, __pyx_L1_error) - __pyx_t_14 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_V_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 257, __pyx_L1_error) - } else {__pyx_pybuffernd_V_denominator.diminfo[0].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_denominator.diminfo[0].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_denominator.diminfo[1].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_denominator.diminfo[1].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_14 = 0; - __pyx_v_V_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":258 - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_length); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":610 + * return self._size + * + * def __len__(self): # <<<<<<<<<<<<<< + * if self.view.ndim >= 1: + * return self.view.shape[0] */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 258, __pyx_L1_error) - __pyx_t_15 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 258, __pyx_L1_error) - } else {__pyx_pybuffernd_H1_numerator.diminfo[0].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_numerator.diminfo[0].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_numerator.diminfo[1].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_numerator.diminfo[1].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_15 = 0; - __pyx_v_H1_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; - /* "cornac/models/efm/recom_efm.pyx":259 - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) +/* Python wrapper */ +static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__len__", 0); + + /* "View.MemoryView":611 + * + * def __len__(self): + * if self.view.ndim >= 1: # <<<<<<<<<<<<<< + * return self.view.shape[0] + * + */ + __pyx_t_1 = (__pyx_v_self->view.ndim >= 1); + if (__pyx_t_1) { + + /* "View.MemoryView":612 + * def __len__(self): + * if self.view.ndim >= 1: + * return self.view.shape[0] # <<<<<<<<<<<<<< + * + * return 0 + */ + __pyx_r = (__pyx_v_self->view.shape[0]); + goto __pyx_L0; + + /* "View.MemoryView":611 + * + * def __len__(self): + * if self.view.ndim >= 1: # <<<<<<<<<<<<<< + * return self.view.shape[0] + * */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 259, __pyx_L1_error) - __pyx_t_16 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 259, __pyx_L1_error) - } else {__pyx_pybuffernd_H1_denominator.diminfo[0].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_denominator.diminfo[0].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_denominator.diminfo[1].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_denominator.diminfo[1].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[1]; - } } - __pyx_t_16 = 0; - __pyx_v_H1_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":260 - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * int i, j, k, idx + /* "View.MemoryView":614 + * return self.view.shape[0] + * + * return 0 # <<<<<<<<<<<<<< + * + * def __repr__(self): + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":610 + * return self._size + * + * def __len__(self): # <<<<<<<<<<<<<< + * if self.view.ndim >= 1: + * return self.view.shape[0] + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":616 + * return 0 + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__, + * id(self)) + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "View.MemoryView":617 + * + * def __repr__(self): + * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< + * id(self)) + * */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 617, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 617, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 617, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 260, __pyx_L1_error) - __pyx_t_17 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 260, __pyx_L1_error) - } else {__pyx_pybuffernd_H2_numerator.diminfo[0].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_numerator.diminfo[0].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_numerator.diminfo[1].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_numerator.diminfo[1].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_17 = 0; - __pyx_v_H2_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; - /* "cornac/models/efm/recom_efm.pyx":261 - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * int i, j, k, idx - * long n_ratings + /* "View.MemoryView":618 + * def __repr__(self): + * return "" % (self.base.__class__.__name__, + * id(self)) # <<<<<<<<<<<<<< + * + * def __str__(self): */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 618, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); + + /* "View.MemoryView":617 + * + * def __repr__(self): + * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< + * id(self)) + * + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 617, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); + __pyx_t_1 = 0; __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 617, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 261, __pyx_L1_error) - __pyx_t_18 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 261, __pyx_L1_error) - } else {__pyx_pybuffernd_H2_denominator.diminfo[0].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_denominator.diminfo[0].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_denominator.diminfo[1].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_denominator.diminfo[1].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_18 = 0; - __pyx_v_H2_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":265 - * long n_ratings + /* "View.MemoryView":616 + * return 0 * - * floating eps = 1e-9 # <<<<<<<<<<<<<< + * def __repr__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__, + * id(self)) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":620 + * id(self)) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__,) * - * for t in range(1, self.max_iter + 1): */ - __pyx_v_eps = 1e-9; - /* "cornac/models/efm/recom_efm.pyx":267 - * floating eps = 1e-9 +/* Python wrapper */ +static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__str__", 0); + + /* "View.MemoryView":621 + * + * def __str__(self): + * return "" % (self.base.__class__.__name__,) # <<<<<<<<<<<<<< + * * - * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< - * loss = 0. - * U1_numerator.fill(0) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_max_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 621, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 621, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 621, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_int_1); - __Pyx_GIVEREF(__pyx_int_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 621, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_19 = 0; - __pyx_t_20 = NULL; - } else { - __pyx_t_19 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_20 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 267, __pyx_L1_error) - } + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_object, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 621, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (likely(!__pyx_t_20)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 267, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } else { - if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 267, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } - } else { - __pyx_t_2 = __pyx_t_20(__pyx_t_1); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 267, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2); - __pyx_t_2 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":268 + /* "View.MemoryView":620 + * id(self)) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__,) * - * for t in range(1, self.max_iter + 1): - * loss = 0. # <<<<<<<<<<<<<< - * U1_numerator.fill(0) - * U1_denominator.fill(0) - */ - __pyx_v_loss = 0.; - - /* "cornac/models/efm/recom_efm.pyx":269 - * for t in range(1, self.max_iter + 1): - * loss = 0. - * U1_numerator.fill(0) # <<<<<<<<<<<<<< - * U1_denominator.fill(0) - * U2_numerator.fill(0) - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 269, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "cornac/models/efm/recom_efm.pyx":270 - * loss = 0. - * U1_numerator.fill(0) - * U1_denominator.fill(0) # <<<<<<<<<<<<<< - * U2_numerator.fill(0) - * U2_denominator.fill(0) - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "cornac/models/efm/recom_efm.pyx":271 - * U1_numerator.fill(0) - * U1_denominator.fill(0) - * U2_numerator.fill(0) # <<<<<<<<<<<<<< - * U2_denominator.fill(0) - * V_numerator.fill(0) - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "cornac/models/efm/recom_efm.pyx":272 - * U1_denominator.fill(0) - * U2_numerator.fill(0) - * U2_denominator.fill(0) # <<<<<<<<<<<<<< - * V_numerator.fill(0) - * V_denominator.fill(0) */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 272, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":273 - * U2_numerator.fill(0) - * U2_denominator.fill(0) - * V_numerator.fill(0) # <<<<<<<<<<<<<< - * V_denominator.fill(0) - * H1_numerator.fill(0) - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/efm/recom_efm.pyx":274 - * U2_denominator.fill(0) - * V_numerator.fill(0) - * V_denominator.fill(0) # <<<<<<<<<<<<<< - * H1_numerator.fill(0) - * H1_denominator.fill(0) +/* "View.MemoryView":624 + * + * + * def is_c_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 274, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":275 - * V_numerator.fill(0) - * V_denominator.fill(0) - * H1_numerator.fill(0) # <<<<<<<<<<<<<< - * H1_denominator.fill(0) - * H2_numerator.fill(0) - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 275, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 275, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; +/* Python wrapper */ +static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_c_contig (wrapper)", 0); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("is_c_contig", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "is_c_contig", 0))) return NULL; + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); - /* "cornac/models/efm/recom_efm.pyx":276 - * V_denominator.fill(0) - * H1_numerator.fill(0) - * H1_denominator.fill(0) # <<<<<<<<<<<<<< - * H2_numerator.fill(0) - * H2_denominator.fill(0) - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/efm/recom_efm.pyx":277 - * H1_numerator.fill(0) - * H1_denominator.fill(0) - * H2_numerator.fill(0) # <<<<<<<<<<<<<< - * H2_denominator.fill(0) +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice *__pyx_v_mslice; + __Pyx_memviewslice __pyx_v_tmp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_c_contig", 0); + + /* "View.MemoryView":627 + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< + * return slice_is_contig(mslice[0], 'C', self.view.ndim) * */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 277, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 627, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":278 - * H1_denominator.fill(0) - * H2_numerator.fill(0) - * H2_denominator.fill(0) # <<<<<<<<<<<<<< + /* "View.MemoryView":628 + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) + * return slice_is_contig(mslice[0], 'C', self.view.ndim) # <<<<<<<<<<<<<< * - * with nogil, parallel(num_threads=num_threads): + * def is_f_contig(self): */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 628, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":280 - * H2_denominator.fill(0) + /* "View.MemoryView":624 * - * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): + * + * def is_c_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp */ - { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); - #endif - /*try:*/ { - { - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) - #endif - #ifdef _OPENMP - #pragma omp parallel reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) private(__pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_3, __pyx_t_30, __pyx_t_31, __pyx_t_32, __pyx_t_33, __pyx_t_34, __pyx_t_35, __pyx_t_36, __pyx_t_37, __pyx_t_4) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_num_threads) - #endif /* _OPENMP */ - { - #ifdef _OPENMP - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - Py_BEGIN_ALLOW_THREADS - #endif /* _OPENMP */ - /* "cornac/models/efm/recom_efm.pyx":282 - * with nogil, parallel(num_threads=num_threads): - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): # <<<<<<<<<<<<<< - * i = A_uids[idx] - * j = A_iids[idx] - */ - if (unlikely(!__pyx_v_A.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("A"); __PYX_ERR(0, 282, __pyx_L12_error) } - __pyx_t_21 = (__pyx_v_A.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_23 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((double)__PYX_NAN()); - __pyx_v_score = ((double)__PYX_NAN()); + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/efm/recom_efm.pyx":283 - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): - * i = A_uids[idx] # <<<<<<<<<<<<<< - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ +/* "View.MemoryView":630 + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + * def is_f_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_i = (*((short *) ( /* dim=0 */ (__pyx_v_A_uids.data + __pyx_t_24 * __pyx_v_A_uids.strides[0]) ))); - /* "cornac/models/efm/recom_efm.pyx":284 - * for idx in prange(A.shape[0]): - * i = A_uids[idx] - * j = A_iids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_j = (*((short *) ( /* dim=0 */ (__pyx_v_A_iids.data + __pyx_t_24 * __pyx_v_A_iids.strides[0]) ))); +/* Python wrapper */ +static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_f_contig (wrapper)", 0); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("is_f_contig", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "is_f_contig", 0))) return NULL; + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); - /* "cornac/models/efm/recom_efm.pyx":285 - * i = A_uids[idx] - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ # <<<<<<<<<<<<<< - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] - */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = 0; - __pyx_t_26 = __pyx_v_j; - __pyx_t_27 = 0; + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/efm/recom_efm.pyx":286 - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) # <<<<<<<<<<<<<< - * score = A[idx] - * loss += (prediction - score) * (prediction - score) +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice *__pyx_v_mslice; + __Pyx_memviewslice __pyx_v_tmp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_f_contig", 0); + + /* "View.MemoryView":633 + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = 0; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = 0; - __pyx_v_prediction = (__pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) )))), 1) + __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_latent_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_28 * __pyx_v_H1.strides[0]) ) + __pyx_t_29 * __pyx_v_H1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_31 * __pyx_v_H2.strides[1]) )))), 1)); + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 633, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":287 - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): + /* "View.MemoryView":634 + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) + * return slice_is_contig(mslice[0], 'F', self.view.ndim) # <<<<<<<<<<<<<< + * + * def copy(self): */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_A.data + __pyx_t_31 * __pyx_v_A.strides[0]) ))); + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 634, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":288 - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] + /* "View.MemoryView":630 + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + * def is_f_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - /* "cornac/models/efm/recom_efm.pyx":289 - * score = A[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":636 + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + * def copy(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; - /* "cornac/models/efm/recom_efm.pyx":290 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] # <<<<<<<<<<<<<< - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] +/* Python wrapper */ +static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("copy (wrapper)", 0); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("copy", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "copy", 0))) return NULL; + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice __pyx_v_mslice; + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("copy", 0); + + /* "View.MemoryView":638 + * def copy(self): + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS # <<<<<<<<<<<<<< + * + * slice_copy(self, &mslice) */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_31 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))); + __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_F_CONTIGUOUS)); - /* "cornac/models/efm/recom_efm.pyx":291 - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] # <<<<<<<<<<<<<< - * U2_numerator[j, k] += score * U1[i, k] - * U2_denominator[j, k] += prediction * U1[i, k] + /* "View.MemoryView":640 + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + * + * slice_copy(self, &mslice) # <<<<<<<<<<<<<< + * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, + * self.view.itemsize, */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_31 * __pyx_v_U2.strides[1]) )))); + __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_mslice)); - /* "cornac/models/efm/recom_efm.pyx":292 - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] # <<<<<<<<<<<<<< - * U2_denominator[j, k] += prediction * U1[i, k] + /* "View.MemoryView":641 * + * slice_copy(self, &mslice) + * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, # <<<<<<<<<<<<<< + * self.view.itemsize, + * flags|PyBUF_C_CONTIGUOUS, */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))); + __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_mslice), ((char *)"c"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_C_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 641, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":293 - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] - * U2_denominator[j, k] += prediction * U1[i, k] # <<<<<<<<<<<<<< + /* "View.MemoryView":646 + * self.dtype_is_object) * - * for k in range(num_latent_factors): + * return memoryview_copy_from_slice(self, &mslice) # <<<<<<<<<<<<<< + * + * def copy_fortran(self): */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )))); - } + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_mslice)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 646, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":295 - * U2_denominator[j, k] += prediction * U1[i, k] + /* "View.MemoryView":636 + * return slice_is_contig(mslice[0], 'F', self.view.ndim) * - * for k in range(num_latent_factors): # <<<<<<<<<<<<<< - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] + * def copy(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; - /* "cornac/models/efm/recom_efm.pyx":296 + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":648 + * return memoryview_copy_from_slice(self, &mslice) * - * for k in range(num_latent_factors): - * H1_numerator[i, k] += score * H2[j, k] # <<<<<<<<<<<<<< - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] + * def copy_fortran(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_31 * __pyx_v_H2.strides[0]) ) + __pyx_t_30 * __pyx_v_H2.strides[1]) )))); - /* "cornac/models/efm/recom_efm.pyx":297 - * for k in range(num_latent_factors): - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] # <<<<<<<<<<<<<< - * H2_numerator[j, k] += score * H1[i, k] - * H2_denominator[j, k] += prediction * H1[i, k] +/* Python wrapper */ +static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("copy_fortran (wrapper)", 0); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("copy_fortran", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "copy_fortran", 0))) return NULL; + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice __pyx_v_src; + __Pyx_memviewslice __pyx_v_dst; + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("copy_fortran", 0); + + /* "View.MemoryView":650 + * def copy_fortran(self): + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS # <<<<<<<<<<<<<< + * + * slice_copy(self, &src) */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_31 * __pyx_v_H2.strides[1]) )))); + __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_C_CONTIGUOUS)); - /* "cornac/models/efm/recom_efm.pyx":298 - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] # <<<<<<<<<<<<<< - * H2_denominator[j, k] += prediction * H1[i, k] + /* "View.MemoryView":652 + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS * + * slice_copy(self, &src) # <<<<<<<<<<<<<< + * dst = slice_copy_contig(&src, "fortran", self.view.ndim, + * self.view.itemsize, */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_31 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))); + __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_src)); - /* "cornac/models/efm/recom_efm.pyx":299 - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] - * H2_denominator[j, k] += prediction * H1[i, k] # <<<<<<<<<<<<<< + /* "View.MemoryView":653 * - * for idx in prange(X.shape[0]): + * slice_copy(self, &src) + * dst = slice_copy_contig(&src, "fortran", self.view.ndim, # <<<<<<<<<<<<<< + * self.view.itemsize, + * flags|PyBUF_F_CONTIGUOUS, */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_30 * __pyx_v_H1.strides[0]) ) + __pyx_t_31 * __pyx_v_H1.strides[1]) )))); - } - } - } - } - } + __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_src), ((char *)"fortran"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_F_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 653, __pyx_L1_error) + __pyx_v_dst = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":301 - * H2_denominator[j, k] += prediction * H1[i, k] + /* "View.MemoryView":658 + * self.dtype_is_object) + * + * return memoryview_copy_from_slice(self, &dst) # <<<<<<<<<<<<<< + * * - * for idx in prange(X.shape[0]): # <<<<<<<<<<<<<< - * i = X_uids[idx] - * j = X_aids[idx] */ - if (unlikely(!__pyx_v_X.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("X"); __PYX_ERR(0, 301, __pyx_L12_error) } - __pyx_t_23 = (__pyx_v_X.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_21 = (__pyx_t_23 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_21 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((double)__PYX_NAN()); - __pyx_v_score = ((double)__PYX_NAN()); + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_dst)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":302 + /* "View.MemoryView":648 + * return memoryview_copy_from_slice(self, &mslice) * - * for idx in prange(X.shape[0]): - * i = X_uids[idx] # <<<<<<<<<<<<<< - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * def copy_fortran(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; + __pyx_r = __pyx_pf___pyx_memoryview___reduce_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_i = (*((short *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_31 * __pyx_v_X_uids.strides[0]) ))); + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0); + __PYX_ERR(1, 2, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":303 - * for idx in prange(X.shape[0]): - * i = X_uids[idx] - * j = X_aids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_j = (*((short *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_31 * __pyx_v_X_aids.strides[0]) ))); - /* "cornac/models/efm/recom_efm.pyx":304 - * i = X_uids[idx] - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< - * score = X[idx] - * loss += (prediction - score) * (prediction - score) - */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = 0; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = 0; - __pyx_v_prediction = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) )))), 1); + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/efm/recom_efm.pyx":305 - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_28 * __pyx_v_X.strides[0]) ))); - /* "cornac/models/efm/recom_efm.pyx":306 - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] - */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + PyObject* values[1] = {0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf___pyx_memoryview_2__setstate_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v___pyx_state); - /* "cornac/models/efm/recom_efm.pyx":307 - * score = X[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/efm/recom_efm.pyx":308 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] # <<<<<<<<<<<<<< - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] +static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<< */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_28 * __pyx_v_U1.strides[0]) ) + __pyx_t_29 * __pyx_v_U1.strides[1]) )))); + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0); + __PYX_ERR(1, 4, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":309 - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] # <<<<<<<<<<<<<< - * U1_numerator[i, k] += lambda_x * score * V[j, k] - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_29 * __pyx_v_U1.strides[0]) ) + __pyx_t_28 * __pyx_v_U1.strides[1]) )))); - /* "cornac/models/efm/recom_efm.pyx":310 - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] # <<<<<<<<<<<<<< - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":662 * + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo */ - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_28 * __pyx_v_V.strides[0]) ) + __pyx_t_29 * __pyx_v_V.strides[1]) )))); - /* "cornac/models/efm/recom_efm.pyx":311 - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] # <<<<<<<<<<<<<< - * - * for idx in prange(Y.shape[0]): +static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_flags, int __pyx_v_dtype_is_object, __Pyx_TypeInfo *__pyx_v_typeinfo) { + struct __pyx_memoryview_obj *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_cwrapper", 0); + + /* "View.MemoryView":663 + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): + * cdef memoryview result = memoryview(o, flags, dtype_is_object) # <<<<<<<<<<<<<< + * result.typeinfo = typeinfo + * return result */ - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) )))); - } - } - } - } - } + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 663, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 663, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 663, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_o); + __Pyx_GIVEREF(__pyx_v_o); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_o); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 663, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_memoryview_obj *)__pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":313 - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] + /* "View.MemoryView":664 + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo # <<<<<<<<<<<<<< + * return result * - * for idx in prange(Y.shape[0]): # <<<<<<<<<<<<<< - * i = Y_iids[idx] - * j = Y_aids[idx] */ - if (unlikely(!__pyx_v_Y.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("Y"); __PYX_ERR(0, 313, __pyx_L12_error) } - __pyx_t_21 = (__pyx_v_Y.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_23 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((double)__PYX_NAN()); - __pyx_v_score = ((double)__PYX_NAN()); + __pyx_v_result->typeinfo = __pyx_v_typeinfo; - /* "cornac/models/efm/recom_efm.pyx":314 + /* "View.MemoryView":665 + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + * return result # <<<<<<<<<<<<<< * - * for idx in prange(Y.shape[0]): - * i = Y_iids[idx] # <<<<<<<<<<<<<< - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * @cname('__pyx_memoryview_check') */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_i = (*((short *) ( /* dim=0 */ (__pyx_v_Y_iids.data + __pyx_t_28 * __pyx_v_Y_iids.strides[0]) ))); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_result); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":315 - * for idx in prange(Y.shape[0]): - * i = Y_iids[idx] - * j = Y_aids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] + /* "View.MemoryView":662 + * + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_j = (*((short *) ( /* dim=0 */ (__pyx_v_Y_aids.data + __pyx_t_28 * __pyx_v_Y_aids.strides[0]) ))); - /* "cornac/models/efm/recom_efm.pyx":316 - * i = Y_iids[idx] - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) - */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = 0; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = 0; - __pyx_v_prediction = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_28 * __pyx_v_U2.strides[0]) ) + __pyx_t_29 * __pyx_v_U2.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))), 1); + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/efm/recom_efm.pyx":317 - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): +/* "View.MemoryView":668 + * + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o) noexcept: # <<<<<<<<<<<<<< + * return isinstance(o, memoryview) + * */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_Y.data + __pyx_t_31 * __pyx_v_Y.strides[0]) ))); - /* "cornac/models/efm/recom_efm.pyx":318 - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] - */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); +static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("memoryview_check", 0); - /* "cornac/models/efm/recom_efm.pyx":319 - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + /* "View.MemoryView":669 + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o) noexcept: + * return isinstance(o, memoryview) # <<<<<<<<<<<<<< + * + * cdef tuple _unellipsify(object index, int ndim): */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; + __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_o, __pyx_memoryview_type); + __pyx_r = __pyx_t_1; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":320 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] # <<<<<<<<<<<<<< - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] + /* "View.MemoryView":668 + * + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o) noexcept: # <<<<<<<<<<<<<< + * return isinstance(o, memoryview) + * */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_31 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))); - /* "cornac/models/efm/recom_efm.pyx":321 - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] # <<<<<<<<<<<<<< - * U2_numerator[i, k] += lambda_y * score * V[j, k] - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] - */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_31 * __pyx_v_U2.strides[1]) )))); + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/efm/recom_efm.pyx":322 - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] # <<<<<<<<<<<<<< - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] +/* "View.MemoryView":671 + * return isinstance(o, memoryview) * + * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< + * """ + * Replace all ellipses with full slices and fill incomplete indices with */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )))); - /* "cornac/models/efm/recom_efm.pyx":323 - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] # <<<<<<<<<<<<<< +static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_idx; + PyObject *__pyx_v_tup = NULL; + PyObject *__pyx_v_result = NULL; + int __pyx_v_have_slices; + int __pyx_v_seen_ellipsis; + PyObject *__pyx_v_item = NULL; + Py_ssize_t __pyx_v_nslices; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_UCS4 __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_unellipsify", 0); + + /* "View.MemoryView":677 + * """ + * cdef Py_ssize_t idx + * tup = index if isinstance(index, tuple) else (index,) # <<<<<<<<<<<<<< * - * # update V + * result = [slice(None)] * ndim */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))); - } - } - } - } - } + __pyx_t_2 = PyTuple_Check(__pyx_v_index); + if (__pyx_t_2) { + __Pyx_INCREF(((PyObject*)__pyx_v_index)); + __pyx_t_1 = __pyx_v_index; + } else { + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 677, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_index); + __Pyx_GIVEREF(__pyx_v_index); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_index); + __pyx_t_1 = __pyx_t_3; + __pyx_t_3 = 0; + } + __pyx_v_tup = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":326 + /* "View.MemoryView":679 + * tup = index if isinstance(index, tuple) else (index,) * - * # update V - * for i in prange(num_aspects): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] + * result = [slice(None)] * ndim # <<<<<<<<<<<<<< + * have_slices = False + * seen_ellipsis = False */ - __pyx_t_3 = __pyx_v_num_aspects; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - double __pyx_parallel_temp2 = ((double)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_35 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_35 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_35; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + __pyx_t_1 = PyList_New(1 * ((__pyx_v_ndim<0) ? 0:__pyx_v_ndim)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + { Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < __pyx_v_ndim; __pyx_temp++) { + __Pyx_INCREF(__pyx_slice__5); + __Pyx_GIVEREF(__pyx_slice__5); + PyList_SET_ITEM(__pyx_t_1, __pyx_temp, __pyx_slice__5); + } + } + __pyx_v_result = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":327 - * # update V - * for i in prange(num_aspects): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + /* "View.MemoryView":680 + * + * result = [slice(None)] * ndim + * have_slices = False # <<<<<<<<<<<<<< + * seen_ellipsis = False + * idx = 0 */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + __pyx_v_have_slices = 0; - /* "cornac/models/efm/recom_efm.pyx":328 - * for i in prange(num_aspects): - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] # <<<<<<<<<<<<<< - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) + /* "View.MemoryView":681 + * result = [slice(None)] * ndim + * have_slices = False + * seen_ellipsis = False # <<<<<<<<<<<<<< + * idx = 0 + * for item in tup: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_v * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) ))))); + __pyx_v_seen_ellipsis = 0; - /* "cornac/models/efm/recom_efm.pyx":329 - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps # <<<<<<<<<<<<<< - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) - * + /* "View.MemoryView":682 + * have_slices = False + * seen_ellipsis = False + * idx = 0 # <<<<<<<<<<<<<< + * for item in tup: + * if item is Ellipsis: */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_27 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += (((((*((short *) ( /* dim=0 */ (__pyx_v_X_aspect_counts.data + __pyx_t_28 * __pyx_v_X_aspect_counts.strides[0]) ))) + (*((short *) ( /* dim=0 */ (__pyx_v_Y_aspect_counts.data + __pyx_t_29 * __pyx_v_Y_aspect_counts.strides[0]) )))) * __pyx_v_lambda_v) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))) + __pyx_v_eps); + __pyx_v_idx = 0; - /* "cornac/models/efm/recom_efm.pyx":330 - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) # <<<<<<<<<<<<<< - * - * # update U1, H1 + /* "View.MemoryView":683 + * seen_ellipsis = False + * idx = 0 + * for item in tup: # <<<<<<<<<<<<<< + * if item is Ellipsis: + * if not seen_ellipsis: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_V_numerator.diminfo[1].strides)); - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_V_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 330, __pyx_L42_error) - } - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L47; - __pyx_L42_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L46; - __pyx_L46:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates9) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L47:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } + if (unlikely(__pyx_v_tup == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(1, 683, __pyx_L1_error) + } + __pyx_t_1 = __pyx_v_tup; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0; + for (;;) { + if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(1, 683, __pyx_L1_error) + #else + __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 683, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":684 + * idx = 0 + * for item in tup: + * if item is Ellipsis: # <<<<<<<<<<<<<< + * if not seen_ellipsis: + * idx += ndim - len(tup) + */ + __pyx_t_2 = (__pyx_v_item == __pyx_builtin_Ellipsis); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":333 - * - * # update U1, H1 - * for i in prange(num_users): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] + /* "View.MemoryView":685 + * for item in tup: + * if item is Ellipsis: + * if not seen_ellipsis: # <<<<<<<<<<<<<< + * idx += ndim - len(tup) + * seen_ellipsis = True */ - __pyx_t_35 = __pyx_v_num_users; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - double __pyx_parallel_temp2 = ((double)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_3 = (__pyx_t_35 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_3 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_3; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + __pyx_t_2 = (!__pyx_v_seen_ellipsis); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":334 - * # update U1, H1 - * for i in prange(num_users): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + /* "View.MemoryView":686 + * if item is Ellipsis: + * if not seen_ellipsis: + * idx += ndim - len(tup) # <<<<<<<<<<<<<< + * seen_ellipsis = True + * have_slices = True */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + if (unlikely(__pyx_v_tup == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 686, __pyx_L1_error) + } + __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_tup); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 686, __pyx_L1_error) + __pyx_v_idx = (__pyx_v_idx + (__pyx_v_ndim - __pyx_t_5)); - /* "cornac/models/efm/recom_efm.pyx":335 - * for i in prange(num_users): - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] # <<<<<<<<<<<<<< - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + /* "View.MemoryView":687 + * if not seen_ellipsis: + * idx += ndim - len(tup) + * seen_ellipsis = True # <<<<<<<<<<<<<< + * have_slices = True + * else: */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_29 * __pyx_v_U1.strides[0]) ) + __pyx_t_28 * __pyx_v_U1.strides[1]) ))))); + __pyx_v_seen_ellipsis = 1; - /* "cornac/models/efm/recom_efm.pyx":336 - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps # <<<<<<<<<<<<<< - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): + /* "View.MemoryView":685 + * for item in tup: + * if item is Ellipsis: + * if not seen_ellipsis: # <<<<<<<<<<<<<< + * idx += ndim - len(tup) + * seen_ellipsis = True */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_26 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (((((*((short *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_28 * __pyx_v_A_user_counts.strides[0]) ))) + (*((short *) ( /* dim=0 */ (__pyx_v_X_user_counts.data + __pyx_t_29 * __pyx_v_X_user_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))) + __pyx_v_eps); + } - /* "cornac/models/efm/recom_efm.pyx":337 - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) # <<<<<<<<<<<<<< - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] + /* "View.MemoryView":688 + * idx += ndim - len(tup) + * seen_ellipsis = True + * have_slices = True # <<<<<<<<<<<<<< + * else: + * if isinstance(item, slice): */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_U1_numerator.diminfo[1].strides)); - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U1_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_36 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 337, __pyx_L50_error) - } - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )) *= sqrt((__pyx_t_37 / __pyx_t_36)); - } + __pyx_v_have_slices = 1; - /* "cornac/models/efm/recom_efm.pyx":338 - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): # <<<<<<<<<<<<<< - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + /* "View.MemoryView":684 + * idx = 0 + * for item in tup: + * if item is Ellipsis: # <<<<<<<<<<<<<< + * if not seen_ellipsis: + * idx += ndim - len(tup) */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + goto __pyx_L5; + } - /* "cornac/models/efm/recom_efm.pyx":339 - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] # <<<<<<<<<<<<<< - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) + /* "View.MemoryView":690 + * have_slices = True + * else: + * if isinstance(item, slice): # <<<<<<<<<<<<<< + * have_slices = True + * elif not PyIndex_Check(item): */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_31 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_29 * __pyx_v_H1.strides[0]) ) + __pyx_t_28 * __pyx_v_H1.strides[1]) ))))); + /*else*/ { + __pyx_t_2 = PySlice_Check(__pyx_v_item); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":340 - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps # <<<<<<<<<<<<<< - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) - * + /* "View.MemoryView":691 + * else: + * if isinstance(item, slice): + * have_slices = True # <<<<<<<<<<<<<< + * elif not PyIndex_Check(item): + * raise TypeError, f"Cannot index with type '{type(item)}'" */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += ((((*((short *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_28 * __pyx_v_A_user_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_29 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))) + __pyx_v_eps); + __pyx_v_have_slices = 1; - /* "cornac/models/efm/recom_efm.pyx":341 - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) # <<<<<<<<<<<<<< - * - * # update U2, H2 + /* "View.MemoryView":690 + * have_slices = True + * else: + * if isinstance(item, slice): # <<<<<<<<<<<<<< + * have_slices = True + * elif not PyIndex_Check(item): */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H1_numerator.diminfo[1].strides)); - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_H1_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 341, __pyx_L50_error) - } - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_30 * __pyx_v_H1.strides[0]) ) + __pyx_t_29 * __pyx_v_H1.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L57; - __pyx_L50_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L56; - __pyx_L56:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates10) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L57:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } + goto __pyx_L7; + } - /* "cornac/models/efm/recom_efm.pyx":344 - * - * # update U2, H2 - * for i in prange(num_items): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] + /* "View.MemoryView":692 + * if isinstance(item, slice): + * have_slices = True + * elif not PyIndex_Check(item): # <<<<<<<<<<<<<< + * raise TypeError, f"Cannot index with type '{type(item)}'" + * result[idx] = item + */ + __pyx_t_2 = (!(PyIndex_Check(__pyx_v_item) != 0)); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":693 + * have_slices = True + * elif not PyIndex_Check(item): + * raise TypeError, f"Cannot index with type '{type(item)}'" # <<<<<<<<<<<<<< + * result[idx] = item + * idx += 1 + */ + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 693, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = 0; + __pyx_t_6 = 127; + __Pyx_INCREF(__pyx_kp_u_Cannot_index_with_type); + __pyx_t_5 += 24; + __Pyx_GIVEREF(__pyx_kp_u_Cannot_index_with_type); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Cannot_index_with_type); + __pyx_t_7 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_v_item)), __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 693, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_6; + __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7); + __pyx_t_7 = 0; + __Pyx_INCREF(__pyx_kp_u__6); + __pyx_t_5 += 1; + __Pyx_GIVEREF(__pyx_kp_u__6); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__6); + __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 693, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_t_7, 0, 0); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __PYX_ERR(1, 693, __pyx_L1_error) + + /* "View.MemoryView":692 + * if isinstance(item, slice): + * have_slices = True + * elif not PyIndex_Check(item): # <<<<<<<<<<<<<< + * raise TypeError, f"Cannot index with type '{type(item)}'" + * result[idx] = item */ - __pyx_t_3 = __pyx_v_num_items; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - double __pyx_parallel_temp2 = ((double)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_35 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_35 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_35; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + } + __pyx_L7:; - /* "cornac/models/efm/recom_efm.pyx":345 - * # update U2, H2 - * for i in prange(num_items): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + /* "View.MemoryView":694 + * elif not PyIndex_Check(item): + * raise TypeError, f"Cannot index with type '{type(item)}'" + * result[idx] = item # <<<<<<<<<<<<<< + * idx += 1 + * */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + if (unlikely((__Pyx_SetItemInt(__pyx_v_result, __pyx_v_idx, __pyx_v_item, Py_ssize_t, 1, PyInt_FromSsize_t, 1, 1, 1) < 0))) __PYX_ERR(1, 694, __pyx_L1_error) + } + __pyx_L5:; - /* "cornac/models/efm/recom_efm.pyx":346 - * for i in prange(num_items): - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] # <<<<<<<<<<<<<< - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + /* "View.MemoryView":695 + * raise TypeError, f"Cannot index with type '{type(item)}'" + * result[idx] = item + * idx += 1 # <<<<<<<<<<<<<< + * + * nslices = ndim - idx */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_28 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_29 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_28 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) ))))); + __pyx_v_idx = (__pyx_v_idx + 1); - /* "cornac/models/efm/recom_efm.pyx":347 - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps # <<<<<<<<<<<<<< - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): + /* "View.MemoryView":683 + * seen_ellipsis = False + * idx = 0 + * for item in tup: # <<<<<<<<<<<<<< + * if item is Ellipsis: + * if not seen_ellipsis: */ - __pyx_t_27 = __pyx_v_i; - __pyx_t_28 = __pyx_v_i; - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_31 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (((((*((short *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_27 * __pyx_v_A_item_counts.strides[0]) ))) + (*((short *) ( /* dim=0 */ (__pyx_v_Y_item_counts.data + __pyx_t_28 * __pyx_v_Y_item_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_29 * __pyx_v_U2.strides[1]) )))) + __pyx_v_eps); + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":348 - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) # <<<<<<<<<<<<<< - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] + /* "View.MemoryView":697 + * idx += 1 + * + * nslices = ndim - idx # <<<<<<<<<<<<<< + * return have_slices or nslices, tuple(result) + * */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U2_numerator.diminfo[1].strides)); - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_36 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 348, __pyx_L60_error) - } - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_29 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )) *= sqrt((__pyx_t_37 / __pyx_t_36)); - } + __pyx_v_nslices = (__pyx_v_ndim - __pyx_v_idx); - /* "cornac/models/efm/recom_efm.pyx":349 - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): # <<<<<<<<<<<<<< - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + /* "View.MemoryView":698 + * + * nslices = ndim - idx + * return have_slices or nslices, tuple(result) # <<<<<<<<<<<<<< + * + * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1: */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + __Pyx_XDECREF(__pyx_r); + if (!__pyx_v_have_slices) { + } else { + __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_have_slices); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = __pyx_t_7; + __pyx_t_7 = 0; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_nslices); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = __pyx_t_7; + __pyx_t_7 = 0; + __pyx_L9_bool_binop_done:; + __pyx_t_7 = PyList_AsTuple(__pyx_v_result); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7); + __pyx_t_1 = 0; + __pyx_t_7 = 0; + __pyx_r = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":350 - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] # <<<<<<<<<<<<<< - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + /* "View.MemoryView":671 + * return isinstance(o, memoryview) + * + * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< + * """ + * Replace all ellipses with full slices and fill incomplete indices with */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_29 * __pyx_v_H2.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_28 * __pyx_v_H2.strides[0]) ) + __pyx_t_27 * __pyx_v_H2.strides[1]) ))))); - /* "cornac/models/efm/recom_efm.pyx":351 - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps # <<<<<<<<<<<<<< - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("View.MemoryView._unellipsify", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_tup); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_item); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":700 + * return have_slices or nslices, tuple(result) * + * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1: # <<<<<<<<<<<<<< + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: */ - __pyx_t_27 = __pyx_v_i; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_30 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += ((((*((short *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_27 * __pyx_v_A_item_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_28 * __pyx_v_H2.strides[0]) ) + __pyx_t_29 * __pyx_v_H2.strides[1]) )))) + __pyx_v_eps); - /* "cornac/models/efm/recom_efm.pyx":352 - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) # <<<<<<<<<<<<<< +static int assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_suboffset; + int __pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t *__pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assert_direct_dimensions", 0); + + /* "View.MemoryView":701 * - * if self.verbose: + * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1: + * for suboffset in suboffsets[:ndim]: # <<<<<<<<<<<<<< + * if suboffset >= 0: + * raise ValueError, "Indirect dimensions not supported" */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H2_numerator.diminfo[1].strides)); - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H2_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 352, __pyx_L60_error) - } - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_29 * __pyx_v_H2.strides[0]) ) + __pyx_t_28 * __pyx_v_H2.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L67; - __pyx_L60_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L66; - __pyx_L66:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates11) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L67:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } - goto __pyx_L69; - __pyx_L12_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L69; - __pyx_L69:; - #ifdef _OPENMP - Py_END_ALLOW_THREADS - #else -{ -#ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #endif /* _OPENMP */ - /* Clean up any temporaries */ - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - #ifndef _OPENMP -} -#endif /* _OPENMP */ - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L8_error; - } - } - } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } + __pyx_t_2 = (__pyx_v_suboffsets + __pyx_v_ndim); + for (__pyx_t_3 = __pyx_v_suboffsets; __pyx_t_3 < __pyx_t_2; __pyx_t_3++) { + __pyx_t_1 = __pyx_t_3; + __pyx_v_suboffset = (__pyx_t_1[0]); - /* "cornac/models/efm/recom_efm.pyx":280 - * H2_denominator.fill(0) + /* "View.MemoryView":702 + * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1: + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * raise ValueError, "Indirect dimensions not supported" + * return 0 # return type just used as an error flag + */ + __pyx_t_4 = (__pyx_v_suboffset >= 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":703 + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + * raise ValueError, "Indirect dimensions not supported" # <<<<<<<<<<<<<< + * return 0 # return type just used as an error flag * - * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L9; - } - __pyx_L8_error: { - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L1_error; - } - __pyx_L9:; - } + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Indirect_dimensions_not_supporte, 0, 0); + __PYX_ERR(1, 703, __pyx_L1_error) + + /* "View.MemoryView":702 + * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1: + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * raise ValueError, "Indirect dimensions not supported" + * return 0 # return type just used as an error flag + */ } + } - /* "cornac/models/efm/recom_efm.pyx":354 - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + /* "View.MemoryView":704 + * if suboffset >= 0: + * raise ValueError, "Indirect dimensions not supported" + * return 0 # return type just used as an error flag # <<<<<<<<<<<<<< * - * if self.verbose: # <<<<<<<<<<<<<< - * print('iter: %d, loss: %f' % (t, loss)) * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 354, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_38 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_38 < 0)) __PYX_ERR(0, 354, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_38) { + __pyx_r = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":355 + /* "View.MemoryView":700 + * return have_slices or nslices, tuple(result) * - * if self.verbose: - * print('iter: %d, loss: %f' % (t, loss)) # <<<<<<<<<<<<<< + * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1: # <<<<<<<<<<<<<< + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.assert_direct_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":711 * - * if self.verbose: + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< + * cdef int new_ndim = 0, suboffset_dim = -1, dim + * cdef bint negative_step */ - __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_23 = 0; - __pyx_t_39 = 127; - __Pyx_INCREF(__pyx_kp_u_iter); - __pyx_t_23 += 6; - __Pyx_GIVEREF(__pyx_kp_u_iter); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_iter); - __pyx_t_6 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_t), __pyx_n_u_d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_39 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_39) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_39; - __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_6 = 0; - __Pyx_INCREF(__pyx_kp_u_loss); - __pyx_t_23 += 8; - __Pyx_GIVEREF(__pyx_kp_u_loss); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_loss); - __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_Format(__pyx_t_6, __pyx_n_u_f); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_39 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_39) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_39; - __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_23, __pyx_t_39); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":354 - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) +static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *__pyx_v_memview, PyObject *__pyx_v_indices) { + int __pyx_v_new_ndim; + int __pyx_v_suboffset_dim; + int __pyx_v_dim; + __Pyx_memviewslice __pyx_v_src; + __Pyx_memviewslice __pyx_v_dst; + __Pyx_memviewslice *__pyx_v_p_src; + struct __pyx_memoryviewslice_obj *__pyx_v_memviewsliceobj = 0; + __Pyx_memviewslice *__pyx_v_p_dst; + int *__pyx_v_p_suboffset_dim; + Py_ssize_t __pyx_v_start; + Py_ssize_t __pyx_v_stop; + Py_ssize_t __pyx_v_step; + Py_ssize_t __pyx_v_cindex; + int __pyx_v_have_start; + int __pyx_v_have_stop; + int __pyx_v_have_step; + PyObject *__pyx_v_index = NULL; + struct __pyx_memoryview_obj *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + struct __pyx_memoryview_obj *__pyx_t_3; + char *__pyx_t_4; + int __pyx_t_5; + Py_ssize_t __pyx_t_6; + PyObject *(*__pyx_t_7)(PyObject *); + PyObject *__pyx_t_8 = NULL; + Py_ssize_t __pyx_t_9; + int __pyx_t_10; + Py_ssize_t __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memview_slice", 0); + + /* "View.MemoryView":712 + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): + * cdef int new_ndim = 0, suboffset_dim = -1, dim # <<<<<<<<<<<<<< + * cdef bint negative_step + * cdef __Pyx_memviewslice src, dst + */ + __pyx_v_new_ndim = 0; + __pyx_v_suboffset_dim = -1; + + /* "View.MemoryView":719 * - * if self.verbose: # <<<<<<<<<<<<<< - * print('iter: %d, loss: %f' % (t, loss)) * + * memset(&dst, 0, sizeof(dst)) # <<<<<<<<<<<<<< + * + * cdef _memoryviewslice memviewsliceobj */ - } + (void)(memset((&__pyx_v_dst), 0, (sizeof(__pyx_v_dst)))); - /* "cornac/models/efm/recom_efm.pyx":267 - * floating eps = 1e-9 + /* "View.MemoryView":723 + * cdef _memoryviewslice memviewsliceobj * - * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< - * loss = 0. - * U1_numerator.fill(0) + * assert memview.view.ndim > 0 # <<<<<<<<<<<<<< + * + * if isinstance(memview, _memoryviewslice): */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(__pyx_assertions_enabled())) { + __pyx_t_1 = (__pyx_v_memview->view.ndim > 0); + if (unlikely(!__pyx_t_1)) { + __Pyx_Raise(__pyx_builtin_AssertionError, 0, 0, 0); + __PYX_ERR(1, 723, __pyx_L1_error) + } } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + #else + if ((1)); else __PYX_ERR(1, 723, __pyx_L1_error) + #endif - /* "cornac/models/efm/recom_efm.pyx":357 - * print('iter: %d, loss: %f' % (t, loss)) + /* "View.MemoryView":725 + * assert memview.view.ndim > 0 * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Optimization finished!') + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + if (__pyx_t_1) { + + /* "View.MemoryView":726 * + * if isinstance(memview, _memoryviewslice): + * memviewsliceobj = memview # <<<<<<<<<<<<<< + * p_src = &memviewsliceobj.from_slice + * else: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_38 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_38 < 0)) __PYX_ERR(0, 357, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_38) { + if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 726, __pyx_L1_error) + __pyx_t_2 = ((PyObject *)__pyx_v_memview); + __Pyx_INCREF(__pyx_t_2); + __pyx_v_memviewsliceobj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":358 + /* "View.MemoryView":727 + * if isinstance(memview, _memoryviewslice): + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice # <<<<<<<<<<<<<< + * else: + * slice_copy(memview, &src) + */ + __pyx_v_p_src = (&__pyx_v_memviewsliceobj->from_slice); + + /* "View.MemoryView":725 + * assert memview.view.ndim > 0 * - * if self.verbose: - * print('Optimization finished!') # <<<<<<<<<<<<<< + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice + */ + goto __pyx_L3; + } + + /* "View.MemoryView":729 + * p_src = &memviewsliceobj.from_slice + * else: + * slice_copy(memview, &src) # <<<<<<<<<<<<<< + * p_src = &src * - * def _build_matrices(self, data_set): */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /*else*/ { + __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_src)); - /* "cornac/models/efm/recom_efm.pyx":357 - * print('iter: %d, loss: %f' % (t, loss)) + /* "View.MemoryView":730 + * else: + * slice_copy(memview, &src) + * p_src = &src # <<<<<<<<<<<<<< * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Optimization finished!') * */ + __pyx_v_p_src = (&__pyx_v_src); } + __pyx_L3:; - /* "cornac/models/efm/recom_efm.pyx":230 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def _fit_efm(self, int num_threads, # <<<<<<<<<<<<<< - * floating[:] A, integral[:] A_uids, integral[:] A_iids, integral[:] A_user_counts, integral[:] A_item_counts, - * floating[:] X, integral[:] X_uids, integral[:] X_aids, integral[:] X_user_counts, integral[:] X_aspect_counts, + /* "View.MemoryView":736 + * + * + * dst.memview = p_src.memview # <<<<<<<<<<<<<< + * dst.data = p_src.data + * */ + __pyx_t_3 = __pyx_v_p_src->memview; + __pyx_v_dst.memview = __pyx_t_3; - /* 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_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_U1_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_U1_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_U2_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_U2_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_V_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_V_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_H1_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_H1_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_H2_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_H2_denominator); - __Pyx_XDECREF(__pyx_v_t); - __PYX_XDEC_MEMVIEW(&__pyx_v_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_user_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_item_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_user_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aspect_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_item_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_V, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_H1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_H2, 1); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "View.MemoryView":737 + * + * dst.memview = p_src.memview + * dst.data = p_src.data # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_4 = __pyx_v_p_src->data; + __pyx_v_dst.data = __pyx_t_4; -/* Python wrapper */ -static PyObject *__pyx_fuse_1_1__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_27_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_fuse_1_1__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_27_fit_efm = {"__pyx_fuse_1_1_fit_efm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1_1__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_27_fit_efm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm}; -static PyObject *__pyx_fuse_1_1__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_27_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - int __pyx_v_num_threads; - __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_V = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_H1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_H2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_fit_efm (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_num_threads,&__pyx_n_s_A,&__pyx_n_s_A_uids,&__pyx_n_s_A_iids,&__pyx_n_s_A_user_counts,&__pyx_n_s_A_item_counts,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_aids,&__pyx_n_s_X_user_counts,&__pyx_n_s_X_aspect_counts,&__pyx_n_s_Y,&__pyx_n_s_Y_iids,&__pyx_n_s_Y_aids,&__pyx_n_s_Y_item_counts,&__pyx_n_s_Y_aspect_counts,&__pyx_n_s_U1,&__pyx_n_s_U2,&__pyx_n_s_V,&__pyx_n_s_H1,&__pyx_n_s_H2,0}; - PyObject* values[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - CYTHON_FALLTHROUGH; - case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - CYTHON_FALLTHROUGH; - case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - CYTHON_FALLTHROUGH; - case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - CYTHON_FALLTHROUGH; - case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - CYTHON_FALLTHROUGH; - case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - CYTHON_FALLTHROUGH; - case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - CYTHON_FALLTHROUGH; - case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - CYTHON_FALLTHROUGH; - case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - CYTHON_FALLTHROUGH; - case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - CYTHON_FALLTHROUGH; - case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - CYTHON_FALLTHROUGH; - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; + /* "View.MemoryView":742 + * + * + * cdef __Pyx_memviewslice *p_dst = &dst # <<<<<<<<<<<<<< + * cdef int *p_suboffset_dim = &suboffset_dim + * cdef Py_ssize_t start, stop, step, cindex + */ + __pyx_v_p_dst = (&__pyx_v_dst); + + /* "View.MemoryView":743 + * + * cdef __Pyx_memviewslice *p_dst = &dst + * cdef int *p_suboffset_dim = &suboffset_dim # <<<<<<<<<<<<<< + * cdef Py_ssize_t start, stop, step, cindex + * cdef bint have_start, have_stop, have_step + */ + __pyx_v_p_suboffset_dim = (&__pyx_v_suboffset_dim); + + /* "View.MemoryView":747 + * cdef bint have_start, have_stop, have_step + * + * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< + * if PyIndex_Check(index): + * cindex = index + */ + __pyx_t_5 = 0; + if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) { + __pyx_t_2 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0; + __pyx_t_7 = NULL; + } else { + __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 747, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 747, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_7)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_8 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(1, 747, __pyx_L1_error) + #else + __pyx_t_8 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 747, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + #endif + } else { + if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(1, 747, __pyx_L1_error) + #else + __pyx_t_8 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 747, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + #endif } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 1); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 2); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 3); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 4); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_user_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 5); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_item_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 6); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 7); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 8); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 9: - if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 9); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 10: - if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_user_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 10); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 11: - if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aspect_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 11); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 12: - if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 12); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 13: - if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 13); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 14: - if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 14); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 15: - if (likely((values[15] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_item_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 15); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 16: - if (likely((values[16] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_aspect_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 16); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 17: - if (likely((values[17] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 17); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 18: - if (likely((values[18] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 18); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 19: - if (likely((values[19] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 19); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 20: - if (likely((values[20] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_H1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 20); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 21: - if (likely((values[21] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_H2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 21); __PYX_ERR(0, 230, __pyx_L3_error) + } else { + __pyx_t_8 = __pyx_t_7(__pyx_t_2); + if (unlikely(!__pyx_t_8)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(1, 747, __pyx_L1_error) } + break; } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_fit_efm") < 0)) __PYX_ERR(0, 230, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 22) { - 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); - values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - values[21] = PyTuple_GET_ITEM(__pyx_args, 21); + __Pyx_GOTREF(__pyx_t_8); + } + __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_8); + __pyx_t_8 = 0; + __pyx_v_dim = __pyx_t_5; + __pyx_t_5 = (__pyx_t_5 + 1); + + /* "View.MemoryView":748 + * + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): # <<<<<<<<<<<<<< + * cindex = index + * slice_memviewslice( + */ + __pyx_t_1 = (PyIndex_Check(__pyx_v_index) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":749 + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): + * cindex = index # <<<<<<<<<<<<<< + * slice_memviewslice( + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + */ + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 749, __pyx_L1_error) + __pyx_v_cindex = __pyx_t_9; + + /* "View.MemoryView":750 + * if PyIndex_Check(index): + * cindex = index + * slice_memviewslice( # <<<<<<<<<<<<<< + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + */ + __pyx_t_10 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_cindex, 0, 0, 0, 0, 0, 0); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(1, 750, __pyx_L1_error) + + /* "View.MemoryView":748 + * + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): # <<<<<<<<<<<<<< + * cindex = index + * slice_memviewslice( + */ + goto __pyx_L6; } - __pyx_v_self = values[0]; - __pyx_v_num_threads = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L3_error) - __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_uids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_iids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_user_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_item_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_user_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aspect_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_Y = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_iids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_item_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aspect_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_U1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_U2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_V = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_V.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_H1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[20], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_H2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 230, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_26_fit_efm(__pyx_self, __pyx_v_self, __pyx_v_num_threads, __pyx_v_A, __pyx_v_A_uids, __pyx_v_A_iids, __pyx_v_A_user_counts, __pyx_v_A_item_counts, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_aids, __pyx_v_X_user_counts, __pyx_v_X_aspect_counts, __pyx_v_Y, __pyx_v_Y_iids, __pyx_v_Y_aids, __pyx_v_Y_item_counts, __pyx_v_Y_aspect_counts, __pyx_v_U1, __pyx_v_U2, __pyx_v_V, __pyx_v_H1, __pyx_v_H2); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "View.MemoryView":756 + * 0, 0, 0, # have_{start,stop,step} + * False) + * elif index is None: # <<<<<<<<<<<<<< + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + */ + __pyx_t_1 = (__pyx_v_index == Py_None); + if (__pyx_t_1) { -static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_26_fit_efm(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_A_uids, __Pyx_memviewslice __pyx_v_A_iids, __Pyx_memviewslice __pyx_v_A_user_counts, __Pyx_memviewslice __pyx_v_A_item_counts, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_X_user_counts, __Pyx_memviewslice __pyx_v_X_aspect_counts, __Pyx_memviewslice __pyx_v_Y, __Pyx_memviewslice __pyx_v_Y_iids, __Pyx_memviewslice __pyx_v_Y_aids, __Pyx_memviewslice __pyx_v_Y_item_counts, __Pyx_memviewslice __pyx_v_Y_aspect_counts, __Pyx_memviewslice __pyx_v_U1, __Pyx_memviewslice __pyx_v_U2, __Pyx_memviewslice __pyx_v_V, __Pyx_memviewslice __pyx_v_H1, __Pyx_memviewslice __pyx_v_H2) { - long __pyx_v_num_users; - long __pyx_v_num_items; - long __pyx_v_num_aspects; - int __pyx_v_num_explicit_factors; - int __pyx_v_num_latent_factors; - double __pyx_v_lambda_x; - double __pyx_v_lambda_y; - double __pyx_v_lambda_u; - double __pyx_v_lambda_h; - double __pyx_v_lambda_v; - double __pyx_v_prediction; - double __pyx_v_score; - double __pyx_v_loss; - PyArrayObject *__pyx_v_U1_numerator = 0; - PyArrayObject *__pyx_v_U1_denominator = 0; - PyArrayObject *__pyx_v_U2_numerator = 0; - PyArrayObject *__pyx_v_U2_denominator = 0; - PyArrayObject *__pyx_v_V_numerator = 0; - PyArrayObject *__pyx_v_V_denominator = 0; - PyArrayObject *__pyx_v_H1_numerator = 0; - PyArrayObject *__pyx_v_H1_denominator = 0; - PyArrayObject *__pyx_v_H2_numerator = 0; - PyArrayObject *__pyx_v_H2_denominator = 0; - int __pyx_v_i; - int __pyx_v_j; - int __pyx_v_k; - int __pyx_v_idx; - double __pyx_v_eps; - PyObject *__pyx_v_t = NULL; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_denominator; - __Pyx_Buffer __pyx_pybuffer_H1_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_numerator; - __Pyx_Buffer __pyx_pybuffer_H1_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_denominator; - __Pyx_Buffer __pyx_pybuffer_H2_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_numerator; - __Pyx_Buffer __pyx_pybuffer_H2_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_denominator; - __Pyx_Buffer __pyx_pybuffer_U1_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_numerator; - __Pyx_Buffer __pyx_pybuffer_U1_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_denominator; - __Pyx_Buffer __pyx_pybuffer_U2_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_numerator; - __Pyx_Buffer __pyx_pybuffer_U2_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_V_denominator; - __Pyx_Buffer __pyx_pybuffer_V_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_V_numerator; - __Pyx_Buffer __pyx_pybuffer_V_numerator; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - long __pyx_t_3; - int __pyx_t_4; - double __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyArrayObject *__pyx_t_9 = NULL; - PyArrayObject *__pyx_t_10 = NULL; - PyArrayObject *__pyx_t_11 = NULL; - PyArrayObject *__pyx_t_12 = NULL; - PyArrayObject *__pyx_t_13 = NULL; - PyArrayObject *__pyx_t_14 = NULL; - PyArrayObject *__pyx_t_15 = NULL; - PyArrayObject *__pyx_t_16 = NULL; - PyArrayObject *__pyx_t_17 = NULL; - PyArrayObject *__pyx_t_18 = NULL; - Py_ssize_t __pyx_t_19; - PyObject *(*__pyx_t_20)(PyObject *); - Py_ssize_t __pyx_t_21; - Py_ssize_t __pyx_t_22; - Py_ssize_t __pyx_t_23; - Py_ssize_t __pyx_t_24; - Py_ssize_t __pyx_t_25; - Py_ssize_t __pyx_t_26; - Py_ssize_t __pyx_t_27; - Py_ssize_t __pyx_t_28; - Py_ssize_t __pyx_t_29; - Py_ssize_t __pyx_t_30; - Py_ssize_t __pyx_t_31; - int __pyx_t_32; - int __pyx_t_33; - long __pyx_t_34; - long __pyx_t_35; - __pyx_t_5numpy_float32_t __pyx_t_36; - __pyx_t_5numpy_float32_t __pyx_t_37; - int __pyx_t_38; - Py_UCS4 __pyx_t_39; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_fuse_1_1_fit_efm", 0); - __pyx_pybuffer_U1_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_U1_numerator.refcount = 0; - __pyx_pybuffernd_U1_numerator.data = NULL; - __pyx_pybuffernd_U1_numerator.rcbuffer = &__pyx_pybuffer_U1_numerator; - __pyx_pybuffer_U1_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_U1_denominator.refcount = 0; - __pyx_pybuffernd_U1_denominator.data = NULL; - __pyx_pybuffernd_U1_denominator.rcbuffer = &__pyx_pybuffer_U1_denominator; - __pyx_pybuffer_U2_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_U2_numerator.refcount = 0; - __pyx_pybuffernd_U2_numerator.data = NULL; - __pyx_pybuffernd_U2_numerator.rcbuffer = &__pyx_pybuffer_U2_numerator; - __pyx_pybuffer_U2_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_U2_denominator.refcount = 0; - __pyx_pybuffernd_U2_denominator.data = NULL; - __pyx_pybuffernd_U2_denominator.rcbuffer = &__pyx_pybuffer_U2_denominator; - __pyx_pybuffer_V_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_V_numerator.refcount = 0; - __pyx_pybuffernd_V_numerator.data = NULL; - __pyx_pybuffernd_V_numerator.rcbuffer = &__pyx_pybuffer_V_numerator; - __pyx_pybuffer_V_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_V_denominator.refcount = 0; - __pyx_pybuffernd_V_denominator.data = NULL; - __pyx_pybuffernd_V_denominator.rcbuffer = &__pyx_pybuffer_V_denominator; - __pyx_pybuffer_H1_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_H1_numerator.refcount = 0; - __pyx_pybuffernd_H1_numerator.data = NULL; - __pyx_pybuffernd_H1_numerator.rcbuffer = &__pyx_pybuffer_H1_numerator; - __pyx_pybuffer_H1_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_H1_denominator.refcount = 0; - __pyx_pybuffernd_H1_denominator.data = NULL; - __pyx_pybuffernd_H1_denominator.rcbuffer = &__pyx_pybuffer_H1_denominator; - __pyx_pybuffer_H2_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_H2_numerator.refcount = 0; - __pyx_pybuffernd_H2_numerator.data = NULL; - __pyx_pybuffernd_H2_numerator.rcbuffer = &__pyx_pybuffer_H2_numerator; - __pyx_pybuffer_H2_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_H2_denominator.refcount = 0; - __pyx_pybuffernd_H2_denominator.data = NULL; - __pyx_pybuffernd_H2_denominator.rcbuffer = &__pyx_pybuffer_H2_denominator; + /* "View.MemoryView":757 + * False) + * elif index is None: + * p_dst.shape[new_ndim] = 1 # <<<<<<<<<<<<<< + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 + */ + (__pyx_v_p_dst->shape[__pyx_v_new_ndim]) = 1; - /* "cornac/models/efm/recom_efm.pyx":238 - * """ - * cdef: - * long num_users = self.train_set.num_users # <<<<<<<<<<<<<< - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects + /* "View.MemoryView":758 + * elif index is None: + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 # <<<<<<<<<<<<<< + * p_dst.suboffsets[new_ndim] = -1 + * new_ndim += 1 */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_num_users = __pyx_t_3; + (__pyx_v_p_dst->strides[__pyx_v_new_ndim]) = 0; - /* "cornac/models/efm/recom_efm.pyx":239 - * cdef: - * long num_users = self.train_set.num_users - * long num_items = self.train_set.num_items # <<<<<<<<<<<<<< - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors + /* "View.MemoryView":759 + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 # <<<<<<<<<<<<<< + * new_ndim += 1 + * else: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_items = __pyx_t_3; + (__pyx_v_p_dst->suboffsets[__pyx_v_new_ndim]) = -1L; - /* "cornac/models/efm/recom_efm.pyx":240 - * long num_users = self.train_set.num_users - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< - * int num_explicit_factors = self.num_explicit_factors - * int num_latent_factors = self.num_latent_factors + /* "View.MemoryView":760 + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 + * new_ndim += 1 # <<<<<<<<<<<<<< + * else: + * start = index.start or 0 */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_aspects = __pyx_t_3; + __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); - /* "cornac/models/efm/recom_efm.pyx":241 - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors # <<<<<<<<<<<<<< - * int num_latent_factors = self.num_latent_factors + /* "View.MemoryView":756 + * 0, 0, 0, # have_{start,stop,step} + * False) + * elif index is None: # <<<<<<<<<<<<<< + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + */ + goto __pyx_L6; + } + + /* "View.MemoryView":762 + * new_ndim += 1 + * else: + * start = index.start or 0 # <<<<<<<<<<<<<< + * stop = index.stop or 0 + * step = index.step or 0 + */ + /*else*/ { + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 762, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } else { + __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 762, __pyx_L1_error) + __pyx_t_9 = __pyx_t_11; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_9 = 0; + __pyx_L7_bool_binop_done:; + __pyx_v_start = __pyx_t_9; + + /* "View.MemoryView":763 + * else: + * start = index.start or 0 + * stop = index.stop or 0 # <<<<<<<<<<<<<< + * step = index.step or 0 * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_explicit_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 241, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_explicit_factors = __pyx_t_4; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 763, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 763, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } else { + __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 763, __pyx_L1_error) + __pyx_t_9 = __pyx_t_11; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_9 = 0; + __pyx_L9_bool_binop_done:; + __pyx_v_stop = __pyx_t_9; - /* "cornac/models/efm/recom_efm.pyx":242 - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors - * int num_latent_factors = self.num_latent_factors # <<<<<<<<<<<<<< + /* "View.MemoryView":764 + * start = index.start or 0 + * stop = index.stop or 0 + * step = index.step or 0 # <<<<<<<<<<<<<< * - * floating lambda_x = self.lambda_x + * have_start = index.start is not None */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_latent_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 242, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_latent_factors = __pyx_t_4; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 764, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } else { + __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 764, __pyx_L1_error) + __pyx_t_9 = __pyx_t_11; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_9 = 0; + __pyx_L11_bool_binop_done:; + __pyx_v_step = __pyx_t_9; - /* "cornac/models/efm/recom_efm.pyx":244 - * int num_latent_factors = self.num_latent_factors + /* "View.MemoryView":766 + * step = index.step or 0 * - * floating lambda_x = self.lambda_x # <<<<<<<<<<<<<< - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u + * have_start = index.start is not None # <<<<<<<<<<<<<< + * have_stop = index.stop is not None + * have_step = index.step is not None */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_x = __pyx_t_5; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = (__pyx_t_8 != Py_None); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_have_start = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":245 + /* "View.MemoryView":767 + * + * have_start = index.start is not None + * have_stop = index.stop is not None # <<<<<<<<<<<<<< + * have_step = index.step is not None * - * floating lambda_x = self.lambda_x - * floating lambda_y = self.lambda_y # <<<<<<<<<<<<<< - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 245, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_y = __pyx_t_5; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 767, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = (__pyx_t_8 != Py_None); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_have_stop = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":246 - * floating lambda_x = self.lambda_x - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u # <<<<<<<<<<<<<< - * floating lambda_h = self.lambda_h - * floating lambda_v = self.lambda_v + /* "View.MemoryView":768 + * have_start = index.start is not None + * have_stop = index.stop is not None + * have_step = index.step is not None # <<<<<<<<<<<<<< + * + * slice_memviewslice( */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_u); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_u = __pyx_t_5; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 768, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = (__pyx_t_8 != Py_None); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_have_step = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":247 - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h # <<<<<<<<<<<<<< - * floating lambda_v = self.lambda_v + /* "View.MemoryView":770 + * have_step = index.step is not None * + * slice_memviewslice( # <<<<<<<<<<<<<< + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_h); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_h = __pyx_t_5; + __pyx_t_10 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_have_start, __pyx_v_have_stop, __pyx_v_have_step, 1); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(1, 770, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":248 - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h - * floating lambda_v = self.lambda_v # <<<<<<<<<<<<<< + /* "View.MemoryView":776 + * have_start, have_stop, have_step, + * True) + * new_ndim += 1 # <<<<<<<<<<<<<< * - * floating prediction, score, loss + * if isinstance(memview, _memoryviewslice): */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_v); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 248, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 248, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_v = __pyx_t_5; + __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); + } + __pyx_L6:; - /* "cornac/models/efm/recom_efm.pyx":252 - * floating prediction, score, loss + /* "View.MemoryView":747 + * cdef bint have_start, have_stop, have_step * - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< + * if PyIndex_Check(index): + * cindex = index */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); + } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 252, __pyx_L1_error) - __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 252, __pyx_L1_error) - } else {__pyx_pybuffernd_U1_numerator.diminfo[0].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_numerator.diminfo[0].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_numerator.diminfo[1].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_numerator.diminfo[1].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[1]; - } + + /* "View.MemoryView":778 + * new_ndim += 1 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + if (__pyx_t_1) { + + /* "View.MemoryView":779 + * + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, + */ + __Pyx_XDECREF((PyObject *)__pyx_r); + + /* "View.MemoryView":780 + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, # <<<<<<<<<<<<<< + * memviewsliceobj.to_dtype_func, + * memview.dtype_is_object) + */ + if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 780, __pyx_L1_error) } + + /* "View.MemoryView":781 + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * else: + */ + if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 781, __pyx_L1_error) } + + /* "View.MemoryView":779 + * + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, + */ + __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, __pyx_v_memviewsliceobj->to_object_func, __pyx_v_memviewsliceobj->to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 779, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_memoryview_type))))) __PYX_ERR(1, 779, __pyx_L1_error) + __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_2); + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":778 + * new_ndim += 1 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + */ } - __pyx_t_9 = 0; - __pyx_v_U1_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; - /* "cornac/models/efm/recom_efm.pyx":253 + /* "View.MemoryView":784 + * memview.dtype_is_object) + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * + */ + /*else*/ { + __Pyx_XDECREF((PyObject *)__pyx_r); + + /* "View.MemoryView":785 + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, + * memview.dtype_is_object) # <<<<<<<<<<<<<< + * * - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 253, __pyx_L1_error) - __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 253, __pyx_L1_error) - } else {__pyx_pybuffernd_U1_denominator.diminfo[0].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_denominator.diminfo[0].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_denominator.diminfo[1].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_denominator.diminfo[1].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_10 = 0; - __pyx_v_U1_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; + __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, NULL, NULL, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 784, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); - /* "cornac/models/efm/recom_efm.pyx":254 - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + /* "View.MemoryView":784 + * memview.dtype_is_object) + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 254, __pyx_L1_error) - __pyx_t_11 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 254, __pyx_L1_error) - } else {__pyx_pybuffernd_U2_numerator.diminfo[0].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_numerator.diminfo[0].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_numerator.diminfo[1].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_numerator.diminfo[1].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[1]; - } + if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_memoryview_type))))) __PYX_ERR(1, 784, __pyx_L1_error) + __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_2); + __pyx_t_2 = 0; + goto __pyx_L0; } - __pyx_t_11 = 0; - __pyx_v_U2_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; - /* "cornac/models/efm/recom_efm.pyx":255 - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + /* "View.MemoryView":711 + * + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< + * cdef int new_ndim = 0, suboffset_dim = -1, dim + * cdef bint negative_step */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 255, __pyx_L1_error) - __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 255, __pyx_L1_error) - } else {__pyx_pybuffernd_U2_denominator.diminfo[0].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_denominator.diminfo[0].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_denominator.diminfo[1].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_denominator.diminfo[1].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_12 = 0; - __pyx_v_U2_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":256 - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.memview_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_memviewsliceobj); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":793 + * + * @cname('__pyx_memoryview_slice_memviewslice') + * cdef int slice_memviewslice( # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 256, __pyx_L1_error) - __pyx_t_13 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_V_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 256, __pyx_L1_error) - } else {__pyx_pybuffernd_V_numerator.diminfo[0].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_numerator.diminfo[0].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_numerator.diminfo[1].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_numerator.diminfo[1].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_13 = 0; - __pyx_v_V_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; - /* "cornac/models/efm/recom_efm.pyx":257 - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) +static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx_v_dst, Py_ssize_t __pyx_v_shape, Py_ssize_t __pyx_v_stride, Py_ssize_t __pyx_v_suboffset, int __pyx_v_dim, int __pyx_v_new_ndim, int *__pyx_v_suboffset_dim, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_stop, Py_ssize_t __pyx_v_step, int __pyx_v_have_start, int __pyx_v_have_stop, int __pyx_v_have_step, int __pyx_v_is_slice) { + Py_ssize_t __pyx_v_new_shape; + int __pyx_v_negative_step; + int __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save; + #endif + + /* "View.MemoryView":813 + * cdef bint negative_step + * + * if not is_slice: # <<<<<<<<<<<<<< + * + * if start < 0: */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 257, __pyx_L1_error) - __pyx_t_14 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_V_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 257, __pyx_L1_error) - } else {__pyx_pybuffernd_V_denominator.diminfo[0].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_denominator.diminfo[0].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_denominator.diminfo[1].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_denominator.diminfo[1].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_14 = 0; - __pyx_v_V_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; + __pyx_t_1 = (!__pyx_v_is_slice); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":258 - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + /* "View.MemoryView":815 + * if not is_slice: + * + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if not 0 <= start < shape: */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 258, __pyx_L1_error) - __pyx_t_15 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 258, __pyx_L1_error) - } else {__pyx_pybuffernd_H1_numerator.diminfo[0].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_numerator.diminfo[0].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_numerator.diminfo[1].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_numerator.diminfo[1].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_15 = 0; - __pyx_v_H1_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; + __pyx_t_1 = (__pyx_v_start < 0); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":259 - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) + /* "View.MemoryView":816 + * + * if start < 0: + * start += shape # <<<<<<<<<<<<<< + * if not 0 <= start < shape: + * _err_dim(PyExc_IndexError, "Index out of bounds (axis %d)", dim) + */ + __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + + /* "View.MemoryView":815 + * if not is_slice: + * + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if not 0 <= start < shape: */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 259, __pyx_L1_error) - __pyx_t_16 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 259, __pyx_L1_error) - } else {__pyx_pybuffernd_H1_denominator.diminfo[0].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_denominator.diminfo[0].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_denominator.diminfo[1].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_denominator.diminfo[1].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[1]; } - } - __pyx_t_16 = 0; - __pyx_v_H1_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":260 - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * int i, j, k, idx + /* "View.MemoryView":817 + * if start < 0: + * start += shape + * if not 0 <= start < shape: # <<<<<<<<<<<<<< + * _err_dim(PyExc_IndexError, "Index out of bounds (axis %d)", dim) + * else: */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 260, __pyx_L1_error) - __pyx_t_17 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 260, __pyx_L1_error) - } else {__pyx_pybuffernd_H2_numerator.diminfo[0].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_numerator.diminfo[0].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_numerator.diminfo[1].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_numerator.diminfo[1].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[1]; + __pyx_t_1 = (0 <= __pyx_v_start); + if (__pyx_t_1) { + __pyx_t_1 = (__pyx_v_start < __pyx_v_shape); } - } - __pyx_t_17 = 0; - __pyx_v_H2_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; + __pyx_t_2 = (!__pyx_t_1); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":261 - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * int i, j, k, idx - * long n_ratings + /* "View.MemoryView":818 + * start += shape + * if not 0 <= start < shape: + * _err_dim(PyExc_IndexError, "Index out of bounds (axis %d)", dim) # <<<<<<<<<<<<<< + * else: + * + */ + __pyx_t_3 = __pyx_memoryview_err_dim(PyExc_IndexError, __pyx_kp_s_Index_out_of_bounds_axis_d, __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 818, __pyx_L1_error) + + /* "View.MemoryView":817 + * if start < 0: + * start += shape + * if not 0 <= start < shape: # <<<<<<<<<<<<<< + * _err_dim(PyExc_IndexError, "Index out of bounds (axis %d)", dim) + * else: */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 261, __pyx_L1_error) - __pyx_t_18 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 261, __pyx_L1_error) - } else {__pyx_pybuffernd_H2_denominator.diminfo[0].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_denominator.diminfo[0].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_denominator.diminfo[1].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_denominator.diminfo[1].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[1]; } - } - __pyx_t_18 = 0; - __pyx_v_H2_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":265 - * long n_ratings + /* "View.MemoryView":813 + * cdef bint negative_step * - * floating eps = 1e-9 # <<<<<<<<<<<<<< + * if not is_slice: # <<<<<<<<<<<<<< * - * for t in range(1, self.max_iter + 1): + * if start < 0: */ - __pyx_v_eps = 1e-9; + goto __pyx_L3; + } - /* "cornac/models/efm/recom_efm.pyx":267 - * floating eps = 1e-9 + /* "View.MemoryView":821 + * else: * - * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< - * loss = 0. - * U1_numerator.fill(0) + * if have_step: # <<<<<<<<<<<<<< + * negative_step = step < 0 + * if step == 0: + */ + /*else*/ { + __pyx_t_2 = (__pyx_v_have_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":822 + * + * if have_step: + * negative_step = step < 0 # <<<<<<<<<<<<<< + * if step == 0: + * _err_dim(PyExc_ValueError, "Step may not be zero (axis %d)", dim) + */ + __pyx_v_negative_step = (__pyx_v_step < 0); + + /* "View.MemoryView":823 + * if have_step: + * negative_step = step < 0 + * if step == 0: # <<<<<<<<<<<<<< + * _err_dim(PyExc_ValueError, "Step may not be zero (axis %d)", dim) + * else: + */ + __pyx_t_2 = (__pyx_v_step == 0); + if (__pyx_t_2) { + + /* "View.MemoryView":824 + * negative_step = step < 0 + * if step == 0: + * _err_dim(PyExc_ValueError, "Step may not be zero (axis %d)", dim) # <<<<<<<<<<<<<< + * else: + * negative_step = False + */ + __pyx_t_3 = __pyx_memoryview_err_dim(PyExc_ValueError, __pyx_kp_s_Step_may_not_be_zero_axis_d, __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 824, __pyx_L1_error) + + /* "View.MemoryView":823 + * if have_step: + * negative_step = step < 0 + * if step == 0: # <<<<<<<<<<<<<< + * _err_dim(PyExc_ValueError, "Step may not be zero (axis %d)", dim) + * else: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_max_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_int_1); - __Pyx_GIVEREF(__pyx_int_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_19 = 0; - __pyx_t_20 = NULL; - } else { - __pyx_t_19 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_20 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 267, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (likely(!__pyx_t_20)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 267, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } else { - if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 267, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } - } else { - __pyx_t_2 = __pyx_t_20(__pyx_t_1); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 267, __pyx_L1_error) - } - break; } - __Pyx_GOTREF(__pyx_t_2); + + /* "View.MemoryView":821 + * else: + * + * if have_step: # <<<<<<<<<<<<<< + * negative_step = step < 0 + * if step == 0: + */ + goto __pyx_L6; } - __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2); - __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":268 + /* "View.MemoryView":826 + * _err_dim(PyExc_ValueError, "Step may not be zero (axis %d)", dim) + * else: + * negative_step = False # <<<<<<<<<<<<<< + * step = 1 * - * for t in range(1, self.max_iter + 1): - * loss = 0. # <<<<<<<<<<<<<< - * U1_numerator.fill(0) - * U1_denominator.fill(0) */ - __pyx_v_loss = 0.; + /*else*/ { + __pyx_v_negative_step = 0; - /* "cornac/models/efm/recom_efm.pyx":269 - * for t in range(1, self.max_iter + 1): - * loss = 0. - * U1_numerator.fill(0) # <<<<<<<<<<<<<< - * U1_denominator.fill(0) - * U2_numerator.fill(0) + /* "View.MemoryView":827 + * else: + * negative_step = False + * step = 1 # <<<<<<<<<<<<<< + * + * */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 269, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } + __pyx_v_step = 1; } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_L6:; - /* "cornac/models/efm/recom_efm.pyx":270 - * loss = 0. - * U1_numerator.fill(0) - * U1_denominator.fill(0) # <<<<<<<<<<<<<< - * U2_numerator.fill(0) - * U2_denominator.fill(0) + /* "View.MemoryView":830 + * + * + * if have_start: # <<<<<<<<<<<<<< + * if start < 0: + * start += shape */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_2 = (__pyx_v_have_start != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":831 + * + * if have_start: + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if start < 0: + */ + __pyx_t_2 = (__pyx_v_start < 0); + if (__pyx_t_2) { + + /* "View.MemoryView":832 + * if have_start: + * if start < 0: + * start += shape # <<<<<<<<<<<<<< + * if start < 0: + * start = 0 + */ + __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + + /* "View.MemoryView":833 + * if start < 0: + * start += shape + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * elif start >= shape: + */ + __pyx_t_2 = (__pyx_v_start < 0); + if (__pyx_t_2) { + + /* "View.MemoryView":834 + * start += shape + * if start < 0: + * start = 0 # <<<<<<<<<<<<<< + * elif start >= shape: + * if negative_step: + */ + __pyx_v_start = 0; + + /* "View.MemoryView":833 + * if start < 0: + * start += shape + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * elif start >= shape: + */ + } + + /* "View.MemoryView":831 + * + * if have_start: + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if start < 0: + */ + goto __pyx_L9; } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":271 - * U1_numerator.fill(0) - * U1_denominator.fill(0) - * U2_numerator.fill(0) # <<<<<<<<<<<<<< - * U2_denominator.fill(0) - * V_numerator.fill(0) + /* "View.MemoryView":835 + * if start < 0: + * start = 0 + * elif start >= shape: # <<<<<<<<<<<<<< + * if negative_step: + * start = shape - 1 + */ + __pyx_t_2 = (__pyx_v_start >= __pyx_v_shape); + if (__pyx_t_2) { + + /* "View.MemoryView":836 + * start = 0 + * elif start >= shape: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + if (__pyx_v_negative_step) { + + /* "View.MemoryView":837 + * elif start >= shape: + * if negative_step: + * start = shape - 1 # <<<<<<<<<<<<<< + * else: + * start = shape + */ + __pyx_v_start = (__pyx_v_shape - 1); + + /* "View.MemoryView":836 + * start = 0 + * elif start >= shape: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + goto __pyx_L11; + } + + /* "View.MemoryView":839 + * start = shape - 1 + * else: + * start = shape # <<<<<<<<<<<<<< + * else: + * if negative_step: + */ + /*else*/ { + __pyx_v_start = __pyx_v_shape; + } + __pyx_L11:; + + /* "View.MemoryView":835 + * if start < 0: + * start = 0 + * elif start >= shape: # <<<<<<<<<<<<<< + * if negative_step: + * start = shape - 1 */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); } + __pyx_L9:; + + /* "View.MemoryView":830 + * + * + * if have_start: # <<<<<<<<<<<<<< + * if start < 0: + * start += shape + */ + goto __pyx_L8; } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":272 - * U1_denominator.fill(0) - * U2_numerator.fill(0) - * U2_denominator.fill(0) # <<<<<<<<<<<<<< - * V_numerator.fill(0) - * V_denominator.fill(0) + /* "View.MemoryView":841 + * start = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 272, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); + /*else*/ { + if (__pyx_v_negative_step) { + + /* "View.MemoryView":842 + * else: + * if negative_step: + * start = shape - 1 # <<<<<<<<<<<<<< + * else: + * start = 0 + */ + __pyx_v_start = (__pyx_v_shape - 1); + + /* "View.MemoryView":841 + * start = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + goto __pyx_L12; } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":273 - * U2_numerator.fill(0) - * U2_denominator.fill(0) - * V_numerator.fill(0) # <<<<<<<<<<<<<< - * V_denominator.fill(0) - * H1_numerator.fill(0) + /* "View.MemoryView":844 + * start = shape - 1 + * else: + * start = 0 # <<<<<<<<<<<<<< + * + * if have_stop: */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); + /*else*/ { + __pyx_v_start = 0; } + __pyx_L12:; } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_L8:; - /* "cornac/models/efm/recom_efm.pyx":274 - * U2_denominator.fill(0) - * V_numerator.fill(0) - * V_denominator.fill(0) # <<<<<<<<<<<<<< - * H1_numerator.fill(0) - * H1_denominator.fill(0) + /* "View.MemoryView":846 + * start = 0 + * + * if have_stop: # <<<<<<<<<<<<<< + * if stop < 0: + * stop += shape */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 274, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_2 = (__pyx_v_have_stop != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":847 + * + * if have_stop: + * if stop < 0: # <<<<<<<<<<<<<< + * stop += shape + * if stop < 0: + */ + __pyx_t_2 = (__pyx_v_stop < 0); + if (__pyx_t_2) { + + /* "View.MemoryView":848 + * if have_stop: + * if stop < 0: + * stop += shape # <<<<<<<<<<<<<< + * if stop < 0: + * stop = 0 + */ + __pyx_v_stop = (__pyx_v_stop + __pyx_v_shape); + + /* "View.MemoryView":849 + * if stop < 0: + * stop += shape + * if stop < 0: # <<<<<<<<<<<<<< + * stop = 0 + * elif stop > shape: + */ + __pyx_t_2 = (__pyx_v_stop < 0); + if (__pyx_t_2) { + + /* "View.MemoryView":850 + * stop += shape + * if stop < 0: + * stop = 0 # <<<<<<<<<<<<<< + * elif stop > shape: + * stop = shape + */ + __pyx_v_stop = 0; + + /* "View.MemoryView":849 + * if stop < 0: + * stop += shape + * if stop < 0: # <<<<<<<<<<<<<< + * stop = 0 + * elif stop > shape: + */ + } + + /* "View.MemoryView":847 + * + * if have_stop: + * if stop < 0: # <<<<<<<<<<<<<< + * stop += shape + * if stop < 0: + */ + goto __pyx_L14; } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":275 - * V_numerator.fill(0) - * V_denominator.fill(0) - * H1_numerator.fill(0) # <<<<<<<<<<<<<< - * H1_denominator.fill(0) - * H2_numerator.fill(0) + /* "View.MemoryView":851 + * if stop < 0: + * stop = 0 + * elif stop > shape: # <<<<<<<<<<<<<< + * stop = shape + * else: + */ + __pyx_t_2 = (__pyx_v_stop > __pyx_v_shape); + if (__pyx_t_2) { + + /* "View.MemoryView":852 + * stop = 0 + * elif stop > shape: + * stop = shape # <<<<<<<<<<<<<< + * else: + * if negative_step: + */ + __pyx_v_stop = __pyx_v_shape; + + /* "View.MemoryView":851 + * if stop < 0: + * stop = 0 + * elif stop > shape: # <<<<<<<<<<<<<< + * stop = shape + * else: */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 275, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); } + __pyx_L14:; + + /* "View.MemoryView":846 + * start = 0 + * + * if have_stop: # <<<<<<<<<<<<<< + * if stop < 0: + * stop += shape + */ + goto __pyx_L13; } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 275, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":276 - * V_denominator.fill(0) - * H1_numerator.fill(0) - * H1_denominator.fill(0) # <<<<<<<<<<<<<< - * H2_numerator.fill(0) - * H2_denominator.fill(0) + /* "View.MemoryView":854 + * stop = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * stop = -1 + * else: */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); + /*else*/ { + if (__pyx_v_negative_step) { + + /* "View.MemoryView":855 + * else: + * if negative_step: + * stop = -1 # <<<<<<<<<<<<<< + * else: + * stop = shape + */ + __pyx_v_stop = -1L; + + /* "View.MemoryView":854 + * stop = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * stop = -1 + * else: + */ + goto __pyx_L16; } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":277 - * H1_numerator.fill(0) - * H1_denominator.fill(0) - * H2_numerator.fill(0) # <<<<<<<<<<<<<< - * H2_denominator.fill(0) + /* "View.MemoryView":857 + * stop = -1 + * else: + * stop = shape # <<<<<<<<<<<<<< + * * */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 277, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); + /*else*/ { + __pyx_v_stop = __pyx_v_shape; } + __pyx_L16:; } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_L13:; - /* "cornac/models/efm/recom_efm.pyx":278 - * H1_denominator.fill(0) - * H2_numerator.fill(0) - * H2_denominator.fill(0) # <<<<<<<<<<<<<< + /* "View.MemoryView":861 * - * with nogil, parallel(num_threads=num_threads): + * with cython.cdivision(True): + * new_shape = (stop - start) // step # <<<<<<<<<<<<<< + * + * if (stop - start) - step * new_shape: */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_new_shape = ((__pyx_v_stop - __pyx_v_start) / __pyx_v_step); - /* "cornac/models/efm/recom_efm.pyx":280 - * H2_denominator.fill(0) + /* "View.MemoryView":863 + * new_shape = (stop - start) // step + * + * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< + * new_shape += 1 * - * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): */ - { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); - #endif - /*try:*/ { - { - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) - #endif - #ifdef _OPENMP - #pragma omp parallel reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) private(__pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_3, __pyx_t_30, __pyx_t_31, __pyx_t_32, __pyx_t_33, __pyx_t_34, __pyx_t_35, __pyx_t_36, __pyx_t_37, __pyx_t_4) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_num_threads) - #endif /* _OPENMP */ - { - #ifdef _OPENMP - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - Py_BEGIN_ALLOW_THREADS - #endif /* _OPENMP */ + __pyx_t_2 = (((__pyx_v_stop - __pyx_v_start) - (__pyx_v_step * __pyx_v_new_shape)) != 0); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":282 - * with nogil, parallel(num_threads=num_threads): - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): # <<<<<<<<<<<<<< - * i = A_uids[idx] - * j = A_iids[idx] + /* "View.MemoryView":864 + * + * if (stop - start) - step * new_shape: + * new_shape += 1 # <<<<<<<<<<<<<< + * + * if new_shape < 0: */ - if (unlikely(!__pyx_v_A.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("A"); __PYX_ERR(0, 282, __pyx_L12_error) } - __pyx_t_21 = (__pyx_v_A.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_23 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((double)__PYX_NAN()); - __pyx_v_score = ((double)__PYX_NAN()); + __pyx_v_new_shape = (__pyx_v_new_shape + 1); - /* "cornac/models/efm/recom_efm.pyx":283 - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): - * i = A_uids[idx] # <<<<<<<<<<<<<< - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + /* "View.MemoryView":863 + * new_shape = (stop - start) // step + * + * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< + * new_shape += 1 + * */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_i = (*((int *) ( /* dim=0 */ (__pyx_v_A_uids.data + __pyx_t_24 * __pyx_v_A_uids.strides[0]) ))); + } - /* "cornac/models/efm/recom_efm.pyx":284 - * for idx in prange(A.shape[0]): - * i = A_uids[idx] - * j = A_iids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + /* "View.MemoryView":866 + * new_shape += 1 + * + * if new_shape < 0: # <<<<<<<<<<<<<< + * new_shape = 0 + * */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_j = (*((int *) ( /* dim=0 */ (__pyx_v_A_iids.data + __pyx_t_24 * __pyx_v_A_iids.strides[0]) ))); + __pyx_t_2 = (__pyx_v_new_shape < 0); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":285 - * i = A_uids[idx] - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ # <<<<<<<<<<<<<< - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] + /* "View.MemoryView":867 + * + * if new_shape < 0: + * new_shape = 0 # <<<<<<<<<<<<<< + * + * */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = 0; - __pyx_t_26 = __pyx_v_j; - __pyx_t_27 = 0; + __pyx_v_new_shape = 0; - /* "cornac/models/efm/recom_efm.pyx":286 - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) # <<<<<<<<<<<<<< - * score = A[idx] - * loss += (prediction - score) * (prediction - score) + /* "View.MemoryView":866 + * new_shape += 1 + * + * if new_shape < 0: # <<<<<<<<<<<<<< + * new_shape = 0 + * */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = 0; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = 0; - __pyx_v_prediction = (__pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) )))), 1) + __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_latent_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_28 * __pyx_v_H1.strides[0]) ) + __pyx_t_29 * __pyx_v_H1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_31 * __pyx_v_H2.strides[1]) )))), 1)); + } - /* "cornac/models/efm/recom_efm.pyx":287 - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): + /* "View.MemoryView":870 + * + * + * dst.strides[new_ndim] = stride * step # <<<<<<<<<<<<<< + * dst.shape[new_ndim] = new_shape + * dst.suboffsets[new_ndim] = suboffset */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_A.data + __pyx_t_31 * __pyx_v_A.strides[0]) ))); + (__pyx_v_dst->strides[__pyx_v_new_ndim]) = (__pyx_v_stride * __pyx_v_step); - /* "cornac/models/efm/recom_efm.pyx":288 - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] + /* "View.MemoryView":871 + * + * dst.strides[new_ndim] = stride * step + * dst.shape[new_ndim] = new_shape # <<<<<<<<<<<<<< + * dst.suboffsets[new_ndim] = suboffset + * */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); + (__pyx_v_dst->shape[__pyx_v_new_ndim]) = __pyx_v_new_shape; - /* "cornac/models/efm/recom_efm.pyx":289 - * score = A[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] + /* "View.MemoryView":872 + * dst.strides[new_ndim] = stride * step + * dst.shape[new_ndim] = new_shape + * dst.suboffsets[new_ndim] = suboffset # <<<<<<<<<<<<<< + * + * */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; + (__pyx_v_dst->suboffsets[__pyx_v_new_ndim]) = __pyx_v_suboffset; + } + __pyx_L3:; - /* "cornac/models/efm/recom_efm.pyx":290 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] # <<<<<<<<<<<<<< - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] + /* "View.MemoryView":875 + * + * + * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< + * dst.data += start * stride + * else: */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_31 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))); + __pyx_t_2 = ((__pyx_v_suboffset_dim[0]) < 0); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":291 - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] # <<<<<<<<<<<<<< - * U2_numerator[j, k] += score * U1[i, k] - * U2_denominator[j, k] += prediction * U1[i, k] + /* "View.MemoryView":876 + * + * if suboffset_dim[0] < 0: + * dst.data += start * stride # <<<<<<<<<<<<<< + * else: + * dst.suboffsets[suboffset_dim[0]] += start * stride */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_31 * __pyx_v_U2.strides[1]) )))); + __pyx_v_dst->data = (__pyx_v_dst->data + (__pyx_v_start * __pyx_v_stride)); - /* "cornac/models/efm/recom_efm.pyx":292 - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] # <<<<<<<<<<<<<< - * U2_denominator[j, k] += prediction * U1[i, k] + /* "View.MemoryView":875 + * * + * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< + * dst.data += start * stride + * else: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))); + goto __pyx_L19; + } - /* "cornac/models/efm/recom_efm.pyx":293 - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] - * U2_denominator[j, k] += prediction * U1[i, k] # <<<<<<<<<<<<<< + /* "View.MemoryView":878 + * dst.data += start * stride + * else: + * dst.suboffsets[suboffset_dim[0]] += start * stride # <<<<<<<<<<<<<< * - * for k in range(num_latent_factors): + * if suboffset >= 0: */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )))); - } + /*else*/ { + __pyx_t_3 = (__pyx_v_suboffset_dim[0]); + (__pyx_v_dst->suboffsets[__pyx_t_3]) = ((__pyx_v_dst->suboffsets[__pyx_t_3]) + (__pyx_v_start * __pyx_v_stride)); + } + __pyx_L19:; - /* "cornac/models/efm/recom_efm.pyx":295 - * U2_denominator[j, k] += prediction * U1[i, k] + /* "View.MemoryView":880 + * dst.suboffsets[suboffset_dim[0]] += start * stride * - * for k in range(num_latent_factors): # <<<<<<<<<<<<<< - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] + * if suboffset >= 0: # <<<<<<<<<<<<<< + * if not is_slice: + * if new_ndim == 0: */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; + __pyx_t_2 = (__pyx_v_suboffset >= 0); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":296 + /* "View.MemoryView":881 * - * for k in range(num_latent_factors): - * H1_numerator[i, k] += score * H2[j, k] # <<<<<<<<<<<<<< - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] + * if suboffset >= 0: + * if not is_slice: # <<<<<<<<<<<<<< + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_31 * __pyx_v_H2.strides[0]) ) + __pyx_t_30 * __pyx_v_H2.strides[1]) )))); + __pyx_t_2 = (!__pyx_v_is_slice); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":297 - * for k in range(num_latent_factors): - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] # <<<<<<<<<<<<<< - * H2_numerator[j, k] += score * H1[i, k] - * H2_denominator[j, k] += prediction * H1[i, k] + /* "View.MemoryView":882 + * if suboffset >= 0: + * if not is_slice: + * if new_ndim == 0: # <<<<<<<<<<<<<< + * dst.data = ( dst.data)[0] + suboffset + * else: */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_31 * __pyx_v_H2.strides[1]) )))); + __pyx_t_2 = (__pyx_v_new_ndim == 0); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":298 - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] # <<<<<<<<<<<<<< - * H2_denominator[j, k] += prediction * H1[i, k] - * + /* "View.MemoryView":883 + * if not is_slice: + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset # <<<<<<<<<<<<<< + * else: + * _err_dim(PyExc_IndexError, "All dimensions preceding dimension %d " */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_31 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))); + __pyx_v_dst->data = ((((char **)__pyx_v_dst->data)[0]) + __pyx_v_suboffset); - /* "cornac/models/efm/recom_efm.pyx":299 - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] - * H2_denominator[j, k] += prediction * H1[i, k] # <<<<<<<<<<<<<< - * - * for idx in prange(X.shape[0]): + /* "View.MemoryView":882 + * if suboffset >= 0: + * if not is_slice: + * if new_ndim == 0: # <<<<<<<<<<<<<< + * dst.data = ( dst.data)[0] + suboffset + * else: */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_30 * __pyx_v_H1.strides[0]) ) + __pyx_t_31 * __pyx_v_H1.strides[1]) )))); - } - } - } - } - } + goto __pyx_L22; + } - /* "cornac/models/efm/recom_efm.pyx":301 - * H2_denominator[j, k] += prediction * H1[i, k] - * - * for idx in prange(X.shape[0]): # <<<<<<<<<<<<<< - * i = X_uids[idx] - * j = X_aids[idx] + /* "View.MemoryView":885 + * dst.data = ( dst.data)[0] + suboffset + * else: + * _err_dim(PyExc_IndexError, "All dimensions preceding dimension %d " # <<<<<<<<<<<<<< + * "must be indexed and not sliced", dim) + * else: */ - if (unlikely(!__pyx_v_X.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("X"); __PYX_ERR(0, 301, __pyx_L12_error) } - __pyx_t_23 = (__pyx_v_X.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_21 = (__pyx_t_23 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_21 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((double)__PYX_NAN()); - __pyx_v_score = ((double)__PYX_NAN()); + /*else*/ { - /* "cornac/models/efm/recom_efm.pyx":302 + /* "View.MemoryView":886 + * else: + * _err_dim(PyExc_IndexError, "All dimensions preceding dimension %d " + * "must be indexed and not sliced", dim) # <<<<<<<<<<<<<< + * else: + * suboffset_dim[0] = new_ndim + */ + __pyx_t_3 = __pyx_memoryview_err_dim(PyExc_IndexError, __pyx_kp_s_All_dimensions_preceding_dimensi, __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 885, __pyx_L1_error) + } + __pyx_L22:; + + /* "View.MemoryView":881 * - * for idx in prange(X.shape[0]): - * i = X_uids[idx] # <<<<<<<<<<<<<< - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * if suboffset >= 0: + * if not is_slice: # <<<<<<<<<<<<<< + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_i = (*((int *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_31 * __pyx_v_X_uids.strides[0]) ))); + goto __pyx_L21; + } - /* "cornac/models/efm/recom_efm.pyx":303 - * for idx in prange(X.shape[0]): - * i = X_uids[idx] - * j = X_aids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] + /* "View.MemoryView":888 + * "must be indexed and not sliced", dim) + * else: + * suboffset_dim[0] = new_ndim # <<<<<<<<<<<<<< + * + * return 0 */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_j = (*((int *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_31 * __pyx_v_X_aids.strides[0]) ))); + /*else*/ { + (__pyx_v_suboffset_dim[0]) = __pyx_v_new_ndim; + } + __pyx_L21:; - /* "cornac/models/efm/recom_efm.pyx":304 - * i = X_uids[idx] - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< - * score = X[idx] - * loss += (prediction - score) * (prediction - score) + /* "View.MemoryView":880 + * dst.suboffsets[suboffset_dim[0]] += start * stride + * + * if suboffset >= 0: # <<<<<<<<<<<<<< + * if not is_slice: + * if new_ndim == 0: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = 0; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = 0; - __pyx_v_prediction = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) )))), 1); + } - /* "cornac/models/efm/recom_efm.pyx":305 - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): + /* "View.MemoryView":890 + * suboffset_dim[0] = new_ndim + * + * return 0 # <<<<<<<<<<<<<< + * + * */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_28 * __pyx_v_X.strides[0]) ))); + __pyx_r = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":306 - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] + /* "View.MemoryView":793 + * + * @cname('__pyx_memoryview_slice_memviewslice') + * cdef int slice_memviewslice( # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - /* "cornac/models/efm/recom_efm.pyx":307 - * score = X[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + /* function exit code */ + __pyx_L1_error:; + #ifdef WITH_THREAD + __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.slice_memviewslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":896 + * + * @cname('__pyx_pybuffer_index') + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; - /* "cornac/models/efm/recom_efm.pyx":308 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] # <<<<<<<<<<<<<< - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] - */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_28 * __pyx_v_U1.strides[0]) ) + __pyx_t_29 * __pyx_v_U1.strides[1]) )))); +static char *__pyx_pybuffer_index(Py_buffer *__pyx_v_view, char *__pyx_v_bufp, Py_ssize_t __pyx_v_index, Py_ssize_t __pyx_v_dim) { + Py_ssize_t __pyx_v_shape; + Py_ssize_t __pyx_v_stride; + Py_ssize_t __pyx_v_suboffset; + Py_ssize_t __pyx_v_itemsize; + char *__pyx_v_resultp; + char *__pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + Py_UCS4 __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("pybuffer_index", 0); - /* "cornac/models/efm/recom_efm.pyx":309 - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] # <<<<<<<<<<<<<< - * U1_numerator[i, k] += lambda_x * score * V[j, k] - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] + /* "View.MemoryView":898 + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 # <<<<<<<<<<<<<< + * cdef Py_ssize_t itemsize = view.itemsize + * cdef char *resultp */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_29 * __pyx_v_U1.strides[0]) ) + __pyx_t_28 * __pyx_v_U1.strides[1]) )))); + __pyx_v_suboffset = -1L; - /* "cornac/models/efm/recom_efm.pyx":310 - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] # <<<<<<<<<<<<<< - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] + /* "View.MemoryView":899 + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + * cdef Py_ssize_t itemsize = view.itemsize # <<<<<<<<<<<<<< + * cdef char *resultp * */ - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_28 * __pyx_v_V.strides[0]) ) + __pyx_t_29 * __pyx_v_V.strides[1]) )))); + __pyx_t_1 = __pyx_v_view->itemsize; + __pyx_v_itemsize = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":311 - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] # <<<<<<<<<<<<<< + /* "View.MemoryView":902 + * cdef char *resultp * - * for idx in prange(Y.shape[0]): + * if view.ndim == 0: # <<<<<<<<<<<<<< + * shape = view.len // itemsize + * stride = itemsize */ - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) )))); - } - } - } - } - } + __pyx_t_2 = (__pyx_v_view->ndim == 0); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":313 - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] + /* "View.MemoryView":903 * - * for idx in prange(Y.shape[0]): # <<<<<<<<<<<<<< - * i = Y_iids[idx] - * j = Y_aids[idx] + * if view.ndim == 0: + * shape = view.len // itemsize # <<<<<<<<<<<<<< + * stride = itemsize + * else: */ - if (unlikely(!__pyx_v_Y.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("Y"); __PYX_ERR(0, 313, __pyx_L12_error) } - __pyx_t_21 = (__pyx_v_Y.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_23 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((double)__PYX_NAN()); - __pyx_v_score = ((double)__PYX_NAN()); + if (unlikely(__pyx_v_itemsize == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(1, 903, __pyx_L1_error) + } + else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_view->len))) { + PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); + __PYX_ERR(1, 903, __pyx_L1_error) + } + __pyx_v_shape = __Pyx_div_Py_ssize_t(__pyx_v_view->len, __pyx_v_itemsize); - /* "cornac/models/efm/recom_efm.pyx":314 - * - * for idx in prange(Y.shape[0]): - * i = Y_iids[idx] # <<<<<<<<<<<<<< - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + /* "View.MemoryView":904 + * if view.ndim == 0: + * shape = view.len // itemsize + * stride = itemsize # <<<<<<<<<<<<<< + * else: + * shape = view.shape[dim] */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_i = (*((int *) ( /* dim=0 */ (__pyx_v_Y_iids.data + __pyx_t_28 * __pyx_v_Y_iids.strides[0]) ))); + __pyx_v_stride = __pyx_v_itemsize; - /* "cornac/models/efm/recom_efm.pyx":315 - * for idx in prange(Y.shape[0]): - * i = Y_iids[idx] - * j = Y_aids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] + /* "View.MemoryView":902 + * cdef char *resultp + * + * if view.ndim == 0: # <<<<<<<<<<<<<< + * shape = view.len // itemsize + * stride = itemsize */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_j = (*((int *) ( /* dim=0 */ (__pyx_v_Y_aids.data + __pyx_t_28 * __pyx_v_Y_aids.strides[0]) ))); + goto __pyx_L3; + } - /* "cornac/models/efm/recom_efm.pyx":316 - * i = Y_iids[idx] - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) + /* "View.MemoryView":906 + * stride = itemsize + * else: + * shape = view.shape[dim] # <<<<<<<<<<<<<< + * stride = view.strides[dim] + * if view.suboffsets != NULL: */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = 0; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = 0; - __pyx_v_prediction = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_28 * __pyx_v_U2.strides[0]) ) + __pyx_t_29 * __pyx_v_U2.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))), 1); + /*else*/ { + __pyx_v_shape = (__pyx_v_view->shape[__pyx_v_dim]); - /* "cornac/models/efm/recom_efm.pyx":317 - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): + /* "View.MemoryView":907 + * else: + * shape = view.shape[dim] + * stride = view.strides[dim] # <<<<<<<<<<<<<< + * if view.suboffsets != NULL: + * suboffset = view.suboffsets[dim] */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_Y.data + __pyx_t_31 * __pyx_v_Y.strides[0]) ))); + __pyx_v_stride = (__pyx_v_view->strides[__pyx_v_dim]); - /* "cornac/models/efm/recom_efm.pyx":318 - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] + /* "View.MemoryView":908 + * shape = view.shape[dim] + * stride = view.strides[dim] + * if view.suboffsets != NULL: # <<<<<<<<<<<<<< + * suboffset = view.suboffsets[dim] + * */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); + __pyx_t_2 = (__pyx_v_view->suboffsets != NULL); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":319 - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + /* "View.MemoryView":909 + * stride = view.strides[dim] + * if view.suboffsets != NULL: + * suboffset = view.suboffsets[dim] # <<<<<<<<<<<<<< + * + * if index < 0: */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; + __pyx_v_suboffset = (__pyx_v_view->suboffsets[__pyx_v_dim]); - /* "cornac/models/efm/recom_efm.pyx":320 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] # <<<<<<<<<<<<<< - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] + /* "View.MemoryView":908 + * shape = view.shape[dim] + * stride = view.strides[dim] + * if view.suboffsets != NULL: # <<<<<<<<<<<<<< + * suboffset = view.suboffsets[dim] + * */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_31 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))); + } + } + __pyx_L3:; - /* "cornac/models/efm/recom_efm.pyx":321 - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] # <<<<<<<<<<<<<< - * U2_numerator[i, k] += lambda_y * score * V[j, k] - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] + /* "View.MemoryView":911 + * suboffset = view.suboffsets[dim] + * + * if index < 0: # <<<<<<<<<<<<<< + * index += view.shape[dim] + * if index < 0: */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_31 * __pyx_v_U2.strides[1]) )))); + __pyx_t_2 = (__pyx_v_index < 0); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":322 - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] # <<<<<<<<<<<<<< - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] + /* "View.MemoryView":912 * + * if index < 0: + * index += view.shape[dim] # <<<<<<<<<<<<<< + * if index < 0: + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )))); + __pyx_v_index = (__pyx_v_index + (__pyx_v_view->shape[__pyx_v_dim])); - /* "cornac/models/efm/recom_efm.pyx":323 - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] # <<<<<<<<<<<<<< + /* "View.MemoryView":913 + * if index < 0: + * index += view.shape[dim] + * if index < 0: # <<<<<<<<<<<<<< + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" * - * # update V */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))); - } - } - } - } - } + __pyx_t_2 = (__pyx_v_index < 0); + if (unlikely(__pyx_t_2)) { - /* "cornac/models/efm/recom_efm.pyx":326 + /* "View.MemoryView":914 + * index += view.shape[dim] + * if index < 0: + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" # <<<<<<<<<<<<<< * - * # update V - * for i in prange(num_aspects): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] + * if index >= shape: */ - __pyx_t_3 = __pyx_v_num_aspects; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - double __pyx_parallel_temp2 = ((double)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_35 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_35 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_35; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 914, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = 0; + __pyx_t_4 = 127; + __Pyx_INCREF(__pyx_kp_u_Out_of_bounds_on_buffer_access_a); + __pyx_t_1 += 37; + __Pyx_GIVEREF(__pyx_kp_u_Out_of_bounds_on_buffer_access_a); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Out_of_bounds_on_buffer_access_a); + __pyx_t_5 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_dim, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 914, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5); + __pyx_t_5 = 0; + __Pyx_INCREF(__pyx_kp_u__7); + __pyx_t_1 += 1; + __Pyx_GIVEREF(__pyx_kp_u__7); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__7); + __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 914, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_builtin_IndexError, __pyx_t_5, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __PYX_ERR(1, 914, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":327 - * # update V - * for i in prange(num_aspects): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + /* "View.MemoryView":913 + * if index < 0: + * index += view.shape[dim] + * if index < 0: # <<<<<<<<<<<<<< + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" + * */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + } - /* "cornac/models/efm/recom_efm.pyx":328 - * for i in prange(num_aspects): - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] # <<<<<<<<<<<<<< - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) + /* "View.MemoryView":911 + * suboffset = view.suboffsets[dim] + * + * if index < 0: # <<<<<<<<<<<<<< + * index += view.shape[dim] + * if index < 0: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_v * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) ))))); + } - /* "cornac/models/efm/recom_efm.pyx":329 - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps # <<<<<<<<<<<<<< - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) + /* "View.MemoryView":916 + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" + * + * if index >= shape: # <<<<<<<<<<<<<< + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" * */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_27 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += (((((*((int *) ( /* dim=0 */ (__pyx_v_X_aspect_counts.data + __pyx_t_28 * __pyx_v_X_aspect_counts.strides[0]) ))) + (*((int *) ( /* dim=0 */ (__pyx_v_Y_aspect_counts.data + __pyx_t_29 * __pyx_v_Y_aspect_counts.strides[0]) )))) * __pyx_v_lambda_v) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))) + __pyx_v_eps); + __pyx_t_2 = (__pyx_v_index >= __pyx_v_shape); + if (unlikely(__pyx_t_2)) { - /* "cornac/models/efm/recom_efm.pyx":330 - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) # <<<<<<<<<<<<<< + /* "View.MemoryView":917 * - * # update U1, H1 + * if index >= shape: + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" # <<<<<<<<<<<<<< + * + * resultp = bufp + index * stride */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_V_numerator.diminfo[1].strides)); - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_V_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 330, __pyx_L42_error) - } - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L47; - __pyx_L42_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L46; - __pyx_L46:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates12) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L47:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 917, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = 0; + __pyx_t_4 = 127; + __Pyx_INCREF(__pyx_kp_u_Out_of_bounds_on_buffer_access_a); + __pyx_t_1 += 37; + __Pyx_GIVEREF(__pyx_kp_u_Out_of_bounds_on_buffer_access_a); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Out_of_bounds_on_buffer_access_a); + __pyx_t_3 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_dim, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 917, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u__7); + __pyx_t_1 += 1; + __Pyx_GIVEREF(__pyx_kp_u__7); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u__7); + __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 917, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_Raise(__pyx_builtin_IndexError, __pyx_t_3, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 917, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":333 + /* "View.MemoryView":916 + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" + * + * if index >= shape: # <<<<<<<<<<<<<< + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" * - * # update U1, H1 - * for i in prange(num_users): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] */ - __pyx_t_35 = __pyx_v_num_users; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - double __pyx_parallel_temp2 = ((double)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_3 = (__pyx_t_35 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_3 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_3; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + } - /* "cornac/models/efm/recom_efm.pyx":334 - * # update U1, H1 - * for i in prange(num_users): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + /* "View.MemoryView":919 + * raise IndexError, f"Out of bounds on buffer access (axis {dim})" + * + * resultp = bufp + index * stride # <<<<<<<<<<<<<< + * if suboffset >= 0: + * resultp = ( resultp)[0] + suboffset */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + __pyx_v_resultp = (__pyx_v_bufp + (__pyx_v_index * __pyx_v_stride)); - /* "cornac/models/efm/recom_efm.pyx":335 - * for i in prange(num_users): - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] # <<<<<<<<<<<<<< - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + /* "View.MemoryView":920 + * + * resultp = bufp + index * stride + * if suboffset >= 0: # <<<<<<<<<<<<<< + * resultp = ( resultp)[0] + suboffset + * */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_29 * __pyx_v_U1.strides[0]) ) + __pyx_t_28 * __pyx_v_U1.strides[1]) ))))); + __pyx_t_2 = (__pyx_v_suboffset >= 0); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":336 - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps # <<<<<<<<<<<<<< - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): + /* "View.MemoryView":921 + * resultp = bufp + index * stride + * if suboffset >= 0: + * resultp = ( resultp)[0] + suboffset # <<<<<<<<<<<<<< + * + * return resultp */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_26 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (((((*((int *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_28 * __pyx_v_A_user_counts.strides[0]) ))) + (*((int *) ( /* dim=0 */ (__pyx_v_X_user_counts.data + __pyx_t_29 * __pyx_v_X_user_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))) + __pyx_v_eps); + __pyx_v_resultp = ((((char **)__pyx_v_resultp)[0]) + __pyx_v_suboffset); - /* "cornac/models/efm/recom_efm.pyx":337 - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) # <<<<<<<<<<<<<< - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] + /* "View.MemoryView":920 + * + * resultp = bufp + index * stride + * if suboffset >= 0: # <<<<<<<<<<<<<< + * resultp = ( resultp)[0] + suboffset + * */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_U1_numerator.diminfo[1].strides)); - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U1_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_36 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 337, __pyx_L50_error) - } - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )) *= sqrt((__pyx_t_37 / __pyx_t_36)); - } + } - /* "cornac/models/efm/recom_efm.pyx":338 - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): # <<<<<<<<<<<<<< - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + /* "View.MemoryView":923 + * resultp = ( resultp)[0] + suboffset + * + * return resultp # <<<<<<<<<<<<<< + * + * */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + __pyx_r = __pyx_v_resultp; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":339 - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] # <<<<<<<<<<<<<< - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) + /* "View.MemoryView":896 + * + * @cname('__pyx_pybuffer_index') + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_31 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_29 * __pyx_v_H1.strides[0]) ) + __pyx_t_28 * __pyx_v_H1.strides[1]) ))))); - /* "cornac/models/efm/recom_efm.pyx":340 - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps # <<<<<<<<<<<<<< - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.pybuffer_index", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":929 * - */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += ((((*((int *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_28 * __pyx_v_A_user_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_29 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))) + __pyx_v_eps); - - /* "cornac/models/efm/recom_efm.pyx":341 - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) # <<<<<<<<<<<<<< + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) except -1 nogil: # <<<<<<<<<<<<<< + * cdef int ndim = memslice.memview.view.ndim * - * # update U2, H2 */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H1_numerator.diminfo[1].strides)); - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_H1_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 341, __pyx_L50_error) - } - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_30 * __pyx_v_H1.strides[0]) ) + __pyx_t_29 * __pyx_v_H1.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L57; - __pyx_L50_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L56; - __pyx_L56:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates13) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L57:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } - /* "cornac/models/efm/recom_efm.pyx":344 +static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) { + int __pyx_v_ndim; + Py_ssize_t *__pyx_v_shape; + Py_ssize_t *__pyx_v_strides; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_r; + int __pyx_t_1; + Py_ssize_t *__pyx_t_2; + long __pyx_t_3; + long __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + int __pyx_t_7; + int __pyx_t_8; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save; + #endif + + /* "View.MemoryView":930 + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) except -1 nogil: + * cdef int ndim = memslice.memview.view.ndim # <<<<<<<<<<<<<< * - * # update U2, H2 - * for i in prange(num_items): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] + * cdef Py_ssize_t *shape = memslice.shape */ - __pyx_t_3 = __pyx_v_num_items; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - double __pyx_parallel_temp2 = ((double)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_35 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_35 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_35; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + __pyx_t_1 = __pyx_v_memslice->memview->view.ndim; + __pyx_v_ndim = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":345 - * # update U2, H2 - * for i in prange(num_items): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + /* "View.MemoryView":932 + * cdef int ndim = memslice.memview.view.ndim + * + * cdef Py_ssize_t *shape = memslice.shape # <<<<<<<<<<<<<< + * cdef Py_ssize_t *strides = memslice.strides + * */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + __pyx_t_2 = __pyx_v_memslice->shape; + __pyx_v_shape = __pyx_t_2; - /* "cornac/models/efm/recom_efm.pyx":346 - * for i in prange(num_items): - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] # <<<<<<<<<<<<<< - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + /* "View.MemoryView":933 + * + * cdef Py_ssize_t *shape = memslice.shape + * cdef Py_ssize_t *strides = memslice.strides # <<<<<<<<<<<<<< + * + * */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_28 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_29 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_28 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) ))))); + __pyx_t_2 = __pyx_v_memslice->strides; + __pyx_v_strides = __pyx_t_2; - /* "cornac/models/efm/recom_efm.pyx":347 - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps # <<<<<<<<<<<<<< - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): + /* "View.MemoryView":937 + * + * cdef int i, j + * for i in range(ndim // 2): # <<<<<<<<<<<<<< + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] */ - __pyx_t_27 = __pyx_v_i; - __pyx_t_28 = __pyx_v_i; - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_31 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (((((*((int *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_27 * __pyx_v_A_item_counts.strides[0]) ))) + (*((int *) ( /* dim=0 */ (__pyx_v_Y_item_counts.data + __pyx_t_28 * __pyx_v_Y_item_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_29 * __pyx_v_U2.strides[1]) )))) + __pyx_v_eps); + __pyx_t_3 = __Pyx_div_long(__pyx_v_ndim, 2); + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) { + __pyx_v_i = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":348 - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) # <<<<<<<<<<<<<< - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] + /* "View.MemoryView":938 + * cdef int i, j + * for i in range(ndim // 2): + * j = ndim - 1 - i # <<<<<<<<<<<<<< + * strides[i], strides[j] = strides[j], strides[i] + * shape[i], shape[j] = shape[j], shape[i] */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U2_numerator.diminfo[1].strides)); - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_36 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 348, __pyx_L60_error) - } - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_29 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )) *= sqrt((__pyx_t_37 / __pyx_t_36)); - } + __pyx_v_j = ((__pyx_v_ndim - 1) - __pyx_v_i); - /* "cornac/models/efm/recom_efm.pyx":349 - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): # <<<<<<<<<<<<<< - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + /* "View.MemoryView":939 + * for i in range(ndim // 2): + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] # <<<<<<<<<<<<<< + * shape[i], shape[j] = shape[j], shape[i] + * */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + __pyx_t_5 = (__pyx_v_strides[__pyx_v_j]); + __pyx_t_6 = (__pyx_v_strides[__pyx_v_i]); + (__pyx_v_strides[__pyx_v_i]) = __pyx_t_5; + (__pyx_v_strides[__pyx_v_j]) = __pyx_t_6; - /* "cornac/models/efm/recom_efm.pyx":350 - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] # <<<<<<<<<<<<<< - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + /* "View.MemoryView":940 + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] + * shape[i], shape[j] = shape[j], shape[i] # <<<<<<<<<<<<<< + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_29 * __pyx_v_H2.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_28 * __pyx_v_H2.strides[0]) ) + __pyx_t_27 * __pyx_v_H2.strides[1]) ))))); + __pyx_t_6 = (__pyx_v_shape[__pyx_v_j]); + __pyx_t_5 = (__pyx_v_shape[__pyx_v_i]); + (__pyx_v_shape[__pyx_v_i]) = __pyx_t_6; + (__pyx_v_shape[__pyx_v_j]) = __pyx_t_5; - /* "cornac/models/efm/recom_efm.pyx":351 - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps # <<<<<<<<<<<<<< - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + /* "View.MemoryView":942 + * shape[i], shape[j] = shape[j], shape[i] + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< + * _err(PyExc_ValueError, "Cannot transpose memoryview with indirect dimensions") * */ - __pyx_t_27 = __pyx_v_i; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_30 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += ((((*((int *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_27 * __pyx_v_A_item_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_28 * __pyx_v_H2.strides[0]) ) + __pyx_t_29 * __pyx_v_H2.strides[1]) )))) + __pyx_v_eps); + __pyx_t_8 = ((__pyx_v_memslice->suboffsets[__pyx_v_i]) >= 0); + if (!__pyx_t_8) { + } else { + __pyx_t_7 = __pyx_t_8; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_8 = ((__pyx_v_memslice->suboffsets[__pyx_v_j]) >= 0); + __pyx_t_7 = __pyx_t_8; + __pyx_L6_bool_binop_done:; + if (__pyx_t_7) { - /* "cornac/models/efm/recom_efm.pyx":352 - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) # <<<<<<<<<<<<<< + /* "View.MemoryView":943 * - * if self.verbose: + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: + * _err(PyExc_ValueError, "Cannot transpose memoryview with indirect dimensions") # <<<<<<<<<<<<<< + * + * return 0 */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H2_numerator.diminfo[1].strides)); - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H2_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 352, __pyx_L60_error) - } - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_29 * __pyx_v_H2.strides[0]) ) + __pyx_t_28 * __pyx_v_H2.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L67; - __pyx_L60_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L66; - __pyx_L66:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates14) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L67:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } - goto __pyx_L69; - __pyx_L12_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L69; - __pyx_L69:; - #ifdef _OPENMP - Py_END_ALLOW_THREADS - #else -{ -#ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #endif /* _OPENMP */ - /* Clean up any temporaries */ - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - #ifndef _OPENMP -} -#endif /* _OPENMP */ - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L8_error; - } - } - } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } + __pyx_t_9 = __pyx_memoryview_err(PyExc_ValueError, __pyx_kp_s_Cannot_transpose_memoryview_with); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 943, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":280 - * H2_denominator.fill(0) + /* "View.MemoryView":942 + * shape[i], shape[j] = shape[j], shape[i] + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< + * _err(PyExc_ValueError, "Cannot transpose memoryview with indirect dimensions") * - * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L9; - } - __pyx_L8_error: { - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L1_error; - } - __pyx_L9:; - } } + } - /* "cornac/models/efm/recom_efm.pyx":354 - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + /* "View.MemoryView":945 + * _err(PyExc_ValueError, "Cannot transpose memoryview with indirect dimensions") + * + * return 0 # <<<<<<<<<<<<<< * - * if self.verbose: # <<<<<<<<<<<<<< - * print('iter: %d, loss: %f' % (t, loss)) * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 354, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_38 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_38 < 0)) __PYX_ERR(0, 354, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_38) { + __pyx_r = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":355 + /* "View.MemoryView":929 * - * if self.verbose: - * print('iter: %d, loss: %f' % (t, loss)) # <<<<<<<<<<<<<< + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) except -1 nogil: # <<<<<<<<<<<<<< + * cdef int ndim = memslice.memview.view.ndim * - * if self.verbose: */ - __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_23 = 0; - __pyx_t_39 = 127; - __Pyx_INCREF(__pyx_kp_u_iter); - __pyx_t_23 += 6; - __Pyx_GIVEREF(__pyx_kp_u_iter); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_iter); - __pyx_t_6 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_t), __pyx_n_u_d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_39 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_39) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_39; - __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_6 = 0; - __Pyx_INCREF(__pyx_kp_u_loss); - __pyx_t_23 += 8; - __Pyx_GIVEREF(__pyx_kp_u_loss); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_loss); - __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_Format(__pyx_t_6, __pyx_n_u_f); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_39 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_39) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_39; - __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_23, __pyx_t_39); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":354 - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + /* function exit code */ + __pyx_L1_error:; + #ifdef WITH_THREAD + __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.transpose_memslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":963 + * cdef int (*to_dtype_func)(char *, object) except 0 * - * if self.verbose: # <<<<<<<<<<<<<< - * print('iter: %d, loss: %f' % (t, loss)) + * def __dealloc__(self): # <<<<<<<<<<<<<< + * __PYX_XCLEAR_MEMVIEW(&self.from_slice, 1) * */ - } - /* "cornac/models/efm/recom_efm.pyx":267 - * floating eps = 1e-9 +/* Python wrapper */ +static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":964 + * + * def __dealloc__(self): + * __PYX_XCLEAR_MEMVIEW(&self.from_slice, 1) # <<<<<<<<<<<<<< * - * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< - * loss = 0. - * U1_numerator.fill(0) + * cdef convert_item_to_object(self, char *itemp): */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_XCLEAR_MEMVIEW((&__pyx_v_self->from_slice), 1); - /* "cornac/models/efm/recom_efm.pyx":357 - * print('iter: %d, loss: %f' % (t, loss)) + /* "View.MemoryView":963 + * cdef int (*to_dtype_func)(char *, object) except 0 * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Optimization finished!') + * def __dealloc__(self): # <<<<<<<<<<<<<< + * __PYX_XCLEAR_MEMVIEW(&self.from_slice, 1) * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_38 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_38 < 0)) __PYX_ERR(0, 357, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_38) { - /* "cornac/models/efm/recom_efm.pyx":358 + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":966 + * __PYX_XCLEAR_MEMVIEW(&self.from_slice, 1) * - * if self.verbose: - * print('Optimization finished!') # <<<<<<<<<<<<<< + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) + */ + +static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("convert_item_to_object", 0); + + /* "View.MemoryView":967 * - * def _build_matrices(self, data_set): + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: # <<<<<<<<<<<<<< + * return self.to_object_func(itemp) + * else: */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = (__pyx_v_self->to_object_func != NULL); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":357 - * print('iter: %d, loss: %f' % (t, loss)) + /* "View.MemoryView":968 + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) # <<<<<<<<<<<<<< + * else: + * return memoryview.convert_item_to_object(self, itemp) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_v_self->to_object_func(__pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 968, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":967 * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Optimization finished!') + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: # <<<<<<<<<<<<<< + * return self.to_object_func(itemp) + * else: + */ + } + + /* "View.MemoryView":970 + * return self.to_object_func(itemp) + * else: + * return memoryview.convert_item_to_object(self, itemp) # <<<<<<<<<<<<<< * + * cdef assign_item_from_object(self, char *itemp, object value): */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_convert_item_to_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 970, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; } - /* "cornac/models/efm/recom_efm.pyx":230 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def _fit_efm(self, int num_threads, # <<<<<<<<<<<<<< - * floating[:] A, integral[:] A_uids, integral[:] A_iids, integral[:] A_user_counts, integral[:] A_item_counts, - * floating[:] X, integral[:] X_uids, integral[:] X_aids, integral[:] X_user_counts, integral[:] X_aspect_counts, + /* "View.MemoryView":966 + * __PYX_XCLEAR_MEMVIEW(&self.from_slice, 1) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) */ /* 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_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - goto __pyx_L2; + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_U1_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_U1_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_U2_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_U2_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_V_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_V_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_H1_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_H1_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_H2_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_H2_denominator); - __Pyx_XDECREF(__pyx_v_t); - __PYX_XDEC_MEMVIEW(&__pyx_v_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_user_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_item_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_user_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aspect_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_item_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_V, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_H1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_H2, 1); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* Python wrapper */ -static PyObject *__pyx_fuse_1_2__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_29_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_fuse_1_2__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_29_fit_efm = {"__pyx_fuse_1_2_fit_efm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1_2__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_29_fit_efm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm}; -static PyObject *__pyx_fuse_1_2__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_29_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - int __pyx_v_num_threads; - __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_A_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_X_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_Y_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_U2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_V = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_H1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_memviewslice __pyx_v_H2 = { 0, 0, { 0 }, { 0 }, { 0 } }; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_fit_efm (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_num_threads,&__pyx_n_s_A,&__pyx_n_s_A_uids,&__pyx_n_s_A_iids,&__pyx_n_s_A_user_counts,&__pyx_n_s_A_item_counts,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_aids,&__pyx_n_s_X_user_counts,&__pyx_n_s_X_aspect_counts,&__pyx_n_s_Y,&__pyx_n_s_Y_iids,&__pyx_n_s_Y_aids,&__pyx_n_s_Y_item_counts,&__pyx_n_s_Y_aspect_counts,&__pyx_n_s_U1,&__pyx_n_s_U2,&__pyx_n_s_V,&__pyx_n_s_H1,&__pyx_n_s_H2,0}; - PyObject* values[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - CYTHON_FALLTHROUGH; - case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - CYTHON_FALLTHROUGH; - case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - CYTHON_FALLTHROUGH; - case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - CYTHON_FALLTHROUGH; - case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - CYTHON_FALLTHROUGH; - case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - CYTHON_FALLTHROUGH; - case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - CYTHON_FALLTHROUGH; - case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - CYTHON_FALLTHROUGH; - case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - CYTHON_FALLTHROUGH; - case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - CYTHON_FALLTHROUGH; - case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - CYTHON_FALLTHROUGH; - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 1); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 2); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 3); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 4); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_user_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 5); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A_item_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 6); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 7); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_uids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 8); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 9: - if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 9); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 10: - if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_user_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 10); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 11: - if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_X_aspect_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 11); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 12: - if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 12); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 13: - if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_iids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 13); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 14: - if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_aids)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 14); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 15: - if (likely((values[15] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_item_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 15); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 16: - if (likely((values[16] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Y_aspect_counts)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 16); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 17: - if (likely((values[17] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 17); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 18: - if (likely((values[18] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 18); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 19: - if (likely((values[19] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 19); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 20: - if (likely((values[20] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_H1)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 20); __PYX_ERR(0, 230, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 21: - if (likely((values[21] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_H2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 21); __PYX_ERR(0, 230, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_fit_efm") < 0)) __PYX_ERR(0, 230, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 22) { - 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); - values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - values[11] = PyTuple_GET_ITEM(__pyx_args, 11); - values[12] = PyTuple_GET_ITEM(__pyx_args, 12); - values[13] = PyTuple_GET_ITEM(__pyx_args, 13); - values[14] = PyTuple_GET_ITEM(__pyx_args, 14); - values[15] = PyTuple_GET_ITEM(__pyx_args, 15); - values[16] = PyTuple_GET_ITEM(__pyx_args, 16); - values[17] = PyTuple_GET_ITEM(__pyx_args, 17); - values[18] = PyTuple_GET_ITEM(__pyx_args, 18); - values[19] = PyTuple_GET_ITEM(__pyx_args, 19); - values[20] = PyTuple_GET_ITEM(__pyx_args, 20); - values[21] = PyTuple_GET_ITEM(__pyx_args, 21); - } - __pyx_v_self = values[0]; - __pyx_v_num_threads = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L3_error) - __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_uids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_iids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_user_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_A_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_item_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) - __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_user_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_X_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aspect_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) - __pyx_v_Y = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_iids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_item_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_Y_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aspect_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) - __pyx_v_U1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_U2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_V = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_V.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_H1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[20], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - __pyx_v_H2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 230, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_28_fit_efm(__pyx_self, __pyx_v_self, __pyx_v_num_threads, __pyx_v_A, __pyx_v_A_uids, __pyx_v_A_iids, __pyx_v_A_user_counts, __pyx_v_A_item_counts, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_aids, __pyx_v_X_user_counts, __pyx_v_X_aspect_counts, __pyx_v_Y, __pyx_v_Y_iids, __pyx_v_Y_aids, __pyx_v_Y_item_counts, __pyx_v_Y_aspect_counts, __pyx_v_U1, __pyx_v_U2, __pyx_v_V, __pyx_v_H1, __pyx_v_H2); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} +/* "View.MemoryView":972 + * return memoryview.convert_item_to_object(self, itemp) + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) + */ -static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_28_fit_efm(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_A_uids, __Pyx_memviewslice __pyx_v_A_iids, __Pyx_memviewslice __pyx_v_A_user_counts, __Pyx_memviewslice __pyx_v_A_item_counts, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_X_user_counts, __Pyx_memviewslice __pyx_v_X_aspect_counts, __Pyx_memviewslice __pyx_v_Y, __Pyx_memviewslice __pyx_v_Y_iids, __Pyx_memviewslice __pyx_v_Y_aids, __Pyx_memviewslice __pyx_v_Y_item_counts, __Pyx_memviewslice __pyx_v_Y_aspect_counts, __Pyx_memviewslice __pyx_v_U1, __Pyx_memviewslice __pyx_v_U2, __Pyx_memviewslice __pyx_v_V, __Pyx_memviewslice __pyx_v_H1, __Pyx_memviewslice __pyx_v_H2) { - long __pyx_v_num_users; - long __pyx_v_num_items; - long __pyx_v_num_aspects; - int __pyx_v_num_explicit_factors; - int __pyx_v_num_latent_factors; - double __pyx_v_lambda_x; - double __pyx_v_lambda_y; - double __pyx_v_lambda_u; - double __pyx_v_lambda_h; - double __pyx_v_lambda_v; - double __pyx_v_prediction; - double __pyx_v_score; - double __pyx_v_loss; - PyArrayObject *__pyx_v_U1_numerator = 0; - PyArrayObject *__pyx_v_U1_denominator = 0; - PyArrayObject *__pyx_v_U2_numerator = 0; - PyArrayObject *__pyx_v_U2_denominator = 0; - PyArrayObject *__pyx_v_V_numerator = 0; - PyArrayObject *__pyx_v_V_denominator = 0; - PyArrayObject *__pyx_v_H1_numerator = 0; - PyArrayObject *__pyx_v_H1_denominator = 0; - PyArrayObject *__pyx_v_H2_numerator = 0; - PyArrayObject *__pyx_v_H2_denominator = 0; - int __pyx_v_i; - int __pyx_v_j; - int __pyx_v_k; - int __pyx_v_idx; - double __pyx_v_eps; - PyObject *__pyx_v_t = NULL; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_denominator; - __Pyx_Buffer __pyx_pybuffer_H1_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_numerator; - __Pyx_Buffer __pyx_pybuffer_H1_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_denominator; - __Pyx_Buffer __pyx_pybuffer_H2_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_numerator; - __Pyx_Buffer __pyx_pybuffer_H2_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_denominator; - __Pyx_Buffer __pyx_pybuffer_U1_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_numerator; - __Pyx_Buffer __pyx_pybuffer_U1_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_denominator; - __Pyx_Buffer __pyx_pybuffer_U2_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_numerator; - __Pyx_Buffer __pyx_pybuffer_U2_numerator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_V_denominator; - __Pyx_Buffer __pyx_pybuffer_V_denominator; - __Pyx_LocalBuf_ND __pyx_pybuffernd_V_numerator; - __Pyx_Buffer __pyx_pybuffer_V_numerator; +static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - long __pyx_t_3; - int __pyx_t_4; - double __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyArrayObject *__pyx_t_9 = NULL; - PyArrayObject *__pyx_t_10 = NULL; - PyArrayObject *__pyx_t_11 = NULL; - PyArrayObject *__pyx_t_12 = NULL; - PyArrayObject *__pyx_t_13 = NULL; - PyArrayObject *__pyx_t_14 = NULL; - PyArrayObject *__pyx_t_15 = NULL; - PyArrayObject *__pyx_t_16 = NULL; - PyArrayObject *__pyx_t_17 = NULL; - PyArrayObject *__pyx_t_18 = NULL; - Py_ssize_t __pyx_t_19; - PyObject *(*__pyx_t_20)(PyObject *); - Py_ssize_t __pyx_t_21; - Py_ssize_t __pyx_t_22; - Py_ssize_t __pyx_t_23; - Py_ssize_t __pyx_t_24; - Py_ssize_t __pyx_t_25; - Py_ssize_t __pyx_t_26; - Py_ssize_t __pyx_t_27; - Py_ssize_t __pyx_t_28; - Py_ssize_t __pyx_t_29; - Py_ssize_t __pyx_t_30; - Py_ssize_t __pyx_t_31; - int __pyx_t_32; - int __pyx_t_33; - long __pyx_t_34; - long __pyx_t_35; - __pyx_t_5numpy_float32_t __pyx_t_36; - __pyx_t_5numpy_float32_t __pyx_t_37; - int __pyx_t_38; - Py_UCS4 __pyx_t_39; + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_fuse_1_2_fit_efm", 0); - __pyx_pybuffer_U1_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_U1_numerator.refcount = 0; - __pyx_pybuffernd_U1_numerator.data = NULL; - __pyx_pybuffernd_U1_numerator.rcbuffer = &__pyx_pybuffer_U1_numerator; - __pyx_pybuffer_U1_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_U1_denominator.refcount = 0; - __pyx_pybuffernd_U1_denominator.data = NULL; - __pyx_pybuffernd_U1_denominator.rcbuffer = &__pyx_pybuffer_U1_denominator; - __pyx_pybuffer_U2_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_U2_numerator.refcount = 0; - __pyx_pybuffernd_U2_numerator.data = NULL; - __pyx_pybuffernd_U2_numerator.rcbuffer = &__pyx_pybuffer_U2_numerator; - __pyx_pybuffer_U2_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_U2_denominator.refcount = 0; - __pyx_pybuffernd_U2_denominator.data = NULL; - __pyx_pybuffernd_U2_denominator.rcbuffer = &__pyx_pybuffer_U2_denominator; - __pyx_pybuffer_V_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_V_numerator.refcount = 0; - __pyx_pybuffernd_V_numerator.data = NULL; - __pyx_pybuffernd_V_numerator.rcbuffer = &__pyx_pybuffer_V_numerator; - __pyx_pybuffer_V_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_V_denominator.refcount = 0; - __pyx_pybuffernd_V_denominator.data = NULL; - __pyx_pybuffernd_V_denominator.rcbuffer = &__pyx_pybuffer_V_denominator; - __pyx_pybuffer_H1_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_H1_numerator.refcount = 0; - __pyx_pybuffernd_H1_numerator.data = NULL; - __pyx_pybuffernd_H1_numerator.rcbuffer = &__pyx_pybuffer_H1_numerator; - __pyx_pybuffer_H1_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_H1_denominator.refcount = 0; - __pyx_pybuffernd_H1_denominator.data = NULL; - __pyx_pybuffernd_H1_denominator.rcbuffer = &__pyx_pybuffer_H1_denominator; - __pyx_pybuffer_H2_numerator.pybuffer.buf = NULL; - __pyx_pybuffer_H2_numerator.refcount = 0; - __pyx_pybuffernd_H2_numerator.data = NULL; - __pyx_pybuffernd_H2_numerator.rcbuffer = &__pyx_pybuffer_H2_numerator; - __pyx_pybuffer_H2_denominator.pybuffer.buf = NULL; - __pyx_pybuffer_H2_denominator.refcount = 0; - __pyx_pybuffernd_H2_denominator.data = NULL; - __pyx_pybuffernd_H2_denominator.rcbuffer = &__pyx_pybuffer_H2_denominator; + __Pyx_RefNannySetupContext("assign_item_from_object", 0); - /* "cornac/models/efm/recom_efm.pyx":238 - * """ - * cdef: - * long num_users = self.train_set.num_users # <<<<<<<<<<<<<< - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects + /* "View.MemoryView":973 + * + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< + * self.to_dtype_func(itemp, value) + * else: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_num_users = __pyx_t_3; + __pyx_t_1 = (__pyx_v_self->to_dtype_func != NULL); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":239 - * cdef: - * long num_users = self.train_set.num_users - * long num_items = self.train_set.num_items # <<<<<<<<<<<<<< - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors + /* "View.MemoryView":974 + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) # <<<<<<<<<<<<<< + * else: + * memoryview.assign_item_from_object(self, itemp, value) */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_items = __pyx_t_3; + __pyx_t_2 = __pyx_v_self->to_dtype_func(__pyx_v_itemp, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 974, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":240 - * long num_users = self.train_set.num_users - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< - * int num_explicit_factors = self.num_explicit_factors - * int num_latent_factors = self.num_latent_factors + /* "View.MemoryView":973 + * + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< + * self.to_dtype_func(itemp, value) + * else: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_aspects = __pyx_t_3; + goto __pyx_L3; + } - /* "cornac/models/efm/recom_efm.pyx":241 - * long num_items = self.train_set.num_items - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors # <<<<<<<<<<<<<< - * int num_latent_factors = self.num_latent_factors + /* "View.MemoryView":976 + * self.to_dtype_func(itemp, value) + * else: + * memoryview.assign_item_from_object(self, itemp, value) # <<<<<<<<<<<<<< * + * cdef _get_base(self): */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_explicit_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 241, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_explicit_factors = __pyx_t_4; + /*else*/ { + __pyx_t_3 = __pyx_memoryview_assign_item_from_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 976, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L3:; - /* "cornac/models/efm/recom_efm.pyx":242 - * long num_aspects = self.train_set.sentiment.num_aspects - * int num_explicit_factors = self.num_explicit_factors - * int num_latent_factors = self.num_latent_factors # <<<<<<<<<<<<<< + /* "View.MemoryView":972 + * return memoryview.convert_item_to_object(self, itemp) * - * floating lambda_x = self.lambda_x + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_latent_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 242, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_latent_factors = __pyx_t_4; - /* "cornac/models/efm/recom_efm.pyx":244 - * int num_latent_factors = self.num_latent_factors + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":978 + * memoryview.assign_item_from_object(self, itemp, value) + * + * cdef _get_base(self): # <<<<<<<<<<<<<< + * return self.from_object * - * floating lambda_x = self.lambda_x # <<<<<<<<<<<<<< - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_x = __pyx_t_5; - /* "cornac/models/efm/recom_efm.pyx":245 +static PyObject *__pyx_memoryviewslice__get_base(struct __pyx_memoryviewslice_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_get_base", 0); + + /* "View.MemoryView":979 + * + * cdef _get_base(self): + * return self.from_object # <<<<<<<<<<<<<< + * * - * floating lambda_x = self.lambda_x - * floating lambda_y = self.lambda_y # <<<<<<<<<<<<<< - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 245, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_y = __pyx_t_5; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->from_object); + __pyx_r = __pyx_v_self->from_object; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":246 - * floating lambda_x = self.lambda_x - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u # <<<<<<<<<<<<<< - * floating lambda_h = self.lambda_h - * floating lambda_v = self.lambda_v + /* "View.MemoryView":978 + * memoryview.assign_item_from_object(self, itemp, value) + * + * cdef _get_base(self): # <<<<<<<<<<<<<< + * return self.from_object + * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_u); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_u = __pyx_t_5; - /* "cornac/models/efm/recom_efm.pyx":247 - * floating lambda_y = self.lambda_y - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h # <<<<<<<<<<<<<< - * floating lambda_v = self.lambda_v - * + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_h); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_h = __pyx_t_5; - /* "cornac/models/efm/recom_efm.pyx":248 - * floating lambda_u = self.lambda_u - * floating lambda_h = self.lambda_h - * floating lambda_v = self.lambda_v # <<<<<<<<<<<<<< - * - * floating prediction, score, loss +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; + __pyx_r = __pyx_pf___pyx_memoryviewslice___reduce_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_v); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 248, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 248, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_lambda_v = __pyx_t_5; + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0); + __PYX_ERR(1, 2, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":252 - * floating prediction, score, loss - * - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 252, __pyx_L1_error) - __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 252, __pyx_L1_error) - } else {__pyx_pybuffernd_U1_numerator.diminfo[0].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_numerator.diminfo[0].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_numerator.diminfo[1].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_numerator.diminfo[1].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_9 = 0; - __pyx_v_U1_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; - /* "cornac/models/efm/recom_efm.pyx":253 - * - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 253, __pyx_L1_error) - __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 253, __pyx_L1_error) - } else {__pyx_pybuffernd_U1_denominator.diminfo[0].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_denominator.diminfo[0].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_denominator.diminfo[1].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_denominator.diminfo[1].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[1]; + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + PyObject* values[1] = {0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); } + __pyx_v___pyx_state = values[0]; } - __pyx_t_10 = 0; - __pyx_v_U1_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf___pyx_memoryviewslice_2__setstate_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self), __pyx_v___pyx_state); - /* "cornac/models/efm/recom_efm.pyx":254 - * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<< */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 254, __pyx_L1_error) - __pyx_t_11 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 254, __pyx_L1_error) - } else {__pyx_pybuffernd_U2_numerator.diminfo[0].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_numerator.diminfo[0].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_numerator.diminfo[1].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_numerator.diminfo[1].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_11 = 0; - __pyx_v_U2_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0); + __PYX_ERR(1, 4, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":255 - * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 255, __pyx_L1_error) - __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_U2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 255, __pyx_L1_error) - } else {__pyx_pybuffernd_U2_denominator.diminfo[0].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_denominator.diminfo[0].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_denominator.diminfo[1].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_denominator.diminfo[1].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_12 = 0; - __pyx_v_U2_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":256 - * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":999 + * + * @cname('__pyx_memoryview_fromslice') + * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< + * int ndim, + * object (*to_object_func)(char *), + */ + +static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewslice, int __pyx_v_ndim, PyObject *(*__pyx_v_to_object_func)(char *), int (*__pyx_v_to_dtype_func)(char *, PyObject *), int __pyx_v_dtype_is_object) { + struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_v_length = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_TypeInfo *__pyx_t_4; + Py_buffer __pyx_t_5; + Py_ssize_t *__pyx_t_6; + Py_ssize_t *__pyx_t_7; + Py_ssize_t *__pyx_t_8; + Py_ssize_t __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_fromslice", 0); + + /* "View.MemoryView":1007 + * cdef _memoryviewslice result + * + * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_1 = (((PyObject *)__pyx_v_memviewslice.memview) == Py_None); + if (__pyx_t_1) { + + /* "View.MemoryView":1008 + * + * if memviewslice.memview == Py_None: + * return None # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "View.MemoryView":1007 + * cdef _memoryviewslice result + * + * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< + * return None + * */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 256, __pyx_L1_error) - __pyx_t_13 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_V_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 256, __pyx_L1_error) - } else {__pyx_pybuffernd_V_numerator.diminfo[0].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_numerator.diminfo[0].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_numerator.diminfo[1].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_numerator.diminfo[1].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[1]; - } } - __pyx_t_13 = 0; - __pyx_v_V_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; - /* "cornac/models/efm/recom_efm.pyx":257 - * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + /* "View.MemoryView":1013 + * + * + * result = _memoryviewslice.__new__(_memoryviewslice, None, 0, dtype_is_object) # <<<<<<<<<<<<<< + * + * result.from_slice = memviewslice */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None); + __Pyx_INCREF(__pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0); __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = ((PyObject *)__pyx_tp_new__memoryviewslice(((PyTypeObject *)__pyx_memoryviewslice_type), __pyx_t_3, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF((PyObject *)__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 257, __pyx_L1_error) - __pyx_t_14 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_V_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 257, __pyx_L1_error) - } else {__pyx_pybuffernd_V_denominator.diminfo[0].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_denominator.diminfo[0].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_denominator.diminfo[1].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_denominator.diminfo[1].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_14 = 0; - __pyx_v_V_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":258 - * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + /* "View.MemoryView":1015 + * result = _memoryviewslice.__new__(_memoryviewslice, None, 0, dtype_is_object) + * + * result.from_slice = memviewslice # <<<<<<<<<<<<<< + * __PYX_INC_MEMVIEW(&memviewslice, 1) + * */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 258, __pyx_L1_error) - __pyx_t_15 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 258, __pyx_L1_error) - } else {__pyx_pybuffernd_H1_numerator.diminfo[0].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_numerator.diminfo[0].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_numerator.diminfo[1].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_numerator.diminfo[1].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_15 = 0; - __pyx_v_H1_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; + __pyx_v_result->from_slice = __pyx_v_memviewslice; - /* "cornac/models/efm/recom_efm.pyx":259 - * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) + /* "View.MemoryView":1016 + * + * result.from_slice = memviewslice + * __PYX_INC_MEMVIEW(&memviewslice, 1) # <<<<<<<<<<<<<< + * + * result.from_object = ( memviewslice.memview)._get_base() */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) + __PYX_INC_MEMVIEW((&__pyx_v_memviewslice), 1); + + /* "View.MemoryView":1018 + * __PYX_INC_MEMVIEW(&memviewslice, 1) + * + * result.from_object = ( memviewslice.memview)._get_base() # <<<<<<<<<<<<<< + * result.typeinfo = memviewslice.memview.typeinfo + * + */ + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->__pyx_vtab)->_get_base(((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1018, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __Pyx_GOTREF(__pyx_v_result->from_object); + __Pyx_DECREF(__pyx_v_result->from_object); + __pyx_v_result->from_object = __pyx_t_2; __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 259, __pyx_L1_error) - __pyx_t_16 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 259, __pyx_L1_error) - } else {__pyx_pybuffernd_H1_denominator.diminfo[0].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_denominator.diminfo[0].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_denominator.diminfo[1].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_denominator.diminfo[1].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[1]; - } + + /* "View.MemoryView":1019 + * + * result.from_object = ( memviewslice.memview)._get_base() + * result.typeinfo = memviewslice.memview.typeinfo # <<<<<<<<<<<<<< + * + * result.view = memviewslice.memview.view + */ + __pyx_t_4 = __pyx_v_memviewslice.memview->typeinfo; + __pyx_v_result->__pyx_base.typeinfo = __pyx_t_4; + + /* "View.MemoryView":1021 + * result.typeinfo = memviewslice.memview.typeinfo + * + * result.view = memviewslice.memview.view # <<<<<<<<<<<<<< + * result.view.buf = memviewslice.data + * result.view.ndim = ndim + */ + __pyx_t_5 = __pyx_v_memviewslice.memview->view; + __pyx_v_result->__pyx_base.view = __pyx_t_5; + + /* "View.MemoryView":1022 + * + * result.view = memviewslice.memview.view + * result.view.buf = memviewslice.data # <<<<<<<<<<<<<< + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None + */ + __pyx_v_result->__pyx_base.view.buf = ((void *)__pyx_v_memviewslice.data); + + /* "View.MemoryView":1023 + * result.view = memviewslice.memview.view + * result.view.buf = memviewslice.data + * result.view.ndim = ndim # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &result.view).obj = Py_None + * Py_INCREF(Py_None) + */ + __pyx_v_result->__pyx_base.view.ndim = __pyx_v_ndim; + + /* "View.MemoryView":1024 + * result.view.buf = memviewslice.data + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_result->__pyx_base.view))->obj = Py_None; + + /* "View.MemoryView":1025 + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: + */ + Py_INCREF(Py_None); + + /* "View.MemoryView":1027 + * Py_INCREF(Py_None) + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< + * result.flags = PyBUF_RECORDS + * else: + */ + __pyx_t_1 = ((((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->flags & PyBUF_WRITABLE) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1028 + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: + * result.flags = PyBUF_RECORDS # <<<<<<<<<<<<<< + * else: + * result.flags = PyBUF_RECORDS_RO + */ + __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS; + + /* "View.MemoryView":1027 + * Py_INCREF(Py_None) + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< + * result.flags = PyBUF_RECORDS + * else: + */ + goto __pyx_L4; } - __pyx_t_16 = 0; - __pyx_v_H1_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":260 - * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * int i, j, k, idx + /* "View.MemoryView":1030 + * result.flags = PyBUF_RECORDS + * else: + * result.flags = PyBUF_RECORDS_RO # <<<<<<<<<<<<<< + * + * result.view.shape = result.from_slice.shape */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); - __pyx_t_1 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 260, __pyx_L1_error) - __pyx_t_17 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 260, __pyx_L1_error) - } else {__pyx_pybuffernd_H2_numerator.diminfo[0].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_numerator.diminfo[0].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_numerator.diminfo[1].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_numerator.diminfo[1].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[1]; - } + /*else*/ { + __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS_RO; } - __pyx_t_17 = 0; - __pyx_v_H2_numerator = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; + __pyx_L4:; - /* "cornac/models/efm/recom_efm.pyx":261 - * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) - * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< - * int i, j, k, idx - * long n_ratings + /* "View.MemoryView":1032 + * result.flags = PyBUF_RECORDS_RO + * + * result.view.shape = result.from_slice.shape # <<<<<<<<<<<<<< + * result.view.strides = result.from_slice.strides + * + */ + __pyx_v_result->__pyx_base.view.shape = ((Py_ssize_t *)__pyx_v_result->from_slice.shape); + + /* "View.MemoryView":1033 + * + * result.view.shape = result.from_slice.shape + * result.view.strides = result.from_slice.strides # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_result->__pyx_base.view.strides = ((Py_ssize_t *)__pyx_v_result->from_slice.strides); + + /* "View.MemoryView":1036 + * + * + * result.view.suboffsets = NULL # <<<<<<<<<<<<<< + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: + */ + __pyx_v_result->__pyx_base.view.suboffsets = NULL; + + /* "View.MemoryView":1037 + * + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: # <<<<<<<<<<<<<< + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets + */ + __pyx_t_7 = (__pyx_v_result->from_slice.suboffsets + __pyx_v_ndim); + for (__pyx_t_8 = __pyx_v_result->from_slice.suboffsets; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { + __pyx_t_6 = __pyx_t_8; + __pyx_v_suboffset = (__pyx_t_6[0]); + + /* "View.MemoryView":1038 + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * result.view.suboffsets = result.from_slice.suboffsets + * break + */ + __pyx_t_1 = (__pyx_v_suboffset >= 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1039 + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_result->__pyx_base.view.suboffsets = ((Py_ssize_t *)__pyx_v_result->from_slice.suboffsets); + + /* "View.MemoryView":1040 + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets + * break # <<<<<<<<<<<<<< + * + * result.view.len = result.view.itemsize + */ + goto __pyx_L6_break; + + /* "View.MemoryView":1038 + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * result.view.suboffsets = result.from_slice.suboffsets + * break */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_8 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 261, __pyx_L1_error) - __pyx_t_18 = ((PyArrayObject *)__pyx_t_1); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - __pyx_v_H2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 261, __pyx_L1_error) - } else {__pyx_pybuffernd_H2_denominator.diminfo[0].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_denominator.diminfo[0].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_denominator.diminfo[1].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_denominator.diminfo[1].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[1]; } } - __pyx_t_18 = 0; - __pyx_v_H2_denominator = ((PyArrayObject *)__pyx_t_1); - __pyx_t_1 = 0; + __pyx_L6_break:; + + /* "View.MemoryView":1042 + * break + * + * result.view.len = result.view.itemsize # <<<<<<<<<<<<<< + * for length in result.view.shape[:ndim]: + * result.view.len *= length + */ + __pyx_t_9 = __pyx_v_result->__pyx_base.view.itemsize; + __pyx_v_result->__pyx_base.view.len = __pyx_t_9; - /* "cornac/models/efm/recom_efm.pyx":265 - * long n_ratings + /* "View.MemoryView":1043 * - * floating eps = 1e-9 # <<<<<<<<<<<<<< + * result.view.len = result.view.itemsize + * for length in result.view.shape[:ndim]: # <<<<<<<<<<<<<< + * result.view.len *= length * - * for t in range(1, self.max_iter + 1): */ - __pyx_v_eps = 1e-9; + __pyx_t_7 = (__pyx_v_result->__pyx_base.view.shape + __pyx_v_ndim); + for (__pyx_t_8 = __pyx_v_result->__pyx_base.view.shape; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { + __pyx_t_6 = __pyx_t_8; + __pyx_t_2 = PyInt_FromSsize_t((__pyx_t_6[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1043, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":267 - * floating eps = 1e-9 + /* "View.MemoryView":1044 + * result.view.len = result.view.itemsize + * for length in result.view.shape[:ndim]: + * result.view.len *= length # <<<<<<<<<<<<<< * - * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< - * loss = 0. - * U1_numerator.fill(0) + * result.to_object_func = to_object_func */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_max_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_int_1); - __Pyx_GIVEREF(__pyx_int_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_19 = 0; - __pyx_t_20 = NULL; - } else { - __pyx_t_19 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_20 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 267, __pyx_L1_error) + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_result->__pyx_base.view.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_2, __pyx_v_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result->__pyx_base.view.len = __pyx_t_9; } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (likely(!__pyx_t_20)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 267, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } else { - if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 267, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } - } else { - __pyx_t_2 = __pyx_t_20(__pyx_t_1); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 267, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2); - __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":268 + /* "View.MemoryView":1046 + * result.view.len *= length + * + * result.to_object_func = to_object_func # <<<<<<<<<<<<<< + * result.to_dtype_func = to_dtype_func * - * for t in range(1, self.max_iter + 1): - * loss = 0. # <<<<<<<<<<<<<< - * U1_numerator.fill(0) - * U1_denominator.fill(0) */ - __pyx_v_loss = 0.; + __pyx_v_result->to_object_func = __pyx_v_to_object_func; - /* "cornac/models/efm/recom_efm.pyx":269 - * for t in range(1, self.max_iter + 1): - * loss = 0. - * U1_numerator.fill(0) # <<<<<<<<<<<<<< - * U1_denominator.fill(0) - * U2_numerator.fill(0) + /* "View.MemoryView":1047 + * + * result.to_object_func = to_object_func + * result.to_dtype_func = to_dtype_func # <<<<<<<<<<<<<< + * + * return result */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 269, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_result->to_dtype_func = __pyx_v_to_dtype_func; - /* "cornac/models/efm/recom_efm.pyx":270 - * loss = 0. - * U1_numerator.fill(0) - * U1_denominator.fill(0) # <<<<<<<<<<<<<< - * U2_numerator.fill(0) - * U2_denominator.fill(0) + /* "View.MemoryView":1049 + * result.to_dtype_func = to_dtype_func + * + * return result # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_result); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":271 - * U1_numerator.fill(0) - * U1_denominator.fill(0) - * U2_numerator.fill(0) # <<<<<<<<<<<<<< - * U2_denominator.fill(0) - * V_numerator.fill(0) + /* "View.MemoryView":999 + * + * @cname('__pyx_memoryview_fromslice') + * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< + * int ndim, + * object (*to_object_func)(char *), */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":272 - * U1_denominator.fill(0) - * U2_numerator.fill(0) - * U2_denominator.fill(0) # <<<<<<<<<<<<<< - * V_numerator.fill(0) - * V_denominator.fill(0) + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview_fromslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XDECREF(__pyx_v_length); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1052 + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 272, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":273 - * U2_numerator.fill(0) - * U2_denominator.fill(0) - * V_numerator.fill(0) # <<<<<<<<<<<<<< - * V_denominator.fill(0) - * H1_numerator.fill(0) +static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_mslice) { + struct __pyx_memoryviewslice_obj *__pyx_v_obj = 0; + __Pyx_memviewslice *__pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_slice_from_memview", 0); + + /* "View.MemoryView":1055 + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * obj = memview + * return &obj.from_slice */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":274 - * U2_denominator.fill(0) - * V_numerator.fill(0) - * V_denominator.fill(0) # <<<<<<<<<<<<<< - * H1_numerator.fill(0) - * H1_denominator.fill(0) + /* "View.MemoryView":1056 + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): + * obj = memview # <<<<<<<<<<<<<< + * return &obj.from_slice + * else: */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 274, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 1056, __pyx_L1_error) + __pyx_t_2 = ((PyObject *)__pyx_v_memview); + __Pyx_INCREF(__pyx_t_2); + __pyx_v_obj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2); + __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":275 - * V_numerator.fill(0) - * V_denominator.fill(0) - * H1_numerator.fill(0) # <<<<<<<<<<<<<< - * H1_denominator.fill(0) - * H2_numerator.fill(0) + /* "View.MemoryView":1057 + * if isinstance(memview, _memoryviewslice): + * obj = memview + * return &obj.from_slice # <<<<<<<<<<<<<< + * else: + * slice_copy(memview, mslice) */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 275, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 275, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = (&__pyx_v_obj->from_slice); + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":276 - * V_denominator.fill(0) - * H1_numerator.fill(0) - * H1_denominator.fill(0) # <<<<<<<<<<<<<< - * H2_numerator.fill(0) - * H2_denominator.fill(0) + /* "View.MemoryView":1055 + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * obj = memview + * return &obj.from_slice */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 276, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } - /* "cornac/models/efm/recom_efm.pyx":277 - * H1_numerator.fill(0) - * H1_denominator.fill(0) - * H2_numerator.fill(0) # <<<<<<<<<<<<<< - * H2_denominator.fill(0) + /* "View.MemoryView":1059 + * return &obj.from_slice + * else: + * slice_copy(memview, mslice) # <<<<<<<<<<<<<< + * return mslice * */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 277, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /*else*/ { + __pyx_memoryview_slice_copy(__pyx_v_memview, __pyx_v_mslice); - /* "cornac/models/efm/recom_efm.pyx":278 - * H1_denominator.fill(0) - * H2_numerator.fill(0) - * H2_denominator.fill(0) # <<<<<<<<<<<<<< + /* "View.MemoryView":1060 + * else: + * slice_copy(memview, mslice) + * return mslice # <<<<<<<<<<<<<< * - * with nogil, parallel(num_threads=num_threads): + * @cname('__pyx_memoryview_slice_copy') */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_int_0); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_v_mslice; + goto __pyx_L0; + } - /* "cornac/models/efm/recom_efm.pyx":280 - * H2_denominator.fill(0) + /* "View.MemoryView":1052 * - * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): + * @cname('__pyx_memoryview_get_slice_from_memoryview') + * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj */ - { - #ifdef WITH_THREAD - PyThreadState *_save; - Py_UNBLOCK_THREADS - __Pyx_FastGIL_Remember(); - #endif - /*try:*/ { - { - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) (x) - #define unlikely(x) (x) - #endif - #ifdef _OPENMP - #pragma omp parallel reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) private(__pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_3, __pyx_t_30, __pyx_t_31, __pyx_t_32, __pyx_t_33, __pyx_t_34, __pyx_t_35, __pyx_t_36, __pyx_t_37, __pyx_t_4) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_num_threads) - #endif /* _OPENMP */ - { - #ifdef _OPENMP - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - Py_BEGIN_ALLOW_THREADS - #endif /* _OPENMP */ - /* "cornac/models/efm/recom_efm.pyx":282 - * with nogil, parallel(num_threads=num_threads): - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): # <<<<<<<<<<<<<< - * i = A_uids[idx] - * j = A_iids[idx] - */ - if (unlikely(!__pyx_v_A.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("A"); __PYX_ERR(0, 282, __pyx_L12_error) } - __pyx_t_21 = (__pyx_v_A.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_23 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((double)__PYX_NAN()); - __pyx_v_score = ((double)__PYX_NAN()); + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_obj); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/efm/recom_efm.pyx":283 - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): - * i = A_uids[idx] # <<<<<<<<<<<<<< - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ +/* "View.MemoryView":1063 + * + * @cname('__pyx_memoryview_slice_copy') + * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst) noexcept: # <<<<<<<<<<<<<< + * cdef int dim + * cdef (Py_ssize_t*) shape, strides, suboffsets */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_i = (*((long *) ( /* dim=0 */ (__pyx_v_A_uids.data + __pyx_t_24 * __pyx_v_A_uids.strides[0]) ))); - /* "cornac/models/efm/recom_efm.pyx":284 - * for idx in prange(A.shape[0]): - * i = A_uids[idx] - * j = A_iids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) +static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_dst) { + int __pyx_v_dim; + Py_ssize_t *__pyx_v_shape; + Py_ssize_t *__pyx_v_strides; + Py_ssize_t *__pyx_v_suboffsets; + __Pyx_RefNannyDeclarations + Py_ssize_t *__pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + Py_ssize_t __pyx_t_5; + __Pyx_RefNannySetupContext("slice_copy", 0); + + /* "View.MemoryView":1067 + * cdef (Py_ssize_t*) shape, strides, suboffsets + * + * shape = memview.view.shape # <<<<<<<<<<<<<< + * strides = memview.view.strides + * suboffsets = memview.view.suboffsets */ - __pyx_t_24 = __pyx_v_idx; - __pyx_v_j = (*((long *) ( /* dim=0 */ (__pyx_v_A_iids.data + __pyx_t_24 * __pyx_v_A_iids.strides[0]) ))); + __pyx_t_1 = __pyx_v_memview->view.shape; + __pyx_v_shape = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":285 - * i = A_uids[idx] - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ # <<<<<<<<<<<<<< - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] + /* "View.MemoryView":1068 + * + * shape = memview.view.shape + * strides = memview.view.strides # <<<<<<<<<<<<<< + * suboffsets = memview.view.suboffsets + * */ - __pyx_t_24 = __pyx_v_i; - __pyx_t_25 = 0; - __pyx_t_26 = __pyx_v_j; - __pyx_t_27 = 0; + __pyx_t_1 = __pyx_v_memview->view.strides; + __pyx_v_strides = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":286 - * j = A_iids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) # <<<<<<<<<<<<<< - * score = A[idx] - * loss += (prediction - score) * (prediction - score) + /* "View.MemoryView":1069 + * shape = memview.view.shape + * strides = memview.view.strides + * suboffsets = memview.view.suboffsets # <<<<<<<<<<<<<< + * + * dst.memview = <__pyx_memoryview *> memview */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = 0; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = 0; - __pyx_v_prediction = (__pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) )))), 1) + __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_latent_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_28 * __pyx_v_H1.strides[0]) ) + __pyx_t_29 * __pyx_v_H1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_31 * __pyx_v_H2.strides[1]) )))), 1)); + __pyx_t_1 = __pyx_v_memview->view.suboffsets; + __pyx_v_suboffsets = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":287 - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): + /* "View.MemoryView":1071 + * suboffsets = memview.view.suboffsets + * + * dst.memview = <__pyx_memoryview *> memview # <<<<<<<<<<<<<< + * dst.data = memview.view.buf + * */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_A.data + __pyx_t_31 * __pyx_v_A.strides[0]) ))); + __pyx_v_dst->memview = ((struct __pyx_memoryview_obj *)__pyx_v_memview); - /* "cornac/models/efm/recom_efm.pyx":288 - * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) - * score = A[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] + /* "View.MemoryView":1072 + * + * dst.memview = <__pyx_memoryview *> memview + * dst.data = memview.view.buf # <<<<<<<<<<<<<< + * + * for dim in range(memview.view.ndim): */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); + __pyx_v_dst->data = ((char *)__pyx_v_memview->view.buf); - /* "cornac/models/efm/recom_efm.pyx":289 - * score = A[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] + /* "View.MemoryView":1074 + * dst.data = memview.view.buf + * + * for dim in range(memview.view.ndim): # <<<<<<<<<<<<<< + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; + __pyx_t_2 = __pyx_v_memview->view.ndim; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_dim = __pyx_t_4; - /* "cornac/models/efm/recom_efm.pyx":290 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] # <<<<<<<<<<<<<< - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] + /* "View.MemoryView":1075 + * + * for dim in range(memview.view.ndim): + * dst.shape[dim] = shape[dim] # <<<<<<<<<<<<<< + * dst.strides[dim] = strides[dim] + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_31 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))); + (__pyx_v_dst->shape[__pyx_v_dim]) = (__pyx_v_shape[__pyx_v_dim]); - /* "cornac/models/efm/recom_efm.pyx":291 - * for k in range(num_explicit_factors): - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] # <<<<<<<<<<<<<< - * U2_numerator[j, k] += score * U1[i, k] - * U2_denominator[j, k] += prediction * U1[i, k] + /* "View.MemoryView":1076 + * for dim in range(memview.view.ndim): + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] # <<<<<<<<<<<<<< + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 + * */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_31 * __pyx_v_U2.strides[1]) )))); + (__pyx_v_dst->strides[__pyx_v_dim]) = (__pyx_v_strides[__pyx_v_dim]); - /* "cornac/models/efm/recom_efm.pyx":292 - * U1_numerator[i, k] += score * U2[j, k] - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] # <<<<<<<<<<<<<< - * U2_denominator[j, k] += prediction * U1[i, k] + /* "View.MemoryView":1077 + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 # <<<<<<<<<<<<<< * + * @cname('__pyx_memoryview_copy_object') */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))); + if ((__pyx_v_suboffsets != 0)) { + __pyx_t_5 = (__pyx_v_suboffsets[__pyx_v_dim]); + } else { + __pyx_t_5 = -1L; + } + (__pyx_v_dst->suboffsets[__pyx_v_dim]) = __pyx_t_5; + } - /* "cornac/models/efm/recom_efm.pyx":293 - * U1_denominator[i, k] += prediction * U2[j, k] - * U2_numerator[j, k] += score * U1[i, k] - * U2_denominator[j, k] += prediction * U1[i, k] # <<<<<<<<<<<<<< + /* "View.MemoryView":1063 * - * for k in range(num_latent_factors): + * @cname('__pyx_memoryview_slice_copy') + * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst) noexcept: # <<<<<<<<<<<<<< + * cdef int dim + * cdef (Py_ssize_t*) shape, strides, suboffsets */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )))); - } - /* "cornac/models/efm/recom_efm.pyx":295 - * U2_denominator[j, k] += prediction * U1[i, k] + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":1080 * - * for k in range(num_latent_factors): # <<<<<<<<<<<<<< - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] + * @cname('__pyx_memoryview_copy_object') + * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; - /* "cornac/models/efm/recom_efm.pyx":296 +static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *__pyx_v_memview) { + __Pyx_memviewslice __pyx_v_memviewslice; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_copy", 0); + + /* "View.MemoryView":1083 + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + * slice_copy(memview, &memviewslice) # <<<<<<<<<<<<<< + * return memoryview_copy_from_slice(memview, &memviewslice) * - * for k in range(num_latent_factors): - * H1_numerator[i, k] += score * H2[j, k] # <<<<<<<<<<<<<< - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_31 * __pyx_v_H2.strides[0]) ) + __pyx_t_30 * __pyx_v_H2.strides[1]) )))); + __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_memviewslice)); - /* "cornac/models/efm/recom_efm.pyx":297 - * for k in range(num_latent_factors): - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] # <<<<<<<<<<<<<< - * H2_numerator[j, k] += score * H1[i, k] - * H2_denominator[j, k] += prediction * H1[i, k] + /* "View.MemoryView":1084 + * cdef __Pyx_memviewslice memviewslice + * slice_copy(memview, &memviewslice) + * return memoryview_copy_from_slice(memview, &memviewslice) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_object_from_slice') */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_31 * __pyx_v_H2.strides[1]) )))); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_memoryview_copy_object_from_slice(__pyx_v_memview, (&__pyx_v_memviewslice)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1084, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":298 - * H1_numerator[i, k] += score * H2[j, k] - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] # <<<<<<<<<<<<<< - * H2_denominator[j, k] += prediction * H1[i, k] + /* "View.MemoryView":1080 * + * @cname('__pyx_memoryview_copy_object') + * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_31 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))); - /* "cornac/models/efm/recom_efm.pyx":299 - * H1_denominator[i, k] += prediction * H2[j, k] - * H2_numerator[j, k] += score * H1[i, k] - * H2_denominator[j, k] += prediction * H1[i, k] # <<<<<<<<<<<<<< + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview_copy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1087 * - * for idx in prange(X.shape[0]): + * @cname('__pyx_memoryview_copy_object_from_slice') + * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< + * """ + * Create a new memoryview object from a given memoryview object and slice. */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_30 * __pyx_v_H1.strides[0]) ) + __pyx_t_31 * __pyx_v_H1.strides[1]) )))); - } - } - } - } - } - /* "cornac/models/efm/recom_efm.pyx":301 - * H2_denominator[j, k] += prediction * H1[i, k] +static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_memviewslice) { + PyObject *(*__pyx_v_to_object_func)(char *); + int (*__pyx_v_to_dtype_func)(char *, PyObject *); + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *(*__pyx_t_2)(char *); + int (*__pyx_t_3)(char *, PyObject *); + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_copy_from_slice", 0); + + /* "View.MemoryView":1094 + * cdef int (*to_dtype_func)(char *, object) except 0 * - * for idx in prange(X.shape[0]): # <<<<<<<<<<<<<< - * i = X_uids[idx] - * j = X_aids[idx] + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func */ - if (unlikely(!__pyx_v_X.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("X"); __PYX_ERR(0, 301, __pyx_L12_error) } - __pyx_t_23 = (__pyx_v_X.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_21 = (__pyx_t_23 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_21 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((double)__PYX_NAN()); - __pyx_v_score = ((double)__PYX_NAN()); + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":302 + /* "View.MemoryView":1095 * - * for idx in prange(X.shape[0]): - * i = X_uids[idx] # <<<<<<<<<<<<<< - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * if isinstance(memview, _memoryviewslice): + * to_object_func = (<_memoryviewslice> memview).to_object_func # <<<<<<<<<<<<<< + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + * else: */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_i = (*((long *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_31 * __pyx_v_X_uids.strides[0]) ))); + __pyx_t_2 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_object_func; + __pyx_v_to_object_func = __pyx_t_2; - /* "cornac/models/efm/recom_efm.pyx":303 - * for idx in prange(X.shape[0]): - * i = X_uids[idx] - * j = X_aids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] + /* "View.MemoryView":1096 + * if isinstance(memview, _memoryviewslice): + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func # <<<<<<<<<<<<<< + * else: + * to_object_func = NULL */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_j = (*((long *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_31 * __pyx_v_X_aids.strides[0]) ))); + __pyx_t_3 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_dtype_func; + __pyx_v_to_dtype_func = __pyx_t_3; - /* "cornac/models/efm/recom_efm.pyx":304 - * i = X_uids[idx] - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< - * score = X[idx] - * loss += (prediction - score) * (prediction - score) + /* "View.MemoryView":1094 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = 0; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = 0; - __pyx_v_prediction = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) )))), 1); + goto __pyx_L3; + } - /* "cornac/models/efm/recom_efm.pyx":305 - * j = X_aids[idx] - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): + /* "View.MemoryView":1098 + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + * else: + * to_object_func = NULL # <<<<<<<<<<<<<< + * to_dtype_func = NULL + * */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_28 * __pyx_v_X.strides[0]) ))); + /*else*/ { + __pyx_v_to_object_func = NULL; - /* "cornac/models/efm/recom_efm.pyx":306 - * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) - * score = X[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] + /* "View.MemoryView":1099 + * else: + * to_object_func = NULL + * to_dtype_func = NULL # <<<<<<<<<<<<<< + * + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); + __pyx_v_to_dtype_func = NULL; + } + __pyx_L3:; - /* "cornac/models/efm/recom_efm.pyx":307 - * score = X[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + /* "View.MemoryView":1101 + * to_dtype_func = NULL + * + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, # <<<<<<<<<<<<<< + * to_object_func, to_dtype_func, + * memview.dtype_is_object) */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; + __Pyx_XDECREF(__pyx_r); - /* "cornac/models/efm/recom_efm.pyx":308 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] # <<<<<<<<<<<<<< - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] + /* "View.MemoryView":1103 + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, + * to_object_func, to_dtype_func, + * memview.dtype_is_object) # <<<<<<<<<<<<<< + * + * */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_28 * __pyx_v_U1.strides[0]) ) + __pyx_t_29 * __pyx_v_U1.strides[1]) )))); + __pyx_t_4 = __pyx_memoryview_fromslice((__pyx_v_memviewslice[0]), __pyx_v_memview->view.ndim, __pyx_v_to_object_func, __pyx_v_to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":309 - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] # <<<<<<<<<<<<<< - * U1_numerator[i, k] += lambda_x * score * V[j, k] - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] + /* "View.MemoryView":1087 + * + * @cname('__pyx_memoryview_copy_object_from_slice') + * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< + * """ + * Create a new memoryview object from a given memoryview object and slice. */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_29 * __pyx_v_U1.strides[0]) ) + __pyx_t_28 * __pyx_v_U1.strides[1]) )))); - /* "cornac/models/efm/recom_efm.pyx":310 - * V_numerator[j, k] += lambda_x * score * U1[i, k] - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] # <<<<<<<<<<<<<< - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.memoryview_copy_from_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1109 + * + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) noexcept nogil: # <<<<<<<<<<<<<< + * return -arg if arg < 0 else arg * */ - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_28 * __pyx_v_V.strides[0]) ) + __pyx_t_29 * __pyx_v_V.strides[1]) )))); - /* "cornac/models/efm/recom_efm.pyx":311 - * V_denominator[j, k] += lambda_x * prediction * U1[i, k] - * U1_numerator[i, k] += lambda_x * score * V[j, k] - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] # <<<<<<<<<<<<<< +static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) { + Py_ssize_t __pyx_r; + Py_ssize_t __pyx_t_1; + + /* "View.MemoryView":1110 * - * for idx in prange(Y.shape[0]): + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) noexcept nogil: + * return -arg if arg < 0 else arg # <<<<<<<<<<<<<< + * + * @cname('__pyx_get_best_slice_order') */ - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) )))); - } - } - } - } - } + if ((__pyx_v_arg < 0)) { + __pyx_t_1 = (-__pyx_v_arg); + } else { + __pyx_t_1 = __pyx_v_arg; + } + __pyx_r = __pyx_t_1; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":313 - * U1_denominator[i, k] += lambda_x * prediction * V[j, k] + /* "View.MemoryView":1109 + * + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) noexcept nogil: # <<<<<<<<<<<<<< + * return -arg if arg < 0 else arg * - * for idx in prange(Y.shape[0]): # <<<<<<<<<<<<<< - * i = Y_iids[idx] - * j = Y_aids[idx] */ - if (unlikely(!__pyx_v_Y.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("Y"); __PYX_ERR(0, 313, __pyx_L12_error) } - __pyx_t_21 = (__pyx_v_Y.shape[0]); - if ((1 == 0)) abort(); - { - __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_23 > 0) - { - #ifdef _OPENMP - #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) - #endif /* _OPENMP */ - for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ - { - __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); - /* Initialize private variables to invalid values */ - __pyx_v_i = ((int)0xbad0bad0); - __pyx_v_j = ((int)0xbad0bad0); - __pyx_v_k = ((int)0xbad0bad0); - __pyx_v_prediction = ((double)__PYX_NAN()); - __pyx_v_score = ((double)__PYX_NAN()); - /* "cornac/models/efm/recom_efm.pyx":314 + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1113 * - * for idx in prange(Y.shape[0]): - * i = Y_iids[idx] # <<<<<<<<<<<<<< - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * @cname('__pyx_get_best_slice_order') + * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) noexcept nogil: # <<<<<<<<<<<<<< + * """ + * Figure out the best memory access order for a given slice. */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_i = (*((long *) ( /* dim=0 */ (__pyx_v_Y_iids.data + __pyx_t_28 * __pyx_v_Y_iids.strides[0]) ))); - /* "cornac/models/efm/recom_efm.pyx":315 - * for idx in prange(Y.shape[0]): - * i = Y_iids[idx] - * j = Y_aids[idx] # <<<<<<<<<<<<<< - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] +static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim) { + int __pyx_v_i; + Py_ssize_t __pyx_v_c_stride; + Py_ssize_t __pyx_v_f_stride; + char __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + + /* "View.MemoryView":1118 + * """ + * cdef int i + * cdef Py_ssize_t c_stride = 0 # <<<<<<<<<<<<<< + * cdef Py_ssize_t f_stride = 0 + * */ - __pyx_t_28 = __pyx_v_idx; - __pyx_v_j = (*((long *) ( /* dim=0 */ (__pyx_v_Y_aids.data + __pyx_t_28 * __pyx_v_Y_aids.strides[0]) ))); + __pyx_v_c_stride = 0; - /* "cornac/models/efm/recom_efm.pyx":316 - * i = Y_iids[idx] - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) + /* "View.MemoryView":1119 + * cdef int i + * cdef Py_ssize_t c_stride = 0 + * cdef Py_ssize_t f_stride = 0 # <<<<<<<<<<<<<< + * + * for i in range(ndim - 1, -1, -1): + */ + __pyx_v_f_stride = 0; + + /* "View.MemoryView":1121 + * cdef Py_ssize_t f_stride = 0 + * + * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = 0; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = 0; - __pyx_v_prediction = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_28 * __pyx_v_U2.strides[0]) ) + __pyx_t_29 * __pyx_v_U2.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))), 1); + for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { + __pyx_v_i = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":317 - * j = Y_aids[idx] - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] # <<<<<<<<<<<<<< - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): + /* "View.MemoryView":1122 + * + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * c_stride = mslice.strides[i] + * break */ - __pyx_t_31 = __pyx_v_idx; - __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_Y.data + __pyx_t_31 * __pyx_v_Y.strides[0]) ))); + __pyx_t_2 = ((__pyx_v_mslice->shape[__pyx_v_i]) > 1); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":318 - * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] + /* "View.MemoryView":1123 + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] # <<<<<<<<<<<<<< + * break + * */ - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); + __pyx_v_c_stride = (__pyx_v_mslice->strides[__pyx_v_i]); - /* "cornac/models/efm/recom_efm.pyx":319 - * score = Y[idx] - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + /* "View.MemoryView":1124 + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] + * break # <<<<<<<<<<<<<< + * + * for i in range(ndim): */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_k = __pyx_t_33; + goto __pyx_L4_break; - /* "cornac/models/efm/recom_efm.pyx":320 - * loss += (prediction - score) * (prediction - score) - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] # <<<<<<<<<<<<<< - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] + /* "View.MemoryView":1122 + * + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * c_stride = mslice.strides[i] + * break */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_31 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))); + } + } + __pyx_L4_break:; - /* "cornac/models/efm/recom_efm.pyx":321 - * for k in range(num_explicit_factors): - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] # <<<<<<<<<<<<<< - * U2_numerator[i, k] += lambda_y * score * V[j, k] - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] + /* "View.MemoryView":1126 + * break + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_j; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_31 * __pyx_v_U2.strides[1]) )))); + __pyx_t_1 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_1; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; - /* "cornac/models/efm/recom_efm.pyx":322 - * V_numerator[j, k] += lambda_y * score * U2[i, k] - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] # <<<<<<<<<<<<<< - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] + /* "View.MemoryView":1127 * + * for i in range(ndim): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * f_stride = mslice.strides[i] + * break */ - __pyx_t_31 = __pyx_v_j; - __pyx_t_30 = __pyx_v_k; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )))); + __pyx_t_2 = ((__pyx_v_mslice->shape[__pyx_v_i]) > 1); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":323 - * V_denominator[j, k] += lambda_y * prediction * U2[i, k] - * U2_numerator[i, k] += lambda_y * score * V[j, k] - * U2_denominator[i, k] += lambda_y * prediction * V[j, k] # <<<<<<<<<<<<<< + /* "View.MemoryView":1128 + * for i in range(ndim): + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] # <<<<<<<<<<<<<< + * break * - * # update V */ - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_k; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_k; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))); - } - } - } - } - } + __pyx_v_f_stride = (__pyx_v_mslice->strides[__pyx_v_i]); - /* "cornac/models/efm/recom_efm.pyx":326 + /* "View.MemoryView":1129 + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] + * break # <<<<<<<<<<<<<< * - * # update V - * for i in prange(num_aspects): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): */ - __pyx_t_3 = __pyx_v_num_aspects; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - double __pyx_parallel_temp2 = ((double)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_35 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_35 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_35; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + goto __pyx_L7_break; - /* "cornac/models/efm/recom_efm.pyx":327 - * # update V - * for i in prange(num_aspects): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + /* "View.MemoryView":1127 + * + * for i in range(ndim): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * f_stride = mslice.strides[i] + * break */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + } + } + __pyx_L7_break:; - /* "cornac/models/efm/recom_efm.pyx":328 - * for i in prange(num_aspects): - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] # <<<<<<<<<<<<<< - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) + /* "View.MemoryView":1131 + * break + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< + * return 'C' + * else: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_v * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_29 * __pyx_v_V.strides[0]) ) + __pyx_t_28 * __pyx_v_V.strides[1]) ))))); + __pyx_t_2 = (abs_py_ssize_t(__pyx_v_c_stride) <= abs_py_ssize_t(__pyx_v_f_stride)); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":329 - * for j in range(num_explicit_factors): - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps # <<<<<<<<<<<<<< - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) + /* "View.MemoryView":1132 * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): + * return 'C' # <<<<<<<<<<<<<< + * else: + * return 'F' */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_27 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += (((((*((long *) ( /* dim=0 */ (__pyx_v_X_aspect_counts.data + __pyx_t_28 * __pyx_v_X_aspect_counts.strides[0]) ))) + (*((long *) ( /* dim=0 */ (__pyx_v_Y_aspect_counts.data + __pyx_t_29 * __pyx_v_Y_aspect_counts.strides[0]) )))) * __pyx_v_lambda_v) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_30 * __pyx_v_V.strides[0]) ) + __pyx_t_31 * __pyx_v_V.strides[1]) )))) + __pyx_v_eps); + __pyx_r = 'C'; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":330 - * loss += lambda_v * V[i, j] * V[i, j] - * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps - * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) # <<<<<<<<<<<<<< + /* "View.MemoryView":1131 + * break * - * # update U1, H1 + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< + * return 'C' + * else: */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_V_numerator.diminfo[1].strides)); - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_V_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 330, __pyx_L42_error) - } - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_31 * __pyx_v_V.strides[0]) ) + __pyx_t_30 * __pyx_v_V.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L47; - __pyx_L42_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L46; - __pyx_L46:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates15) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L47:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } + } - /* "cornac/models/efm/recom_efm.pyx":333 + /* "View.MemoryView":1134 + * return 'C' + * else: + * return 'F' # <<<<<<<<<<<<<< * - * # update U1, H1 - * for i in prange(num_users): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] + * @cython.cdivision(True) */ - __pyx_t_35 = __pyx_v_num_users; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - double __pyx_parallel_temp2 = ((double)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_3 = (__pyx_t_35 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_3 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_3; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + /*else*/ { + __pyx_r = 'F'; + goto __pyx_L0; + } - /* "cornac/models/efm/recom_efm.pyx":334 - * # update U1, H1 - * for i in prange(num_users): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + /* "View.MemoryView":1113 + * + * @cname('__pyx_get_best_slice_order') + * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) noexcept nogil: # <<<<<<<<<<<<<< + * """ + * Figure out the best memory access order for a given slice. */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; - /* "cornac/models/efm/recom_efm.pyx":335 - * for i in prange(num_users): - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] # <<<<<<<<<<<<<< - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_29 * __pyx_v_U1.strides[0]) ) + __pyx_t_28 * __pyx_v_U1.strides[1]) ))))); + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} - /* "cornac/models/efm/recom_efm.pyx":336 - * for j in range(num_explicit_factors): - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps # <<<<<<<<<<<<<< - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): +/* "View.MemoryView":1137 + * + * @cython.cdivision(True) + * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< + * char *dst_data, Py_ssize_t *dst_strides, + * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_26 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (((((*((long *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_28 * __pyx_v_A_user_counts.strides[0]) ))) + (*((long *) ( /* dim=0 */ (__pyx_v_X_user_counts.data + __pyx_t_29 * __pyx_v_X_user_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_31 * __pyx_v_U1.strides[0]) ) + __pyx_t_30 * __pyx_v_U1.strides[1]) )))) + __pyx_v_eps); - /* "cornac/models/efm/recom_efm.pyx":337 - * loss += lambda_u * U1[i, j] * U1[i, j] - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) # <<<<<<<<<<<<<< - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] +static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t *__pyx_v_src_strides, char *__pyx_v_dst_data, Py_ssize_t *__pyx_v_dst_strides, Py_ssize_t *__pyx_v_src_shape, Py_ssize_t *__pyx_v_dst_shape, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + CYTHON_UNUSED Py_ssize_t __pyx_v_src_extent; + Py_ssize_t __pyx_v_dst_extent; + Py_ssize_t __pyx_v_src_stride; + Py_ssize_t __pyx_v_dst_stride; + int __pyx_t_1; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + Py_ssize_t __pyx_t_5; + + /* "View.MemoryView":1144 + * + * cdef Py_ssize_t i + * cdef Py_ssize_t src_extent = src_shape[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_U1_numerator.diminfo[1].strides)); - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U1_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_36 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 337, __pyx_L50_error) - } - __pyx_t_30 = __pyx_v_i; - __pyx_t_31 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_30 * __pyx_v_U1.strides[0]) ) + __pyx_t_31 * __pyx_v_U1.strides[1]) )) *= sqrt((__pyx_t_37 / __pyx_t_36)); - } + __pyx_v_src_extent = (__pyx_v_src_shape[0]); - /* "cornac/models/efm/recom_efm.pyx":338 - * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): # <<<<<<<<<<<<<< - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + /* "View.MemoryView":1145 + * cdef Py_ssize_t i + * cdef Py_ssize_t src_extent = src_shape[0] + * cdef Py_ssize_t dst_extent = dst_shape[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t src_stride = src_strides[0] + * cdef Py_ssize_t dst_stride = dst_strides[0] */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + __pyx_v_dst_extent = (__pyx_v_dst_shape[0]); - /* "cornac/models/efm/recom_efm.pyx":339 - * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] # <<<<<<<<<<<<<< - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) + /* "View.MemoryView":1146 + * cdef Py_ssize_t src_extent = src_shape[0] + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t dst_stride = dst_strides[0] + * */ - __pyx_t_31 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_31 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_29 * __pyx_v_H1.strides[0]) ) + __pyx_t_28 * __pyx_v_H1.strides[1]) ))))); + __pyx_v_src_stride = (__pyx_v_src_strides[0]); - /* "cornac/models/efm/recom_efm.pyx":340 - * for j in range(num_latent_factors): - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps # <<<<<<<<<<<<<< - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) + /* "View.MemoryView":1147 + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] + * cdef Py_ssize_t dst_stride = dst_strides[0] # <<<<<<<<<<<<<< * + * if ndim == 1: */ - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_31 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += ((((*((long *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_28 * __pyx_v_A_user_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_29 * __pyx_v_H1.strides[0]) ) + __pyx_t_30 * __pyx_v_H1.strides[1]) )))) + __pyx_v_eps); + __pyx_v_dst_stride = (__pyx_v_dst_strides[0]); - /* "cornac/models/efm/recom_efm.pyx":341 - * loss += lambda_h * H1[i, j] * H1[i, j] - * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps - * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) # <<<<<<<<<<<<<< + /* "View.MemoryView":1149 + * cdef Py_ssize_t dst_stride = dst_strides[0] * - * # update U2, H2 + * if ndim == 1: # <<<<<<<<<<<<<< + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H1_numerator.diminfo[1].strides)); - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_H1_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 341, __pyx_L50_error) - } - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_30 * __pyx_v_H1.strides[0]) ) + __pyx_t_29 * __pyx_v_H1.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L57; - __pyx_L50_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L56; - __pyx_L56:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates16) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L57:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } + __pyx_t_1 = (__pyx_v_ndim == 1); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":344 + /* "View.MemoryView":1150 * - * # update U2, H2 - * for i in prange(num_items): # <<<<<<<<<<<<<< - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) */ - __pyx_t_3 = __pyx_v_num_items; - if ((1 == 0)) abort(); - { - int __pyx_parallel_temp0 = ((int)0xbad0bad0); - int __pyx_parallel_temp1 = ((int)0xbad0bad0); - double __pyx_parallel_temp2 = ((double)__PYX_NAN()); - const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; - PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; - int __pyx_parallel_why; - __pyx_parallel_why = 0; - __pyx_t_35 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; - if (__pyx_t_35 > 0) - { - #ifdef _OPENMP - #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) - #endif /* _OPENMP */ - for (__pyx_t_34 = 0; __pyx_t_34 < __pyx_t_35; __pyx_t_34++){ - if (__pyx_parallel_why < 2) - { - __pyx_v_i = (int)(0 + 1 * __pyx_t_34); - /* Initialize private variables to invalid values */ - __pyx_v_j = ((int)0xbad0bad0); + __pyx_t_2 = (__pyx_v_src_stride > 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_dst_stride > 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } - /* "cornac/models/efm/recom_efm.pyx":345 - * # update U2, H2 - * for i in prange(num_items): - * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + /* "View.MemoryView":1151 + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): # <<<<<<<<<<<<<< + * memcpy(dst_data, src_data, itemsize * dst_extent) + * else: + */ + __pyx_t_2 = (((size_t)__pyx_v_src_stride) == __pyx_v_itemsize); + if (__pyx_t_2) { + __pyx_t_2 = (__pyx_v_itemsize == ((size_t)__pyx_v_dst_stride)); + } + __pyx_t_1 = __pyx_t_2; + __pyx_L5_bool_binop_done:; + + /* "View.MemoryView":1150 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) */ - __pyx_t_4 = __pyx_v_num_explicit_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":346 - * for i in prange(num_items): - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] # <<<<<<<<<<<<<< - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + /* "View.MemoryView":1152 + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) # <<<<<<<<<<<<<< + * else: + * for i in range(dst_extent): */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_28 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_29 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_28 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) ))))); + (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, (__pyx_v_itemsize * __pyx_v_dst_extent))); - /* "cornac/models/efm/recom_efm.pyx":347 - * for j in range(num_explicit_factors): - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps # <<<<<<<<<<<<<< - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): + /* "View.MemoryView":1150 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) */ - __pyx_t_27 = __pyx_v_i; - __pyx_t_28 = __pyx_v_i; - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_31 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (((((*((long *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_27 * __pyx_v_A_item_counts.strides[0]) ))) + (*((long *) ( /* dim=0 */ (__pyx_v_Y_item_counts.data + __pyx_t_28 * __pyx_v_Y_item_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_30 * __pyx_v_U2.strides[0]) ) + __pyx_t_29 * __pyx_v_U2.strides[1]) )))) + __pyx_v_eps); + goto __pyx_L4; + } - /* "cornac/models/efm/recom_efm.pyx":348 - * loss += lambda_u * U2[i, j] * U2[i, j] - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) # <<<<<<<<<<<<<< - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] + /* "View.MemoryView":1154 + * memcpy(dst_data, src_data, itemsize * dst_extent) + * else: + * for i in range(dst_extent): # <<<<<<<<<<<<<< + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_U2_numerator.diminfo[1].strides)); - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_U2_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_36 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 348, __pyx_L60_error) - } - __pyx_t_29 = __pyx_v_i; - __pyx_t_30 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_29 * __pyx_v_U2.strides[0]) ) + __pyx_t_30 * __pyx_v_U2.strides[1]) )) *= sqrt((__pyx_t_37 / __pyx_t_36)); - } + /*else*/ { + __pyx_t_3 = __pyx_v_dst_extent; + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { + __pyx_v_i = __pyx_t_5; - /* "cornac/models/efm/recom_efm.pyx":349 - * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): # <<<<<<<<<<<<<< - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + /* "View.MemoryView":1155 + * else: + * for i in range(dst_extent): + * memcpy(dst_data, src_data, itemsize) # <<<<<<<<<<<<<< + * src_data += src_stride + * dst_data += dst_stride */ - __pyx_t_4 = __pyx_v_num_latent_factors; - __pyx_t_32 = __pyx_t_4; - for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) { - __pyx_v_j = __pyx_t_33; + (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, __pyx_v_itemsize)); - /* "cornac/models/efm/recom_efm.pyx":350 - * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] # <<<<<<<<<<<<<< - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + /* "View.MemoryView":1156 + * for i in range(dst_extent): + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride # <<<<<<<<<<<<<< + * dst_data += dst_stride + * else: */ - __pyx_t_30 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_28 = __pyx_v_i; - __pyx_t_27 = __pyx_v_j; - __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_30 * __pyx_v_H2.strides[0]) ) + __pyx_t_29 * __pyx_v_H2.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_28 * __pyx_v_H2.strides[0]) ) + __pyx_t_27 * __pyx_v_H2.strides[1]) ))))); + __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); - /* "cornac/models/efm/recom_efm.pyx":351 - * for j in range(num_latent_factors): - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps # <<<<<<<<<<<<<< - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + /* "View.MemoryView":1157 + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride + * dst_data += dst_stride # <<<<<<<<<<<<<< + * else: + * for i in range(dst_extent): + */ + __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); + } + } + __pyx_L4:; + + /* "View.MemoryView":1149 + * cdef Py_ssize_t dst_stride = dst_strides[0] * + * if ndim == 1: # <<<<<<<<<<<<<< + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): */ - __pyx_t_27 = __pyx_v_i; - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_30 = __pyx_v_i; - __pyx_t_26 = __pyx_v_j; - *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += ((((*((long *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_27 * __pyx_v_A_item_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_28 * __pyx_v_H2.strides[0]) ) + __pyx_t_29 * __pyx_v_H2.strides[1]) )))) + __pyx_v_eps); + goto __pyx_L3; + } - /* "cornac/models/efm/recom_efm.pyx":352 - * loss += lambda_h * H2[i, j] * H2[i, j] - * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) # <<<<<<<<<<<<<< + /* "View.MemoryView":1159 + * dst_data += dst_stride + * else: + * for i in range(dst_extent): # <<<<<<<<<<<<<< + * _copy_strided_to_strided(src_data, src_strides + 1, + * dst_data, dst_strides + 1, + */ + /*else*/ { + __pyx_t_3 = __pyx_v_dst_extent; + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { + __pyx_v_i = __pyx_t_5; + + /* "View.MemoryView":1160 + * else: + * for i in range(dst_extent): + * _copy_strided_to_strided(src_data, src_strides + 1, # <<<<<<<<<<<<<< + * dst_data, dst_strides + 1, + * src_shape + 1, dst_shape + 1, + */ + _copy_strided_to_strided(__pyx_v_src_data, (__pyx_v_src_strides + 1), __pyx_v_dst_data, (__pyx_v_dst_strides + 1), (__pyx_v_src_shape + 1), (__pyx_v_dst_shape + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize); + + /* "View.MemoryView":1164 + * src_shape + 1, dst_shape + 1, + * ndim - 1, itemsize) + * src_data += src_stride # <<<<<<<<<<<<<< + * dst_data += dst_stride * - * if self.verbose: */ - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_H2_numerator.diminfo[1].strides)); - __pyx_t_28 = __pyx_v_i; - __pyx_t_29 = __pyx_v_j; - __pyx_t_37 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_H2_denominator.diminfo[1].strides)); - if (unlikely(__pyx_t_37 == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - __PYX_ERR(0, 352, __pyx_L60_error) - } - __pyx_t_29 = __pyx_v_i; - __pyx_t_28 = __pyx_v_j; - *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_29 * __pyx_v_H2.strides[0]) ) + __pyx_t_28 * __pyx_v_H2.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_37)); - } - goto __pyx_L67; - __pyx_L60_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L66; - __pyx_L66:; - #ifdef _OPENMP - #pragma omp critical(__pyx_parallel_lastprivates17) - #endif /* _OPENMP */ - { - __pyx_parallel_temp0 = __pyx_v_i; - __pyx_parallel_temp1 = __pyx_v_j; - __pyx_parallel_temp2 = __pyx_v_loss; - } - __pyx_L67:; - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_why) - #endif /* _OPENMP */ - } - } - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - __pyx_v_i = __pyx_parallel_temp0; - __pyx_v_j = __pyx_parallel_temp1; - __pyx_v_loss = __pyx_parallel_temp2; - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L12_error; - } - } - } - goto __pyx_L69; - __pyx_L12_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #ifdef _OPENMP - #pragma omp flush(__pyx_parallel_exc_type) - #endif /* _OPENMP */ - if (!__pyx_parallel_exc_type) { - __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); - __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; - __Pyx_GOTREF(__pyx_parallel_exc_type); - } - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_parallel_why = 4; - goto __pyx_L69; - __pyx_L69:; - #ifdef _OPENMP - Py_END_ALLOW_THREADS - #else -{ -#ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - #endif /* _OPENMP */ - /* Clean up any temporaries */ - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - #ifndef _OPENMP -} -#endif /* _OPENMP */ - } - if (__pyx_parallel_exc_type) { - /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ - __pyx_parallel_why = 4; - } - if (__pyx_parallel_why) { - switch (__pyx_parallel_why) { - case 4: - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_GIVEREF(__pyx_parallel_exc_type); - __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); - __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - goto __pyx_L8_error; - } - } - } - #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) - #undef likely - #undef unlikely - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #endif - } + __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); - /* "cornac/models/efm/recom_efm.pyx":280 - * H2_denominator.fill(0) + /* "View.MemoryView":1165 + * ndim - 1, itemsize) + * src_data += src_stride + * dst_data += dst_stride # <<<<<<<<<<<<<< * - * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< - * # compute numerators and denominators for all factors - * for idx in prange(A.shape[0]): + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, */ - /*finally:*/ { - /*normal exit:*/{ - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L9; - } - __pyx_L8_error: { - #ifdef WITH_THREAD - __Pyx_FastGIL_Forget(); - Py_BLOCK_THREADS - #endif - goto __pyx_L1_error; - } - __pyx_L9:; - } + __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); } + } + __pyx_L3:; - /* "cornac/models/efm/recom_efm.pyx":354 - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) - * - * if self.verbose: # <<<<<<<<<<<<<< - * print('iter: %d, loss: %f' % (t, loss)) + /* "View.MemoryView":1137 * + * @cython.cdivision(True) + * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< + * char *dst_data, Py_ssize_t *dst_strides, + * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 354, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_38 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_38 < 0)) __PYX_ERR(0, 354, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_38) { - /* "cornac/models/efm/recom_efm.pyx":355 - * - * if self.verbose: - * print('iter: %d, loss: %f' % (t, loss)) # <<<<<<<<<<<<<< + /* function exit code */ +} + +/* "View.MemoryView":1167 + * dst_data += dst_stride * - * if self.verbose: + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) noexcept nogil: */ - __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_23 = 0; - __pyx_t_39 = 127; - __Pyx_INCREF(__pyx_kp_u_iter); - __pyx_t_23 += 6; - __Pyx_GIVEREF(__pyx_kp_u_iter); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_iter); - __pyx_t_6 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_t), __pyx_n_u_d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_39 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_39) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_39; - __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); - __pyx_t_6 = 0; - __Pyx_INCREF(__pyx_kp_u_loss); - __pyx_t_23 += 8; - __Pyx_GIVEREF(__pyx_kp_u_loss); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_loss); - __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_Format(__pyx_t_6, __pyx_n_u_f); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_39 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_39) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_39; - __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_23, __pyx_t_39); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":354 - * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) - * - * if self.verbose: # <<<<<<<<<<<<<< - * print('iter: %d, loss: %f' % (t, loss)) +static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + + /* "View.MemoryView":1170 + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) noexcept nogil: + * _copy_strided_to_strided(src.data, src.strides, dst.data, dst.strides, # <<<<<<<<<<<<<< + * src.shape, dst.shape, ndim, itemsize) * */ - } + _copy_strided_to_strided(__pyx_v_src->data, __pyx_v_src->strides, __pyx_v_dst->data, __pyx_v_dst->strides, __pyx_v_src->shape, __pyx_v_dst->shape, __pyx_v_ndim, __pyx_v_itemsize); - /* "cornac/models/efm/recom_efm.pyx":267 - * floating eps = 1e-9 + /* "View.MemoryView":1167 + * dst_data += dst_stride * - * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< - * loss = 0. - * U1_numerator.fill(0) + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) noexcept nogil: */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":357 - * print('iter: %d, loss: %f' % (t, loss)) + /* function exit code */ +} + +/* "View.MemoryView":1174 * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Optimization finished!') + * @cname('__pyx_memoryview_slice_get_size') + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) noexcept nogil: # <<<<<<<<<<<<<< + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + */ + +static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_shape; + Py_ssize_t __pyx_v_size; + Py_ssize_t __pyx_r; + Py_ssize_t __pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + + /* "View.MemoryView":1176 + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) noexcept nogil: + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize # <<<<<<<<<<<<<< * + * for shape in src.shape[:ndim]: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_38 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_38 < 0)) __PYX_ERR(0, 357, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_38) { + __pyx_t_1 = __pyx_v_src->memview->view.itemsize; + __pyx_v_size = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":358 + /* "View.MemoryView":1178 + * cdef Py_ssize_t shape, size = src.memview.view.itemsize * - * if self.verbose: - * print('Optimization finished!') # <<<<<<<<<<<<<< + * for shape in src.shape[:ndim]: # <<<<<<<<<<<<<< + * size *= shape * - * def _build_matrices(self, data_set): */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = (__pyx_v_src->shape + __pyx_v_ndim); + for (__pyx_t_4 = __pyx_v_src->shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_v_shape = (__pyx_t_2[0]); - /* "cornac/models/efm/recom_efm.pyx":357 - * print('iter: %d, loss: %f' % (t, loss)) + /* "View.MemoryView":1179 * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Optimization finished!') + * for shape in src.shape[:ndim]: + * size *= shape # <<<<<<<<<<<<<< * + * return size */ + __pyx_v_size = (__pyx_v_size * __pyx_v_shape); } - /* "cornac/models/efm/recom_efm.pyx":230 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def _fit_efm(self, int num_threads, # <<<<<<<<<<<<<< - * floating[:] A, integral[:] A_uids, integral[:] A_iids, integral[:] A_user_counts, integral[:] A_item_counts, - * floating[:] X, integral[:] X_uids, integral[:] X_aids, integral[:] X_user_counts, integral[:] X_aspect_counts, - */ - - /* 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_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_U1_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_U1_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_U2_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_U2_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_V_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_V_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_H1_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_H1_denominator); - __Pyx_XDECREF((PyObject *)__pyx_v_H2_numerator); - __Pyx_XDECREF((PyObject *)__pyx_v_H2_denominator); - __Pyx_XDECREF(__pyx_v_t); - __PYX_XDEC_MEMVIEW(&__pyx_v_A, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_user_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_A_item_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_uids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_user_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_X_aspect_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_iids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_aids, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_item_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_U2, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_V, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_H1, 1); - __PYX_XDEC_MEMVIEW(&__pyx_v_H2, 1); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "cornac/models/efm/recom_efm.pyx":360 - * print('Optimization finished!') + /* "View.MemoryView":1181 + * size *= shape * - * def _build_matrices(self, data_set): # <<<<<<<<<<<<<< - * sentiment = self.train_set.sentiment - * ratings = [] - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_9_build_matrices(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_9_build_matrices = {"_build_matrices", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_9_build_matrices, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_9_build_matrices(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_data_set = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_build_matrices (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_data_set,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_data_set)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_build_matrices", 1, 2, 2, 1); __PYX_ERR(0, 360, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_build_matrices") < 0)) __PYX_ERR(0, 360, __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_self = values[0]; - __pyx_v_data_set = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_build_matrices", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 360, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._build_matrices", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_8_build_matrices(__pyx_self, __pyx_v_self, __pyx_v_data_set); + * return size # <<<<<<<<<<<<<< + * + * @cname('__pyx_fill_contig_strides_array') + */ + __pyx_r = __pyx_v_size; + goto __pyx_L0; + + /* "View.MemoryView":1174 + * + * @cname('__pyx_memoryview_slice_get_size') + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) noexcept nogil: # <<<<<<<<<<<<<< + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + */ /* function exit code */ - __Pyx_RefNannyFinishContext(); + __pyx_L0:; return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_8_build_matrices(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_data_set) { - PyObject *__pyx_v_sentiment = NULL; - PyObject *__pyx_v_ratings = NULL; - PyObject *__pyx_v_map_uid = NULL; - PyObject *__pyx_v_map_iid = NULL; - PyObject *__pyx_v_uid = NULL; - PyObject *__pyx_v_iid = NULL; - PyObject *__pyx_v_rating = NULL; - PyObject *__pyx_v_A = NULL; - PyObject *__pyx_v_attention_scores = NULL; - PyObject *__pyx_v_map_aspect_id = NULL; - PyObject *__pyx_v_sentiment_tup_ids_by_item = NULL; - PyObject *__pyx_v_user_aspects = NULL; - PyObject *__pyx_v_user_aspect_count = NULL; - PyObject *__pyx_v_aid = NULL; - PyObject *__pyx_v_count = NULL; - PyObject *__pyx_v_X = NULL; - PyObject *__pyx_v_quality_scores = NULL; - PyObject *__pyx_v_sentiment_tup_ids_by_user = NULL; - PyObject *__pyx_v_item_aspects = NULL; - PyObject *__pyx_v_item_aspect_count = NULL; - PyObject *__pyx_v_total_sentiment_by_aspect = NULL; - PyObject *__pyx_v_tup_id = NULL; - CYTHON_UNUSED PyObject *__pyx_v__ = NULL; - PyObject *__pyx_v_sentiment_polarity = NULL; - PyObject *__pyx_v_total_sentiment = NULL; - PyObject *__pyx_v_avg_sentiment = NULL; - PyObject *__pyx_v_Y = NULL; - PyObject *__pyx_7genexpr__pyx_v_tup_id = NULL; - PyObject *__pyx_7genexpr__pyx_v_tup = NULL; - PyObject *__pyx_8genexpr1__pyx_v_tup_id = NULL; - PyObject *__pyx_8genexpr1__pyx_v_tup = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - PyObject *(*__pyx_t_5)(PyObject *); - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *(*__pyx_t_9)(PyObject *); - int __pyx_t_10; - int __pyx_t_11; - int __pyx_t_12; - Py_ssize_t __pyx_t_13; - int __pyx_t_14; - int __pyx_t_15; - Py_ssize_t __pyx_t_16; - Py_ssize_t __pyx_t_17; - int __pyx_t_18; - Py_ssize_t __pyx_t_19; - PyObject *__pyx_t_20 = NULL; - PyObject *__pyx_t_21 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_build_matrices", 0); +/* "View.MemoryView":1184 + * + * @cname('__pyx_fill_contig_strides_array') + * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< + * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, + * int ndim, char order) noexcept nogil: + */ - /* "cornac/models/efm/recom_efm.pyx":361 +static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, Py_ssize_t __pyx_v_stride, int __pyx_v_ndim, char __pyx_v_order) { + int __pyx_v_idx; + Py_ssize_t __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + + /* "View.MemoryView":1193 + * cdef int idx * - * def _build_matrices(self, data_set): - * sentiment = self.train_set.sentiment # <<<<<<<<<<<<<< - * ratings = [] - * map_uid = [] + * if order == 'F': # <<<<<<<<<<<<<< + * for idx in range(ndim): + * strides[idx] = stride */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 361, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 361, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_sentiment = __pyx_t_2; - __pyx_t_2 = 0; + __pyx_t_1 = (__pyx_v_order == 'F'); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":362 - * def _build_matrices(self, data_set): - * sentiment = self.train_set.sentiment - * ratings = [] # <<<<<<<<<<<<<< - * map_uid = [] - * map_iid = [] + /* "View.MemoryView":1194 + * + * if order == 'F': + * for idx in range(ndim): # <<<<<<<<<<<<<< + * strides[idx] = stride + * stride *= shape[idx] */ - __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 362, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_ratings = __pyx_t_2; - __pyx_t_2 = 0; + __pyx_t_2 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_idx = __pyx_t_4; - /* "cornac/models/efm/recom_efm.pyx":363 - * sentiment = self.train_set.sentiment - * ratings = [] - * map_uid = [] # <<<<<<<<<<<<<< - * map_iid = [] + /* "View.MemoryView":1195 + * if order == 'F': + * for idx in range(ndim): + * strides[idx] = stride # <<<<<<<<<<<<<< + * stride *= shape[idx] + * else: + */ + (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; + + /* "View.MemoryView":1196 + * for idx in range(ndim): + * strides[idx] = stride + * stride *= shape[idx] # <<<<<<<<<<<<<< + * else: + * for idx in range(ndim - 1, -1, -1): + */ + __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); + } + + /* "View.MemoryView":1193 + * cdef int idx * + * if order == 'F': # <<<<<<<<<<<<<< + * for idx in range(ndim): + * strides[idx] = stride */ - __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 363, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_map_uid = __pyx_t_2; - __pyx_t_2 = 0; + goto __pyx_L3; + } - /* "cornac/models/efm/recom_efm.pyx":364 - * ratings = [] - * map_uid = [] - * map_iid = [] # <<<<<<<<<<<<<< + /* "View.MemoryView":1198 + * stride *= shape[idx] + * else: + * for idx in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * strides[idx] = stride + * stride *= shape[idx] + */ + /*else*/ { + for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) { + __pyx_v_idx = __pyx_t_2; + + /* "View.MemoryView":1199 + * else: + * for idx in range(ndim - 1, -1, -1): + * strides[idx] = stride # <<<<<<<<<<<<<< + * stride *= shape[idx] * - * for uid, iid, rating in data_set.uir_iter(): */ - __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 364, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_map_iid = __pyx_t_2; - __pyx_t_2 = 0; + (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; - /* "cornac/models/efm/recom_efm.pyx":366 - * map_iid = [] + /* "View.MemoryView":1200 + * for idx in range(ndim - 1, -1, -1): + * strides[idx] = stride + * stride *= shape[idx] # <<<<<<<<<<<<<< * - * for uid, iid, rating in data_set.uir_iter(): # <<<<<<<<<<<<<< - * if self.train_set.is_unk_user(uid) or self.train_set.is_unk_item(iid): - * continue + * return stride */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_data_set, __pyx_n_s_uir_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 366, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); } } - __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 366, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0; - __pyx_t_5 = NULL; - } else { - __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 366, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 366, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (likely(!__pyx_t_5)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 366, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 366, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } else { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 366, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 366, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } - } else { - __pyx_t_2 = __pyx_t_5(__pyx_t_1); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 366, __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; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 3)) { - if (size > 3) __Pyx_RaiseTooManyValuesError(3); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 366, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_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, 366, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 366, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 366, __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, 366, __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_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, 366, __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, 366, __pyx_L1_error) - __pyx_L6_unpacking_done:; - } - __Pyx_XDECREF_SET(__pyx_v_uid, __pyx_t_3); - __pyx_t_3 = 0; - __Pyx_XDECREF_SET(__pyx_v_iid, __pyx_t_6); - __pyx_t_6 = 0; - __Pyx_XDECREF_SET(__pyx_v_rating, __pyx_t_7); - __pyx_t_7 = 0; + __pyx_L3:; - /* "cornac/models/efm/recom_efm.pyx":367 + /* "View.MemoryView":1202 + * stride *= shape[idx] * - * for uid, iid, rating in data_set.uir_iter(): - * if self.train_set.is_unk_user(uid) or self.train_set.is_unk_item(iid): # <<<<<<<<<<<<<< - * continue - * ratings.append(rating) + * return stride # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_data_to_temp') */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_is_unk_user); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_v_uid) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_uid); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!__pyx_t_11) { - } else { - __pyx_t_10 = __pyx_t_11; - goto __pyx_L8_bool_binop_done; - } - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_is_unk_item); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_6, __pyx_v_iid) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_iid); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 367, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_10 = __pyx_t_11; - __pyx_L8_bool_binop_done:; - if (__pyx_t_10) { + __pyx_r = __pyx_v_stride; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":368 - * for uid, iid, rating in data_set.uir_iter(): - * if self.train_set.is_unk_user(uid) or self.train_set.is_unk_item(iid): - * continue # <<<<<<<<<<<<<< - * ratings.append(rating) - * map_uid.append(uid) + /* "View.MemoryView":1184 + * + * @cname('__pyx_fill_contig_strides_array') + * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< + * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, + * int ndim, char order) noexcept nogil: */ - goto __pyx_L3_continue; - /* "cornac/models/efm/recom_efm.pyx":367 + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1205 * - * for uid, iid, rating in data_set.uir_iter(): - * if self.train_set.is_unk_user(uid) or self.train_set.is_unk_item(iid): # <<<<<<<<<<<<<< - * continue - * ratings.append(rating) + * @cname('__pyx_memoryview_copy_data_to_temp') + * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *tmpslice, + * char order, */ - } - /* "cornac/models/efm/recom_efm.pyx":369 - * if self.train_set.is_unk_user(uid) or self.train_set.is_unk_item(iid): - * continue - * ratings.append(rating) # <<<<<<<<<<<<<< - * map_uid.append(uid) - * map_iid.append(iid) +static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_tmpslice, char __pyx_v_order, int __pyx_v_ndim) { + int __pyx_v_i; + void *__pyx_v_result; + size_t __pyx_v_itemsize; + size_t __pyx_v_size; + void *__pyx_r; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + struct __pyx_memoryview_obj *__pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save; + #endif + + /* "View.MemoryView":1216 + * cdef void *result + * + * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< + * cdef size_t size = slice_get_size(src, ndim) + * */ - __pyx_t_12 = __Pyx_PyObject_Append(__pyx_v_ratings, __pyx_v_rating); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 369, __pyx_L1_error) + __pyx_t_1 = __pyx_v_src->memview->view.itemsize; + __pyx_v_itemsize = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":370 - * continue - * ratings.append(rating) - * map_uid.append(uid) # <<<<<<<<<<<<<< - * map_iid.append(iid) + /* "View.MemoryView":1217 + * + * cdef size_t itemsize = src.memview.view.itemsize + * cdef size_t size = slice_get_size(src, ndim) # <<<<<<<<<<<<<< * + * result = malloc(size) */ - __pyx_t_12 = __Pyx_PyObject_Append(__pyx_v_map_uid, __pyx_v_uid); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 370, __pyx_L1_error) + __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim); - /* "cornac/models/efm/recom_efm.pyx":371 - * ratings.append(rating) - * map_uid.append(uid) - * map_iid.append(iid) # <<<<<<<<<<<<<< + /* "View.MemoryView":1219 + * cdef size_t size = slice_get_size(src, ndim) * - * ratings = np.asarray(ratings, dtype=np.float).flatten() + * result = malloc(size) # <<<<<<<<<<<<<< + * if not result: + * _err_no_memory() */ - __pyx_t_12 = __Pyx_PyObject_Append(__pyx_v_map_iid, __pyx_v_iid); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 371, __pyx_L1_error) + __pyx_v_result = malloc(__pyx_v_size); - /* "cornac/models/efm/recom_efm.pyx":366 - * map_iid = [] + /* "View.MemoryView":1220 + * + * result = malloc(size) + * if not result: # <<<<<<<<<<<<<< + * _err_no_memory() * - * for uid, iid, rating in data_set.uir_iter(): # <<<<<<<<<<<<<< - * if self.train_set.is_unk_user(uid) or self.train_set.is_unk_item(iid): - * continue */ - __pyx_L3_continue:; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = (!(__pyx_v_result != 0)); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":373 - * map_iid.append(iid) + /* "View.MemoryView":1221 + * result = malloc(size) + * if not result: + * _err_no_memory() # <<<<<<<<<<<<<< + * * - * ratings = np.asarray(ratings, dtype=np.float).flatten() # <<<<<<<<<<<<<< - * map_uid = np.asarray(map_uid, dtype=np.int).flatten() - * map_iid = np.asarray(map_iid, dtype=np.int).flatten() */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 373, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 373, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 373, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_ratings); - __Pyx_GIVEREF(__pyx_v_ratings); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_ratings); - __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 373, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 373, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 373, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 373, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 373, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_flatten); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 373, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && 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); - } - } - __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 373, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF_SET(__pyx_v_ratings, __pyx_t_1); - __pyx_t_1 = 0; + __pyx_t_3 = __pyx_memoryview_err_no_memory(); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1221, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":374 + /* "View.MemoryView":1220 + * + * result = malloc(size) + * if not result: # <<<<<<<<<<<<<< + * _err_no_memory() * - * ratings = np.asarray(ratings, dtype=np.float).flatten() - * map_uid = np.asarray(map_uid, dtype=np.int).flatten() # <<<<<<<<<<<<<< - * map_iid = np.asarray(map_iid, dtype=np.int).flatten() - * A = sp.csr_matrix((ratings, (map_uid, map_iid)), */ - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 374, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_asarray); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 374, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 374, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_v_map_uid); - __Pyx_GIVEREF(__pyx_v_map_uid); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_map_uid); - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 374, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 374, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_int); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 374, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 374, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 374, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_flatten); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 374, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 374, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF_SET(__pyx_v_map_uid, __pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":375 - * ratings = np.asarray(ratings, dtype=np.float).flatten() - * map_uid = np.asarray(map_uid, dtype=np.int).flatten() - * map_iid = np.asarray(map_iid, dtype=np.int).flatten() # <<<<<<<<<<<<<< - * A = sp.csr_matrix((ratings, (map_uid, map_iid)), - * shape=(self.train_set.num_users, self.train_set.num_items)) + /* "View.MemoryView":1224 + * + * + * tmpslice.data = result # <<<<<<<<<<<<<< + * tmpslice.memview = src.memview + * for i in range(ndim): + */ + __pyx_v_tmpslice->data = ((char *)__pyx_v_result); + + /* "View.MemoryView":1225 + * + * tmpslice.data = result + * tmpslice.memview = src.memview # <<<<<<<<<<<<<< + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] + */ + __pyx_t_4 = __pyx_v_src->memview; + __pyx_v_tmpslice->memview = __pyx_t_4; + + /* "View.MemoryView":1226 + * tmpslice.data = result + * tmpslice.memview = src.memview + * for i in range(ndim): # <<<<<<<<<<<<<< + * tmpslice.shape[i] = src.shape[i] + * tmpslice.suboffsets[i] = -1 + */ + __pyx_t_3 = __pyx_v_ndim; + __pyx_t_5 = __pyx_t_3; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1227 + * tmpslice.memview = src.memview + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] # <<<<<<<<<<<<<< + * tmpslice.suboffsets[i] = -1 + * */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 375, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 375, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 375, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_map_iid); - __Pyx_GIVEREF(__pyx_v_map_iid); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_map_iid); - __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 375, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 375, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_int); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 375, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 375, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 375, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_flatten); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 375, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } + (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]); + + /* "View.MemoryView":1228 + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] + * tmpslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< + * + * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, ndim, order) + */ + (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L; } - __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 375, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF_SET(__pyx_v_map_iid, __pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":376 - * map_uid = np.asarray(map_uid, dtype=np.int).flatten() - * map_iid = np.asarray(map_iid, dtype=np.int).flatten() - * A = sp.csr_matrix((ratings, (map_uid, map_iid)), # <<<<<<<<<<<<<< - * shape=(self.train_set.num_users, self.train_set.num_items)) + /* "View.MemoryView":1230 + * tmpslice.suboffsets[i] = -1 + * + * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, ndim, order) # <<<<<<<<<<<<<< + * * */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_sp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 376, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_csr_matrix); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 376, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 376, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_map_uid); - __Pyx_GIVEREF(__pyx_v_map_uid); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_map_uid); - __Pyx_INCREF(__pyx_v_map_iid); - __Pyx_GIVEREF(__pyx_v_map_iid); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_map_iid); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 376, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_ratings); - __Pyx_GIVEREF(__pyx_v_ratings); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_ratings); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 376, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7); - __pyx_t_7 = 0; + (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order)); - /* "cornac/models/efm/recom_efm.pyx":377 - * map_iid = np.asarray(map_iid, dtype=np.int).flatten() - * A = sp.csr_matrix((ratings, (map_uid, map_iid)), - * shape=(self.train_set.num_users, self.train_set.num_items)) # <<<<<<<<<<<<<< + /* "View.MemoryView":1233 * - * attention_scores = [] + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if tmpslice.shape[i] == 1: + * tmpslice.strides[i] = 0 */ - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 377, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 377, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_users); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 377, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 377, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 377, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 377, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_8); - __pyx_t_3 = 0; - __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_shape, __pyx_t_2) < 0) __PYX_ERR(0, 377, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __pyx_v_ndim; + __pyx_t_5 = __pyx_t_3; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; - /* "cornac/models/efm/recom_efm.pyx":376 - * map_uid = np.asarray(map_uid, dtype=np.int).flatten() - * map_iid = np.asarray(map_iid, dtype=np.int).flatten() - * A = sp.csr_matrix((ratings, (map_uid, map_iid)), # <<<<<<<<<<<<<< - * shape=(self.train_set.num_users, self.train_set.num_items)) + /* "View.MemoryView":1234 + * + * for i in range(ndim): + * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< + * tmpslice.strides[i] = 0 * */ - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 376, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_v_A = __pyx_t_2; - __pyx_t_2 = 0; + __pyx_t_2 = ((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":379 - * shape=(self.train_set.num_users, self.train_set.num_items)) + /* "View.MemoryView":1235 + * for i in range(ndim): + * if tmpslice.shape[i] == 1: + * tmpslice.strides[i] = 0 # <<<<<<<<<<<<<< * - * attention_scores = [] # <<<<<<<<<<<<<< - * map_uid = [] - * map_aspect_id = [] + * if slice_is_contig(src[0], order, ndim): */ - __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 379, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_attention_scores = __pyx_t_2; - __pyx_t_2 = 0; + (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0; - /* "cornac/models/efm/recom_efm.pyx":380 + /* "View.MemoryView":1234 + * + * for i in range(ndim): + * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< + * tmpslice.strides[i] = 0 * - * attention_scores = [] - * map_uid = [] # <<<<<<<<<<<<<< - * map_aspect_id = [] - * for uid, sentiment_tup_ids_by_item in sentiment.user_sentiment.items(): */ - __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 380, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF_SET(__pyx_v_map_uid, __pyx_t_2); - __pyx_t_2 = 0; + } + } - /* "cornac/models/efm/recom_efm.pyx":381 - * attention_scores = [] - * map_uid = [] - * map_aspect_id = [] # <<<<<<<<<<<<<< - * for uid, sentiment_tup_ids_by_item in sentiment.user_sentiment.items(): - * if self.train_set.is_unk_user(uid): + /* "View.MemoryView":1237 + * tmpslice.strides[i] = 0 + * + * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< + * memcpy(result, src.data, size) + * else: */ - __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 381, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_map_aspect_id = __pyx_t_2; - __pyx_t_2 = 0; + __pyx_t_2 = __pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":382 - * map_uid = [] - * map_aspect_id = [] - * for uid, sentiment_tup_ids_by_item in sentiment.user_sentiment.items(): # <<<<<<<<<<<<<< - * if self.train_set.is_unk_user(uid): - * continue + /* "View.MemoryView":1238 + * + * if slice_is_contig(src[0], order, ndim): + * memcpy(result, src.data, size) # <<<<<<<<<<<<<< + * else: + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) */ - __pyx_t_4 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_user_sentiment); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 382, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - if (unlikely(__pyx_t_7 == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); - __PYX_ERR(0, 382, __pyx_L1_error) + (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size)); + + /* "View.MemoryView":1237 + * tmpslice.strides[i] = 0 + * + * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< + * memcpy(result, src.data, size) + * else: + */ + goto __pyx_L9; } - __pyx_t_1 = __Pyx_dict_iterator(__pyx_t_7, 0, __pyx_n_s_items, (&__pyx_t_13), (&__pyx_t_14)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 382, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_2); - __pyx_t_2 = __pyx_t_1; - __pyx_t_1 = 0; - while (1) { - __pyx_t_15 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_13, &__pyx_t_4, &__pyx_t_1, &__pyx_t_7, NULL, __pyx_t_14); - if (unlikely(__pyx_t_15 == 0)) break; - if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 382, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_XDECREF_SET(__pyx_v_uid, __pyx_t_1); - __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_sentiment_tup_ids_by_item, __pyx_t_7); - __pyx_t_7 = 0; - /* "cornac/models/efm/recom_efm.pyx":383 - * map_aspect_id = [] - * for uid, sentiment_tup_ids_by_item in sentiment.user_sentiment.items(): - * if self.train_set.is_unk_user(uid): # <<<<<<<<<<<<<< - * continue - * user_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_item.values() + /* "View.MemoryView":1240 + * memcpy(result, src.data, size) + * else: + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) # <<<<<<<<<<<<<< + * + * return result */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 383, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_is_unk_user); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 383, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_7 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_1, __pyx_v_uid) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_uid); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 383, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 383, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_10) { + /*else*/ { + copy_strided_to_strided(__pyx_v_src, __pyx_v_tmpslice, __pyx_v_ndim, __pyx_v_itemsize); + } + __pyx_L9:; - /* "cornac/models/efm/recom_efm.pyx":384 - * for uid, sentiment_tup_ids_by_item in sentiment.user_sentiment.items(): - * if self.train_set.is_unk_user(uid): - * continue # <<<<<<<<<<<<<< - * user_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_item.values() - * for tup in sentiment.sentiment[tup_id]] + /* "View.MemoryView":1242 + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) + * + * return result # <<<<<<<<<<<<<< + * + * */ - goto __pyx_L10_continue; + __pyx_r = __pyx_v_result; + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":383 - * map_aspect_id = [] - * for uid, sentiment_tup_ids_by_item in sentiment.user_sentiment.items(): - * if self.train_set.is_unk_user(uid): # <<<<<<<<<<<<<< - * continue - * user_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_item.values() + /* "View.MemoryView":1205 + * + * @cname('__pyx_memoryview_copy_data_to_temp') + * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *tmpslice, + * char order, */ - } - /* "cornac/models/efm/recom_efm.pyx":385 - * if self.train_set.is_unk_user(uid): - * continue - * user_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_item.values() # <<<<<<<<<<<<<< - * for tup in sentiment.sentiment[tup_id]] - * user_aspect_count = Counter(user_aspects) + /* function exit code */ + __pyx_L1_error:; + #ifdef WITH_THREAD + __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.copy_data_to_temp", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1247 + * + * @cname('__pyx_memoryview_err_extents') + * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError, f"got differing extents in dimension {i} (got {extent1} and {extent2})" */ - { /* enter inner scope */ - __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 385, __pyx_L15_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_16 = 0; - if (unlikely(__pyx_v_sentiment_tup_ids_by_item == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); - __PYX_ERR(0, 385, __pyx_L15_error) - } - __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_sentiment_tup_ids_by_item, 0, __pyx_n_s_values, (&__pyx_t_17), (&__pyx_t_15)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L15_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_6); - __pyx_t_6 = __pyx_t_1; - __pyx_t_1 = 0; - while (1) { - __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_17, &__pyx_t_16, NULL, &__pyx_t_1, NULL, __pyx_t_15); - if (unlikely(__pyx_t_18 == 0)) break; - if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 385, __pyx_L15_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_tup_id, __pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":386 - * continue - * user_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_item.values() - * for tup in sentiment.sentiment[tup_id]] # <<<<<<<<<<<<<< - * user_aspect_count = Counter(user_aspects) - * for aid, count in user_aspect_count.items(): +static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent1, Py_ssize_t __pyx_v_extent2) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + Py_UCS4 __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_extents", 0); + + /* "View.MemoryView":1249 + * cdef int _err_extents(int i, Py_ssize_t extent1, + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError, f"got differing extents in dimension {i} (got {extent1} and {extent2})" # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err_dim') */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 386, __pyx_L15_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_7genexpr__pyx_v_tup_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 386, __pyx_L15_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_t_8)) || PyTuple_CheckExact(__pyx_t_8)) { - __pyx_t_1 = __pyx_t_8; __Pyx_INCREF(__pyx_t_1); __pyx_t_19 = 0; - __pyx_t_5 = NULL; - } else { - __pyx_t_19 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 386, __pyx_L15_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 386, __pyx_L15_error) - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - for (;;) { - if (likely(!__pyx_t_5)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_8 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_8); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 386, __pyx_L15_error) - #else - __pyx_t_8 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 386, __pyx_L15_error) - __Pyx_GOTREF(__pyx_t_8); - #endif - } else { - if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_8); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 386, __pyx_L15_error) - #else - __pyx_t_8 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 386, __pyx_L15_error) - __Pyx_GOTREF(__pyx_t_8); - #endif - } - } else { - __pyx_t_8 = __pyx_t_5(__pyx_t_1); - if (unlikely(!__pyx_t_8)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 386, __pyx_L15_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_8); - } - __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_tup, __pyx_t_8); - __pyx_t_8 = 0; + __pyx_t_1 = PyTuple_New(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = 0; + __pyx_t_3 = 127; + __Pyx_INCREF(__pyx_kp_u_got_differing_extents_in_dimensi); + __pyx_t_2 += 35; + __Pyx_GIVEREF(__pyx_kp_u_got_differing_extents_in_dimensi); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_got_differing_extents_in_dimensi); + __pyx_t_4 = __Pyx_PyUnicode_From_int(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u_got); + __pyx_t_2 += 6; + __Pyx_GIVEREF(__pyx_kp_u_got); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_got); + __pyx_t_4 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_extent1, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u_and); + __pyx_t_2 += 5; + __Pyx_GIVEREF(__pyx_kp_u_and); + PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_and); + __pyx_t_4 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_extent2, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u__7); + __pyx_t_2 += 1; + __Pyx_GIVEREF(__pyx_kp_u__7); + PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_kp_u__7); + __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 7, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_4, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(1, 1249, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":385 - * if self.train_set.is_unk_user(uid): - * continue - * user_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_item.values() # <<<<<<<<<<<<<< - * for tup in sentiment.sentiment[tup_id]] - * user_aspect_count = Counter(user_aspects) + /* "View.MemoryView":1247 + * + * @cname('__pyx_memoryview_err_extents') + * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError, f"got differing extents in dimension {i} (got {extent1} and {extent2})" */ - __pyx_t_8 = __Pyx_GetItemInt(__pyx_7genexpr__pyx_v_tup, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 385, __pyx_L15_error) - __Pyx_GOTREF(__pyx_t_8); - if (unlikely(__Pyx_ListComp_Append(__pyx_t_7, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 385, __pyx_L15_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "cornac/models/efm/recom_efm.pyx":386 - * continue - * user_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_item.values() - * for tup in sentiment.sentiment[tup_id]] # <<<<<<<<<<<<<< - * user_aspect_count = Counter(user_aspects) - * for aid, count in user_aspect_count.items(): + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView._err_extents", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1252 + * + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(PyObject *error, str msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< + * raise error, msg % dim + * */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup); __pyx_7genexpr__pyx_v_tup = 0; - __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup_id); __pyx_7genexpr__pyx_v_tup_id = 0; - goto __pyx_L20_exit_scope; - __pyx_L15_error:; - __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup); __pyx_7genexpr__pyx_v_tup = 0; - __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup_id); __pyx_7genexpr__pyx_v_tup_id = 0; - goto __pyx_L1_error; - __pyx_L20_exit_scope:; - } /* exit inner scope */ - __Pyx_XDECREF_SET(__pyx_v_user_aspects, ((PyObject*)__pyx_t_7)); - __pyx_t_7 = 0; - /* "cornac/models/efm/recom_efm.pyx":387 - * user_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_item.values() - * for tup in sentiment.sentiment[tup_id]] - * user_aspect_count = Counter(user_aspects) # <<<<<<<<<<<<<< - * for aid, count in user_aspect_count.items(): - * attention_scores.append(self._compute_attention_score(count)) +static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, PyObject *__pyx_v_msg, int __pyx_v_dim) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_dim", 0); + __Pyx_INCREF(__pyx_v_msg); + + /* "View.MemoryView":1253 + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(PyObject *error, str msg, int dim) except -1 with gil: + * raise error, msg % dim # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err') */ - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Counter); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 387, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_7 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_1, __pyx_v_user_aspects) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_user_aspects); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 387, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF_SET(__pyx_v_user_aspect_count, __pyx_t_7); - __pyx_t_7 = 0; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_v_msg, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_Raise(((PyObject *)__pyx_v_error), __pyx_t_2, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 1253, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":388 - * for tup in sentiment.sentiment[tup_id]] - * user_aspect_count = Counter(user_aspects) - * for aid, count in user_aspect_count.items(): # <<<<<<<<<<<<<< - * attention_scores.append(self._compute_attention_score(count)) - * map_uid.append(uid) + /* "View.MemoryView":1252 + * + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(PyObject *error, str msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< + * raise error, msg % dim + * */ - __pyx_t_17 = 0; - if (unlikely(__pyx_v_user_aspect_count == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); - __PYX_ERR(0, 388, __pyx_L1_error) - } - __pyx_t_6 = __Pyx_dict_iterator(__pyx_v_user_aspect_count, 0, __pyx_n_s_items, (&__pyx_t_16), (&__pyx_t_15)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 388, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __pyx_t_7 = __pyx_t_6; - __pyx_t_6 = 0; - while (1) { - __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_7, __pyx_t_16, &__pyx_t_17, &__pyx_t_6, &__pyx_t_1, NULL, __pyx_t_15); - if (unlikely(__pyx_t_18 == 0)) break; - if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 388, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XDECREF_SET(__pyx_v_aid, __pyx_t_6); - __pyx_t_6 = 0; - __Pyx_XDECREF_SET(__pyx_v_count, __pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":389 - * user_aspect_count = Counter(user_aspects) - * for aid, count in user_aspect_count.items(): - * attention_scores.append(self._compute_attention_score(count)) # <<<<<<<<<<<<<< - * map_uid.append(uid) - * map_aspect_id.append(aid) + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView._err_dim", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_XDECREF(__pyx_v_msg); + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1256 + * + * @cname('__pyx_memoryview_err') + * cdef int _err(PyObject *error, str msg) except -1 with gil: # <<<<<<<<<<<<<< + * raise error, msg + * */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_compute_attention_score); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 389, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && 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); - } - } - __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_8, __pyx_v_count) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_count); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 389, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_12 = __Pyx_PyObject_Append(__pyx_v_attention_scores, __pyx_t_1); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 389, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":390 - * for aid, count in user_aspect_count.items(): - * attention_scores.append(self._compute_attention_score(count)) - * map_uid.append(uid) # <<<<<<<<<<<<<< - * map_aspect_id.append(aid) +static int __pyx_memoryview_err(PyObject *__pyx_v_error, PyObject *__pyx_v_msg) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err", 0); + __Pyx_INCREF(__pyx_v_msg); + + /* "View.MemoryView":1257 + * @cname('__pyx_memoryview_err') + * cdef int _err(PyObject *error, str msg) except -1 with gil: + * raise error, msg # <<<<<<<<<<<<<< * + * @cname('__pyx_memoryview_err_no_memory') */ - __pyx_t_12 = __Pyx_PyObject_Append(__pyx_v_map_uid, __pyx_v_uid); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 390, __pyx_L1_error) + __Pyx_Raise(((PyObject *)__pyx_v_error), __pyx_v_msg, 0, 0); + __PYX_ERR(1, 1257, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":391 - * attention_scores.append(self._compute_attention_score(count)) - * map_uid.append(uid) - * map_aspect_id.append(aid) # <<<<<<<<<<<<<< + /* "View.MemoryView":1256 + * + * @cname('__pyx_memoryview_err') + * cdef int _err(PyObject *error, str msg) except -1 with gil: # <<<<<<<<<<<<<< + * raise error, msg * - * attention_scores = np.asarray(attention_scores, dtype=np.float).flatten() */ - __pyx_t_12 = __Pyx_PyObject_Append(__pyx_v_map_aspect_id, __pyx_v_aid); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 391, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_L10_continue:; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":393 - * map_aspect_id.append(aid) + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView._err", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_XDECREF(__pyx_v_msg); + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1260 + * + * @cname('__pyx_memoryview_err_no_memory') + * cdef int _err_no_memory() except -1 with gil: # <<<<<<<<<<<<<< + * raise MemoryError * - * attention_scores = np.asarray(attention_scores, dtype=np.float).flatten() # <<<<<<<<<<<<<< - * map_uid = np.asarray(map_uid, dtype=np.int).flatten() - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int).flatten() */ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_attention_scores); - __Pyx_GIVEREF(__pyx_v_attention_scores); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_attention_scores); - __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_flatten); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && 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); - } - } - __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF_SET(__pyx_v_attention_scores, __pyx_t_2); - __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":394 +static int __pyx_memoryview_err_no_memory(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_no_memory", 0); + + /* "View.MemoryView":1261 + * @cname('__pyx_memoryview_err_no_memory') + * cdef int _err_no_memory() except -1 with gil: + * raise MemoryError # <<<<<<<<<<<<<< + * * - * attention_scores = np.asarray(attention_scores, dtype=np.float).flatten() - * map_uid = np.asarray(map_uid, dtype=np.int).flatten() # <<<<<<<<<<<<<< - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int).flatten() - * X = sp.csr_matrix((attention_scores, (map_uid, map_aspect_id)), */ - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_v_map_uid); - __Pyx_GIVEREF(__pyx_v_map_uid); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_map_uid); - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_flatten); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_2 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF_SET(__pyx_v_map_uid, __pyx_t_2); - __pyx_t_2 = 0; + PyErr_NoMemory(); __PYX_ERR(1, 1261, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":395 - * attention_scores = np.asarray(attention_scores, dtype=np.float).flatten() - * map_uid = np.asarray(map_uid, dtype=np.int).flatten() - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int).flatten() # <<<<<<<<<<<<<< - * X = sp.csr_matrix((attention_scores, (map_uid, map_aspect_id)), - * shape=(self.train_set.num_users, sentiment.num_aspects)) + /* "View.MemoryView":1260 + * + * @cname('__pyx_memoryview_err_no_memory') + * cdef int _err_no_memory() except -1 with gil: # <<<<<<<<<<<<<< + * raise MemoryError + * */ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 395, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_asarray); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 395, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 395, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_map_aspect_id); - __Pyx_GIVEREF(__pyx_v_map_aspect_id); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_map_aspect_id); - __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 395, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 395, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_int); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 395, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 395, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 395, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_flatten); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 395, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 395, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF_SET(__pyx_v_map_aspect_id, __pyx_t_2); - __pyx_t_2 = 0; - /* "cornac/models/efm/recom_efm.pyx":396 - * map_uid = np.asarray(map_uid, dtype=np.int).flatten() - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int).flatten() - * X = sp.csr_matrix((attention_scores, (map_uid, map_aspect_id)), # <<<<<<<<<<<<<< - * shape=(self.train_set.num_users, sentiment.num_aspects)) + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView._err_no_memory", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1265 * + * @cname('__pyx_memoryview_copy_contents') + * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice dst, + * int src_ndim, int dst_ndim, */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_sp); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 396, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_csr_matrix); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 396, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 396, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_map_uid); - __Pyx_GIVEREF(__pyx_v_map_uid); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_map_uid); - __Pyx_INCREF(__pyx_v_map_aspect_id); - __Pyx_GIVEREF(__pyx_v_map_aspect_id); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_map_aspect_id); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 396, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_attention_scores); - __Pyx_GIVEREF(__pyx_v_attention_scores); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_attention_scores); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 396, __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; - /* "cornac/models/efm/recom_efm.pyx":397 - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int).flatten() - * X = sp.csr_matrix((attention_scores, (map_uid, map_aspect_id)), - * shape=(self.train_set.num_users, sentiment.num_aspects)) # <<<<<<<<<<<<<< +static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_memviewslice __pyx_v_dst, int __pyx_v_src_ndim, int __pyx_v_dst_ndim, int __pyx_v_dtype_is_object) { + void *__pyx_v_tmpdata; + size_t __pyx_v_itemsize; + int __pyx_v_i; + char __pyx_v_order; + int __pyx_v_broadcasting; + int __pyx_v_direct_copy; + __Pyx_memviewslice __pyx_v_tmp; + int __pyx_v_ndim; + int __pyx_r; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + void *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save; + #endif + + /* "View.MemoryView":1273 + * Check for overlapping memory and verify the shapes. + * """ + * cdef void *tmpdata = NULL # <<<<<<<<<<<<<< + * cdef size_t itemsize = src.memview.view.itemsize + * cdef int i + */ + __pyx_v_tmpdata = NULL; + + /* "View.MemoryView":1274 + * """ + * cdef void *tmpdata = NULL + * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) + */ + __pyx_t_1 = __pyx_v_src.memview->view.itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":1276 + * cdef size_t itemsize = src.memview.view.itemsize + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) # <<<<<<<<<<<<<< + * cdef bint broadcasting = False + * cdef bint direct_copy = False + */ + __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim); + + /* "View.MemoryView":1277 + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) + * cdef bint broadcasting = False # <<<<<<<<<<<<<< + * cdef bint direct_copy = False + * cdef __Pyx_memviewslice tmp + */ + __pyx_v_broadcasting = 0; + + /* "View.MemoryView":1278 + * cdef char order = get_best_order(&src, src_ndim) + * cdef bint broadcasting = False + * cdef bint direct_copy = False # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice tmp * - * quality_scores = [] */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 397, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 397, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 397, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 397, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7); - __pyx_t_8 = 0; - __pyx_t_7 = 0; - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_shape, __pyx_t_3) < 0) __PYX_ERR(0, 397, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_direct_copy = 0; - /* "cornac/models/efm/recom_efm.pyx":396 - * map_uid = np.asarray(map_uid, dtype=np.int).flatten() - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int).flatten() - * X = sp.csr_matrix((attention_scores, (map_uid, map_aspect_id)), # <<<<<<<<<<<<<< - * shape=(self.train_set.num_users, sentiment.num_aspects)) + /* "View.MemoryView":1281 + * cdef __Pyx_memviewslice tmp * + * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 396, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_X = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_t_2 = (__pyx_v_src_ndim < __pyx_v_dst_ndim); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":399 - * shape=(self.train_set.num_users, sentiment.num_aspects)) + /* "View.MemoryView":1282 * - * quality_scores = [] # <<<<<<<<<<<<<< - * map_iid = [] - * map_aspect_id = [] + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) # <<<<<<<<<<<<<< + * elif dst_ndim < src_ndim: + * broadcast_leading(&dst, dst_ndim, src_ndim) */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 399, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_quality_scores = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim); - /* "cornac/models/efm/recom_efm.pyx":400 + /* "View.MemoryView":1281 + * cdef __Pyx_memviewslice tmp * - * quality_scores = [] - * map_iid = [] # <<<<<<<<<<<<<< - * map_aspect_id = [] + * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1283 + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&dst, dst_ndim, src_ndim) * */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 400, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_map_iid, __pyx_t_3); - __pyx_t_3 = 0; + __pyx_t_2 = (__pyx_v_dst_ndim < __pyx_v_src_ndim); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":401 - * quality_scores = [] - * map_iid = [] - * map_aspect_id = [] # <<<<<<<<<<<<<< + /* "View.MemoryView":1284 + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + * broadcast_leading(&dst, dst_ndim, src_ndim) # <<<<<<<<<<<<<< * - * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): + * cdef int ndim = max(src_ndim, dst_ndim) */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 401, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_map_aspect_id, __pyx_t_3); - __pyx_t_3 = 0; + __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim); - /* "cornac/models/efm/recom_efm.pyx":403 - * map_aspect_id = [] + /* "View.MemoryView":1283 + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&dst, dst_ndim, src_ndim) * - * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): # <<<<<<<<<<<<<< - * if self.train_set.is_unk_item(iid): - * continue */ - __pyx_t_13 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_item_sentiment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 403, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(__pyx_t_1 == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); - __PYX_ERR(0, 403, __pyx_L1_error) } - __pyx_t_2 = __Pyx_dict_iterator(__pyx_t_1, 0, __pyx_n_s_items, (&__pyx_t_4), (&__pyx_t_14)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 403, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_3); - __pyx_t_3 = __pyx_t_2; - __pyx_t_2 = 0; - while (1) { - __pyx_t_15 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_4, &__pyx_t_13, &__pyx_t_2, &__pyx_t_1, NULL, __pyx_t_14); - if (unlikely(__pyx_t_15 == 0)) break; - if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 403, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XDECREF_SET(__pyx_v_iid, __pyx_t_2); - __pyx_t_2 = 0; - __Pyx_XDECREF_SET(__pyx_v_sentiment_tup_ids_by_user, __pyx_t_1); - __pyx_t_1 = 0; + __pyx_L3:; - /* "cornac/models/efm/recom_efm.pyx":404 + /* "View.MemoryView":1286 + * broadcast_leading(&dst, dst_ndim, src_ndim) * - * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): - * if self.train_set.is_unk_item(iid): # <<<<<<<<<<<<<< - * continue - * item_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_user.values() + * cdef int ndim = max(src_ndim, dst_ndim) # <<<<<<<<<<<<<< + * + * for i in range(ndim): */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 404, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_is_unk_item); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 404, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_v_iid) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_iid); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 404, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 404, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_10) { + __pyx_t_3 = __pyx_v_dst_ndim; + __pyx_t_4 = __pyx_v_src_ndim; + if ((__pyx_t_3 > __pyx_t_4)) { + __pyx_t_5 = __pyx_t_3; + } else { + __pyx_t_5 = __pyx_t_4; + } + __pyx_v_ndim = __pyx_t_5; - /* "cornac/models/efm/recom_efm.pyx":405 - * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): - * if self.train_set.is_unk_item(iid): - * continue # <<<<<<<<<<<<<< - * item_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_user.values() - * for tup in sentiment.sentiment[tup_id]] + /* "View.MemoryView":1288 + * cdef int ndim = max(src_ndim, dst_ndim) + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: */ - goto __pyx_L23_continue; + __pyx_t_5 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_5; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; - /* "cornac/models/efm/recom_efm.pyx":404 + /* "View.MemoryView":1289 * - * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): - * if self.train_set.is_unk_item(iid): # <<<<<<<<<<<<<< - * continue - * item_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_user.values() + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< + * if src.shape[i] == 1: + * broadcasting = True */ - } + __pyx_t_2 = ((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":406 - * if self.train_set.is_unk_item(iid): - * continue - * item_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_user.values() # <<<<<<<<<<<<<< - * for tup in sentiment.sentiment[tup_id]] - * item_aspect_count = Counter(item_aspects) + /* "View.MemoryView":1290 + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: # <<<<<<<<<<<<<< + * broadcasting = True + * src.strides[i] = 0 */ - { /* enter inner scope */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 406, __pyx_L28_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_16 = 0; - if (unlikely(__pyx_v_sentiment_tup_ids_by_user == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); - __PYX_ERR(0, 406, __pyx_L28_error) - } - __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_sentiment_tup_ids_by_user, 0, __pyx_n_s_values, (&__pyx_t_17), (&__pyx_t_15)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 406, __pyx_L28_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_6); - __pyx_t_6 = __pyx_t_2; - __pyx_t_2 = 0; - while (1) { - __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_17, &__pyx_t_16, NULL, &__pyx_t_2, NULL, __pyx_t_15); - if (unlikely(__pyx_t_18 == 0)) break; - if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 406, __pyx_L28_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_tup_id, __pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_2 = ((__pyx_v_src.shape[__pyx_v_i]) == 1); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":407 - * continue - * item_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_user.values() - * for tup in sentiment.sentiment[tup_id]] # <<<<<<<<<<<<<< - * item_aspect_count = Counter(item_aspects) - * total_sentiment_by_aspect = OrderedDict() + /* "View.MemoryView":1291 + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: + * broadcasting = True # <<<<<<<<<<<<<< + * src.strides[i] = 0 + * else: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 407, __pyx_L28_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_8genexpr1__pyx_v_tup_id); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 407, __pyx_L28_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) { - __pyx_t_2 = __pyx_t_7; __Pyx_INCREF(__pyx_t_2); __pyx_t_19 = 0; - __pyx_t_5 = NULL; - } else { - __pyx_t_19 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 407, __pyx_L28_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 407, __pyx_L28_error) - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - for (;;) { - if (likely(!__pyx_t_5)) { - if (likely(PyList_CheckExact(__pyx_t_2))) { - if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_7 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_19); __Pyx_INCREF(__pyx_t_7); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 407, __pyx_L28_error) - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 407, __pyx_L28_error) - __Pyx_GOTREF(__pyx_t_7); - #endif - } else { - if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_19); __Pyx_INCREF(__pyx_t_7); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 407, __pyx_L28_error) - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 407, __pyx_L28_error) - __Pyx_GOTREF(__pyx_t_7); - #endif - } - } else { - __pyx_t_7 = __pyx_t_5(__pyx_t_2); - if (unlikely(!__pyx_t_7)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 407, __pyx_L28_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_7); - } - __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_tup, __pyx_t_7); - __pyx_t_7 = 0; + __pyx_v_broadcasting = 1; - /* "cornac/models/efm/recom_efm.pyx":406 - * if self.train_set.is_unk_item(iid): - * continue - * item_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_user.values() # <<<<<<<<<<<<<< - * for tup in sentiment.sentiment[tup_id]] - * item_aspect_count = Counter(item_aspects) + /* "View.MemoryView":1292 + * if src.shape[i] == 1: + * broadcasting = True + * src.strides[i] = 0 # <<<<<<<<<<<<<< + * else: + * _err_extents(i, dst.shape[i], src.shape[i]) */ - __pyx_t_7 = __Pyx_GetItemInt(__pyx_8genexpr1__pyx_v_tup, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 406, __pyx_L28_error) - __Pyx_GOTREF(__pyx_t_7); - if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 406, __pyx_L28_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "cornac/models/efm/recom_efm.pyx":407 - * continue - * item_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_user.values() - * for tup in sentiment.sentiment[tup_id]] # <<<<<<<<<<<<<< - * item_aspect_count = Counter(item_aspects) - * total_sentiment_by_aspect = OrderedDict() + (__pyx_v_src.strides[__pyx_v_i]) = 0; + + /* "View.MemoryView":1290 + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: # <<<<<<<<<<<<<< + * broadcasting = True + * src.strides[i] = 0 */ - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L7; } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_tup); __pyx_8genexpr1__pyx_v_tup = 0; - __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_tup_id); __pyx_8genexpr1__pyx_v_tup_id = 0; - goto __pyx_L33_exit_scope; - __pyx_L28_error:; - __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_tup); __pyx_8genexpr1__pyx_v_tup = 0; - __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_tup_id); __pyx_8genexpr1__pyx_v_tup_id = 0; - goto __pyx_L1_error; - __pyx_L33_exit_scope:; - } /* exit inner scope */ - __Pyx_XDECREF_SET(__pyx_v_item_aspects, ((PyObject*)__pyx_t_1)); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":408 - * item_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_user.values() - * for tup in sentiment.sentiment[tup_id]] - * item_aspect_count = Counter(item_aspects) # <<<<<<<<<<<<<< - * total_sentiment_by_aspect = OrderedDict() - * for tup_id in sentiment_tup_ids_by_user.values(): + /* "View.MemoryView":1294 + * src.strides[i] = 0 + * else: + * _err_extents(i, dst.shape[i], src.shape[i]) # <<<<<<<<<<<<<< + * + * if src.suboffsets[i] >= 0: */ - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Counter); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); + /*else*/ { + __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1294, __pyx_L1_error) } - } - __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_v_item_aspects) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_item_aspects); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF_SET(__pyx_v_item_aspect_count, __pyx_t_1); - __pyx_t_1 = 0; + __pyx_L7:; - /* "cornac/models/efm/recom_efm.pyx":409 - * for tup in sentiment.sentiment[tup_id]] - * item_aspect_count = Counter(item_aspects) - * total_sentiment_by_aspect = OrderedDict() # <<<<<<<<<<<<<< - * for tup_id in sentiment_tup_ids_by_user.values(): - * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: + /* "View.MemoryView":1289 + * + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< + * if src.shape[i] == 1: + * broadcasting = True */ - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_OrderedDict); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } } - __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF_SET(__pyx_v_total_sentiment_by_aspect, __pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":410 - * item_aspect_count = Counter(item_aspects) - * total_sentiment_by_aspect = OrderedDict() - * for tup_id in sentiment_tup_ids_by_user.values(): # <<<<<<<<<<<<<< - * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: - * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity + /* "View.MemoryView":1296 + * _err_extents(i, dst.shape[i], src.shape[i]) + * + * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< + * _err_dim(PyExc_ValueError, "Dimension %d is not direct", i) + * + */ + __pyx_t_2 = ((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1297 + * + * if src.suboffsets[i] >= 0: + * _err_dim(PyExc_ValueError, "Dimension %d is not direct", i) # <<<<<<<<<<<<<< + * + * if slices_overlap(&src, &dst, ndim, itemsize): + */ + __pyx_t_6 = __pyx_memoryview_err_dim(PyExc_ValueError, __pyx_kp_s_Dimension_d_is_not_direct, __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1297, __pyx_L1_error) + + /* "View.MemoryView":1296 + * _err_extents(i, dst.shape[i], src.shape[i]) + * + * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< + * _err_dim(PyExc_ValueError, "Dimension %d is not direct", i) + * */ - __pyx_t_17 = 0; - if (unlikely(__pyx_v_sentiment_tup_ids_by_user == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); - __PYX_ERR(0, 410, __pyx_L1_error) } - __pyx_t_6 = __Pyx_dict_iterator(__pyx_v_sentiment_tup_ids_by_user, 0, __pyx_n_s_values, (&__pyx_t_16), (&__pyx_t_15)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 410, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_1); - __pyx_t_1 = __pyx_t_6; - __pyx_t_6 = 0; - while (1) { - __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_16, &__pyx_t_17, NULL, &__pyx_t_6, NULL, __pyx_t_15); - if (unlikely(__pyx_t_18 == 0)) break; - if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 410, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_XDECREF_SET(__pyx_v_tup_id, __pyx_t_6); - __pyx_t_6 = 0; + } - /* "cornac/models/efm/recom_efm.pyx":411 - * total_sentiment_by_aspect = OrderedDict() - * for tup_id in sentiment_tup_ids_by_user.values(): - * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: # <<<<<<<<<<<<<< - * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity - * for aid, total_sentiment in total_sentiment_by_aspect.items(): + /* "View.MemoryView":1299 + * _err_dim(PyExc_ValueError, "Dimension %d is not direct", i) + * + * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + * + * if not slice_is_contig(src, order, ndim): */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_v_tup_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_6 = __pyx_t_2; __Pyx_INCREF(__pyx_t_6); __pyx_t_19 = 0; - __pyx_t_5 = NULL; - } else { - __pyx_t_19 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 411, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (likely(!__pyx_t_5)) { - if (likely(PyList_CheckExact(__pyx_t_6))) { - if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_6)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 411, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } else { - if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_6)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 411, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } - } else { - __pyx_t_2 = __pyx_t_5(__pyx_t_6); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 411, __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; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 3)) { - if (size > 3) __Pyx_RaiseTooManyValuesError(3); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 411, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_20 = PyTuple_GET_ITEM(sequence, 2); - } else { - __pyx_t_7 = PyList_GET_ITEM(sequence, 0); - __pyx_t_8 = PyList_GET_ITEM(sequence, 1); - __pyx_t_20 = PyList_GET_ITEM(sequence, 2); - } - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_20); - #else - __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_20 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_20); - #endif - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_21 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_21); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_9 = Py_TYPE(__pyx_t_21)->tp_iternext; - index = 0; __pyx_t_7 = __pyx_t_9(__pyx_t_21); if (unlikely(!__pyx_t_7)) goto __pyx_L38_unpacking_failed; - __Pyx_GOTREF(__pyx_t_7); - index = 1; __pyx_t_8 = __pyx_t_9(__pyx_t_21); if (unlikely(!__pyx_t_8)) goto __pyx_L38_unpacking_failed; - __Pyx_GOTREF(__pyx_t_8); - index = 2; __pyx_t_20 = __pyx_t_9(__pyx_t_21); if (unlikely(!__pyx_t_20)) goto __pyx_L38_unpacking_failed; - __Pyx_GOTREF(__pyx_t_20); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_21), 3) < 0) __PYX_ERR(0, 411, __pyx_L1_error) - __pyx_t_9 = NULL; - __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; - goto __pyx_L39_unpacking_done; - __pyx_L38_unpacking_failed:; - __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; - __pyx_t_9 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 411, __pyx_L1_error) - __pyx_L39_unpacking_done:; - } - __Pyx_XDECREF_SET(__pyx_v_aid, __pyx_t_7); - __pyx_t_7 = 0; - __Pyx_XDECREF_SET(__pyx_v__, __pyx_t_8); - __pyx_t_8 = 0; - __Pyx_XDECREF_SET(__pyx_v_sentiment_polarity, __pyx_t_20); - __pyx_t_20 = 0; + __pyx_t_2 = __pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":412 - * for tup_id in sentiment_tup_ids_by_user.values(): - * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: - * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity # <<<<<<<<<<<<<< - * for aid, total_sentiment in total_sentiment_by_aspect.items(): - * map_iid.append(iid) + /* "View.MemoryView":1301 + * if slices_overlap(&src, &dst, ndim, itemsize): + * + * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< + * order = get_best_order(&dst, ndim) + * */ - __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_v_total_sentiment_by_aspect, __pyx_n_s_get); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 412, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_20); - __pyx_t_8 = NULL; - __pyx_t_18 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_20))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_20); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_20, function); - __pyx_t_18 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_20)) { - PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_v_aid, __pyx_int_0}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_20, __pyx_temp+1-__pyx_t_18, 2+__pyx_t_18); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 412, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_2); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_20)) { - PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_v_aid, __pyx_int_0}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_20, __pyx_temp+1-__pyx_t_18, 2+__pyx_t_18); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 412, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_2); - } else - #endif - { - __pyx_t_7 = PyTuple_New(2+__pyx_t_18); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 412, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - if (__pyx_t_8) { - __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8); __pyx_t_8 = NULL; - } - __Pyx_INCREF(__pyx_v_aid); - __Pyx_GIVEREF(__pyx_v_aid); - PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_18, __pyx_v_aid); - __Pyx_INCREF(__pyx_int_0); - __Pyx_GIVEREF(__pyx_int_0); - PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_18, __pyx_int_0); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_20, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 412, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __pyx_t_20 = PyNumber_Add(__pyx_t_2, __pyx_v_sentiment_polarity); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 412, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_20); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(PyObject_SetItem(__pyx_v_total_sentiment_by_aspect, __pyx_v_aid, __pyx_t_20) < 0)) __PYX_ERR(0, 412, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + __pyx_t_2 = (!__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim)); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":411 - * total_sentiment_by_aspect = OrderedDict() - * for tup_id in sentiment_tup_ids_by_user.values(): - * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: # <<<<<<<<<<<<<< - * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity - * for aid, total_sentiment in total_sentiment_by_aspect.items(): + /* "View.MemoryView":1302 + * + * if not slice_is_contig(src, order, ndim): + * order = get_best_order(&dst, ndim) # <<<<<<<<<<<<<< + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) */ - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim); - /* "cornac/models/efm/recom_efm.pyx":413 - * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: - * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity - * for aid, total_sentiment in total_sentiment_by_aspect.items(): # <<<<<<<<<<<<<< - * map_iid.append(iid) - * map_aspect_id.append(aid) + /* "View.MemoryView":1301 + * if slices_overlap(&src, &dst, ndim, itemsize): + * + * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< + * order = get_best_order(&dst, ndim) + * */ - __pyx_t_16 = 0; - if (unlikely(__pyx_v_total_sentiment_by_aspect == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); - __PYX_ERR(0, 413, __pyx_L1_error) } - __pyx_t_6 = __Pyx_dict_iterator(__pyx_v_total_sentiment_by_aspect, 0, __pyx_n_s_items, (&__pyx_t_17), (&__pyx_t_15)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_1); - __pyx_t_1 = __pyx_t_6; - __pyx_t_6 = 0; - while (1) { - __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_17, &__pyx_t_16, &__pyx_t_6, &__pyx_t_20, NULL, __pyx_t_15); - if (unlikely(__pyx_t_18 == 0)) break; - if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_20); - __Pyx_XDECREF_SET(__pyx_v_aid, __pyx_t_6); - __pyx_t_6 = 0; - __Pyx_XDECREF_SET(__pyx_v_total_sentiment, __pyx_t_20); - __pyx_t_20 = 0; - /* "cornac/models/efm/recom_efm.pyx":414 - * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity - * for aid, total_sentiment in total_sentiment_by_aspect.items(): - * map_iid.append(iid) # <<<<<<<<<<<<<< - * map_aspect_id.append(aid) - * if self.use_item_aspect_popularity: + /* "View.MemoryView":1304 + * order = get_best_order(&dst, ndim) + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) # <<<<<<<<<<<<<< + * src = tmp + * */ - __pyx_t_12 = __Pyx_PyObject_Append(__pyx_v_map_iid, __pyx_v_iid); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 414, __pyx_L1_error) + __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(1, 1304, __pyx_L1_error) + __pyx_v_tmpdata = __pyx_t_7; - /* "cornac/models/efm/recom_efm.pyx":415 - * for aid, total_sentiment in total_sentiment_by_aspect.items(): - * map_iid.append(iid) - * map_aspect_id.append(aid) # <<<<<<<<<<<<<< - * if self.use_item_aspect_popularity: - * quality_scores.append(self._compute_quality_score(total_sentiment)) + /* "View.MemoryView":1305 + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) + * src = tmp # <<<<<<<<<<<<<< + * + * if not broadcasting: */ - __pyx_t_12 = __Pyx_PyObject_Append(__pyx_v_map_aspect_id, __pyx_v_aid); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 415, __pyx_L1_error) + __pyx_v_src = __pyx_v_tmp; - /* "cornac/models/efm/recom_efm.pyx":416 - * map_iid.append(iid) - * map_aspect_id.append(aid) - * if self.use_item_aspect_popularity: # <<<<<<<<<<<<<< - * quality_scores.append(self._compute_quality_score(total_sentiment)) - * else: + /* "View.MemoryView":1299 + * _err_dim(PyExc_ValueError, "Dimension %d is not direct", i) + * + * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + * + * if not slice_is_contig(src, order, ndim): */ - __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_use_item_aspect_popularity); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_20); - __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_20); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 416, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - if (__pyx_t_10) { + } - /* "cornac/models/efm/recom_efm.pyx":417 - * map_aspect_id.append(aid) - * if self.use_item_aspect_popularity: - * quality_scores.append(self._compute_quality_score(total_sentiment)) # <<<<<<<<<<<<<< - * else: - * avg_sentiment = total_sentiment / item_aspect_count[aid] + /* "View.MemoryView":1307 + * src = tmp + * + * if not broadcasting: # <<<<<<<<<<<<<< + * + * */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_compute_quality_score); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 417, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_20 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_v_total_sentiment) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_total_sentiment); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 417, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_20); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_12 = __Pyx_PyObject_Append(__pyx_v_quality_scores, __pyx_t_20); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 417, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + __pyx_t_2 = (!__pyx_v_broadcasting); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":416 - * map_iid.append(iid) - * map_aspect_id.append(aid) - * if self.use_item_aspect_popularity: # <<<<<<<<<<<<<< - * quality_scores.append(self._compute_quality_score(total_sentiment)) - * else: + /* "View.MemoryView":1310 + * + * + * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): */ - goto __pyx_L42; - } + __pyx_t_2 = __pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":419 - * quality_scores.append(self._compute_quality_score(total_sentiment)) - * else: - * avg_sentiment = total_sentiment / item_aspect_count[aid] # <<<<<<<<<<<<<< - * quality_scores.append(self._compute_quality_score(avg_sentiment)) + /* "View.MemoryView":1311 * + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) # <<<<<<<<<<<<<< + * elif slice_is_contig(src, 'F', ndim): + * direct_copy = slice_is_contig(dst, 'F', ndim) */ - /*else*/ { - __pyx_t_20 = __Pyx_PyObject_GetItem(__pyx_v_item_aspect_count, __pyx_v_aid); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_20); - __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_v_total_sentiment, __pyx_t_20); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __Pyx_XDECREF_SET(__pyx_v_avg_sentiment, __pyx_t_6); - __pyx_t_6 = 0; + __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim); - /* "cornac/models/efm/recom_efm.pyx":420 - * else: - * avg_sentiment = total_sentiment / item_aspect_count[aid] - * quality_scores.append(self._compute_quality_score(avg_sentiment)) # <<<<<<<<<<<<<< + /* "View.MemoryView":1310 * - * quality_scores = np.asarray(quality_scores, dtype=np.float).flatten() + * + * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): */ - __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_compute_quality_score); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_20); - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_20))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_20); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_20, function); - } - } - __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_20, __pyx_t_2, __pyx_v_avg_sentiment) : __Pyx_PyObject_CallOneArg(__pyx_t_20, __pyx_v_avg_sentiment); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __pyx_t_12 = __Pyx_PyObject_Append(__pyx_v_quality_scores, __pyx_t_6); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __pyx_L42:; + goto __pyx_L12; } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_L23_continue:; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "cornac/models/efm/recom_efm.pyx":422 - * quality_scores.append(self._compute_quality_score(avg_sentiment)) + /* "View.MemoryView":1312 + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'F', ndim) * - * quality_scores = np.asarray(quality_scores, dtype=np.float).flatten() # <<<<<<<<<<<<<< - * map_iid = np.asarray(map_iid, dtype=np.int).flatten() - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int).flatten() */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 422, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 422, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 422, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_quality_scores); - __Pyx_GIVEREF(__pyx_v_quality_scores); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_quality_scores); - __pyx_t_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 422, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_20); - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 422, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 422, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PyDict_SetItem(__pyx_t_20, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 422, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_1, __pyx_t_20); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 422, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_flatten); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 422, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_20); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_20))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_20); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_20, function); - } - } - __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_20, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_20); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 422, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __Pyx_DECREF_SET(__pyx_v_quality_scores, __pyx_t_3); - __pyx_t_3 = 0; + __pyx_t_2 = __pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim); + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":423 + /* "View.MemoryView":1313 + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + * direct_copy = slice_is_contig(dst, 'F', ndim) # <<<<<<<<<<<<<< + * + * if direct_copy: + */ + __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim); + + /* "View.MemoryView":1312 + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'F', ndim) * - * quality_scores = np.asarray(quality_scores, dtype=np.float).flatten() - * map_iid = np.asarray(map_iid, dtype=np.int).flatten() # <<<<<<<<<<<<<< - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int).flatten() - * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), */ - __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_n_s_np); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_20); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_20, __pyx_n_s_asarray); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __pyx_t_20 = PyTuple_New(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_20); - __Pyx_INCREF(__pyx_v_map_iid); - __Pyx_GIVEREF(__pyx_v_map_iid); - PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_v_map_iid); - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_int); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_20, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_flatten); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); } - } - __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF_SET(__pyx_v_map_iid, __pyx_t_3); - __pyx_t_3 = 0; + __pyx_L12:; + + /* "View.MemoryView":1315 + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + * if direct_copy: # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) + */ + if (__pyx_v_direct_copy) { + + /* "View.MemoryView":1317 + * if direct_copy: + * + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) # <<<<<<<<<<<<<< + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1318 + * + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) + * free(tmpdata) + */ + (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim))); + + /* "View.MemoryView":1319 + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) # <<<<<<<<<<<<<< + * free(tmpdata) + * return 0 + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); - /* "cornac/models/efm/recom_efm.pyx":424 - * quality_scores = np.asarray(quality_scores, dtype=np.float).flatten() - * map_iid = np.asarray(map_iid, dtype=np.int).flatten() - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int).flatten() # <<<<<<<<<<<<<< - * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), - * shape=(self.train_set.num_items, sentiment.num_aspects)) + /* "View.MemoryView":1320 + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) + * free(tmpdata) # <<<<<<<<<<<<<< + * return 0 + * + */ + free(__pyx_v_tmpdata); + + /* "View.MemoryView":1321 + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) + * free(tmpdata) + * return 0 # <<<<<<<<<<<<<< + * + * if order == 'F' == get_best_order(&dst, ndim): + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":1315 + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + * if direct_copy: # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_map_aspect_id); - __Pyx_GIVEREF(__pyx_v_map_aspect_id); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_map_aspect_id); - __pyx_t_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_20); - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_int); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (PyDict_SetItem(__pyx_t_20, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_20); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_flatten); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_20); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_20))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_20); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_20, function); } + + /* "View.MemoryView":1307 + * src = tmp + * + * if not broadcasting: # <<<<<<<<<<<<<< + * + * + */ } - __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_20, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_20); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __Pyx_DECREF_SET(__pyx_v_map_aspect_id, __pyx_t_3); - __pyx_t_3 = 0; - /* "cornac/models/efm/recom_efm.pyx":425 - * map_iid = np.asarray(map_iid, dtype=np.int).flatten() - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int).flatten() - * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), # <<<<<<<<<<<<<< - * shape=(self.train_set.num_items, sentiment.num_aspects)) + /* "View.MemoryView":1323 + * return 0 + * + * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< + * * */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_sp); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_csr_matrix); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_20); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_map_iid); - __Pyx_GIVEREF(__pyx_v_map_iid); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_map_iid); - __Pyx_INCREF(__pyx_v_map_aspect_id); - __Pyx_GIVEREF(__pyx_v_map_aspect_id); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_map_aspect_id); - __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_v_quality_scores); - __Pyx_GIVEREF(__pyx_v_quality_scores); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_quality_scores); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); - __pyx_t_6 = 0; + __pyx_t_2 = (__pyx_v_order == 'F'); + if (__pyx_t_2) { + __pyx_t_2 = ('F' == __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim)); + } + if (__pyx_t_2) { - /* "cornac/models/efm/recom_efm.pyx":426 - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int).flatten() - * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), - * shape=(self.train_set.num_items, sentiment.num_aspects)) # <<<<<<<<<<<<<< + /* "View.MemoryView":1326 + * + * + * transpose_memslice(&src) # <<<<<<<<<<<<<< + * transpose_memslice(&dst) * - * if self.verbose: */ - __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 426, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 426, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_items); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 426, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 426, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 426, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1); - __pyx_t_2 = 0; - __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_shape, __pyx_t_7) < 0) __PYX_ERR(0, 426, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 1326, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":425 - * map_iid = np.asarray(map_iid, dtype=np.int).flatten() - * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int).flatten() - * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), # <<<<<<<<<<<<<< - * shape=(self.train_set.num_items, sentiment.num_aspects)) + /* "View.MemoryView":1327 + * + * transpose_memslice(&src) + * transpose_memslice(&dst) # <<<<<<<<<<<<<< * + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) */ - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_20, __pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_Y = __pyx_t_7; - __pyx_t_7 = 0; + __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 1327, __pyx_L1_error) - /* "cornac/models/efm/recom_efm.pyx":428 - * shape=(self.train_set.num_items, sentiment.num_aspects)) + /* "View.MemoryView":1323 + * return 0 + * + * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Building matrices completed!') * */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_10) { + } - /* "cornac/models/efm/recom_efm.pyx":429 + /* "View.MemoryView":1329 + * transpose_memslice(&dst) * - * if self.verbose: - * print('Building matrices completed!') # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) # <<<<<<<<<<<<<< + * copy_strided_to_strided(&src, &dst, ndim, itemsize) + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1330 + * + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) + * copy_strided_to_strided(&src, &dst, ndim, itemsize) # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) * - * return A, X, Y */ - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize); - /* "cornac/models/efm/recom_efm.pyx":428 - * shape=(self.train_set.num_items, sentiment.num_aspects)) + /* "View.MemoryView":1331 + * refcount_copying(&dst, dtype_is_object, ndim, inc=False) + * copy_strided_to_strided(&src, &dst, ndim, itemsize) + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) # <<<<<<<<<<<<<< * - * if self.verbose: # <<<<<<<<<<<<<< - * print('Building matrices completed!') + * free(tmpdata) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1333 + * refcount_copying(&dst, dtype_is_object, ndim, inc=True) + * + * free(tmpdata) # <<<<<<<<<<<<<< + * return 0 * */ - } + free(__pyx_v_tmpdata); - /* "cornac/models/efm/recom_efm.pyx":431 - * print('Building matrices completed!') + /* "View.MemoryView":1334 * - * return A, X, Y # <<<<<<<<<<<<<< + * free(tmpdata) + * return 0 # <<<<<<<<<<<<<< * - * def _compute_attention_score(self, count): + * @cname('__pyx_memoryview_broadcast_leading') */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 431, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_A); - __Pyx_GIVEREF(__pyx_v_A); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_A); - __Pyx_INCREF(__pyx_v_X); - __Pyx_GIVEREF(__pyx_v_X); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_X); - __Pyx_INCREF(__pyx_v_Y); - __Pyx_GIVEREF(__pyx_v_Y); - PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_Y); - __pyx_r = __pyx_t_7; - __pyx_t_7 = 0; + __pyx_r = 0; goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":360 - * print('Optimization finished!') + /* "View.MemoryView":1265 * - * def _build_matrices(self, data_set): # <<<<<<<<<<<<<< - * sentiment = self.train_set.sentiment - * ratings = [] + * @cname('__pyx_memoryview_copy_contents') + * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice dst, + * int src_ndim, int dst_ndim, */ /* function exit code */ __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_20); - __Pyx_XDECREF(__pyx_t_21); - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._build_matrices", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; + #ifdef WITH_THREAD + __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.memoryview_copy_contents", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif __pyx_L0:; - __Pyx_XDECREF(__pyx_v_sentiment); - __Pyx_XDECREF(__pyx_v_ratings); - __Pyx_XDECREF(__pyx_v_map_uid); - __Pyx_XDECREF(__pyx_v_map_iid); - __Pyx_XDECREF(__pyx_v_uid); - __Pyx_XDECREF(__pyx_v_iid); - __Pyx_XDECREF(__pyx_v_rating); - __Pyx_XDECREF(__pyx_v_A); - __Pyx_XDECREF(__pyx_v_attention_scores); - __Pyx_XDECREF(__pyx_v_map_aspect_id); - __Pyx_XDECREF(__pyx_v_sentiment_tup_ids_by_item); - __Pyx_XDECREF(__pyx_v_user_aspects); - __Pyx_XDECREF(__pyx_v_user_aspect_count); - __Pyx_XDECREF(__pyx_v_aid); - __Pyx_XDECREF(__pyx_v_count); - __Pyx_XDECREF(__pyx_v_X); - __Pyx_XDECREF(__pyx_v_quality_scores); - __Pyx_XDECREF(__pyx_v_sentiment_tup_ids_by_user); - __Pyx_XDECREF(__pyx_v_item_aspects); - __Pyx_XDECREF(__pyx_v_item_aspect_count); - __Pyx_XDECREF(__pyx_v_total_sentiment_by_aspect); - __Pyx_XDECREF(__pyx_v_tup_id); - __Pyx_XDECREF(__pyx_v__); - __Pyx_XDECREF(__pyx_v_sentiment_polarity); - __Pyx_XDECREF(__pyx_v_total_sentiment); - __Pyx_XDECREF(__pyx_v_avg_sentiment); - __Pyx_XDECREF(__pyx_v_Y); - __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup_id); - __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup); - __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_tup_id); - __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_tup); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "cornac/models/efm/recom_efm.pyx":433 - * return A, X, Y - * - * def _compute_attention_score(self, count): # <<<<<<<<<<<<<< - * return 1 + (self.rating_scale - 1) * (2 / (1 + np.exp(-count)) - 1) +/* "View.MemoryView":1337 * + * @cname('__pyx_memoryview_broadcast_leading') + * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< + * int ndim, + * int ndim_other) noexcept nogil: */ -/* Python wrapper */ -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_11_compute_attention_score(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_11_compute_attention_score = {"_compute_attention_score", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_11_compute_attention_score, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_11_compute_attention_score(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_count = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_compute_attention_score (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_count,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_count)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_compute_attention_score", 1, 2, 2, 1); __PYX_ERR(0, 433, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_compute_attention_score") < 0)) __PYX_ERR(0, 433, __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_self = values[0]; - __pyx_v_count = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_compute_attention_score", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 433, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._compute_attention_score", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_10_compute_attention_score(__pyx_self, __pyx_v_self, __pyx_v_count); +static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim, int __pyx_v_ndim_other) { + int __pyx_v_i; + int __pyx_v_offset; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "View.MemoryView":1341 + * int ndim_other) noexcept nogil: + * cdef int i + * cdef int offset = ndim_other - ndim # <<<<<<<<<<<<<< + * + * for i in range(ndim - 1, -1, -1): + */ + __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim); -static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_10_compute_attention_score(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_count) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_compute_attention_score", 0); + /* "View.MemoryView":1343 + * cdef int offset = ndim_other - ndim + * + * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] + */ + for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { + __pyx_v_i = __pyx_t_1; - /* "cornac/models/efm/recom_efm.pyx":434 + /* "View.MemoryView":1344 * - * def _compute_attention_score(self, count): - * return 1 + (self.rating_scale - 1) * (2 / (1 + np.exp(-count)) - 1) # <<<<<<<<<<<<<< + * for i in range(ndim - 1, -1, -1): + * mslice.shape[i + offset] = mslice.shape[i] # <<<<<<<<<<<<<< + * mslice.strides[i + offset] = mslice.strides[i] + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + */ + (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]); + + /* "View.MemoryView":1345 + * for i in range(ndim - 1, -1, -1): + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] # <<<<<<<<<<<<<< + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] * - * def _compute_quality_score(self, sentiment): */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rating_scale); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_SubtractObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_exp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Negative(__pyx_v_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } + (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1346 + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] # <<<<<<<<<<<<<< + * + * for i in range(offset): + */ + (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]); } - __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyInt_AddCObj(__pyx_int_1, __pyx_t_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_int_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyInt_SubtractObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyInt_AddCObj(__pyx_int_1, __pyx_t_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":433 - * return A, X, Y + /* "View.MemoryView":1348 + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] * - * def _compute_attention_score(self, count): # <<<<<<<<<<<<<< - * return 1 + (self.rating_scale - 1) * (2 / (1 + np.exp(-count)) - 1) + * for i in range(offset): # <<<<<<<<<<<<<< + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] + */ + __pyx_t_1 = __pyx_v_offset; + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; + + /* "View.MemoryView":1349 * + * for i in range(offset): + * mslice.shape[i] = 1 # <<<<<<<<<<<<<< + * mslice.strides[i] = mslice.strides[0] + * mslice.suboffsets[i] = -1 */ + (__pyx_v_mslice->shape[__pyx_v_i]) = 1; - /* 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("cornac.models.efm.recom_efm.EFM._compute_attention_score", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "View.MemoryView":1350 + * for i in range(offset): + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] # <<<<<<<<<<<<<< + * mslice.suboffsets[i] = -1 + * + */ + (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]); -/* "cornac/models/efm/recom_efm.pyx":436 - * return 1 + (self.rating_scale - 1) * (2 / (1 + np.exp(-count)) - 1) + /* "View.MemoryView":1351 + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] + * mslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< * - * def _compute_quality_score(self, sentiment): # <<<<<<<<<<<<<< - * return 1 + (self.rating_scale - 1) / (1 + np.exp(-sentiment)) * */ - -/* Python wrapper */ -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_13_compute_quality_score(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_13_compute_quality_score = {"_compute_quality_score", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_13_compute_quality_score, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_13_compute_quality_score(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_sentiment = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_compute_quality_score (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_sentiment,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sentiment)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_compute_quality_score", 1, 2, 2, 1); __PYX_ERR(0, 436, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_compute_quality_score") < 0)) __PYX_ERR(0, 436, __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_self = values[0]; - __pyx_v_sentiment = values[1]; + (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L; } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_compute_quality_score", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 436, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._compute_quality_score", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_12_compute_quality_score(__pyx_self, __pyx_v_self, __pyx_v_sentiment); + + /* "View.MemoryView":1337 + * + * @cname('__pyx_memoryview_broadcast_leading') + * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< + * int ndim, + * int ndim_other) noexcept nogil: + */ /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_12_compute_quality_score(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_sentiment) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_compute_quality_score", 0); +/* "View.MemoryView":1359 + * + * @cname('__pyx_memoryview_refcount_copying') + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, int ndim, bint inc) noexcept nogil: # <<<<<<<<<<<<<< + * + * if dtype_is_object: + */ + +static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) { - /* "cornac/models/efm/recom_efm.pyx":437 + /* "View.MemoryView":1361 + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, int ndim, bint inc) noexcept nogil: * - * def _compute_quality_score(self, sentiment): - * return 1 + (self.rating_scale - 1) / (1 + np.exp(-sentiment)) # <<<<<<<<<<<<<< + * if dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, dst.strides, ndim, inc) + * + */ + if (__pyx_v_dtype_is_object) { + + /* "View.MemoryView":1362 + * + * if dtype_is_object: + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, dst.strides, ndim, inc) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + */ + __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc); + + /* "View.MemoryView":1361 + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, int ndim, bint inc) noexcept nogil: + * + * if dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, dst.strides, ndim, inc) * - * def score(self, user_idx, item_idx=None): */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rating_scale); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_SubtractObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_exp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Negative(__pyx_v_sentiment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } } - __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyInt_AddCObj(__pyx_int_1, __pyx_t_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyInt_AddCObj(__pyx_int_1, __pyx_t_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 437, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":436 - * return 1 + (self.rating_scale - 1) * (2 / (1 + np.exp(-count)) - 1) + /* "View.MemoryView":1359 * - * def _compute_quality_score(self, sentiment): # <<<<<<<<<<<<<< - * return 1 + (self.rating_scale - 1) / (1 + np.exp(-sentiment)) + * @cname('__pyx_memoryview_refcount_copying') + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, int ndim, bint inc) noexcept nogil: # <<<<<<<<<<<<<< * + * if dtype_is_object: */ /* 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("cornac.models.efm.recom_efm.EFM._compute_quality_score", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; } -/* "cornac/models/efm/recom_efm.pyx":439 - * return 1 + (self.rating_scale - 1) / (1 + np.exp(-sentiment)) - * - * def score(self, user_idx, item_idx=None): # <<<<<<<<<<<<<< - * """Predict the scores/ratings of a user for an item. +/* "View.MemoryView":1365 * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * bint inc) noexcept with gil: */ -/* Python wrapper */ -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_15score(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_14score[] = "Predict the scores/ratings of a user for an item.\n\n Parameters\n ----------\n user_idx: int, required\n The index of the user for whom to perform score prediction.\n\n item_idx: int, optional, default: None\n The index of the item for which to perform score prediction.\n If None, scores for all known items will be returned.\n\n Returns\n -------\n res : A scalar or a Numpy array\n Relative scores that the user gives to the item or to all known items\n\n "; -static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_15score = {"score", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_15score, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_14score}; -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_15score(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_user_idx = 0; - PyObject *__pyx_v_item_idx = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; +static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("score (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_user_idx,&__pyx_n_s_item_idx,0}; - PyObject* values[3] = {0,0,0}; - values[2] = ((PyObject *)((PyObject *)Py_None)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_user_idx)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("score", 0, 2, 3, 1); __PYX_ERR(0, 439, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item_idx); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "score") < 0)) __PYX_ERR(0, 439, __pyx_L3_error) - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_user_idx = values[1]; - __pyx_v_item_idx = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("score", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 439, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.score", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_14score(__pyx_self, __pyx_v_self, __pyx_v_user_idx, __pyx_v_item_idx); + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0); + + /* "View.MemoryView":1368 + * Py_ssize_t *strides, int ndim, + * bint inc) noexcept with gil: + * refcount_objects_in_slice(data, shape, strides, ndim, inc) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc); + + /* "View.MemoryView":1365 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * bint inc) noexcept with gil: + */ /* function exit code */ __Pyx_RefNannyFinishContext(); - return __pyx_r; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif } -static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_14score(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_user_idx, PyObject *__pyx_v_item_idx) { - PyObject *__pyx_v_item_scores = NULL; - PyObject *__pyx_v_item_score = NULL; - PyObject *__pyx_r = NULL; +/* "View.MemoryView":1371 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, bint inc) noexcept: + * cdef Py_ssize_t i + */ + +static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + Py_ssize_t __pyx_v_stride; __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - Py_ssize_t __pyx_t_9; - Py_UCS4 __pyx_t_10; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("score", 0); + Py_ssize_t __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0); - /* "cornac/models/efm/recom_efm.pyx":457 + /* "View.MemoryView":1374 + * Py_ssize_t *strides, int ndim, bint inc) noexcept: + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<< * - * """ - * if item_idx is None: # <<<<<<<<<<<<<< - * if self.train_set.is_unk_user(user_idx): - * raise ScoreException("Can't make score prediction for (user_id=%d" & user_idx) + * for i in range(shape[0]): */ - __pyx_t_1 = (__pyx_v_item_idx == Py_None); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __pyx_v_stride = (__pyx_v_strides[0]); - /* "cornac/models/efm/recom_efm.pyx":458 - * """ - * if item_idx is None: - * if self.train_set.is_unk_user(user_idx): # <<<<<<<<<<<<<< - * raise ScoreException("Can't make score prediction for (user_id=%d" & user_idx) - * item_scores = self.U2.dot(self.U1[user_idx, :]) + self.H2.dot(self.H1[user_idx, :]) + /* "View.MemoryView":1376 + * cdef Py_ssize_t stride = strides[0] + * + * for i in range(shape[0]): # <<<<<<<<<<<<<< + * if ndim == 1: + * if inc: */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 458, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_is_unk_user); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 458, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - } - } - __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_v_user_idx) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_user_idx); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 458, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 458, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(__pyx_t_2)) { + __pyx_t_1 = (__pyx_v_shape[0]); + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; - /* "cornac/models/efm/recom_efm.pyx":459 - * if item_idx is None: - * if self.train_set.is_unk_user(user_idx): - * raise ScoreException("Can't make score prediction for (user_id=%d" & user_idx) # <<<<<<<<<<<<<< - * item_scores = self.U2.dot(self.U1[user_idx, :]) + self.H2.dot(self.H1[user_idx, :]) - * return item_scores + /* "View.MemoryView":1377 + * + * for i in range(shape[0]): + * if ndim == 1: # <<<<<<<<<<<<<< + * if inc: + * Py_INCREF(( data)[0]) */ - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_ScoreException); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 459, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyNumber_And(__pyx_kp_u_Can_t_make_score_prediction_for, __pyx_v_user_idx); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 459, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - } - } - __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 459, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(0, 459, __pyx_L1_error) + __pyx_t_4 = (__pyx_v_ndim == 1); + if (__pyx_t_4) { - /* "cornac/models/efm/recom_efm.pyx":458 - * """ - * if item_idx is None: - * if self.train_set.is_unk_user(user_idx): # <<<<<<<<<<<<<< - * raise ScoreException("Can't make score prediction for (user_id=%d" & user_idx) - * item_scores = self.U2.dot(self.U1[user_idx, :]) + self.H2.dot(self.H1[user_idx, :]) + /* "View.MemoryView":1378 + * for i in range(shape[0]): + * if ndim == 1: + * if inc: # <<<<<<<<<<<<<< + * Py_INCREF(( data)[0]) + * else: */ - } + if (__pyx_v_inc) { - /* "cornac/models/efm/recom_efm.pyx":460 - * if self.train_set.is_unk_user(user_idx): - * raise ScoreException("Can't make score prediction for (user_id=%d" & user_idx) - * item_scores = self.U2.dot(self.U1[user_idx, :]) + self.H2.dot(self.H1[user_idx, :]) # <<<<<<<<<<<<<< - * return item_scores - * else: + /* "View.MemoryView":1379 + * if ndim == 1: + * if inc: + * Py_INCREF(( data)[0]) # <<<<<<<<<<<<<< + * else: + * Py_DECREF(( data)[0]) */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_dot); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_v_user_idx); - __Pyx_GIVEREF(__pyx_v_user_idx); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_user_idx); - __Pyx_INCREF(__pyx_slice__12); - __Pyx_GIVEREF(__pyx_slice__12); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_slice__12); - __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); + Py_INCREF((((PyObject **)__pyx_v_data)[0])); + + /* "View.MemoryView":1378 + * for i in range(shape[0]): + * if ndim == 1: + * if inc: # <<<<<<<<<<<<<< + * Py_INCREF(( data)[0]) + * else: + */ + goto __pyx_L6; } - } - __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_7); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_H2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_dot); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_H1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_user_idx); - __Pyx_GIVEREF(__pyx_v_user_idx); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_user_idx); - __Pyx_INCREF(__pyx_slice__12); - __Pyx_GIVEREF(__pyx_slice__12); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_slice__12); - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); + + /* "View.MemoryView":1381 + * Py_INCREF(( data)[0]) + * else: + * Py_DECREF(( data)[0]) # <<<<<<<<<<<<<< + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, ndim - 1, inc) + */ + /*else*/ { + Py_DECREF((((PyObject **)__pyx_v_data)[0])); } + __pyx_L6:; + + /* "View.MemoryView":1377 + * + * for i in range(shape[0]): + * if ndim == 1: # <<<<<<<<<<<<<< + * if inc: + * Py_INCREF(( data)[0]) + */ + goto __pyx_L5; } - __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_5, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_8); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = PyNumber_Add(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_item_scores = __pyx_t_6; - __pyx_t_6 = 0; - /* "cornac/models/efm/recom_efm.pyx":461 - * raise ScoreException("Can't make score prediction for (user_id=%d" & user_idx) - * item_scores = self.U2.dot(self.U1[user_idx, :]) + self.H2.dot(self.H1[user_idx, :]) - * return item_scores # <<<<<<<<<<<<<< + /* "View.MemoryView":1383 + * Py_DECREF(( data)[0]) * else: - * if self.train_set.is_unk_user(user_idx) or self.train_set.is_unk_item(item_idx): + * refcount_objects_in_slice(data, shape + 1, strides + 1, ndim - 1, inc) # <<<<<<<<<<<<<< + * + * data += stride */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_item_scores); - __pyx_r = __pyx_v_item_scores; - goto __pyx_L0; + /*else*/ { + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_inc); + } + __pyx_L5:; - /* "cornac/models/efm/recom_efm.pyx":457 + /* "View.MemoryView":1385 + * refcount_objects_in_slice(data, shape + 1, strides + 1, ndim - 1, inc) + * + * data += stride # <<<<<<<<<<<<<< + * * - * """ - * if item_idx is None: # <<<<<<<<<<<<<< - * if self.train_set.is_unk_user(user_idx): - * raise ScoreException("Can't make score prediction for (user_id=%d" & user_idx) */ + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); } - /* "cornac/models/efm/recom_efm.pyx":463 - * return item_scores - * else: - * if self.train_set.is_unk_user(user_idx) or self.train_set.is_unk_item(item_idx): # <<<<<<<<<<<<<< - * raise ScoreException("Can't make score prediction for (user_id=%d, item_id=%d)" % (user_idx, item_idx)) - * item_score = self.U2[item_idx, :].dot(self.U1[user_idx, :]) + self.H2[item_idx, :].dot(self.H1[user_idx, :]) + /* "View.MemoryView":1371 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, bint inc) noexcept: + * cdef Py_ssize_t i */ - /*else*/ { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 463, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_is_unk_user); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 463, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_user_idx) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_user_idx); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 463, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 463, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (!__pyx_t_1) { - } else { - __pyx_t_2 = __pyx_t_1; - goto __pyx_L6_bool_binop_done; - } - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 463, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_is_unk_item); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 463, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_6 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_v_item_idx) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_item_idx); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 463, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 463, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_2 = __pyx_t_1; - __pyx_L6_bool_binop_done:; - if (unlikely(__pyx_t_2)) { - /* "cornac/models/efm/recom_efm.pyx":464 - * else: - * if self.train_set.is_unk_user(user_idx) or self.train_set.is_unk_item(item_idx): - * raise ScoreException("Can't make score prediction for (user_id=%d, item_id=%d)" % (user_idx, item_idx)) # <<<<<<<<<<<<<< - * item_score = self.U2[item_idx, :].dot(self.U1[user_idx, :]) + self.H2[item_idx, :].dot(self.H1[user_idx, :]) - * return item_score + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":1391 + * + * @cname('__pyx_memoryview_slice_assign_scalar') + * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< + * size_t itemsize, void *item, + * bint dtype_is_object) noexcept nogil: + */ + +static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) { + + /* "View.MemoryView":1394 + * size_t itemsize, void *item, + * bint dtype_is_object) noexcept nogil: + * refcount_copying(dst, dtype_is_object, ndim, inc=False) # <<<<<<<<<<<<<< + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, itemsize, item) + * refcount_copying(dst, dtype_is_object, ndim, inc=True) + */ + __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1395 + * bint dtype_is_object) noexcept nogil: + * refcount_copying(dst, dtype_is_object, ndim, inc=False) + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, itemsize, item) # <<<<<<<<<<<<<< + * refcount_copying(dst, dtype_is_object, ndim, inc=True) + * + */ + __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item); + + /* "View.MemoryView":1396 + * refcount_copying(dst, dtype_is_object, ndim, inc=False) + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, itemsize, item) + * refcount_copying(dst, dtype_is_object, ndim, inc=True) # <<<<<<<<<<<<<< + * + * + */ + __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1391 + * + * @cname('__pyx_memoryview_slice_assign_scalar') + * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< + * size_t itemsize, void *item, + * bint dtype_is_object) noexcept nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1400 + * + * @cname('__pyx_memoryview__slice_assign_scalar') + * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * size_t itemsize, void *item) noexcept nogil: + */ + +static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + Py_ssize_t __pyx_v_stride; + Py_ssize_t __pyx_v_extent; + int __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + + /* "View.MemoryView":1404 + * size_t itemsize, void *item) noexcept nogil: + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t extent = shape[0] + * + */ + __pyx_v_stride = (__pyx_v_strides[0]); + + /* "View.MemoryView":1405 + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] + * cdef Py_ssize_t extent = shape[0] # <<<<<<<<<<<<<< + * + * if ndim == 1: */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_ScoreException); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 464, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 464, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_9 = 0; - __pyx_t_10 = 127; - __Pyx_INCREF(__pyx_kp_u_Can_t_make_score_prediction_for_2); - __pyx_t_9 += 41; - __Pyx_GIVEREF(__pyx_kp_u_Can_t_make_score_prediction_for_2); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Can_t_make_score_prediction_for_2); - __pyx_t_8 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_user_idx), __pyx_n_u_d); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 464, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_10; - __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_8); - __pyx_t_8 = 0; - __Pyx_INCREF(__pyx_kp_u_item_id); - __pyx_t_9 += 10; - __Pyx_GIVEREF(__pyx_kp_u_item_id); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_item_id); - __pyx_t_8 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_item_idx), __pyx_n_u_d); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 464, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_10; - __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_8); - __pyx_t_8 = 0; - __Pyx_INCREF(__pyx_kp_u__13); - __pyx_t_9 += 1; - __Pyx_GIVEREF(__pyx_kp_u__13); - PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_u__13); - __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_3, 5, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 464, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_6 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_8); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 464, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_6, 0, 0, 0); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __PYX_ERR(0, 464, __pyx_L1_error) + __pyx_v_extent = (__pyx_v_shape[0]); - /* "cornac/models/efm/recom_efm.pyx":463 - * return item_scores - * else: - * if self.train_set.is_unk_user(user_idx) or self.train_set.is_unk_item(item_idx): # <<<<<<<<<<<<<< - * raise ScoreException("Can't make score prediction for (user_id=%d, item_id=%d)" % (user_idx, item_idx)) - * item_score = self.U2[item_idx, :].dot(self.U1[user_idx, :]) + self.H2[item_idx, :].dot(self.H1[user_idx, :]) + /* "View.MemoryView":1407 + * cdef Py_ssize_t extent = shape[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * for i in range(extent): + * memcpy(data, item, itemsize) */ - } + __pyx_t_1 = (__pyx_v_ndim == 1); + if (__pyx_t_1) { - /* "cornac/models/efm/recom_efm.pyx":465 - * if self.train_set.is_unk_user(user_idx) or self.train_set.is_unk_item(item_idx): - * raise ScoreException("Can't make score prediction for (user_id=%d, item_id=%d)" % (user_idx, item_idx)) - * item_score = self.U2[item_idx, :].dot(self.U1[user_idx, :]) + self.H2[item_idx, :].dot(self.H1[user_idx, :]) # <<<<<<<<<<<<<< - * return item_score + /* "View.MemoryView":1408 * + * if ndim == 1: + * for i in range(extent): # <<<<<<<<<<<<<< + * memcpy(data, item, itemsize) + * data += stride */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_item_idx); - __Pyx_GIVEREF(__pyx_v_item_idx); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_item_idx); - __Pyx_INCREF(__pyx_slice__12); - __Pyx_GIVEREF(__pyx_slice__12); - PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_slice__12); - __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_dot); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_user_idx); - __Pyx_GIVEREF(__pyx_v_user_idx); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_user_idx); - __Pyx_INCREF(__pyx_slice__12); - __Pyx_GIVEREF(__pyx_slice__12); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_slice__12); - __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } - } - __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_H2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_item_idx); - __Pyx_GIVEREF(__pyx_v_item_idx); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_item_idx); - __Pyx_INCREF(__pyx_slice__12); - __Pyx_GIVEREF(__pyx_slice__12); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_slice__12); - __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_dot); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_H1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_user_idx); - __Pyx_GIVEREF(__pyx_v_user_idx); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_user_idx); - __Pyx_INCREF(__pyx_slice__12); - __Pyx_GIVEREF(__pyx_slice__12); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_slice__12); - __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } + __pyx_t_2 = __pyx_v_extent; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "View.MemoryView":1409 + * if ndim == 1: + * for i in range(extent): + * memcpy(data, item, itemsize) # <<<<<<<<<<<<<< + * data += stride + * else: + */ + (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize)); + + /* "View.MemoryView":1410 + * for i in range(extent): + * memcpy(data, item, itemsize) + * data += stride # <<<<<<<<<<<<<< + * else: + * for i in range(extent): + */ + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); } - __pyx_t_8 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_7); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 465, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_item_score = __pyx_t_4; - __pyx_t_4 = 0; - /* "cornac/models/efm/recom_efm.pyx":466 - * raise ScoreException("Can't make score prediction for (user_id=%d, item_id=%d)" % (user_idx, item_idx)) - * item_score = self.U2[item_idx, :].dot(self.U1[user_idx, :]) + self.H2[item_idx, :].dot(self.H1[user_idx, :]) - * return item_score # <<<<<<<<<<<<<< + /* "View.MemoryView":1407 + * cdef Py_ssize_t extent = shape[0] * - * def rank(self, user_idx, item_indices=None): + * if ndim == 1: # <<<<<<<<<<<<<< + * for i in range(extent): + * memcpy(data, item, itemsize) */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_item_score); - __pyx_r = __pyx_v_item_score; - goto __pyx_L0; + goto __pyx_L3; } - /* "cornac/models/efm/recom_efm.pyx":439 - * return 1 + (self.rating_scale - 1) / (1 + np.exp(-sentiment)) + /* "View.MemoryView":1412 + * data += stride + * else: + * for i in range(extent): # <<<<<<<<<<<<<< + * _slice_assign_scalar(data, shape + 1, strides + 1, ndim - 1, itemsize, item) + * data += stride + */ + /*else*/ { + __pyx_t_2 = __pyx_v_extent; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "View.MemoryView":1413 + * else: + * for i in range(extent): + * _slice_assign_scalar(data, shape + 1, strides + 1, ndim - 1, itemsize, item) # <<<<<<<<<<<<<< + * data += stride * - * def score(self, user_idx, item_idx=None): # <<<<<<<<<<<<<< - * """Predict the scores/ratings of a user for an item. + */ + __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item); + + /* "View.MemoryView":1414 + * for i in range(extent): + * _slice_assign_scalar(data, shape + 1, strides + 1, ndim - 1, itemsize, item) + * data += stride # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + } + } + __pyx_L3:; + + /* "View.MemoryView":1400 * + * @cname('__pyx_memoryview__slice_assign_scalar') + * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * size_t itemsize, void *item) noexcept nogil: */ /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.score", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_item_scores); - __Pyx_XDECREF(__pyx_v_item_score); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; } -/* "cornac/models/efm/recom_efm.pyx":468 - * return item_score - * - * def rank(self, user_idx, item_indices=None): # <<<<<<<<<<<<<< - * """Rank all test items for a given user. - * +/* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result */ /* Python wrapper */ -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_17rank(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_16rank[] = "Rank all test items for a given user.\n\n Parameters\n ----------\n user_idx: int, required\n The index of the user for whom to perform item raking.\n\n item_indices: 1d array, optional, default: None\n A list of candidate item indices to be ranked by the user.\n If `None`, list of ranked known item indices and their scores will be returned\n\n Returns\n -------\n Tuple of `item_rank`, and `item_scores`. The order of values\n in item_scores are corresponding to the order of their ids in item_ids\n\n "; -static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_17rank = {"rank", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_17rank, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_16rank}; -static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_17rank(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_user_idx = 0; - PyObject *__pyx_v_item_indices = 0; +static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum = {"__pyx_unpickle_Enum", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("rank (wrapper)", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum (wrapper)", 0); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_user_idx,&__pyx_n_s_item_indices,0}; + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; PyObject* values[3] = {0,0,0}; - values[2] = ((PyObject *)((PyObject *)Py_None)); - if (unlikely(__pyx_kwds)) { + if (__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); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_user_idx)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("rank", 0, 2, 3, 1); __PYX_ERR(0, 468, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item_indices); - if (value) { values[2] = value; kw_args--; } + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rank") < 0)) __PYX_ERR(0, 468, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_Enum") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } - __pyx_v_self = values[0]; - __pyx_v_user_idx = values[1]; - __pyx_v_item_indices = values[2]; + __pyx_v___pyx_type = values[0]; + __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_v___pyx_state = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("rank", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 468, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 1, __pyx_L3_error) __pyx_L3_error:; - __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.rank", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_16rank(__pyx_self, __pyx_v_self, __pyx_v_user_idx, __pyx_v_item_indices); + __pyx_r = __pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0x82a3537, 0x6ae9995, 0xb068931): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum + */ + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__8, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum not in (0x82a3537, 0x6ae9995, 0xb068931): + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum + * __pyx_result = Enum.__new__(__pyx_type) + */ + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_1); + __pyx_v___pyx_PickleError = __pyx_t_1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum not in (0x82a3537, 0x6ae9995, 0xb068931): + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum # <<<<<<<<<<<<<< + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0x82a3537, 0x6ae9995, 0xb068931): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum + * __pyx_result = Enum.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_MemviewEnum_type), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); + if (__pyx_t_2) { + + /* "(tree fragment)":9 + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_unpickle_Enum__set_state(((struct __pyx_MemviewEnum_obj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v___pyx_result); + __pyx_r = __pyx_v___pyx_result; + goto __pyx_L0; + + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v___pyx_PickleError); + __Pyx_XDECREF(__pyx_v___pyx_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[1]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->name); + __Pyx_DECREF(__pyx_v___pyx_result->name); + __pyx_v___pyx_result->name = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[1]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 13, __pyx_L1_error) + } + __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_3 > 1); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_2 = __pyx_t_4; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "(tree fragment)":14 + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<< + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_update); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 14, __pyx_L1_error) + } + __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[1]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + + /* 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_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":245 + * + * @property + * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<< + * """Returns a borrowed reference to the object owning the data/memory. + * """ + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self) { + PyObject *__pyx_r; + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":248 + * """Returns a borrowed reference to the object owning the data/memory. + * """ + * return PyArray_BASE(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_BASE(__pyx_v_self); + goto __pyx_L0; + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":245 + * + * @property + * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<< + * """Returns a borrowed reference to the object owning the data/memory. + * """ + */ /* function exit code */ - __Pyx_RefNannyFinishContext(); + __pyx_L0:; return __pyx_r; } -static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_16rank(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_user_idx, PyObject *__pyx_v_item_indices) { - PyObject *__pyx_v_X_ = NULL; - PyObject *__pyx_v_most_cared_aspects_indices = NULL; - PyObject *__pyx_v_most_cared_X_ = NULL; - PyObject *__pyx_v_most_cared_Y_ = NULL; - PyObject *__pyx_v_explicit_scores = NULL; - PyObject *__pyx_v_item_scores = NULL; - PyObject *__pyx_v_item_rank = NULL; - PyObject *__pyx_v_num_items = NULL; - PyObject *__pyx_r = NULL; +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":251 + * + * @property + * cdef inline dtype descr(self): # <<<<<<<<<<<<<< + * """Returns an owned reference to the dtype of the array. + * """ + */ + +static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self) { + PyArray_Descr *__pyx_r = NULL; __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("rank", 0); + PyArray_Descr *__pyx_t_1; + __Pyx_RefNannySetupContext("descr", 0); - /* "cornac/models/efm/recom_efm.pyx":486 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":254 + * """Returns an owned reference to the dtype of the array. + * """ + * return PyArray_DESCR(self) # <<<<<<<<<<<<<< * - * """ - * X_ = self.U1[user_idx, :].dot(self.V.T) # <<<<<<<<<<<<<< - * most_cared_aspects_indices = (-X_).argsort()[:self.num_most_cared_aspects] - * most_cared_X_ = X_[most_cared_aspects_indices] + * @property */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 486, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 486, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_user_idx); - __Pyx_GIVEREF(__pyx_v_user_idx); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_user_idx); - __Pyx_INCREF(__pyx_slice__12); - __Pyx_GIVEREF(__pyx_slice__12); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_slice__12); - __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 486, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_dot); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 486, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_V); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 486, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_T); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 486, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 486, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_X_ = __pyx_t_1; - __pyx_t_1 = 0; + __Pyx_XDECREF((PyObject *)__pyx_r); + __pyx_t_1 = PyArray_DESCR(__pyx_v_self); + __Pyx_INCREF((PyObject *)((PyArray_Descr *)__pyx_t_1)); + __pyx_r = ((PyArray_Descr *)__pyx_t_1); + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":487 - * """ - * X_ = self.U1[user_idx, :].dot(self.V.T) - * most_cared_aspects_indices = (-X_).argsort()[:self.num_most_cared_aspects] # <<<<<<<<<<<<<< - * most_cared_X_ = X_[most_cared_aspects_indices] - * most_cared_Y_ = self.U2.dot(self.V[most_cared_aspects_indices, :].T) + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":251 + * + * @property + * cdef inline dtype descr(self): # <<<<<<<<<<<<<< + * """Returns an owned reference to the dtype of the array. + * """ */ - __pyx_t_3 = PyNumber_Negative(__pyx_v_X_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 487, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_argsort); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 487, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 487, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_most_cared_aspects); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 487, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_t_1, 0, 0, NULL, &__pyx_t_2, NULL, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 487, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_most_cared_aspects_indices = __pyx_t_3; - __pyx_t_3 = 0; - /* "cornac/models/efm/recom_efm.pyx":488 - * X_ = self.U1[user_idx, :].dot(self.V.T) - * most_cared_aspects_indices = (-X_).argsort()[:self.num_most_cared_aspects] - * most_cared_X_ = X_[most_cared_aspects_indices] # <<<<<<<<<<<<<< - * most_cared_Y_ = self.U2.dot(self.V[most_cared_aspects_indices, :].T) - * explicit_scores = most_cared_X_.dot(most_cared_Y_.T) / (self.num_most_cared_aspects * self.rating_scale) - */ - __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_X_, __pyx_v_most_cared_aspects_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 488, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_most_cared_X_ = __pyx_t_3; - __pyx_t_3 = 0; + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "cornac/models/efm/recom_efm.pyx":489 - * most_cared_aspects_indices = (-X_).argsort()[:self.num_most_cared_aspects] - * most_cared_X_ = X_[most_cared_aspects_indices] - * most_cared_Y_ = self.U2.dot(self.V[most_cared_aspects_indices, :].T) # <<<<<<<<<<<<<< - * explicit_scores = most_cared_X_.dot(most_cared_Y_.T) / (self.num_most_cared_aspects * self.rating_scale) - * item_scores = self.alpha * explicit_scores + (1 - self.alpha) * self.score(user_idx) +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":257 + * + * @property + * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<< + * """Returns the number of dimensions in the array. + * """ */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 489, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_dot); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 489, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_V); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 489, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 489, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_most_cared_aspects_indices); - __Pyx_GIVEREF(__pyx_v_most_cared_aspects_indices); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_most_cared_aspects_indices); - __Pyx_INCREF(__pyx_slice__12); - __Pyx_GIVEREF(__pyx_slice__12); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_slice__12); - __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 489, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_T); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 489, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 489, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_most_cared_Y_ = __pyx_t_3; - __pyx_t_3 = 0; - /* "cornac/models/efm/recom_efm.pyx":490 - * most_cared_X_ = X_[most_cared_aspects_indices] - * most_cared_Y_ = self.U2.dot(self.V[most_cared_aspects_indices, :].T) - * explicit_scores = most_cared_X_.dot(most_cared_Y_.T) / (self.num_most_cared_aspects * self.rating_scale) # <<<<<<<<<<<<<< - * item_scores = self.alpha * explicit_scores + (1 - self.alpha) * self.score(user_idx) +static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self) { + int __pyx_r; + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":260 + * """Returns the number of dimensions in the array. + * """ + * return PyArray_NDIM(self) # <<<<<<<<<<<<<< * + * @property */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_most_cared_X_, __pyx_n_s_dot); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 490, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_most_cared_Y_, __pyx_n_s_T); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 490, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 490, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_most_cared_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 490, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rating_scale); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 490, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_Multiply(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 490, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 490, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_explicit_scores = __pyx_t_4; - __pyx_t_4 = 0; + __pyx_r = PyArray_NDIM(__pyx_v_self); + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":491 - * most_cared_Y_ = self.U2.dot(self.V[most_cared_aspects_indices, :].T) - * explicit_scores = most_cared_X_.dot(most_cared_Y_.T) / (self.num_most_cared_aspects * self.rating_scale) - * item_scores = self.alpha * explicit_scores + (1 - self.alpha) * self.score(user_idx) # <<<<<<<<<<<<<< + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":257 * - * if item_indices is None: + * @property + * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<< + * """Returns the number of dimensions in the array. + * """ */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_alpha); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 491, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_Multiply(__pyx_t_4, __pyx_v_explicit_scores); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 491, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_alpha); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 491, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyInt_SubtractCObj(__pyx_int_1, __pyx_t_4, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 491, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_score); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 491, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_4 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_v_user_idx) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_user_idx); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 491, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 491, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 491, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_item_scores = __pyx_t_4; - __pyx_t_4 = 0; - /* "cornac/models/efm/recom_efm.pyx":493 - * item_scores = self.alpha * explicit_scores + (1 - self.alpha) * self.score(user_idx) + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":263 * - * if item_indices is None: # <<<<<<<<<<<<<< - * item_scores = item_scores - * item_rank = item_scores.argsort()[::-1] + * @property + * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the dimensions/shape of the array. + * The number of elements matches the number of dimensions of the array (ndim). */ - __pyx_t_6 = (__pyx_v_item_indices == Py_None); - __pyx_t_7 = (__pyx_t_6 != 0); - if (__pyx_t_7) { - /* "cornac/models/efm/recom_efm.pyx":494 +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self) { + npy_intp *__pyx_r; + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":268 + * Can return NULL for 0-dimensional arrays. + * """ + * return PyArray_DIMS(self) # <<<<<<<<<<<<<< * - * if item_indices is None: - * item_scores = item_scores # <<<<<<<<<<<<<< - * item_rank = item_scores.argsort()[::-1] - * else: + * @property */ - __Pyx_INCREF(__pyx_v_item_scores); - __Pyx_DECREF_SET(__pyx_v_item_scores, __pyx_v_item_scores); + __pyx_r = PyArray_DIMS(__pyx_v_self); + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":495 - * if item_indices is None: - * item_scores = item_scores - * item_rank = item_scores.argsort()[::-1] # <<<<<<<<<<<<<< - * else: - * num_items = max(self.train_set.num_items, max(item_indices) + 1) + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":263 + * + * @property + * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the dimensions/shape of the array. + * The number of elements matches the number of dimensions of the array (ndim). */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_item_scores, __pyx_n_s_argsort); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 495, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 495, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_4, __pyx_slice__14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 495, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_item_rank = __pyx_t_1; - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":493 - * item_scores = self.alpha * explicit_scores + (1 - self.alpha) * self.score(user_idx) + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":271 * - * if item_indices is None: # <<<<<<<<<<<<<< - * item_scores = item_scores - * item_rank = item_scores.argsort()[::-1] + * @property + * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the strides of the array. + * The number of elements matches the number of dimensions of the array (ndim). */ - goto __pyx_L3; - } - /* "cornac/models/efm/recom_efm.pyx":497 - * item_rank = item_scores.argsort()[::-1] - * else: - * num_items = max(self.train_set.num_items, max(item_indices) + 1) # <<<<<<<<<<<<<< - * item_scores = np.ones(num_items) * np.min(item_scores) - * item_scores[:self.train_set.num_items] = item_scores +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self) { + npy_intp *__pyx_r; + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":275 + * The number of elements matches the number of dimensions of the array (ndim). + * """ + * return PyArray_STRIDES(self) # <<<<<<<<<<<<<< + * + * @property */ - /*else*/ { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_max, __pyx_v_item_indices); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 497, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_items); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 497, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 497, __pyx_L1_error) - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 497, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_7) { - __Pyx_INCREF(__pyx_t_4); - __pyx_t_1 = __pyx_t_4; - } else { - __Pyx_INCREF(__pyx_t_5); - __pyx_t_1 = __pyx_t_5; - } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __pyx_t_1; - __Pyx_INCREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_num_items = __pyx_t_4; - __pyx_t_4 = 0; + __pyx_r = PyArray_STRIDES(__pyx_v_self); + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":498 - * else: - * num_items = max(self.train_set.num_items, max(item_indices) + 1) - * item_scores = np.ones(num_items) * np.min(item_scores) # <<<<<<<<<<<<<< - * item_scores[:self.train_set.num_items] = item_scores - * item_rank = item_scores.argsort()[::-1] + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":271 + * + * @property + * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the strides of the array. + * The number of elements matches the number of dimensions of the array (ndim). */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 498, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - } - } - __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_1, __pyx_v_num_items) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_num_items); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 498, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_min); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 498, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_v_item_scores) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_item_scores); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 498, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Multiply(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 498, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF_SET(__pyx_v_item_scores, __pyx_t_3); - __pyx_t_3 = 0; - /* "cornac/models/efm/recom_efm.pyx":499 - * num_items = max(self.train_set.num_items, max(item_indices) + 1) - * item_scores = np.ones(num_items) * np.min(item_scores) - * item_scores[:self.train_set.num_items] = item_scores # <<<<<<<<<<<<<< - * item_rank = item_scores.argsort()[::-1] - * item_rank = intersects(item_rank, item_indices, assume_unique=True) + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":278 + * + * @property + * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<< + * """Returns the total size (in number of elements) of the array. + * """ */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 499, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_num_items); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 499, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PyObject_SetSlice(__pyx_v_item_scores, __pyx_v_item_scores, 0, 0, NULL, &__pyx_t_5, NULL, 0, 0, 1) < 0) __PYX_ERR(0, 499, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "cornac/models/efm/recom_efm.pyx":500 - * item_scores = np.ones(num_items) * np.min(item_scores) - * item_scores[:self.train_set.num_items] = item_scores - * item_rank = item_scores.argsort()[::-1] # <<<<<<<<<<<<<< - * item_rank = intersects(item_rank, item_indices, assume_unique=True) - * item_scores = item_scores[item_indices] +static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self) { + npy_intp __pyx_r; + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":281 + * """Returns the total size (in number of elements) of the array. + * """ + * return PyArray_SIZE(self) # <<<<<<<<<<<<<< + * + * @property */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_item_scores, __pyx_n_s_argsort); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 500, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_5 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 500, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_slice__14); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 500, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_item_rank = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_r = PyArray_SIZE(__pyx_v_self); + goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":501 - * item_scores[:self.train_set.num_items] = item_scores - * item_rank = item_scores.argsort()[::-1] - * item_rank = intersects(item_rank, item_indices, assume_unique=True) # <<<<<<<<<<<<<< - * item_scores = item_scores[item_indices] - * return item_rank, item_scores + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":278 + * + * @property + * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<< + * """Returns the total size (in number of elements) of the array. + * """ */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_intersects); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 501, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 501, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_item_rank); - __Pyx_GIVEREF(__pyx_v_item_rank); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_item_rank); - __Pyx_INCREF(__pyx_v_item_indices); - __Pyx_GIVEREF(__pyx_v_item_indices); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_item_indices); - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 501, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_assume_unique, Py_True) < 0) __PYX_ERR(0, 501, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 501, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF_SET(__pyx_v_item_rank, __pyx_t_1); - __pyx_t_1 = 0; - /* "cornac/models/efm/recom_efm.pyx":502 - * item_rank = item_scores.argsort()[::-1] - * item_rank = intersects(item_rank, item_indices, assume_unique=True) - * item_scores = item_scores[item_indices] # <<<<<<<<<<<<<< - * return item_rank, item_scores + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":284 + * + * @property + * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<< + * """The pointer to the data buffer as a char*. + * This is provided for legacy reasons to avoid direct struct field access. */ - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_item_scores, __pyx_v_item_indices); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 502, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF_SET(__pyx_v_item_scores, __pyx_t_1); - __pyx_t_1 = 0; - } - __pyx_L3:; - /* "cornac/models/efm/recom_efm.pyx":503 - * item_rank = intersects(item_rank, item_indices, assume_unique=True) - * item_scores = item_scores[item_indices] - * return item_rank, item_scores # <<<<<<<<<<<<<< +static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self) { + char *__pyx_r; + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":290 + * of `PyArray_DATA()` instead, which returns a 'void*'. + * """ + * return PyArray_BYTES(self) # <<<<<<<<<<<<<< + * + * ctypedef unsigned char npy_bool */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 503, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_item_rank); - __Pyx_GIVEREF(__pyx_v_item_rank); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_item_rank); - __Pyx_INCREF(__pyx_v_item_scores); - __Pyx_GIVEREF(__pyx_v_item_scores); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_item_scores); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_r = PyArray_BYTES(__pyx_v_self); goto __pyx_L0; - /* "cornac/models/efm/recom_efm.pyx":468 - * return item_score - * - * def rank(self, user_idx, item_indices=None): # <<<<<<<<<<<<<< - * """Rank all test items for a given user. + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":284 * + * @property + * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<< + * """The pointer to the data buffer as a char*. + * This is provided for legacy reasons to avoid direct struct field access. */ /* 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("cornac.models.efm.recom_efm.EFM.rank", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_X_); - __Pyx_XDECREF(__pyx_v_most_cared_aspects_indices); - __Pyx_XDECREF(__pyx_v_most_cared_X_); - __Pyx_XDECREF(__pyx_v_most_cared_Y_); - __Pyx_XDECREF(__pyx_v_explicit_scores); - __Pyx_XDECREF(__pyx_v_item_scores); - __Pyx_XDECREF(__pyx_v_item_rank); - __Pyx_XDECREF(__pyx_v_num_items); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":735 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":773 * ctypedef npy_cdouble complex_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< @@ -28024,7 +19298,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":736 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":774 * * cdef inline object PyArray_MultiIterNew1(a): * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< @@ -28032,13 +19306,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ * cdef inline object PyArray_MultiIterNew2(a, b): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 736, __pyx_L1_error) + __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 774, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":735 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":773 * ctypedef npy_cdouble complex_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< @@ -28057,7 +19331,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ return __pyx_r; } -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":738 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":776 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< @@ -28074,7 +19348,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":739 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":777 * * cdef inline object PyArray_MultiIterNew2(a, b): * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< @@ -28082,13 +19356,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ * cdef inline object PyArray_MultiIterNew3(a, b, c): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 739, __pyx_L1_error) + __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 777, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":738 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":776 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< @@ -28107,7 +19381,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ return __pyx_r; } -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":741 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":779 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< @@ -28124,7 +19398,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":742 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":780 * * cdef inline object PyArray_MultiIterNew3(a, b, c): * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< @@ -28132,13 +19406,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ * cdef inline object PyArray_MultiIterNew4(a, b, c, d): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 742, __pyx_L1_error) + __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 780, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":741 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":779 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< @@ -28157,7 +19431,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ return __pyx_r; } -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":744 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":782 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< @@ -28174,7 +19448,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":745 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":783 * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< @@ -28182,13 +19456,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 745, __pyx_L1_error) + __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 783, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":744 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":782 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< @@ -28207,7 +19481,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ return __pyx_r; } -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":747 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":785 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< @@ -28224,7 +19498,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":748 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":786 * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< @@ -28232,13 +19506,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ * cdef inline tuple PyDataType_SHAPE(dtype d): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 748, __pyx_L1_error) + __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 786, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":747 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":785 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< @@ -28257,7 +19531,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ return __pyx_r; } -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":750 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":788 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< @@ -28271,17 +19545,17 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ int __pyx_t_1; __Pyx_RefNannySetupContext("PyDataType_SHAPE", 0); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":751 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":789 * * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< * return d.subarray.shape * else: */ - __pyx_t_1 = (PyDataType_HASSUBARRAY(__pyx_v_d) != 0); + __pyx_t_1 = PyDataType_HASSUBARRAY(__pyx_v_d); if (__pyx_t_1) { - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":752 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":790 * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): * return d.subarray.shape # <<<<<<<<<<<<<< @@ -28293,7 +19567,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape); goto __pyx_L0; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":751 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":789 * * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< @@ -28302,7 +19576,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ */ } - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":754 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":792 * return d.subarray.shape * else: * return () # <<<<<<<<<<<<<< @@ -28316,7 +19590,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ goto __pyx_L0; } - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":750 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":788 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< @@ -28331,7 +19605,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ return __pyx_r; } -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":931 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":967 * int _import_umath() except -1 * * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< @@ -28341,9 +19615,13 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; __Pyx_RefNannySetupContext("set_array_base", 0); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":932 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":968 * * cdef inline void set_array_base(ndarray arr, object base): * Py_INCREF(base) # important to do this before stealing the reference below! # <<<<<<<<<<<<<< @@ -28352,16 +19630,16 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a */ Py_INCREF(__pyx_v_base); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":933 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":969 * cdef inline void set_array_base(ndarray arr, object base): * Py_INCREF(base) # important to do this before stealing the reference below! * PyArray_SetBaseObject(arr, base) # <<<<<<<<<<<<<< * * cdef inline object get_array_base(ndarray arr): */ - (void)(PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base)); + __pyx_t_1 = PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 969, __pyx_L1_error) - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":931 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":967 * int _import_umath() except -1 * * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< @@ -28370,10 +19648,14 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a */ /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("numpy.set_array_base", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; __Pyx_RefNannyFinishContext(); } -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":935 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":971 * PyArray_SetBaseObject(arr, base) * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< @@ -28388,7 +19670,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py int __pyx_t_1; __Pyx_RefNannySetupContext("get_array_base", 0); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":936 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":972 * * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) # <<<<<<<<<<<<<< @@ -28397,17 +19679,17 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py */ __pyx_v_base = PyArray_BASE(__pyx_v_arr); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":937 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":973 * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) * if base is NULL: # <<<<<<<<<<<<<< * return None * return base */ - __pyx_t_1 = ((__pyx_v_base == NULL) != 0); + __pyx_t_1 = (__pyx_v_base == NULL); if (__pyx_t_1) { - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":938 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":974 * base = PyArray_BASE(arr) * if base is NULL: * return None # <<<<<<<<<<<<<< @@ -28418,7 +19700,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":937 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":973 * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) * if base is NULL: # <<<<<<<<<<<<<< @@ -28427,7 +19709,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py */ } - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":939 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":975 * if base is NULL: * return None * return base # <<<<<<<<<<<<<< @@ -28439,7 +19721,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_r = ((PyObject *)__pyx_v_base); goto __pyx_L0; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":935 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":971 * PyArray_SetBaseObject(arr, base) * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< @@ -28454,7 +19736,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py return __pyx_r; } -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":943 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":979 * # Versions of the import_* functions which are more suitable for * # Cython code. * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< @@ -28478,7 +19760,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_array", 0); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":944 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":980 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -28494,16 +19776,16 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":945 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":981 * cdef inline int import_array() except -1: * try: * __pyx_import_array() # <<<<<<<<<<<<<< * except Exception: * raise ImportError("numpy.core.multiarray failed to import") */ - __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 945, __pyx_L3_error) + __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 981, __pyx_L3_error) - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":944 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":980 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -28517,7 +19799,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":946 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":982 * try: * __pyx_import_array() * except Exception: # <<<<<<<<<<<<<< @@ -28527,34 +19809,34 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_4) { __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 946, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(2, 982, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":947 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":983 * __pyx_import_array() * except Exception: * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< * * cdef inline int import_umath() except -1: */ - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 947, __pyx_L5_except_error) + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 983, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __PYX_ERR(1, 947, __pyx_L5_except_error) + __PYX_ERR(2, 983, __pyx_L5_except_error) } goto __pyx_L5_except_error; - __pyx_L5_except_error:; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":944 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":980 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< * __pyx_import_array() * except Exception: */ + __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); @@ -28563,7 +19845,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __pyx_L8_try_end:; } - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":943 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":979 * # Versions of the import_* functions which are more suitable for * # Cython code. * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< @@ -28586,7 +19868,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { return __pyx_r; } -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":949 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":985 * raise ImportError("numpy.core.multiarray failed to import") * * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< @@ -28610,7 +19892,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_umath", 0); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":950 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":986 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -28626,16 +19908,16 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":951 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":987 * cdef inline int import_umath() except -1: * try: * _import_umath() # <<<<<<<<<<<<<< * except Exception: * raise ImportError("numpy.core.umath failed to import") */ - __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 951, __pyx_L3_error) + __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 987, __pyx_L3_error) - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":950 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":986 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -28649,7 +19931,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":952 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":988 * try: * _import_umath() * except Exception: # <<<<<<<<<<<<<< @@ -28659,34 +19941,34 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_4) { __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 952, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(2, 988, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":953 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":989 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< * * cdef inline int import_ufunc() except -1: */ - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 953, __pyx_L5_except_error) + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 989, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __PYX_ERR(1, 953, __pyx_L5_except_error) + __PYX_ERR(2, 989, __pyx_L5_except_error) } goto __pyx_L5_except_error; - __pyx_L5_except_error:; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":950 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":986 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< * _import_umath() * except Exception: */ + __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); @@ -28695,7 +19977,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __pyx_L8_try_end:; } - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":949 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":985 * raise ImportError("numpy.core.multiarray failed to import") * * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< @@ -28718,7 +20000,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { return __pyx_r; } -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":955 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":991 * raise ImportError("numpy.core.umath failed to import") * * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< @@ -28742,7 +20024,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_ufunc", 0); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":956 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":992 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -28758,16 +20040,16 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":957 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":993 * cdef inline int import_ufunc() except -1: * try: * _import_umath() # <<<<<<<<<<<<<< * except Exception: * raise ImportError("numpy.core.umath failed to import") */ - __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 957, __pyx_L3_error) + __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 993, __pyx_L3_error) - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":956 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":992 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -28781,7 +20063,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":958 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":994 * try: * _import_umath() * except Exception: # <<<<<<<<<<<<<< @@ -28791,34 +20073,34 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_4) { __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 958, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(2, 994, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":959 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":995 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< * - * cdef extern from *: + * */ - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 959, __pyx_L5_except_error) + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 995, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __PYX_ERR(1, 959, __pyx_L5_except_error) + __PYX_ERR(2, 995, __pyx_L5_except_error) } goto __pyx_L5_except_error; - __pyx_L5_except_error:; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":956 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":992 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< * _import_umath() * except Exception: */ + __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); @@ -28827,7 +20109,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __pyx_L8_try_end:; } - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":955 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":991 * raise ImportError("numpy.core.umath failed to import") * * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< @@ -28850,7 +20132,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { return __pyx_r; } -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":969 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":998 * * * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< @@ -28863,7 +20145,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("is_timedelta64_object", 0); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":981 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1010 * bool * """ * return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type) # <<<<<<<<<<<<<< @@ -28873,7 +20155,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyTimedeltaArrType_Type)); goto __pyx_L0; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":969 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":998 * * * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< @@ -28887,7 +20169,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ return __pyx_r; } -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":984 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1013 * * * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< @@ -28900,7 +20182,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("is_datetime64_object", 0); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":996 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1025 * bool * """ * return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type) # <<<<<<<<<<<<<< @@ -28910,7 +20192,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyDatetimeArrType_Type)); goto __pyx_L0; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":984 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1013 * * * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< @@ -28924,7 +20206,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o return __pyx_r; } -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":999 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1028 * * * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -28935,7 +20217,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject *__pyx_v_obj) { npy_datetime __pyx_r; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":1006 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1035 * also needed. That can be found using `get_datetime64_unit`. * """ * return (obj).obval # <<<<<<<<<<<<<< @@ -28945,7 +20227,7 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * __pyx_r = ((PyDatetimeScalarObject *)__pyx_v_obj)->obval; goto __pyx_L0; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":999 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1028 * * * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -28958,7 +20240,7 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * return __pyx_r; } -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":1009 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1038 * * * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -28969,7 +20251,7 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject *__pyx_v_obj) { npy_timedelta __pyx_r; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":1013 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1042 * returns the int64 value underlying scalar numpy timedelta64 object * """ * return (obj).obval # <<<<<<<<<<<<<< @@ -28979,7 +20261,7 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject __pyx_r = ((PyTimedeltaScalarObject *)__pyx_v_obj)->obval; goto __pyx_L0; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":1009 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1038 * * * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -28992,7 +20274,7 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject return __pyx_r; } -/* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":1016 +/* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1045 * * * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< @@ -29003,20 +20285,80 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObject *__pyx_v_obj) { NPY_DATETIMEUNIT __pyx_r; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":1020 + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1049 * returns the unit part of the dtype for a numpy datetime64 object. * """ * return (obj).obmeta.base # <<<<<<<<<<<<<< */ - __pyx_r = ((NPY_DATETIMEUNIT)((PyDatetimeScalarObject *)__pyx_v_obj)->obmeta.base); + __pyx_r = ((NPY_DATETIMEUNIT)((PyDatetimeScalarObject *)__pyx_v_obj)->obmeta.base); + goto __pyx_L0; + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1045 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "cornac/models/efm/recom_efm.pyx":38 + * + * + * cdef floating _dot(int n, floating *x, int incx, # <<<<<<<<<<<<<< + * floating *y, int incy) nogil: + * if floating is float: + */ + +static float __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(int __pyx_v_n, float *__pyx_v_x, int __pyx_v_incx, float *__pyx_v_y, int __pyx_v_incy) { + float __pyx_r; + + /* "cornac/models/efm/recom_efm.pyx":41 + * floating *y, int incy) nogil: + * if floating is float: + * return sdot(&n, x, &incx, y, &incy) # <<<<<<<<<<<<<< + * else: + * return ddot(&n, x, &incx, y, &incy) + */ + __pyx_r = __pyx_f_5scipy_6linalg_11cython_blas_sdot((&__pyx_v_n), __pyx_v_x, (&__pyx_v_incx), __pyx_v_y, (&__pyx_v_incy)); + goto __pyx_L0; + + /* "cornac/models/efm/recom_efm.pyx":38 + * + * + * cdef floating _dot(int n, floating *x, int incx, # <<<<<<<<<<<<<< + * floating *y, int incy) nogil: + * if floating is float: + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +static double __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(int __pyx_v_n, double *__pyx_v_x, int __pyx_v_incx, double *__pyx_v_y, int __pyx_v_incy) { + double __pyx_r; + + /* "cornac/models/efm/recom_efm.pyx":43 + * return sdot(&n, x, &incx, y, &incy) + * else: + * return ddot(&n, x, &incx, y, &incy) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_f_5scipy_6linalg_11cython_blas_ddot((&__pyx_v_n), __pyx_v_x, (&__pyx_v_incx), __pyx_v_y, (&__pyx_v_incy)); goto __pyx_L0; - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":1016 + /* "cornac/models/efm/recom_efm.pyx":38 * * - * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< - * """ - * returns the unit part of the dtype for a numpy datetime64 object. + * cdef floating _dot(int n, floating *x, int incx, # <<<<<<<<<<<<<< + * floating *y, int incy) nogil: + * if floating is float: */ /* function exit code */ @@ -29024,1509 +20366,2478 @@ static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObjec return __pyx_r; } -/* "View.MemoryView":122 - * cdef bint dtype_is_object - * - * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< - * mode="c", bint allocate_buffer=True): +/* "cornac/models/efm/recom_efm.pyx":129 + * """ * + * def __init__(self, name="EFM", # <<<<<<<<<<<<<< + * num_explicit_factors=40, num_latent_factors=60, num_most_cared_aspects=15, + * rating_scale=5.0, alpha=0.85, */ /* Python wrapper */ -static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_shape = 0; - Py_ssize_t __pyx_v_itemsize; - PyObject *__pyx_v_format = 0; - PyObject *__pyx_v_mode = 0; - int __pyx_v_allocate_buffer; +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_1__init__(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_1__init__ = {"__init__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_1__init__(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_name = 0; + PyObject *__pyx_v_num_explicit_factors = 0; + PyObject *__pyx_v_num_latent_factors = 0; + PyObject *__pyx_v_num_most_cared_aspects = 0; + PyObject *__pyx_v_rating_scale = 0; + PyObject *__pyx_v_alpha = 0; + PyObject *__pyx_v_lambda_x = 0; + PyObject *__pyx_v_lambda_y = 0; + PyObject *__pyx_v_lambda_u = 0; + PyObject *__pyx_v_lambda_h = 0; + PyObject *__pyx_v_lambda_v = 0; + PyObject *__pyx_v_use_item_aspect_popularity = 0; + PyObject *__pyx_v_max_iter = 0; + PyObject *__pyx_v_num_threads = 0; + PyObject *__pyx_v_trainable = 0; + PyObject *__pyx_v_verbose = 0; + PyObject *__pyx_v_init_params = 0; + PyObject *__pyx_v_seed = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - int __pyx_r; + PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shape,&__pyx_n_s_itemsize,&__pyx_n_s_format,&__pyx_n_s_mode,&__pyx_n_s_allocate_buffer,0}; - PyObject* values[5] = {0,0,0,0,0}; - values[3] = ((PyObject *)__pyx_n_s_c); - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_name,&__pyx_n_s_num_explicit_factors,&__pyx_n_s_num_latent_factors,&__pyx_n_s_num_most_cared_aspects,&__pyx_n_s_rating_scale,&__pyx_n_s_alpha,&__pyx_n_s_lambda_x,&__pyx_n_s_lambda_y,&__pyx_n_s_lambda_u,&__pyx_n_s_lambda_h,&__pyx_n_s_lambda_v,&__pyx_n_s_use_item_aspect_popularity,&__pyx_n_s_max_iter,&__pyx_n_s_num_threads,&__pyx_n_s_trainable,&__pyx_n_s_verbose,&__pyx_n_s_init_params,&__pyx_n_s_seed,0}; + PyObject* values[19] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + values[1] = ((PyObject *)((PyObject*)__pyx_n_u_EFM)); + values[2] = ((PyObject *)((PyObject *)__pyx_int_40)); + values[3] = ((PyObject *)((PyObject *)__pyx_int_60)); + values[4] = ((PyObject *)((PyObject *)__pyx_int_15)); + values[5] = ((PyObject *)((PyObject*)__pyx_float_5_0)); + values[6] = ((PyObject *)((PyObject*)__pyx_float_0_85)); + values[7] = ((PyObject *)((PyObject *)__pyx_int_1)); + values[8] = ((PyObject *)((PyObject *)__pyx_int_1)); + values[9] = ((PyObject *)((PyObject*)__pyx_float_0_01)); + values[10] = ((PyObject *)((PyObject*)__pyx_float_0_01)); + values[11] = ((PyObject *)((PyObject*)__pyx_float_0_01)); + + /* "cornac/models/efm/recom_efm.pyx":133 + * rating_scale=5.0, alpha=0.85, + * lambda_x=1, lambda_y=1, lambda_u=0.01, lambda_h=0.01, lambda_v=0.01, + * use_item_aspect_popularity=True, max_iter=100, # <<<<<<<<<<<<<< + * num_threads=0, trainable=True, verbose=False, init_params=None, seed=None): + * + */ + values[12] = ((PyObject *)((PyObject *)Py_True)); + values[13] = ((PyObject *)((PyObject *)__pyx_int_100)); + values[14] = ((PyObject *)((PyObject *)__pyx_int_0)); + + /* "cornac/models/efm/recom_efm.pyx":134 + * lambda_x=1, lambda_y=1, lambda_u=0.01, lambda_h=0.01, lambda_v=0.01, + * use_item_aspect_popularity=True, max_iter=100, + * num_threads=0, trainable=True, verbose=False, init_params=None, seed=None): # <<<<<<<<<<<<<< + * + * Recommender.__init__(self, name=name, trainable=trainable, verbose=verbose) + */ + values[15] = ((PyObject *)((PyObject *)Py_True)); + values[16] = ((PyObject *)((PyObject *)Py_False)); + values[17] = ((PyObject *)((PyObject *)Py_None)); + values[18] = ((PyObject *)((PyObject *)Py_None)); + if (__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); + switch (__pyx_nargs) { + case 19: values[18] = __Pyx_Arg_FASTCALL(__pyx_args, 18); + CYTHON_FALLTHROUGH; + case 18: values[17] = __Pyx_Arg_FASTCALL(__pyx_args, 17); + CYTHON_FALLTHROUGH; + case 17: values[16] = __Pyx_Arg_FASTCALL(__pyx_args, 16); + CYTHON_FALLTHROUGH; + case 16: values[15] = __Pyx_Arg_FASTCALL(__pyx_args, 15); CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 15: values[14] = __Pyx_Arg_FASTCALL(__pyx_args, 14); CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 14: values[13] = __Pyx_Arg_FASTCALL(__pyx_args, 13); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 13: values[12] = __Pyx_Arg_FASTCALL(__pyx_args, 12); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 12: values[11] = __Pyx_Arg_FASTCALL(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = __Pyx_Arg_FASTCALL(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shape)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_itemsize)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); __PYX_ERR(2, 122, __pyx_L3_error) + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_name); + if (value) { values[1] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_format)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); __PYX_ERR(2, 122, __pyx_L3_error) + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num_explicit_factors); + if (value) { values[2] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mode); + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num_latent_factors); if (value) { values[3] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_allocate_buffer); + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num_most_cared_aspects); if (value) { values[4] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rating_scale); + if (value) { values[5] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_alpha); + if (value) { values[6] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lambda_x); + if (value) { values[7] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lambda_y); + if (value) { values[8] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lambda_u); + if (value) { values[9] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lambda_h); + if (value) { values[10] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lambda_v); + if (value) { values[11] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_use_item_aspect_popularity); + if (value) { values[12] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_iter); + if (value) { values[13] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num_threads); + if (value) { values[14] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 15: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_trainable); + if (value) { values[15] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 16: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_verbose); + if (value) { values[16] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 17: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_init_params); + if (value) { values[17] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 18: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seed); + if (value) { values[18] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(2, 122, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 129, __pyx_L3_error) } } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + switch (__pyx_nargs) { + case 19: values[18] = __Pyx_Arg_FASTCALL(__pyx_args, 18); + CYTHON_FALLTHROUGH; + case 18: values[17] = __Pyx_Arg_FASTCALL(__pyx_args, 17); + CYTHON_FALLTHROUGH; + case 17: values[16] = __Pyx_Arg_FASTCALL(__pyx_args, 16); + CYTHON_FALLTHROUGH; + case 16: values[15] = __Pyx_Arg_FASTCALL(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = __Pyx_Arg_FASTCALL(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = __Pyx_Arg_FASTCALL(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = __Pyx_Arg_FASTCALL(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = __Pyx_Arg_FASTCALL(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = __Pyx_Arg_FASTCALL(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9); CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } - __pyx_v_shape = ((PyObject*)values[0]); - __pyx_v_itemsize = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_itemsize == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 122, __pyx_L3_error) - __pyx_v_format = values[2]; - __pyx_v_mode = values[3]; - if (values[4]) { - __pyx_v_allocate_buffer = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_allocate_buffer == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 123, __pyx_L3_error) - } else { - - /* "View.MemoryView":123 - * - * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, - * mode="c", bint allocate_buffer=True): # <<<<<<<<<<<<<< - * - * cdef int idx - */ - __pyx_v_allocate_buffer = ((int)1); - } + __pyx_v_self = values[0]; + __pyx_v_name = values[1]; + __pyx_v_num_explicit_factors = values[2]; + __pyx_v_num_latent_factors = values[3]; + __pyx_v_num_most_cared_aspects = values[4]; + __pyx_v_rating_scale = values[5]; + __pyx_v_alpha = values[6]; + __pyx_v_lambda_x = values[7]; + __pyx_v_lambda_y = values[8]; + __pyx_v_lambda_u = values[9]; + __pyx_v_lambda_h = values[10]; + __pyx_v_lambda_v = values[11]; + __pyx_v_use_item_aspect_popularity = values[12]; + __pyx_v_max_iter = values[13]; + __pyx_v_num_threads = values[14]; + __pyx_v_trainable = values[15]; + __pyx_v_verbose = values[16]; + __pyx_v_init_params = values[17]; + __pyx_v_seed = values[18]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 122, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 19, __pyx_nargs); __PYX_ERR(0, 129, __pyx_L3_error) __pyx_L3_error:; - __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); - return -1; + return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shape), (&PyTuple_Type), 1, "shape", 1))) __PYX_ERR(2, 122, __pyx_L1_error) - if (unlikely(((PyObject *)__pyx_v_format) == Py_None)) { - PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "format"); __PYX_ERR(2, 122, __pyx_L1_error) - } - __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v_shape, __pyx_v_itemsize, __pyx_v_format, __pyx_v_mode, __pyx_v_allocate_buffer); + __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM___init__(__pyx_self, __pyx_v_self, __pyx_v_name, __pyx_v_num_explicit_factors, __pyx_v_num_latent_factors, __pyx_v_num_most_cared_aspects, __pyx_v_rating_scale, __pyx_v_alpha, __pyx_v_lambda_x, __pyx_v_lambda_y, __pyx_v_lambda_u, __pyx_v_lambda_h, __pyx_v_lambda_v, __pyx_v_use_item_aspect_popularity, __pyx_v_max_iter, __pyx_v_num_threads, __pyx_v_trainable, __pyx_v_verbose, __pyx_v_init_params, __pyx_v_seed); - /* "View.MemoryView":122 - * cdef bint dtype_is_object - * - * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< - * mode="c", bint allocate_buffer=True): + /* "cornac/models/efm/recom_efm.pyx":129 + * """ * + * def __init__(self, name="EFM", # <<<<<<<<<<<<<< + * num_explicit_factors=40, num_latent_factors=60, num_most_cared_aspects=15, + * rating_scale=5.0, alpha=0.85, */ /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = -1; - __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer) { - int __pyx_v_idx; - Py_ssize_t __pyx_v_i; - Py_ssize_t __pyx_v_dim; - PyObject **__pyx_v_p; - char __pyx_v_order; - int __pyx_r; +static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_num_explicit_factors, PyObject *__pyx_v_num_latent_factors, PyObject *__pyx_v_num_most_cared_aspects, PyObject *__pyx_v_rating_scale, PyObject *__pyx_v_alpha, PyObject *__pyx_v_lambda_x, PyObject *__pyx_v_lambda_y, PyObject *__pyx_v_lambda_u, PyObject *__pyx_v_lambda_h, PyObject *__pyx_v_lambda_v, PyObject *__pyx_v_use_item_aspect_popularity, PyObject *__pyx_v_max_iter, PyObject *__pyx_v_num_threads, PyObject *__pyx_v_trainable, PyObject *__pyx_v_verbose, PyObject *__pyx_v_init_params, PyObject *__pyx_v_seed) { + PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - int __pyx_t_2; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - char *__pyx_t_7; - int __pyx_t_8; - Py_ssize_t __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - Py_ssize_t __pyx_t_11; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_t_7; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__cinit__", 0); - __Pyx_INCREF(__pyx_v_format); - - /* "View.MemoryView":129 - * cdef PyObject **p - * - * self.ndim = len(shape) # <<<<<<<<<<<<<< - * self.itemsize = itemsize - * - */ - if (unlikely(__pyx_v_shape == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(2, 129, __pyx_L1_error) - } - __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(2, 129, __pyx_L1_error) - __pyx_v_self->ndim = ((int)__pyx_t_1); - - /* "View.MemoryView":130 - * - * self.ndim = len(shape) - * self.itemsize = itemsize # <<<<<<<<<<<<<< - * - * if not self.ndim: - */ - __pyx_v_self->itemsize = __pyx_v_itemsize; - - /* "View.MemoryView":132 - * self.itemsize = itemsize - * - * if not self.ndim: # <<<<<<<<<<<<<< - * raise ValueError("Empty shape tuple for cython.array") - * - */ - __pyx_t_2 = ((!(__pyx_v_self->ndim != 0)) != 0); - if (unlikely(__pyx_t_2)) { - - /* "View.MemoryView":133 - * - * if not self.ndim: - * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< - * - * if itemsize <= 0: - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 133, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(2, 133, __pyx_L1_error) - - /* "View.MemoryView":132 - * self.itemsize = itemsize - * - * if not self.ndim: # <<<<<<<<<<<<<< - * raise ValueError("Empty shape tuple for cython.array") - * - */ - } - - /* "View.MemoryView":135 - * raise ValueError("Empty shape tuple for cython.array") - * - * if itemsize <= 0: # <<<<<<<<<<<<<< - * raise ValueError("itemsize <= 0 for cython.array") - * - */ - __pyx_t_2 = ((__pyx_v_itemsize <= 0) != 0); - if (unlikely(__pyx_t_2)) { - - /* "View.MemoryView":136 - * - * if itemsize <= 0: - * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< - * - * if not isinstance(format, bytes): - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 136, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(2, 136, __pyx_L1_error) - - /* "View.MemoryView":135 - * raise ValueError("Empty shape tuple for cython.array") - * - * if itemsize <= 0: # <<<<<<<<<<<<<< - * raise ValueError("itemsize <= 0 for cython.array") - * - */ - } - - /* "View.MemoryView":138 - * raise ValueError("itemsize <= 0 for cython.array") - * - * if not isinstance(format, bytes): # <<<<<<<<<<<<<< - * format = format.encode('ASCII') - * self._format = format # keep a reference to the byte string - */ - __pyx_t_2 = PyBytes_Check(__pyx_v_format); - __pyx_t_4 = ((!(__pyx_t_2 != 0)) != 0); - if (__pyx_t_4) { - - /* "View.MemoryView":139 - * - * if not isinstance(format, bytes): - * format = format.encode('ASCII') # <<<<<<<<<<<<<< - * self._format = format # keep a reference to the byte string - * self.format = self._format - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_format, __pyx_n_s_encode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 139, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - } - } - __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_n_s_ASCII) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_n_s_ASCII); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 139, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_3); - __pyx_t_3 = 0; - - /* "View.MemoryView":138 - * raise ValueError("itemsize <= 0 for cython.array") - * - * if not isinstance(format, bytes): # <<<<<<<<<<<<<< - * format = format.encode('ASCII') - * self._format = format # keep a reference to the byte string - */ - } - - /* "View.MemoryView":140 - * if not isinstance(format, bytes): - * format = format.encode('ASCII') - * self._format = format # keep a reference to the byte string # <<<<<<<<<<<<<< - * self.format = self._format - * - */ - if (!(likely(PyBytes_CheckExact(__pyx_v_format))||((__pyx_v_format) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_format)->tp_name), 0))) __PYX_ERR(2, 140, __pyx_L1_error) - __pyx_t_3 = __pyx_v_format; - __Pyx_INCREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_v_self->_format); - __Pyx_DECREF(__pyx_v_self->_format); - __pyx_v_self->_format = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "View.MemoryView":141 - * format = format.encode('ASCII') - * self._format = format # keep a reference to the byte string - * self.format = self._format # <<<<<<<<<<<<<< - * - * - */ - if (unlikely(__pyx_v_self->_format == Py_None)) { - PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found"); - __PYX_ERR(2, 141, __pyx_L1_error) - } - __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->_format); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(2, 141, __pyx_L1_error) - __pyx_v_self->format = __pyx_t_7; - - /* "View.MemoryView":144 - * - * - * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) # <<<<<<<<<<<<<< - * self._strides = self._shape + self.ndim - * - */ - __pyx_v_self->_shape = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * __pyx_v_self->ndim) * 2))); - - /* "View.MemoryView":145 - * - * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) - * self._strides = self._shape + self.ndim # <<<<<<<<<<<<<< - * - * if not self._shape: - */ - __pyx_v_self->_strides = (__pyx_v_self->_shape + __pyx_v_self->ndim); - - /* "View.MemoryView":147 - * self._strides = self._shape + self.ndim - * - * if not self._shape: # <<<<<<<<<<<<<< - * raise MemoryError("unable to allocate shape and strides.") - * - */ - __pyx_t_4 = ((!(__pyx_v_self->_shape != 0)) != 0); - if (unlikely(__pyx_t_4)) { - - /* "View.MemoryView":148 - * - * if not self._shape: - * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 148, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(2, 148, __pyx_L1_error) - - /* "View.MemoryView":147 - * self._strides = self._shape + self.ndim - * - * if not self._shape: # <<<<<<<<<<<<<< - * raise MemoryError("unable to allocate shape and strides.") - * - */ - } - - /* "View.MemoryView":151 - * - * - * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< - * if dim <= 0: - * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) - */ - __pyx_t_8 = 0; - __pyx_t_3 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_3); __pyx_t_1 = 0; - for (;;) { - if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely(0 < 0)) __PYX_ERR(2, 151, __pyx_L1_error) - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 151, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 151, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_dim = __pyx_t_9; - __pyx_v_idx = __pyx_t_8; - __pyx_t_8 = (__pyx_t_8 + 1); - - /* "View.MemoryView":152 - * - * for idx, dim in enumerate(shape): - * if dim <= 0: # <<<<<<<<<<<<<< - * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) - * self._shape[idx] = dim - */ - __pyx_t_4 = ((__pyx_v_dim <= 0) != 0); - if (unlikely(__pyx_t_4)) { - - /* "View.MemoryView":153 - * for idx, dim in enumerate(shape): - * if dim <= 0: - * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) # <<<<<<<<<<<<<< - * self._shape[idx] = dim - * - */ - __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_idx); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 153, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 153, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 153, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_6); - __pyx_t_5 = 0; - __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 153, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 153, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_Raise(__pyx_t_10, 0, 0, 0); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __PYX_ERR(2, 153, __pyx_L1_error) + __Pyx_RefNannySetupContext("__init__", 0); - /* "View.MemoryView":152 + /* "cornac/models/efm/recom_efm.pyx":136 + * num_threads=0, trainable=True, verbose=False, init_params=None, seed=None): * - * for idx, dim in enumerate(shape): - * if dim <= 0: # <<<<<<<<<<<<<< - * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) - * self._shape[idx] = dim + * Recommender.__init__(self, name=name, trainable=trainable, verbose=verbose) # <<<<<<<<<<<<<< + * self.num_explicit_factors = num_explicit_factors + * self.num_latent_factors = num_latent_factors */ - } + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Recommender); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_self); + __Pyx_GIVEREF(__pyx_v_self); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); + __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_name, __pyx_v_name) < 0) __PYX_ERR(0, 136, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_trainable, __pyx_v_trainable) < 0) __PYX_ERR(0, 136, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_verbose, __pyx_v_verbose) < 0) __PYX_ERR(0, 136, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "View.MemoryView":154 - * if dim <= 0: - * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) - * self._shape[idx] = dim # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":137 * - * cdef char order + * Recommender.__init__(self, name=name, trainable=trainable, verbose=verbose) + * self.num_explicit_factors = num_explicit_factors # <<<<<<<<<<<<<< + * self.num_latent_factors = num_latent_factors + * self.num_most_cared_aspects = num_most_cared_aspects */ - (__pyx_v_self->_shape[__pyx_v_idx]) = __pyx_v_dim; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_num_explicit_factors, __pyx_v_num_explicit_factors) < 0) __PYX_ERR(0, 137, __pyx_L1_error) - /* "View.MemoryView":151 - * - * - * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< - * if dim <= 0: - * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + /* "cornac/models/efm/recom_efm.pyx":138 + * Recommender.__init__(self, name=name, trainable=trainable, verbose=verbose) + * self.num_explicit_factors = num_explicit_factors + * self.num_latent_factors = num_latent_factors # <<<<<<<<<<<<<< + * self.num_most_cared_aspects = num_most_cared_aspects + * self.rating_scale = rating_scale */ - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_num_latent_factors, __pyx_v_num_latent_factors) < 0) __PYX_ERR(0, 138, __pyx_L1_error) - /* "View.MemoryView":157 - * - * cdef char order - * if mode == 'fortran': # <<<<<<<<<<<<<< - * order = b'F' - * self.mode = u'fortran' + /* "cornac/models/efm/recom_efm.pyx":139 + * self.num_explicit_factors = num_explicit_factors + * self.num_latent_factors = num_latent_factors + * self.num_most_cared_aspects = num_most_cared_aspects # <<<<<<<<<<<<<< + * self.rating_scale = rating_scale + * self.alpha = alpha */ - __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_fortran, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(2, 157, __pyx_L1_error) - if (__pyx_t_4) { + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_num_most_cared_aspects, __pyx_v_num_most_cared_aspects) < 0) __PYX_ERR(0, 139, __pyx_L1_error) - /* "View.MemoryView":158 - * cdef char order - * if mode == 'fortran': - * order = b'F' # <<<<<<<<<<<<<< - * self.mode = u'fortran' - * elif mode == 'c': + /* "cornac/models/efm/recom_efm.pyx":140 + * self.num_latent_factors = num_latent_factors + * self.num_most_cared_aspects = num_most_cared_aspects + * self.rating_scale = rating_scale # <<<<<<<<<<<<<< + * self.alpha = alpha + * self.lambda_x = lambda_x */ - __pyx_v_order = 'F'; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_rating_scale, __pyx_v_rating_scale) < 0) __PYX_ERR(0, 140, __pyx_L1_error) - /* "View.MemoryView":159 - * if mode == 'fortran': - * order = b'F' - * self.mode = u'fortran' # <<<<<<<<<<<<<< - * elif mode == 'c': - * order = b'C' + /* "cornac/models/efm/recom_efm.pyx":141 + * self.num_most_cared_aspects = num_most_cared_aspects + * self.rating_scale = rating_scale + * self.alpha = alpha # <<<<<<<<<<<<<< + * self.lambda_x = lambda_x + * self.lambda_y = lambda_y */ - __Pyx_INCREF(__pyx_n_u_fortran); - __Pyx_GIVEREF(__pyx_n_u_fortran); - __Pyx_GOTREF(__pyx_v_self->mode); - __Pyx_DECREF(__pyx_v_self->mode); - __pyx_v_self->mode = __pyx_n_u_fortran; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_alpha, __pyx_v_alpha) < 0) __PYX_ERR(0, 141, __pyx_L1_error) - /* "View.MemoryView":157 - * - * cdef char order - * if mode == 'fortran': # <<<<<<<<<<<<<< - * order = b'F' - * self.mode = u'fortran' + /* "cornac/models/efm/recom_efm.pyx":142 + * self.rating_scale = rating_scale + * self.alpha = alpha + * self.lambda_x = lambda_x # <<<<<<<<<<<<<< + * self.lambda_y = lambda_y + * self.lambda_u = lambda_u */ - goto __pyx_L10; - } + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lambda_x, __pyx_v_lambda_x) < 0) __PYX_ERR(0, 142, __pyx_L1_error) - /* "View.MemoryView":160 - * order = b'F' - * self.mode = u'fortran' - * elif mode == 'c': # <<<<<<<<<<<<<< - * order = b'C' - * self.mode = u'c' + /* "cornac/models/efm/recom_efm.pyx":143 + * self.alpha = alpha + * self.lambda_x = lambda_x + * self.lambda_y = lambda_y # <<<<<<<<<<<<<< + * self.lambda_u = lambda_u + * self.lambda_h = lambda_h */ - __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(2, 160, __pyx_L1_error) - if (likely(__pyx_t_4)) { + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lambda_y, __pyx_v_lambda_y) < 0) __PYX_ERR(0, 143, __pyx_L1_error) - /* "View.MemoryView":161 - * self.mode = u'fortran' - * elif mode == 'c': - * order = b'C' # <<<<<<<<<<<<<< - * self.mode = u'c' - * else: + /* "cornac/models/efm/recom_efm.pyx":144 + * self.lambda_x = lambda_x + * self.lambda_y = lambda_y + * self.lambda_u = lambda_u # <<<<<<<<<<<<<< + * self.lambda_h = lambda_h + * self.lambda_v = lambda_v */ - __pyx_v_order = 'C'; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lambda_u, __pyx_v_lambda_u) < 0) __PYX_ERR(0, 144, __pyx_L1_error) - /* "View.MemoryView":162 - * elif mode == 'c': - * order = b'C' - * self.mode = u'c' # <<<<<<<<<<<<<< - * else: - * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) + /* "cornac/models/efm/recom_efm.pyx":145 + * self.lambda_y = lambda_y + * self.lambda_u = lambda_u + * self.lambda_h = lambda_h # <<<<<<<<<<<<<< + * self.lambda_v = lambda_v + * self.use_item_aspect_popularity = use_item_aspect_popularity */ - __Pyx_INCREF(__pyx_n_u_c); - __Pyx_GIVEREF(__pyx_n_u_c); - __Pyx_GOTREF(__pyx_v_self->mode); - __Pyx_DECREF(__pyx_v_self->mode); - __pyx_v_self->mode = __pyx_n_u_c; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lambda_h, __pyx_v_lambda_h) < 0) __PYX_ERR(0, 145, __pyx_L1_error) - /* "View.MemoryView":160 - * order = b'F' - * self.mode = u'fortran' - * elif mode == 'c': # <<<<<<<<<<<<<< - * order = b'C' - * self.mode = u'c' + /* "cornac/models/efm/recom_efm.pyx":146 + * self.lambda_u = lambda_u + * self.lambda_h = lambda_h + * self.lambda_v = lambda_v # <<<<<<<<<<<<<< + * self.use_item_aspect_popularity = use_item_aspect_popularity + * self.max_iter = max_iter */ - goto __pyx_L10; - } + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lambda_v, __pyx_v_lambda_v) < 0) __PYX_ERR(0, 146, __pyx_L1_error) - /* "View.MemoryView":164 - * self.mode = u'c' - * else: - * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) # <<<<<<<<<<<<<< - * - * self.len = fill_contig_strides_array(self._shape, self._strides, + /* "cornac/models/efm/recom_efm.pyx":147 + * self.lambda_h = lambda_h + * self.lambda_v = lambda_v + * self.use_item_aspect_popularity = use_item_aspect_popularity # <<<<<<<<<<<<<< + * self.max_iter = max_iter + * self.seed = seed */ - /*else*/ { - __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_v_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 164, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 164, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_10, 0, 0, 0); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __PYX_ERR(2, 164, __pyx_L1_error) - } - __pyx_L10:; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_use_item_aspect_popularity, __pyx_v_use_item_aspect_popularity) < 0) __PYX_ERR(0, 147, __pyx_L1_error) - /* "View.MemoryView":166 - * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) - * - * self.len = fill_contig_strides_array(self._shape, self._strides, # <<<<<<<<<<<<<< - * itemsize, self.ndim, order) + /* "cornac/models/efm/recom_efm.pyx":148 + * self.lambda_v = lambda_v + * self.use_item_aspect_popularity = use_item_aspect_popularity + * self.max_iter = max_iter # <<<<<<<<<<<<<< + * self.seed = seed * */ - __pyx_v_self->len = __pyx_fill_contig_strides_array(__pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_itemsize, __pyx_v_self->ndim, __pyx_v_order); + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_max_iter, __pyx_v_max_iter) < 0) __PYX_ERR(0, 148, __pyx_L1_error) - /* "View.MemoryView":169 - * itemsize, self.ndim, order) + /* "cornac/models/efm/recom_efm.pyx":149 + * self.use_item_aspect_popularity = use_item_aspect_popularity + * self.max_iter = max_iter + * self.seed = seed # <<<<<<<<<<<<<< * - * self.free_data = allocate_buffer # <<<<<<<<<<<<<< - * self.dtype_is_object = format == b'O' - * if allocate_buffer: + * if seed is not None: */ - __pyx_v_self->free_data = __pyx_v_allocate_buffer; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_seed, __pyx_v_seed) < 0) __PYX_ERR(0, 149, __pyx_L1_error) - /* "View.MemoryView":170 - * - * self.free_data = allocate_buffer - * self.dtype_is_object = format == b'O' # <<<<<<<<<<<<<< - * if allocate_buffer: + /* "cornac/models/efm/recom_efm.pyx":151 + * self.seed = seed * + * if seed is not None: # <<<<<<<<<<<<<< + * self.num_threads = 1 + * elif num_threads > 0 and num_threads < multiprocessing.cpu_count(): */ - __pyx_t_10 = PyObject_RichCompare(__pyx_v_format, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 170, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 170, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_v_self->dtype_is_object = __pyx_t_4; + __pyx_t_5 = (__pyx_v_seed != Py_None); + if (__pyx_t_5) { - /* "View.MemoryView":171 - * self.free_data = allocate_buffer - * self.dtype_is_object = format == b'O' - * if allocate_buffer: # <<<<<<<<<<<<<< - * + /* "cornac/models/efm/recom_efm.pyx":152 * + * if seed is not None: + * self.num_threads = 1 # <<<<<<<<<<<<<< + * elif num_threads > 0 and num_threads < multiprocessing.cpu_count(): + * self.num_threads = num_threads */ - __pyx_t_4 = (__pyx_v_allocate_buffer != 0); - if (__pyx_t_4) { + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_num_threads, __pyx_int_1) < 0) __PYX_ERR(0, 152, __pyx_L1_error) - /* "View.MemoryView":174 - * + /* "cornac/models/efm/recom_efm.pyx":151 + * self.seed = seed * - * self.data = malloc(self.len) # <<<<<<<<<<<<<< - * if not self.data: - * raise MemoryError("unable to allocate array data.") + * if seed is not None: # <<<<<<<<<<<<<< + * self.num_threads = 1 + * elif num_threads > 0 and num_threads < multiprocessing.cpu_count(): */ - __pyx_v_self->data = ((char *)malloc(__pyx_v_self->len)); + goto __pyx_L3; + } - /* "View.MemoryView":175 - * - * self.data = malloc(self.len) - * if not self.data: # <<<<<<<<<<<<<< - * raise MemoryError("unable to allocate array data.") - * + /* "cornac/models/efm/recom_efm.pyx":153 + * if seed is not None: + * self.num_threads = 1 + * elif num_threads > 0 and num_threads < multiprocessing.cpu_count(): # <<<<<<<<<<<<<< + * self.num_threads = num_threads + * else: */ - __pyx_t_4 = ((!(__pyx_v_self->data != 0)) != 0); - if (unlikely(__pyx_t_4)) { + __pyx_t_4 = PyObject_RichCompare(__pyx_v_num_threads, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 153, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + } else { + __pyx_t_5 = __pyx_t_6; + goto __pyx_L4_bool_binop_done; + } + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_multiprocessing); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_cpu_count); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_7 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_3, }; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = PyObject_RichCompare(__pyx_v_num_threads, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = __pyx_t_6; + __pyx_L4_bool_binop_done:; + if (__pyx_t_5) { - /* "View.MemoryView":176 - * self.data = malloc(self.len) - * if not self.data: - * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< - * - * if self.dtype_is_object: + /* "cornac/models/efm/recom_efm.pyx":154 + * self.num_threads = 1 + * elif num_threads > 0 and num_threads < multiprocessing.cpu_count(): + * self.num_threads = num_threads # <<<<<<<<<<<<<< + * else: + * self.num_threads = multiprocessing.cpu_count() */ - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_Raise(__pyx_t_10, 0, 0, 0); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __PYX_ERR(2, 176, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_num_threads, __pyx_v_num_threads) < 0) __PYX_ERR(0, 154, __pyx_L1_error) - /* "View.MemoryView":175 - * - * self.data = malloc(self.len) - * if not self.data: # <<<<<<<<<<<<<< - * raise MemoryError("unable to allocate array data.") - * + /* "cornac/models/efm/recom_efm.pyx":153 + * if seed is not None: + * self.num_threads = 1 + * elif num_threads > 0 and num_threads < multiprocessing.cpu_count(): # <<<<<<<<<<<<<< + * self.num_threads = num_threads + * else: */ - } + goto __pyx_L3; + } - /* "View.MemoryView":178 - * raise MemoryError("unable to allocate array data.") + /* "cornac/models/efm/recom_efm.pyx":156 + * self.num_threads = num_threads + * else: + * self.num_threads = multiprocessing.cpu_count() # <<<<<<<<<<<<<< * - * if self.dtype_is_object: # <<<<<<<<<<<<<< - * p = self.data - * for i in range(self.len / itemsize): + * # Init params if provided */ - __pyx_t_4 = (__pyx_v_self->dtype_is_object != 0); - if (__pyx_t_4) { + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_multiprocessing); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 156, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_cpu_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 156, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_7 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_4, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 156, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_num_threads, __pyx_t_1) < 0) __PYX_ERR(0, 156, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_L3:; - /* "View.MemoryView":179 + /* "cornac/models/efm/recom_efm.pyx":159 * - * if self.dtype_is_object: - * p = self.data # <<<<<<<<<<<<<< - * for i in range(self.len / itemsize): - * p[i] = Py_None + * # Init params if provided + * self.init_params = {} if init_params is None else init_params # <<<<<<<<<<<<<< + * self.U1 = self.init_params.get('U1', None) + * self.U2 = self.init_params.get('U2', None) */ - __pyx_v_p = ((PyObject **)__pyx_v_self->data); + __pyx_t_5 = (__pyx_v_init_params == Py_None); + if (__pyx_t_5) { + __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 159, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __pyx_t_3; + __pyx_t_3 = 0; + } else { + __Pyx_INCREF(__pyx_v_init_params); + __pyx_t_1 = __pyx_v_init_params; + } + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_init_params, __pyx_t_1) < 0) __PYX_ERR(0, 159, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":180 - * if self.dtype_is_object: - * p = self.data - * for i in range(self.len / itemsize): # <<<<<<<<<<<<<< - * p[i] = Py_None - * Py_INCREF(Py_None) + /* "cornac/models/efm/recom_efm.pyx":160 + * # Init params if provided + * self.init_params = {} if init_params is None else init_params + * self.U1 = self.init_params.get('U1', None) # <<<<<<<<<<<<<< + * self.U2 = self.init_params.get('U2', None) + * self.V = self.init_params.get('V', None) */ - if (unlikely(__pyx_v_itemsize == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); - __PYX_ERR(2, 180, __pyx_L1_error) - } - else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_self->len))) { - PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); - __PYX_ERR(2, 180, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_div_Py_ssize_t(__pyx_v_self->len, __pyx_v_itemsize); - __pyx_t_9 = __pyx_t_1; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_9; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_init_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_U1, __pyx_t_1) < 0) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":181 - * p = self.data - * for i in range(self.len / itemsize): - * p[i] = Py_None # <<<<<<<<<<<<<< - * Py_INCREF(Py_None) - * + /* "cornac/models/efm/recom_efm.pyx":161 + * self.init_params = {} if init_params is None else init_params + * self.U1 = self.init_params.get('U1', None) + * self.U2 = self.init_params.get('U2', None) # <<<<<<<<<<<<<< + * self.V = self.init_params.get('V', None) + * self.H1 = self.init_params.get('H1', None) */ - (__pyx_v_p[__pyx_v_i]) = Py_None; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_init_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_U2, __pyx_t_1) < 0) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":182 - * for i in range(self.len / itemsize): - * p[i] = Py_None - * Py_INCREF(Py_None) # <<<<<<<<<<<<<< - * - * @cname('getbuffer') + /* "cornac/models/efm/recom_efm.pyx":162 + * self.U1 = self.init_params.get('U1', None) + * self.U2 = self.init_params.get('U2', None) + * self.V = self.init_params.get('V', None) # <<<<<<<<<<<<<< + * self.H1 = self.init_params.get('H1', None) + * self.H2 = self.init_params.get('H2', None) */ - Py_INCREF(Py_None); - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_init_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_V, __pyx_t_1) < 0) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":178 - * raise MemoryError("unable to allocate array data.") + /* "cornac/models/efm/recom_efm.pyx":163 + * self.U2 = self.init_params.get('U2', None) + * self.V = self.init_params.get('V', None) + * self.H1 = self.init_params.get('H1', None) # <<<<<<<<<<<<<< + * self.H2 = self.init_params.get('H2', None) * - * if self.dtype_is_object: # <<<<<<<<<<<<<< - * p = self.data - * for i in range(self.len / itemsize): */ - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_init_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 163, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_H1, __pyx_t_1) < 0) __PYX_ERR(0, 163, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":171 - * self.free_data = allocate_buffer - * self.dtype_is_object = format == b'O' - * if allocate_buffer: # <<<<<<<<<<<<<< - * + /* "cornac/models/efm/recom_efm.pyx":164 + * self.V = self.init_params.get('V', None) + * self.H1 = self.init_params.get('H1', None) + * self.H2 = self.init_params.get('H2', None) # <<<<<<<<<<<<<< * + * def _init(self): */ - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_init_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_H2, __pyx_t_1) < 0) __PYX_ERR(0, 164, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":122 - * cdef bint dtype_is_object - * - * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< - * mode="c", bint allocate_buffer=True): + /* "cornac/models/efm/recom_efm.pyx":129 + * """ * + * def __init__(self, name="EFM", # <<<<<<<<<<<<<< + * num_explicit_factors=40, num_latent_factors=60, num_most_cared_aspects=15, + * rating_scale=5.0, alpha=0.85, */ /* function exit code */ - __pyx_r = 0; + __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_format); + __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "View.MemoryView":185 +/* "cornac/models/efm/recom_efm.pyx":166 + * self.H2 = self.init_params.get('H2', None) * - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< - * cdef int bufmode = -1 - * if self.mode == u"c": + * def _init(self): # <<<<<<<<<<<<<< + * rng = get_rng(self.seed) + * n_users, n_items = self.train_set.num_users, self.train_set.num_items */ /* Python wrapper */ -static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ -static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_r; +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_3_init(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_3_init = {"_init", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_3_init, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_3_init(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_self = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); - __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(((struct __pyx_array_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); + __Pyx_RefNannySetupContext("_init (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0}; + PyObject* values[1] = {0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 166, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_init") < 0)) __PYX_ERR(0, 166, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_self = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_init", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 166, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._init", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_2_init(__pyx_self, __pyx_v_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_v_bufmode; - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - char *__pyx_t_4; - Py_ssize_t __pyx_t_5; - int __pyx_t_6; - Py_ssize_t *__pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - if (__pyx_v_info == NULL) { - PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); - return -1; - } - __Pyx_RefNannySetupContext("__getbuffer__", 0); - __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(__pyx_v_info->obj); - - /* "View.MemoryView":186 - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): - * cdef int bufmode = -1 # <<<<<<<<<<<<<< - * if self.mode == u"c": - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - */ - __pyx_v_bufmode = -1; - - /* "View.MemoryView":187 - * def __getbuffer__(self, Py_buffer *info, int flags): - * cdef int bufmode = -1 - * if self.mode == u"c": # <<<<<<<<<<<<<< - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * elif self.mode == u"fortran": - */ - __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_c, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 187, __pyx_L1_error) - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":188 - * cdef int bufmode = -1 - * if self.mode == u"c": - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< - * elif self.mode == u"fortran": - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - */ - __pyx_v_bufmode = (PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); - - /* "View.MemoryView":187 - * def __getbuffer__(self, Py_buffer *info, int flags): - * cdef int bufmode = -1 - * if self.mode == u"c": # <<<<<<<<<<<<<< - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * elif self.mode == u"fortran": - */ - goto __pyx_L3; - } - - /* "View.MemoryView":189 - * if self.mode == u"c": - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * elif self.mode == u"fortran": # <<<<<<<<<<<<<< - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * if not (flags & bufmode): - */ - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_fortran, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 189, __pyx_L1_error) - __pyx_t_1 = (__pyx_t_2 != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":190 - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * elif self.mode == u"fortran": - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< - * if not (flags & bufmode): - * raise ValueError("Can only create a buffer that is contiguous in memory.") - */ - __pyx_v_bufmode = (PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); +static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_2_init(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { + PyObject *__pyx_v_rng = NULL; + PyObject *__pyx_v_n_users = NULL; + PyObject *__pyx_v_n_items = NULL; + PyObject *__pyx_v_n_aspects = NULL; + PyObject *__pyx_v_n_efactors = NULL; + PyObject *__pyx_v_n_lfactors = NULL; + PyObject *__pyx_v_n_factors = NULL; + PyObject *__pyx_v_high = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_init", 0); - /* "View.MemoryView":189 - * if self.mode == u"c": - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * elif self.mode == u"fortran": # <<<<<<<<<<<<<< - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * if not (flags & bufmode): + /* "cornac/models/efm/recom_efm.pyx":167 + * + * def _init(self): + * rng = get_rng(self.seed) # <<<<<<<<<<<<<< + * n_users, n_items = self.train_set.num_users, self.train_set.num_items + * n_aspects = self.train_set.sentiment.num_aspects */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_rng); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_seed); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } } - __pyx_L3:; - - /* "View.MemoryView":191 - * elif self.mode == u"fortran": - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * if not (flags & bufmode): # <<<<<<<<<<<<<< - * raise ValueError("Can only create a buffer that is contiguous in memory.") - * info.buf = self.data - */ - __pyx_t_1 = ((!((__pyx_v_flags & __pyx_v_bufmode) != 0)) != 0); - if (unlikely(__pyx_t_1)) { - - /* "View.MemoryView":192 - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * if not (flags & bufmode): - * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< - * info.buf = self.data - * info.len = self.len - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 192, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(2, 192, __pyx_L1_error) - - /* "View.MemoryView":191 - * elif self.mode == u"fortran": - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * if not (flags & bufmode): # <<<<<<<<<<<<<< - * raise ValueError("Can only create a buffer that is contiguous in memory.") - * info.buf = self.data - */ + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } + __pyx_v_rng = __pyx_t_1; + __pyx_t_1 = 0; - /* "View.MemoryView":193 - * if not (flags & bufmode): - * raise ValueError("Can only create a buffer that is contiguous in memory.") - * info.buf = self.data # <<<<<<<<<<<<<< - * info.len = self.len - * info.ndim = self.ndim - */ - __pyx_t_4 = __pyx_v_self->data; - __pyx_v_info->buf = __pyx_t_4; - - /* "View.MemoryView":194 - * raise ValueError("Can only create a buffer that is contiguous in memory.") - * info.buf = self.data - * info.len = self.len # <<<<<<<<<<<<<< - * info.ndim = self.ndim - * info.shape = self._shape - */ - __pyx_t_5 = __pyx_v_self->len; - __pyx_v_info->len = __pyx_t_5; - - /* "View.MemoryView":195 - * info.buf = self.data - * info.len = self.len - * info.ndim = self.ndim # <<<<<<<<<<<<<< - * info.shape = self._shape - * info.strides = self._strides + /* "cornac/models/efm/recom_efm.pyx":168 + * def _init(self): + * rng = get_rng(self.seed) + * n_users, n_items = self.train_set.num_users, self.train_set.num_items # <<<<<<<<<<<<<< + * n_aspects = self.train_set.sentiment.num_aspects + * n_efactors = self.num_explicit_factors */ - __pyx_t_6 = __pyx_v_self->ndim; - __pyx_v_info->ndim = __pyx_t_6; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_n_users = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_n_items = __pyx_t_3; + __pyx_t_3 = 0; - /* "View.MemoryView":196 - * info.len = self.len - * info.ndim = self.ndim - * info.shape = self._shape # <<<<<<<<<<<<<< - * info.strides = self._strides - * info.suboffsets = NULL + /* "cornac/models/efm/recom_efm.pyx":169 + * rng = get_rng(self.seed) + * n_users, n_items = self.train_set.num_users, self.train_set.num_items + * n_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< + * n_efactors = self.num_explicit_factors + * n_lfactors = self.num_latent_factors */ - __pyx_t_7 = __pyx_v_self->_shape; - __pyx_v_info->shape = __pyx_t_7; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 169, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 169, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 169, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_n_aspects = __pyx_t_3; + __pyx_t_3 = 0; - /* "View.MemoryView":197 - * info.ndim = self.ndim - * info.shape = self._shape - * info.strides = self._strides # <<<<<<<<<<<<<< - * info.suboffsets = NULL - * info.itemsize = self.itemsize + /* "cornac/models/efm/recom_efm.pyx":170 + * n_users, n_items = self.train_set.num_users, self.train_set.num_items + * n_aspects = self.train_set.sentiment.num_aspects + * n_efactors = self.num_explicit_factors # <<<<<<<<<<<<<< + * n_lfactors = self.num_latent_factors + * n_factors = n_efactors + n_lfactors */ - __pyx_t_7 = __pyx_v_self->_strides; - __pyx_v_info->strides = __pyx_t_7; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_explicit_factors); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_n_efactors = __pyx_t_3; + __pyx_t_3 = 0; - /* "View.MemoryView":198 - * info.shape = self._shape - * info.strides = self._strides - * info.suboffsets = NULL # <<<<<<<<<<<<<< - * info.itemsize = self.itemsize - * info.readonly = 0 + /* "cornac/models/efm/recom_efm.pyx":171 + * n_aspects = self.train_set.sentiment.num_aspects + * n_efactors = self.num_explicit_factors + * n_lfactors = self.num_latent_factors # <<<<<<<<<<<<<< + * n_factors = n_efactors + n_lfactors + * high = np.sqrt(self.rating_scale / n_factors) */ - __pyx_v_info->suboffsets = NULL; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_latent_factors); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_n_lfactors = __pyx_t_3; + __pyx_t_3 = 0; - /* "View.MemoryView":199 - * info.strides = self._strides - * info.suboffsets = NULL - * info.itemsize = self.itemsize # <<<<<<<<<<<<<< - * info.readonly = 0 + /* "cornac/models/efm/recom_efm.pyx":172 + * n_efactors = self.num_explicit_factors + * n_lfactors = self.num_latent_factors + * n_factors = n_efactors + n_lfactors # <<<<<<<<<<<<<< + * high = np.sqrt(self.rating_scale / n_factors) * */ - __pyx_t_5 = __pyx_v_self->itemsize; - __pyx_v_info->itemsize = __pyx_t_5; + __pyx_t_3 = PyNumber_Add(__pyx_v_n_efactors, __pyx_v_n_lfactors); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_n_factors = __pyx_t_3; + __pyx_t_3 = 0; - /* "View.MemoryView":200 - * info.suboffsets = NULL - * info.itemsize = self.itemsize - * info.readonly = 0 # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":173 + * n_lfactors = self.num_latent_factors + * n_factors = n_efactors + n_lfactors + * high = np.sqrt(self.rating_scale / n_factors) # <<<<<<<<<<<<<< * - * if flags & PyBUF_FORMAT: + * if self.U1 is None: */ - __pyx_v_info->readonly = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rating_scale); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_v_n_factors); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_high = __pyx_t_3; + __pyx_t_3 = 0; - /* "View.MemoryView":202 - * info.readonly = 0 + /* "cornac/models/efm/recom_efm.pyx":175 + * high = np.sqrt(self.rating_scale / n_factors) * - * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< - * info.format = self.format - * else: + * if self.U1 is None: # <<<<<<<<<<<<<< + * self.U1 = uniform((n_users, n_efactors), high=high, random_state=rng) + * if self.U2 is None: */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); - if (__pyx_t_1) { + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = (__pyx_t_3 == Py_None); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { - /* "View.MemoryView":203 + /* "cornac/models/efm/recom_efm.pyx":176 * - * if flags & PyBUF_FORMAT: - * info.format = self.format # <<<<<<<<<<<<<< - * else: - * info.format = NULL + * if self.U1 is None: + * self.U1 = uniform((n_users, n_efactors), high=high, random_state=rng) # <<<<<<<<<<<<<< + * if self.U2 is None: + * self.U2 = uniform((n_items, n_efactors), high=high, random_state=rng) */ - __pyx_t_4 = __pyx_v_self->format; - __pyx_v_info->format = __pyx_t_4; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_uniform); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_n_users); + __Pyx_GIVEREF(__pyx_v_n_users); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_n_users); + __Pyx_INCREF(__pyx_v_n_efactors); + __Pyx_GIVEREF(__pyx_v_n_efactors); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_n_efactors); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_high, __pyx_v_high) < 0) __PYX_ERR(0, 176, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_random_state, __pyx_v_rng) < 0) __PYX_ERR(0, 176, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_U1, __pyx_t_2) < 0) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":202 - * info.readonly = 0 + /* "cornac/models/efm/recom_efm.pyx":175 + * high = np.sqrt(self.rating_scale / n_factors) * - * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< - * info.format = self.format - * else: + * if self.U1 is None: # <<<<<<<<<<<<<< + * self.U1 = uniform((n_users, n_efactors), high=high, random_state=rng) + * if self.U2 is None: */ - goto __pyx_L5; } - /* "View.MemoryView":205 - * info.format = self.format - * else: - * info.format = NULL # <<<<<<<<<<<<<< - * - * info.obj = self + /* "cornac/models/efm/recom_efm.pyx":177 + * if self.U1 is None: + * self.U1 = uniform((n_users, n_efactors), high=high, random_state=rng) + * if self.U2 is None: # <<<<<<<<<<<<<< + * self.U2 = uniform((n_items, n_efactors), high=high, random_state=rng) + * if self.V is None: */ - /*else*/ { - __pyx_v_info->format = NULL; - } - __pyx_L5:; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = (__pyx_t_2 == Py_None); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_6) { - /* "View.MemoryView":207 - * info.format = NULL - * - * info.obj = self # <<<<<<<<<<<<<< - * - * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + /* "cornac/models/efm/recom_efm.pyx":178 + * self.U1 = uniform((n_users, n_efactors), high=high, random_state=rng) + * if self.U2 is None: + * self.U2 = uniform((n_items, n_efactors), high=high, random_state=rng) # <<<<<<<<<<<<<< + * if self.V is None: + * self.V = uniform((n_aspects, n_efactors), high=high, random_state=rng) */ - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); - __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_uniform); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_n_items); + __Pyx_GIVEREF(__pyx_v_n_items); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_n_items); + __Pyx_INCREF(__pyx_v_n_efactors); + __Pyx_GIVEREF(__pyx_v_n_efactors); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_n_efactors); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_high, __pyx_v_high) < 0) __PYX_ERR(0, 178, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_random_state, __pyx_v_rng) < 0) __PYX_ERR(0, 178, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_U2, __pyx_t_3) < 0) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "View.MemoryView":185 - * - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< - * cdef int bufmode = -1 - * if self.mode == u"c": + /* "cornac/models/efm/recom_efm.pyx":177 + * if self.U1 is None: + * self.U1 = uniform((n_users, n_efactors), high=high, random_state=rng) + * if self.U2 is None: # <<<<<<<<<<<<<< + * self.U2 = uniform((n_items, n_efactors), high=high, random_state=rng) + * if self.V is None: */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.array.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - if (__pyx_v_info->obj != NULL) { - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; } - goto __pyx_L2; - __pyx_L0:; - if (__pyx_v_info->obj == Py_None) { - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; - } - __pyx_L2:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} -/* "View.MemoryView":211 - * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") - * - * def __dealloc__(array self): # <<<<<<<<<<<<<< - * if self.callback_free_data != NULL: - * self.callback_free_data(self.data) + /* "cornac/models/efm/recom_efm.pyx":179 + * if self.U2 is None: + * self.U2 = uniform((n_items, n_efactors), high=high, random_state=rng) + * if self.V is None: # <<<<<<<<<<<<<< + * self.V = uniform((n_aspects, n_efactors), high=high, random_state=rng) + * if self.H1 is None: */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_V); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = (__pyx_t_3 == Py_None); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { -/* Python wrapper */ -static void __pyx_array___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_array___dealloc__(PyObject *__pyx_v_self) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); - __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(((struct __pyx_array_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self) { - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("__dealloc__", 0); - - /* "View.MemoryView":212 - * - * def __dealloc__(array self): - * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< - * self.callback_free_data(self.data) - * elif self.free_data: + /* "cornac/models/efm/recom_efm.pyx":180 + * self.U2 = uniform((n_items, n_efactors), high=high, random_state=rng) + * if self.V is None: + * self.V = uniform((n_aspects, n_efactors), high=high, random_state=rng) # <<<<<<<<<<<<<< + * if self.H1 is None: + * self.H1 = uniform((n_users, n_lfactors), high=high, random_state=rng) */ - __pyx_t_1 = ((__pyx_v_self->callback_free_data != NULL) != 0); - if (__pyx_t_1) { + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_uniform); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_n_aspects); + __Pyx_GIVEREF(__pyx_v_n_aspects); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_n_aspects); + __Pyx_INCREF(__pyx_v_n_efactors); + __Pyx_GIVEREF(__pyx_v_n_efactors); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_n_efactors); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_high, __pyx_v_high) < 0) __PYX_ERR(0, 180, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_random_state, __pyx_v_rng) < 0) __PYX_ERR(0, 180, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_V, __pyx_t_2) < 0) __PYX_ERR(0, 180, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":213 - * def __dealloc__(array self): - * if self.callback_free_data != NULL: - * self.callback_free_data(self.data) # <<<<<<<<<<<<<< - * elif self.free_data: - * if self.dtype_is_object: + /* "cornac/models/efm/recom_efm.pyx":179 + * if self.U2 is None: + * self.U2 = uniform((n_items, n_efactors), high=high, random_state=rng) + * if self.V is None: # <<<<<<<<<<<<<< + * self.V = uniform((n_aspects, n_efactors), high=high, random_state=rng) + * if self.H1 is None: */ - __pyx_v_self->callback_free_data(__pyx_v_self->data); + } - /* "View.MemoryView":212 - * - * def __dealloc__(array self): - * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< - * self.callback_free_data(self.data) - * elif self.free_data: + /* "cornac/models/efm/recom_efm.pyx":181 + * if self.V is None: + * self.V = uniform((n_aspects, n_efactors), high=high, random_state=rng) + * if self.H1 is None: # <<<<<<<<<<<<<< + * self.H1 = uniform((n_users, n_lfactors), high=high, random_state=rng) + * if self.H2 is None: */ - goto __pyx_L3; - } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_H1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 181, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = (__pyx_t_2 == Py_None); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_6) { - /* "View.MemoryView":214 - * if self.callback_free_data != NULL: - * self.callback_free_data(self.data) - * elif self.free_data: # <<<<<<<<<<<<<< - * if self.dtype_is_object: - * refcount_objects_in_slice(self.data, self._shape, + /* "cornac/models/efm/recom_efm.pyx":182 + * self.V = uniform((n_aspects, n_efactors), high=high, random_state=rng) + * if self.H1 is None: + * self.H1 = uniform((n_users, n_lfactors), high=high, random_state=rng) # <<<<<<<<<<<<<< + * if self.H2 is None: + * self.H2 = uniform((n_items, n_lfactors), high=high, random_state=rng) */ - __pyx_t_1 = (__pyx_v_self->free_data != 0); - if (__pyx_t_1) { + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_uniform); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 182, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 182, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_n_users); + __Pyx_GIVEREF(__pyx_v_n_users); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_n_users); + __Pyx_INCREF(__pyx_v_n_lfactors); + __Pyx_GIVEREF(__pyx_v_n_lfactors); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_n_lfactors); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 182, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 182, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_high, __pyx_v_high) < 0) __PYX_ERR(0, 182, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_random_state, __pyx_v_rng) < 0) __PYX_ERR(0, 182, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 182, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_H1, __pyx_t_3) < 0) __PYX_ERR(0, 182, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "View.MemoryView":215 - * self.callback_free_data(self.data) - * elif self.free_data: - * if self.dtype_is_object: # <<<<<<<<<<<<<< - * refcount_objects_in_slice(self.data, self._shape, - * self._strides, self.ndim, False) + /* "cornac/models/efm/recom_efm.pyx":181 + * if self.V is None: + * self.V = uniform((n_aspects, n_efactors), high=high, random_state=rng) + * if self.H1 is None: # <<<<<<<<<<<<<< + * self.H1 = uniform((n_users, n_lfactors), high=high, random_state=rng) + * if self.H2 is None: */ - __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0); - if (__pyx_t_1) { + } - /* "View.MemoryView":216 - * elif self.free_data: - * if self.dtype_is_object: - * refcount_objects_in_slice(self.data, self._shape, # <<<<<<<<<<<<<< - * self._strides, self.ndim, False) - * free(self.data) + /* "cornac/models/efm/recom_efm.pyx":183 + * if self.H1 is None: + * self.H1 = uniform((n_users, n_lfactors), high=high, random_state=rng) + * if self.H2 is None: # <<<<<<<<<<<<<< + * self.H2 = uniform((n_items, n_lfactors), high=high, random_state=rng) + * */ - __pyx_memoryview_refcount_objects_in_slice(__pyx_v_self->data, __pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_self->ndim, 0); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_H2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 183, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = (__pyx_t_3 == Py_None); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { - /* "View.MemoryView":215 - * self.callback_free_data(self.data) - * elif self.free_data: - * if self.dtype_is_object: # <<<<<<<<<<<<<< - * refcount_objects_in_slice(self.data, self._shape, - * self._strides, self.ndim, False) + /* "cornac/models/efm/recom_efm.pyx":184 + * self.H1 = uniform((n_users, n_lfactors), high=high, random_state=rng) + * if self.H2 is None: + * self.H2 = uniform((n_items, n_lfactors), high=high, random_state=rng) # <<<<<<<<<<<<<< + * + * def fit(self, train_set, val_set=None): */ - } + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_uniform); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_n_items); + __Pyx_GIVEREF(__pyx_v_n_items); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_n_items); + __Pyx_INCREF(__pyx_v_n_lfactors); + __Pyx_GIVEREF(__pyx_v_n_lfactors); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_n_lfactors); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_high, __pyx_v_high) < 0) __PYX_ERR(0, 184, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_random_state, __pyx_v_rng) < 0) __PYX_ERR(0, 184, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_H2, __pyx_t_2) < 0) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":218 - * refcount_objects_in_slice(self.data, self._shape, - * self._strides, self.ndim, False) - * free(self.data) # <<<<<<<<<<<<<< - * PyObject_Free(self._shape) + /* "cornac/models/efm/recom_efm.pyx":183 + * if self.H1 is None: + * self.H1 = uniform((n_users, n_lfactors), high=high, random_state=rng) + * if self.H2 is None: # <<<<<<<<<<<<<< + * self.H2 = uniform((n_items, n_lfactors), high=high, random_state=rng) * - */ - free(__pyx_v_self->data); - - /* "View.MemoryView":214 - * if self.callback_free_data != NULL: - * self.callback_free_data(self.data) - * elif self.free_data: # <<<<<<<<<<<<<< - * if self.dtype_is_object: - * refcount_objects_in_slice(self.data, self._shape, */ } - __pyx_L3:; - - /* "View.MemoryView":219 - * self._strides, self.ndim, False) - * free(self.data) - * PyObject_Free(self._shape) # <<<<<<<<<<<<<< - * - * @property - */ - PyObject_Free(__pyx_v_self->_shape); - /* "View.MemoryView":211 - * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + /* "cornac/models/efm/recom_efm.pyx":166 + * self.H2 = self.init_params.get('H2', None) * - * def __dealloc__(array self): # <<<<<<<<<<<<<< - * if self.callback_free_data != NULL: - * self.callback_free_data(self.data) + * def _init(self): # <<<<<<<<<<<<<< + * rng = get_rng(self.seed) + * n_users, n_items = self.train_set.num_users, self.train_set.num_items */ /* 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("cornac.models.efm.recom_efm.EFM._init", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_rng); + __Pyx_XDECREF(__pyx_v_n_users); + __Pyx_XDECREF(__pyx_v_n_items); + __Pyx_XDECREF(__pyx_v_n_aspects); + __Pyx_XDECREF(__pyx_v_n_efactors); + __Pyx_XDECREF(__pyx_v_n_lfactors); + __Pyx_XDECREF(__pyx_v_n_factors); + __Pyx_XDECREF(__pyx_v_high); + __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); + return __pyx_r; } -/* "View.MemoryView":222 +/* "cornac/models/efm/recom_efm.pyx":186 + * self.H2 = uniform((n_items, n_lfactors), high=high, random_state=rng) * - * @property - * def memview(self): # <<<<<<<<<<<<<< - * return self.get_memview() + * def fit(self, train_set, val_set=None): # <<<<<<<<<<<<<< + * """Fit the model to observations. * */ /* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self) { +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_5fit(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_4fit, "Fit the model to observations.\n\n Parameters\n ----------\n train_set: :obj:`cornac.data.Dataset`, required\n User-Item preference data as well as additional modalities.\n\n val_set: :obj:`cornac.data.Dataset`, optional, default: None\n User-Item preference data for model selection purposes (e.g., early stopping).\n\n Returns\n -------\n self : object\n "); +static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_5fit = {"fit", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_5fit, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_4fit}; +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_5fit(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_train_set = 0; + PyObject *__pyx_v_val_set = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_5array_7memview___get__(((struct __pyx_array_obj *)__pyx_v_self)); + __Pyx_RefNannySetupContext("fit (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_train_set,&__pyx_n_s_val_set,0}; + PyObject* values[3] = {0,0,0}; + values[2] = ((PyObject *)((PyObject *)Py_None)); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 186, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_train_set)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 186, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("fit", 0, 2, 3, 1); __PYX_ERR(0, 186, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_val_set); + if (value) { values[2] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 186, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "fit") < 0)) __PYX_ERR(0, 186, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_self = values[0]; + __pyx_v_train_set = values[1]; + __pyx_v_val_set = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("fit", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 186, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_4fit(__pyx_self, __pyx_v_self, __pyx_v_train_set, __pyx_v_val_set); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self) { +static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_4fit(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_train_set, PyObject *__pyx_v_val_set) { + PyObject *__pyx_v_A = NULL; + PyObject *__pyx_v_X = NULL; + PyObject *__pyx_v_Y = NULL; + PyObject *__pyx_v_A_user_counts = NULL; + PyObject *__pyx_v_A_item_counts = NULL; + PyObject *__pyx_v_A_uids = NULL; + PyObject *__pyx_v_X_user_counts = NULL; + PyObject *__pyx_v_X_aspect_counts = NULL; + PyObject *__pyx_v_X_uids = NULL; + PyObject *__pyx_v_Y_item_counts = NULL; + PyObject *__pyx_v_Y_aspect_counts = NULL; + PyObject *__pyx_v_Y_iids = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *(*__pyx_t_8)(PyObject *); + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + PyObject *__pyx_t_15 = NULL; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + PyObject *__pyx_t_18 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("fit", 0); - /* "View.MemoryView":223 - * @property - * def memview(self): - * return self.get_memview() # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":201 + * self : object + * """ + * Recommender.fit(self, train_set, val_set) # <<<<<<<<<<<<<< * - * @cname('get_memview') + * self._init() */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = ((struct __pyx_vtabstruct_array *)__pyx_v_self->__pyx_vtab)->get_memview(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 223, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Recommender); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_fit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_v_self, __pyx_v_train_set, __pyx_v_val_set}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 3+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":222 + /* "cornac/models/efm/recom_efm.pyx":203 + * Recommender.fit(self, train_set, val_set) * - * @property - * def memview(self): # <<<<<<<<<<<<<< - * return self.get_memview() + * self._init() # <<<<<<<<<<<<<< * + * if self.trainable: */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_init_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_2, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.array.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":205 + * self._init() + * + * if self.trainable: # <<<<<<<<<<<<<< + * A, X, Y = self._build_matrices(self.train_set) + * A_user_counts = np.ediff1d(A.indptr) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_trainable); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_5) { -/* "View.MemoryView":226 + /* "cornac/models/efm/recom_efm.pyx":206 * - * @cname('get_memview') - * cdef get_memview(self): # <<<<<<<<<<<<<< - * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE - * return memoryview(self, flags, self.dtype_is_object) + * if self.trainable: + * A, X, Y = self._build_matrices(self.train_set) # <<<<<<<<<<<<<< + * A_user_counts = np.ediff1d(A.indptr) + * A_item_counts = np.ediff1d(A.tocsc().indptr) + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_build_matrices); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(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; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_2}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 206, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_3 = PyList_GET_ITEM(sequence, 0); + __pyx_t_2 = PyList_GET_ITEM(sequence, 1); + __pyx_t_6 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_8 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); + index = 0; __pyx_t_3 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 1; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L4_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(0, 206, __pyx_L1_error) + __pyx_t_8 = NULL; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L5_unpacking_done; + __pyx_L4_unpacking_failed:; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_8 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 206, __pyx_L1_error) + __pyx_L5_unpacking_done:; + } + __pyx_v_A = __pyx_t_3; + __pyx_t_3 = 0; + __pyx_v_X = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_Y = __pyx_t_6; + __pyx_t_6 = 0; + + /* "cornac/models/efm/recom_efm.pyx":207 + * if self.trainable: + * A, X, Y = self._build_matrices(self.train_set) + * A_user_counts = np.ediff1d(A.indptr) # <<<<<<<<<<<<<< + * A_item_counts = np.ediff1d(A.tocsc().indptr) + * A_uids = np.repeat(np.arange(self.train_set.num_users), A_user_counts).astype(A.indices.dtype) */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_ediff1d); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_A, __pyx_n_s_indptr); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_A_user_counts = __pyx_t_1; + __pyx_t_1 = 0; -static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self) { - int __pyx_v_flags; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_memview", 0); + /* "cornac/models/efm/recom_efm.pyx":208 + * A, X, Y = self._build_matrices(self.train_set) + * A_user_counts = np.ediff1d(A.indptr) + * A_item_counts = np.ediff1d(A.tocsc().indptr) # <<<<<<<<<<<<<< + * A_uids = np.repeat(np.arange(self.train_set.num_users), A_user_counts).astype(A.indices.dtype) + * X_user_counts = np.ediff1d(X.indptr) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ediff1d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_A, __pyx_n_s_tocsc); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_7, }; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_indptr); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_v_A_item_counts = __pyx_t_1; + __pyx_t_1 = 0; + + /* "cornac/models/efm/recom_efm.pyx":209 + * A_user_counts = np.ediff1d(A.indptr) + * A_item_counts = np.ediff1d(A.tocsc().indptr) + * A_uids = np.repeat(np.arange(self.train_set.num_users), A_user_counts).astype(A.indices.dtype) # <<<<<<<<<<<<<< + * X_user_counts = np.ediff1d(X.indptr) + * X_aspect_counts = np.ediff1d(X.tocsc().indptr) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_repeat); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_arange); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_num_users); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_10}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_t_9 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_3, __pyx_v_A_user_counts}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_astype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_A, __pyx_n_s_indices); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_A_uids = __pyx_t_1; + __pyx_t_1 = 0; + + /* "cornac/models/efm/recom_efm.pyx":210 + * A_item_counts = np.ediff1d(A.tocsc().indptr) + * A_uids = np.repeat(np.arange(self.train_set.num_users), A_user_counts).astype(A.indices.dtype) + * X_user_counts = np.ediff1d(X.indptr) # <<<<<<<<<<<<<< + * X_aspect_counts = np.ediff1d(X.tocsc().indptr) + * X_uids = np.repeat(np.arange(self.train_set.num_users), X_user_counts).astype(X.indices.dtype) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ediff1d); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_X, __pyx_n_s_indptr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_2}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v_X_user_counts = __pyx_t_1; + __pyx_t_1 = 0; - /* "View.MemoryView":227 - * @cname('get_memview') - * cdef get_memview(self): - * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE # <<<<<<<<<<<<<< - * return memoryview(self, flags, self.dtype_is_object) - * + /* "cornac/models/efm/recom_efm.pyx":211 + * A_uids = np.repeat(np.arange(self.train_set.num_users), A_user_counts).astype(A.indices.dtype) + * X_user_counts = np.ediff1d(X.indptr) + * X_aspect_counts = np.ediff1d(X.tocsc().indptr) # <<<<<<<<<<<<<< + * X_uids = np.repeat(np.arange(self.train_set.num_users), X_user_counts).astype(X.indices.dtype) + * Y_item_counts = np.ediff1d(Y.indptr) */ - __pyx_v_flags = ((PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) | PyBUF_WRITABLE); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ediff1d); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_X, __pyx_n_s_tocsc); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_9 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && 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); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_9, }; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_indptr); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_X_aspect_counts = __pyx_t_1; + __pyx_t_1 = 0; - /* "View.MemoryView":228 - * cdef get_memview(self): - * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE - * return memoryview(self, flags, self.dtype_is_object) # <<<<<<<<<<<<<< - * - * def __len__(self): + /* "cornac/models/efm/recom_efm.pyx":212 + * X_user_counts = np.ediff1d(X.indptr) + * X_aspect_counts = np.ediff1d(X.tocsc().indptr) + * X_uids = np.repeat(np.arange(self.train_set.num_users), X_user_counts).astype(X.indices.dtype) # <<<<<<<<<<<<<< + * Y_item_counts = np.ediff1d(Y.indptr) + * Y_aspect_counts = np.ediff1d(Y.tocsc().indptr) */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 228, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 228, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 228, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); - PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 228, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_repeat); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_arange); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_num_users); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_10, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_7}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_10, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + } + __pyx_t_10 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_6, __pyx_v_X_user_counts}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_astype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_X, __pyx_n_s_indices); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 212, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v_X_uids = __pyx_t_1; + __pyx_t_1 = 0; - /* "View.MemoryView":226 - * - * @cname('get_memview') - * cdef get_memview(self): # <<<<<<<<<<<<<< - * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE - * return memoryview(self, flags, self.dtype_is_object) + /* "cornac/models/efm/recom_efm.pyx":213 + * X_aspect_counts = np.ediff1d(X.tocsc().indptr) + * X_uids = np.repeat(np.arange(self.train_set.num_users), X_user_counts).astype(X.indices.dtype) + * Y_item_counts = np.ediff1d(Y.indptr) # <<<<<<<<<<<<<< + * Y_aspect_counts = np.ediff1d(Y.tocsc().indptr) + * Y_iids = np.repeat(np.arange(self.train_set.num_items), Y_item_counts).astype(Y.indices.dtype) */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ediff1d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_Y, __pyx_n_s_indptr); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_v_Y_item_counts = __pyx_t_1; + __pyx_t_1 = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.array.get_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":230 - * return memoryview(self, flags, self.dtype_is_object) - * - * def __len__(self): # <<<<<<<<<<<<<< - * return self._shape[0] + /* "cornac/models/efm/recom_efm.pyx":214 + * X_uids = np.repeat(np.arange(self.train_set.num_users), X_user_counts).astype(X.indices.dtype) + * Y_item_counts = np.ediff1d(Y.indptr) + * Y_aspect_counts = np.ediff1d(Y.tocsc().indptr) # <<<<<<<<<<<<<< + * Y_iids = np.repeat(np.arange(self.train_set.num_items), Y_item_counts).astype(Y.indices.dtype) * */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_ediff1d); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_Y, __pyx_n_s_tocsc); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_10 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_10, }; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_indptr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_2}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v_Y_aspect_counts = __pyx_t_1; + __pyx_t_1 = 0; -/* Python wrapper */ -static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self); /*proto*/ -static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self) { - Py_ssize_t __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); - __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(((struct __pyx_array_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self) { - Py_ssize_t __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__len__", 0); - - /* "View.MemoryView":231 - * - * def __len__(self): - * return self._shape[0] # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":215 + * Y_item_counts = np.ediff1d(Y.indptr) + * Y_aspect_counts = np.ediff1d(Y.tocsc().indptr) + * Y_iids = np.repeat(np.arange(self.train_set.num_items), Y_item_counts).astype(Y.indices.dtype) # <<<<<<<<<<<<<< * - * def __getattr__(self, attr): + * self._fit_efm( */ - __pyx_r = (__pyx_v_self->_shape[0]); - goto __pyx_L0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_repeat); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_arange); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_num_items); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_9}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_2, __pyx_v_Y_item_counts}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_astype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_Y, __pyx_n_s_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_dtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && 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); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_2}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_v_Y_iids = __pyx_t_1; + __pyx_t_1 = 0; - /* "View.MemoryView":230 - * return memoryview(self, flags, self.dtype_is_object) - * - * def __len__(self): # <<<<<<<<<<<<<< - * return self._shape[0] + /* "cornac/models/efm/recom_efm.pyx":217 + * Y_iids = np.repeat(np.arange(self.train_set.num_items), Y_item_counts).astype(Y.indices.dtype) * + * self._fit_efm( # <<<<<<<<<<<<<< + * self.num_threads, + * A.data.astype(np.float32), A_uids, A.indices, A_user_counts, A_item_counts, */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_fit_efm); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 217, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); - /* function exit code */ - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":233 - * return self._shape[0] - * - * def __getattr__(self, attr): # <<<<<<<<<<<<<< - * return getattr(self.memview, attr) + /* "cornac/models/efm/recom_efm.pyx":218 * + * self._fit_efm( + * self.num_threads, # <<<<<<<<<<<<<< + * A.data.astype(np.float32), A_uids, A.indices, A_user_counts, A_item_counts, + * X.data.astype(np.float32), X_uids, X.indices, X_user_counts, X_aspect_counts, */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_threads); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); -/* Python wrapper */ -static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/ -static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0); - __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_attr)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":219 + * self._fit_efm( + * self.num_threads, + * A.data.astype(np.float32), A_uids, A.indices, A_user_counts, A_item_counts, # <<<<<<<<<<<<<< + * X.data.astype(np.float32), X_uids, X.indices, X_user_counts, X_aspect_counts, + * Y.data.astype(np.float32), Y_iids, Y.indices, Y_item_counts, Y_aspect_counts, + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_A, __pyx_n_s_data); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_astype); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float32); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_10}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_A, __pyx_n_s_indices); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); -static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__getattr__", 0); + /* "cornac/models/efm/recom_efm.pyx":220 + * self.num_threads, + * A.data.astype(np.float32), A_uids, A.indices, A_user_counts, A_item_counts, + * X.data.astype(np.float32), X_uids, X.indices, X_user_counts, X_aspect_counts, # <<<<<<<<<<<<<< + * Y.data.astype(np.float32), Y_iids, Y.indices, Y_item_counts, Y_aspect_counts, + * self.U1, self.U2, self.V, self.H1, self.H2 + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_X, __pyx_n_s_data); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_astype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_12}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_X, __pyx_n_s_indices); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); - /* "View.MemoryView":234 - * - * def __getattr__(self, attr): - * return getattr(self.memview, attr) # <<<<<<<<<<<<<< - * - * def __getitem__(self, item): + /* "cornac/models/efm/recom_efm.pyx":221 + * A.data.astype(np.float32), A_uids, A.indices, A_user_counts, A_item_counts, + * X.data.astype(np.float32), X_uids, X.indices, X_user_counts, X_aspect_counts, + * Y.data.astype(np.float32), Y_iids, Y.indices, Y_item_counts, Y_aspect_counts, # <<<<<<<<<<<<<< + * self.U1, self.U2, self.V, self.H1, self.H2 + * ) */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 234, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 234, __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; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_Y, __pyx_n_s_data); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_astype); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float32); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_14}; + __pyx_t_12 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_Y, __pyx_n_s_indices); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); - /* "View.MemoryView":233 - * return self._shape[0] - * - * def __getattr__(self, attr): # <<<<<<<<<<<<<< - * return getattr(self.memview, attr) + /* "cornac/models/efm/recom_efm.pyx":222 + * X.data.astype(np.float32), X_uids, X.indices, X_user_counts, X_aspect_counts, + * Y.data.astype(np.float32), Y_iids, Y.indices, Y_item_counts, Y_aspect_counts, + * self.U1, self.U2, self.V, self.H1, self.H2 # <<<<<<<<<<<<<< + * ) * */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_V); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_H1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_H2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_18 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_18)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_18); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[22] = {__pyx_t_18, __pyx_t_2, __pyx_t_3, __pyx_v_A_uids, __pyx_t_9, __pyx_v_A_user_counts, __pyx_v_A_item_counts, __pyx_t_10, __pyx_v_X_uids, __pyx_t_11, __pyx_v_X_user_counts, __pyx_v_X_aspect_counts, __pyx_t_12, __pyx_v_Y_iids, __pyx_t_13, __pyx_v_Y_item_counts, __pyx_v_Y_aspect_counts, __pyx_t_14, __pyx_t_7, __pyx_t_15, __pyx_t_16, __pyx_t_17}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 21+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 217, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.array.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":236 - * return getattr(self.memview, attr) - * - * def __getitem__(self, item): # <<<<<<<<<<<<<< - * return self.memview[item] + /* "cornac/models/efm/recom_efm.pyx":205 + * self._init() * + * if self.trainable: # <<<<<<<<<<<<<< + * A, X, Y = self._build_matrices(self.train_set) + * A_user_counts = np.ediff1d(A.indptr) */ + } -/* Python wrapper */ -static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ -static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); - __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__getitem__", 0); - - /* "View.MemoryView":237 + /* "cornac/models/efm/recom_efm.pyx":225 + * ) + * + * return self # <<<<<<<<<<<<<< * - * def __getitem__(self, item): - * return self.memview[item] # <<<<<<<<<<<<<< * - * def __setitem__(self, item, value): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 237, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 237, __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; + __Pyx_INCREF(__pyx_v_self); + __pyx_r = __pyx_v_self; goto __pyx_L0; - /* "View.MemoryView":236 - * return getattr(self.memview, attr) + /* "cornac/models/efm/recom_efm.pyx":186 + * self.H2 = uniform((n_items, n_lfactors), high=high, random_state=rng) * - * def __getitem__(self, item): # <<<<<<<<<<<<<< - * return self.memview[item] + * def fit(self, train_set, val_set=None): # <<<<<<<<<<<<<< + * """Fit the model to observations. * */ @@ -30534,11509 +22845,24867 @@ static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.array.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_XDECREF(__pyx_t_16); + __Pyx_XDECREF(__pyx_t_17); + __Pyx_XDECREF(__pyx_t_18); + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; + __Pyx_XDECREF(__pyx_v_A); + __Pyx_XDECREF(__pyx_v_X); + __Pyx_XDECREF(__pyx_v_Y); + __Pyx_XDECREF(__pyx_v_A_user_counts); + __Pyx_XDECREF(__pyx_v_A_item_counts); + __Pyx_XDECREF(__pyx_v_A_uids); + __Pyx_XDECREF(__pyx_v_X_user_counts); + __Pyx_XDECREF(__pyx_v_X_aspect_counts); + __Pyx_XDECREF(__pyx_v_X_uids); + __Pyx_XDECREF(__pyx_v_Y_item_counts); + __Pyx_XDECREF(__pyx_v_Y_aspect_counts); + __Pyx_XDECREF(__pyx_v_Y_iids); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "View.MemoryView":239 - * return self.memview[item] +/* "cornac/models/efm/recom_efm.pyx":228 * - * def __setitem__(self, item, value): # <<<<<<<<<<<<<< - * self.memview[item] = value * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def _fit_efm(self, int num_threads, */ /* Python wrapper */ -static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); - __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_7_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +PyDoc_STRVAR(__pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm, "Fit the model parameters (U1, U2, V, H1, H2)\n "); +static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_7_fit_efm = {"_fit_efm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_7_fit_efm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm}; +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_7_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_signatures = 0; + PyObject *__pyx_v_args = 0; + PyObject *__pyx_v_kwargs = 0; + CYTHON_UNUSED PyObject *__pyx_v_defaults = 0; + PyObject *__pyx_v__fused_sigindex = 0; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setitem__", 0); - - /* "View.MemoryView":240 - * - * def __setitem__(self, item, value): - * self.memview[item] = value # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_item, __pyx_v_value) < 0)) __PYX_ERR(2, 240, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "View.MemoryView":239 - * return self.memview[item] - * - * def __setitem__(self, item, value): # <<<<<<<<<<<<<< - * self.memview[item] = value - * - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.array.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf___pyx_array___reduce_cython__(((struct __pyx_array_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); - - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(2, 2, __pyx_L1_error) - - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.array.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,&__pyx_n_s_fused_sigindex,0}; + PyObject* values[5] = {0,0,0,0,0}; + __pyx_defaults *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self); + values[4] = __pyx_dynamic_args->__pyx_arg__fused_sigindex; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_signatures)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 0, 4, 5, 1); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_kwargs)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 0, 4, 5, 2); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_defaults)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 0, 4, 5, 3); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fused_sigindex); + if (value) { values[4] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 228, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_signatures = values[0]; + __pyx_v_args = values[1]; + __pyx_v_kwargs = values[2]; + __pyx_v_defaults = values[3]; + __pyx_v__fused_sigindex = values[4]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 0, 4, 5, __pyx_nargs); __PYX_ERR(0, 228, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - -/* Python wrapper */ -static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf___pyx_array_2__setstate_cython__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults, __pyx_v__fused_sigindex); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults, PyObject *__pyx_v__fused_sigindex) { + PyObject *__pyx_v_search_list = 0; + PyObject *__pyx_v_sn = 0; + PyObject *__pyx_v_sigindex_node = 0; + PyObject *__pyx_v_dest_sig = NULL; + PyTypeObject *__pyx_v_ndarray = 0; + PyObject *__pyx_v_arg_as_memoryview = 0; + __Pyx_memviewslice __pyx_v_memslice; + Py_ssize_t __pyx_v_itemsize; + int __pyx_v_dtype_signed; + char __pyx_v_kind; + int __pyx_v_short_is_signed; + int __pyx_v_int_is_signed; + int __pyx_v_long_is_signed; + PyObject *__pyx_v_arg = NULL; + PyObject *__pyx_v_dtype = NULL; + PyObject *__pyx_v_arg_base = NULL; + PyObject *__pyx_v_sig = NULL; + PyObject *__pyx_v_sig_series = NULL; + PyObject *__pyx_v_last_type = NULL; + PyObject *__pyx_v_sig_type = NULL; + PyObject *__pyx_v_sigindex_matches = NULL; + PyObject *__pyx_v_sigindex_candidates = NULL; + PyObject *__pyx_v_dst_type = NULL; + PyObject *__pyx_v_found_matches = NULL; + PyObject *__pyx_v_found_candidates = NULL; + PyObject *__pyx_v_candidates = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + Py_ssize_t __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + long __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + int __pyx_t_11; + __Pyx_memviewslice __pyx_t_12; + PyObject *__pyx_t_13 = NULL; + Py_ssize_t __pyx_t_14; + int __pyx_t_15; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + Py_ssize_t __pyx_t_18; + int __pyx_t_19; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); - - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) + __Pyx_RefNannySetupContext("_fit_efm", 0); + __Pyx_INCREF(__pyx_v_kwargs); + __pyx_t_1 = PyList_New(1 * 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(2, 4, __pyx_L1_error) - - /* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":244 - * - * @cname("__pyx_array_new") - * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< - * char *mode, char *buf): - * cdef array result - */ - -static struct __pyx_array_obj *__pyx_array_new(PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, char *__pyx_v_format, char *__pyx_v_mode, char *__pyx_v_buf) { - struct __pyx_array_obj *__pyx_v_result = 0; - struct __pyx_array_obj *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("array_cwrapper", 0); - - /* "View.MemoryView":248 - * cdef array result - * - * if buf == NULL: # <<<<<<<<<<<<<< - * result = array(shape, itemsize, format, mode.decode('ASCII')) - * else: - */ - __pyx_t_1 = ((__pyx_v_buf == NULL) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":249 - * - * if buf == NULL: - * result = array(shape, itemsize, format, mode.decode('ASCII')) # <<<<<<<<<<<<<< - * else: - * result = array(shape, itemsize, format, mode.decode('ASCII'), - */ - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 249, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 249, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 249, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 249, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_shape); - __Pyx_GIVEREF(__pyx_v_shape); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_shape); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4); - __pyx_t_2 = 0; - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 249, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_4); - __pyx_t_4 = 0; - - /* "View.MemoryView":248 - * cdef array result - * - * if buf == NULL: # <<<<<<<<<<<<<< - * result = array(shape, itemsize, format, mode.decode('ASCII')) - * else: - */ - goto __pyx_L3; + { Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < 2; __pyx_temp++) { + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyList_SET_ITEM(__pyx_t_1, __pyx_temp, Py_None); + } + } + __pyx_v_dest_sig = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_3 = (__pyx_v_kwargs != Py_None); + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_t_4 = (!__pyx_t_3); + __pyx_t_2 = __pyx_t_4; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None); + } + __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1); + __pyx_t_1 = 0; + __pyx_v_itemsize = -1L; + __pyx_v_short_is_signed = (!(((short)-1L) > 0)); + __pyx_v_int_is_signed = (!(((int)-1L) > 0)); + __pyx_v_long_is_signed = (!(((long)-1L) > 0)); + if (unlikely(__pyx_v_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_t_2 = (2 < __pyx_t_5); + if (__pyx_t_2) { + if (unlikely(__pyx_v_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 2); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_arg = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L6; + } + __pyx_t_4 = (__pyx_v_kwargs != Py_None); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L7_bool_binop_done; + } + if (unlikely(__pyx_v_kwargs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_A, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_t_2 = __pyx_t_4; + __pyx_L7_bool_binop_done:; + if (likely(__pyx_t_2)) { + if (unlikely(__pyx_v_kwargs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_A); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_arg = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L6; + } + /*else*/ { + if (unlikely(__pyx_v_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_INCREF(__pyx_int_22); + __Pyx_GIVEREF(__pyx_int_22); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_22); + __Pyx_INCREF(__pyx_n_s_s); + __Pyx_GIVEREF(__pyx_n_s_s); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_Raise(__pyx_t_6, 0, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_L6:; + while (1) { + __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None)); + if (__pyx_t_2) { + __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); + if (__pyx_t_2) { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_dtype = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L12; + } + __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); + if (__pyx_t_2) { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_arg_base = __pyx_t_6; + __pyx_t_6 = 0; + __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); + if (__pyx_t_2) { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_dtype = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L13; + } + /*else*/ { + __Pyx_INCREF(Py_None); + __pyx_v_dtype = Py_None; + } + __pyx_L13:; + goto __pyx_L12; + } + /*else*/ { + __Pyx_INCREF(Py_None); + __pyx_v_dtype = Py_None; + } + __pyx_L12:; + __pyx_v_itemsize = -1L; + __pyx_t_2 = (__pyx_v_dtype != Py_None); + if (__pyx_t_2) { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_itemsize = __pyx_t_5; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_kind = __pyx_t_7; + __pyx_v_dtype_signed = (__pyx_v_kind == 'i'); + switch (__pyx_v_kind) { + case 'i': + case 'u': + break; + case 'f': + __pyx_t_4 = ((sizeof(float)) == __pyx_v_itemsize); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L16_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_4 = (((Py_ssize_t)__pyx_t_5) == 1); + __pyx_t_2 = __pyx_t_4; + __pyx_L16_bool_binop_done:; + if (__pyx_t_2) { + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + goto __pyx_L10_break; + } + __pyx_t_4 = ((sizeof(double)) == __pyx_v_itemsize); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L19_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_4 = (((Py_ssize_t)__pyx_t_5) == 1); + __pyx_t_2 = __pyx_t_4; + __pyx_L19_bool_binop_done:; + if (__pyx_t_2) { + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + goto __pyx_L10_break; + } + break; + case 'c': + break; + case 'O': + break; + default: break; + } + } + } + __pyx_t_2 = (__pyx_v_arg == Py_None); + if (__pyx_t_2) { + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + goto __pyx_L10_break; + } + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + /*try:*/ { + __pyx_t_6 = PyMemoryView_FromObject(__pyx_v_arg); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 228, __pyx_L22_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_arg_as_memoryview = ((PyObject*)__pyx_t_6); + __pyx_t_6 = 0; + } + /*else:*/ { + __pyx_t_4 = (__pyx_v_itemsize == -1L); + if (!__pyx_t_4) { + goto __pyx_L33_next_or; + } else { + } + __pyx_t_5 = __Pyx_PyMemoryView_Get_itemsize(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L24_except_error) + __pyx_t_4 = (__pyx_t_5 == (sizeof(float))); + if (!__pyx_t_4) { + } else { + goto __pyx_L32_next_and; + } + __pyx_L33_next_or:; + __pyx_t_4 = (__pyx_v_itemsize == (sizeof(float))); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L31_bool_binop_done; + } + __pyx_L32_next_and:; + __pyx_t_11 = __Pyx_PyMemoryView_Get_ndim(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L24_except_error) + __pyx_t_4 = (__pyx_t_11 == 1); + __pyx_t_2 = __pyx_t_4; + __pyx_L31_bool_binop_done:; + if (__pyx_t_2) { + __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_v_arg_as_memoryview, 0); + __pyx_v_memslice = __pyx_t_12; + __pyx_t_2 = (__pyx_v_memslice.memview != 0); + if (__pyx_t_2) { + __PYX_XCLEAR_MEMVIEW((&__pyx_v_memslice), 1); + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 228, __pyx_L24_except_error) + goto __pyx_L27_try_break; + } + /*else*/ { + PyErr_Clear(); + } + } + __pyx_t_4 = (__pyx_v_itemsize == -1L); + if (!__pyx_t_4) { + goto __pyx_L39_next_or; + } else { + } + __pyx_t_5 = __Pyx_PyMemoryView_Get_itemsize(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L24_except_error) + __pyx_t_4 = (__pyx_t_5 == (sizeof(double))); + if (!__pyx_t_4) { + } else { + goto __pyx_L38_next_and; + } + __pyx_L39_next_or:; + __pyx_t_4 = (__pyx_v_itemsize == (sizeof(double))); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L37_bool_binop_done; + } + __pyx_L38_next_and:; + __pyx_t_11 = __Pyx_PyMemoryView_Get_ndim(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L24_except_error) + __pyx_t_4 = (__pyx_t_11 == 1); + __pyx_t_2 = __pyx_t_4; + __pyx_L37_bool_binop_done:; + if (__pyx_t_2) { + __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_arg_as_memoryview, 0); + __pyx_v_memslice = __pyx_t_12; + __pyx_t_2 = (__pyx_v_memslice.memview != 0); + if (__pyx_t_2) { + __PYX_XCLEAR_MEMVIEW((&__pyx_v_memslice), 1); + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 228, __pyx_L24_except_error) + goto __pyx_L27_try_break; + } + /*else*/ { + PyErr_Clear(); + } + } + } + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + goto __pyx_L29_try_end; + __pyx_L22_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_11 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_ValueError, __pyx_builtin_TypeError); + if (__pyx_t_11) { + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_1, &__pyx_t_13) < 0) __PYX_ERR(0, 228, __pyx_L24_except_error) + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + goto __pyx_L23_exception_handled; + } + goto __pyx_L24_except_error; + __pyx_L24_except_error:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + goto __pyx_L1_error; + __pyx_L27_try_break:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + goto __pyx_L10_break; + __pyx_L23_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + __pyx_L29_try_end:; + } + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + goto __pyx_L10_break; + } + __pyx_L10_break:; + if (unlikely(__pyx_v_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_t_2 = (3 < __pyx_t_5); + if (__pyx_t_2) { + if (unlikely(__pyx_v_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_13 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 3); + __Pyx_INCREF(__pyx_t_13); + __Pyx_DECREF_SET(__pyx_v_arg, __pyx_t_13); + __pyx_t_13 = 0; + goto __pyx_L44; + } + __pyx_t_4 = (__pyx_v_kwargs != Py_None); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L45_bool_binop_done; + } + if (unlikely(__pyx_v_kwargs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_A_uids, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_t_2 = __pyx_t_4; + __pyx_L45_bool_binop_done:; + if (likely(__pyx_t_2)) { + if (unlikely(__pyx_v_kwargs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_13 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_A_uids); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF_SET(__pyx_v_arg, __pyx_t_13); + __pyx_t_13 = 0; + goto __pyx_L44; } - - /* "View.MemoryView":251 - * result = array(shape, itemsize, format, mode.decode('ASCII')) - * else: - * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< - * allocate_buffer=False) - * result.data = buf - */ /*else*/ { - __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 251, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 251, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 251, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 251, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_shape); - __Pyx_GIVEREF(__pyx_v_shape); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_3); - __pyx_t_4 = 0; - __pyx_t_5 = 0; - __pyx_t_3 = 0; - - /* "View.MemoryView":252 - * else: - * result = array(shape, itemsize, format, mode.decode('ASCII'), - * allocate_buffer=False) # <<<<<<<<<<<<<< - * result.data = buf - * - */ - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(2, 252, __pyx_L1_error) - - /* "View.MemoryView":251 - * result = array(shape, itemsize, format, mode.decode('ASCII')) - * else: - * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< - * allocate_buffer=False) - * result.data = buf - */ - __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 251, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_5); + if (unlikely(__pyx_v_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_t_13 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_int_22); + __Pyx_GIVEREF(__pyx_int_22); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_22); + __Pyx_INCREF(__pyx_n_s_s); + __Pyx_GIVEREF(__pyx_n_s_s); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_s); + __Pyx_GIVEREF(__pyx_t_13); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_13); + __pyx_t_13 = 0; + __pyx_t_13 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_L44:; + while (1) { + __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None)); + if (__pyx_t_2) { + __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); + if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_1); + __pyx_t_1 = 0; + goto __pyx_L50; + } + __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); + if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_arg_base, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); + if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_1); + __pyx_t_1 = 0; + goto __pyx_L51; + } + /*else*/ { + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_dtype, Py_None); + } + __pyx_L51:; + goto __pyx_L50; + } + /*else*/ { + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_dtype, Py_None); + } + __pyx_L50:; + __pyx_v_itemsize = -1L; + __pyx_t_2 = (__pyx_v_dtype != Py_None); + if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_itemsize = __pyx_t_5; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_1); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_kind = __pyx_t_7; + __pyx_v_dtype_signed = (__pyx_v_kind == 'i'); + switch (__pyx_v_kind) { + case 'i': + case 'u': + __pyx_t_4 = ((sizeof(short)) == __pyx_v_itemsize); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L54_bool_binop_done; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = (((Py_ssize_t)__pyx_t_5) == 1); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L54_bool_binop_done; + } + __pyx_t_4 = (!(__pyx_v_short_is_signed ^ __pyx_v_dtype_signed)); + __pyx_t_2 = __pyx_t_4; + __pyx_L54_bool_binop_done:; + if (__pyx_t_2) { + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + goto __pyx_L48_break; + } + __pyx_t_4 = ((sizeof(int)) == __pyx_v_itemsize); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L58_bool_binop_done; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = (((Py_ssize_t)__pyx_t_5) == 1); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L58_bool_binop_done; + } + __pyx_t_4 = (!(__pyx_v_int_is_signed ^ __pyx_v_dtype_signed)); + __pyx_t_2 = __pyx_t_4; + __pyx_L58_bool_binop_done:; + if (__pyx_t_2) { + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + goto __pyx_L48_break; + } + __pyx_t_4 = ((sizeof(long)) == __pyx_v_itemsize); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L62_bool_binop_done; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = (((Py_ssize_t)__pyx_t_5) == 1); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L62_bool_binop_done; + } + __pyx_t_4 = (!(__pyx_v_long_is_signed ^ __pyx_v_dtype_signed)); + __pyx_t_2 = __pyx_t_4; + __pyx_L62_bool_binop_done:; + if (__pyx_t_2) { + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + goto __pyx_L48_break; + } + break; + case 'f': + break; + case 'c': + break; + case 'O': + break; + default: break; + } + } + } + __pyx_t_2 = (__pyx_v_arg == Py_None); + if (__pyx_t_2) { + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + goto __pyx_L48_break; + } + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_8); + /*try:*/ { + __pyx_t_1 = PyMemoryView_FromObject(__pyx_v_arg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L66_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_arg_as_memoryview, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + } + /*else:*/ { + __pyx_t_4 = (__pyx_v_itemsize == -1L); + if (!__pyx_t_4) { + goto __pyx_L77_next_or; + } else { + } + __pyx_t_5 = __Pyx_PyMemoryView_Get_itemsize(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L68_except_error) + __pyx_t_4 = (__pyx_t_5 == (sizeof(short))); + if (!__pyx_t_4) { + } else { + goto __pyx_L76_next_and; + } + __pyx_L77_next_or:; + __pyx_t_4 = (__pyx_v_itemsize == (sizeof(short))); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L75_bool_binop_done; + } + __pyx_L76_next_and:; + __pyx_t_11 = __Pyx_PyMemoryView_Get_ndim(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L68_except_error) + __pyx_t_4 = (__pyx_t_11 == 1); + __pyx_t_2 = __pyx_t_4; + __pyx_L75_bool_binop_done:; + if (__pyx_t_2) { + __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds_short(__pyx_v_arg_as_memoryview, 0); + __pyx_v_memslice = __pyx_t_12; + __pyx_t_2 = (__pyx_v_memslice.memview != 0); + if (__pyx_t_2) { + __PYX_XCLEAR_MEMVIEW((&__pyx_v_memslice), 1); + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 228, __pyx_L68_except_error) + goto __pyx_L71_try_break; + } + /*else*/ { + PyErr_Clear(); + } + } + __pyx_t_4 = (__pyx_v_itemsize == -1L); + if (!__pyx_t_4) { + goto __pyx_L83_next_or; + } else { + } + __pyx_t_5 = __Pyx_PyMemoryView_Get_itemsize(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L68_except_error) + __pyx_t_4 = (__pyx_t_5 == (sizeof(int))); + if (!__pyx_t_4) { + } else { + goto __pyx_L82_next_and; + } + __pyx_L83_next_or:; + __pyx_t_4 = (__pyx_v_itemsize == (sizeof(int))); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L81_bool_binop_done; + } + __pyx_L82_next_and:; + __pyx_t_11 = __Pyx_PyMemoryView_Get_ndim(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L68_except_error) + __pyx_t_4 = (__pyx_t_11 == 1); + __pyx_t_2 = __pyx_t_4; + __pyx_L81_bool_binop_done:; + if (__pyx_t_2) { + __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds_int(__pyx_v_arg_as_memoryview, 0); + __pyx_v_memslice = __pyx_t_12; + __pyx_t_2 = (__pyx_v_memslice.memview != 0); + if (__pyx_t_2) { + __PYX_XCLEAR_MEMVIEW((&__pyx_v_memslice), 1); + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 228, __pyx_L68_except_error) + goto __pyx_L71_try_break; + } + /*else*/ { + PyErr_Clear(); + } + } + __pyx_t_4 = (__pyx_v_itemsize == -1L); + if (!__pyx_t_4) { + goto __pyx_L89_next_or; + } else { + } + __pyx_t_5 = __Pyx_PyMemoryView_Get_itemsize(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L68_except_error) + __pyx_t_4 = (__pyx_t_5 == (sizeof(long))); + if (!__pyx_t_4) { + } else { + goto __pyx_L88_next_and; + } + __pyx_L89_next_or:; + __pyx_t_4 = (__pyx_v_itemsize == (sizeof(long))); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L87_bool_binop_done; + } + __pyx_L88_next_and:; + __pyx_t_11 = __Pyx_PyMemoryView_Get_ndim(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L68_except_error) + __pyx_t_4 = (__pyx_t_11 == 1); + __pyx_t_2 = __pyx_t_4; + __pyx_L87_bool_binop_done:; + if (__pyx_t_2) { + __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds_long(__pyx_v_arg_as_memoryview, 0); + __pyx_v_memslice = __pyx_t_12; + __pyx_t_2 = (__pyx_v_memslice.memview != 0); + if (__pyx_t_2) { + __PYX_XCLEAR_MEMVIEW((&__pyx_v_memslice), 1); + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 1, __pyx_n_s_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 228, __pyx_L68_except_error) + goto __pyx_L71_try_break; + } + /*else*/ { + PyErr_Clear(); + } + } + } + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L73_try_end; + __pyx_L66_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_11 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_ValueError, __pyx_builtin_TypeError); + if (__pyx_t_11) { + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_13, &__pyx_t_6) < 0) __PYX_ERR(0, 228, __pyx_L68_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L67_exception_handled; + } + goto __pyx_L68_except_error; + __pyx_L68_except_error:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8); + goto __pyx_L1_error; + __pyx_L71_try_break:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8); + goto __pyx_L48_break; + __pyx_L67_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8); + __pyx_L73_try_end:; + } + if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 1, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + goto __pyx_L48_break; + } + __pyx_L48_break:; + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v__fused_sigindex); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_t_4 = (!__pyx_t_2); + if (__pyx_t_4) { __pyx_t_5 = 0; - - /* "View.MemoryView":253 - * result = array(shape, itemsize, format, mode.decode('ASCII'), - * allocate_buffer=False) - * result.data = buf # <<<<<<<<<<<<<< - * - * return result - */ - __pyx_v_result->data = __pyx_v_buf; + if (unlikely(__pyx_v_signatures == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_13 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_14), (&__pyx_t_11)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_6); + __pyx_t_6 = __pyx_t_13; + __pyx_t_13 = 0; + while (1) { + __pyx_t_15 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_14, &__pyx_t_5, &__pyx_t_13, NULL, NULL, __pyx_t_11); + if (unlikely(__pyx_t_15 == 0)) break; + if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_13); + __pyx_t_13 = 0; + if (!(likely(PyDict_CheckExact(__pyx_v__fused_sigindex))||((__pyx_v__fused_sigindex) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_v__fused_sigindex))) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_t_13 = __pyx_v__fused_sigindex; + __Pyx_INCREF(__pyx_t_13); + __Pyx_XDECREF_SET(__pyx_v_sigindex_node, ((PyObject*)__pyx_t_13)); + __pyx_t_13 = 0; + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_17 = NULL; + __pyx_t_15 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) { + __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_16); + if (likely(__pyx_t_17)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16); + __Pyx_INCREF(__pyx_t_17); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_16, function); + __pyx_t_15 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_kp_s__16}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_15, 1+__pyx_t_15); + __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + } + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_split); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_15 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_16); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_16, function); + __pyx_t_15 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_s__17}; + __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_15, 1+__pyx_t_15); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + } + __pyx_t_16 = __Pyx_PySequence_ListKeepNew(__pyx_t_13); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_18 = PyList_GET_SIZE(__pyx_t_16); + if (unlikely(__pyx_t_18 < 1)) { + __Pyx_RaiseNeedMoreValuesError(0+__pyx_t_18); __PYX_ERR(0, 228, __pyx_L1_error) + } + #if CYTHON_COMPILING_IN_CPYTHON + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_16, __pyx_t_18-1); + ((PyVarObject*)__pyx_t_16)->ob_size--; + #else + __pyx_t_1 = PySequence_ITEM(__pyx_t_16, __pyx_t_18-1); + #endif + __Pyx_GOTREF(__pyx_t_1); + #if !CYTHON_COMPILING_IN_CPYTHON + __pyx_t_17 = PySequence_GetSlice(__pyx_t_16, 0, __pyx_t_18-1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_16); + __pyx_t_16 = __pyx_t_17; __pyx_t_17 = NULL; + #else + CYTHON_UNUSED_VAR(__pyx_t_17); + #endif + __Pyx_XDECREF_SET(__pyx_v_sig_series, ((PyObject*)__pyx_t_16)); + __pyx_t_16 = 0; + __Pyx_XDECREF_SET(__pyx_v_last_type, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_13 = __pyx_v_sig_series; __Pyx_INCREF(__pyx_t_13); __pyx_t_18 = 0; + for (;;) { + if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_13)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_13, __pyx_t_18); __Pyx_INCREF(__pyx_t_1); __pyx_t_18++; if (unlikely((0 < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + #else + __pyx_t_1 = PySequence_ITEM(__pyx_t_13, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + __Pyx_XDECREF_SET(__pyx_v_sig_type, __pyx_t_1); + __pyx_t_1 = 0; + if (unlikely(__pyx_v_sigindex_node == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_v_sig_type, __pyx_v_sigindex_node, Py_NE)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + if (__pyx_t_4) { + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(__pyx_v_sigindex_node == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + if (unlikely((PyDict_SetItem(__pyx_v_sigindex_node, __pyx_v_sig_type, __pyx_t_1) < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_INCREF(__pyx_t_1); + __Pyx_DECREF_SET(__pyx_v_sigindex_node, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L99; + } + /*else*/ { + if (unlikely(__pyx_v_sigindex_node == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_sigindex_node, __pyx_v_sig_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF_SET(__pyx_v_sigindex_node, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + } + __pyx_L99:; + } + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(__pyx_v_sigindex_node == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + if (unlikely((PyDict_SetItem(__pyx_v_sigindex_node, __pyx_v_last_type, __pyx_v_sig) < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_sigindex_matches = ((PyObject*)__pyx_t_6); + __pyx_t_6 = 0; + __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_INCREF(__pyx_v__fused_sigindex); + __Pyx_GIVEREF(__pyx_v__fused_sigindex); + PyList_SET_ITEM(__pyx_t_6, 0, __pyx_v__fused_sigindex); + __pyx_v_sigindex_candidates = ((PyObject*)__pyx_t_6); + __pyx_t_6 = 0; + __pyx_t_6 = __pyx_v_dest_sig; __Pyx_INCREF(__pyx_t_6); __pyx_t_14 = 0; + for (;;) { + if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_6)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_13 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_14); __Pyx_INCREF(__pyx_t_13); __pyx_t_14++; if (unlikely((0 < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + #else + __pyx_t_13 = PySequence_ITEM(__pyx_t_6, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + #endif + __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_13); + __pyx_t_13 = 0; + __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_XDECREF_SET(__pyx_v_found_matches, ((PyObject*)__pyx_t_13)); + __pyx_t_13 = 0; + __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_XDECREF_SET(__pyx_v_found_candidates, ((PyObject*)__pyx_t_13)); + __pyx_t_13 = 0; + __pyx_t_4 = (__pyx_v_dst_type == Py_None); + if (__pyx_t_4) { + __pyx_t_13 = __pyx_v_sigindex_matches; __Pyx_INCREF(__pyx_t_13); __pyx_t_5 = 0; + for (;;) { + if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_13)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_13, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + #else + __pyx_t_1 = PySequence_ITEM(__pyx_t_13, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_sn, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + if (unlikely(__pyx_v_sn == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyDict_Values(__pyx_v_sn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_19 = __Pyx_PyList_Extend(__pyx_v_found_matches, __pyx_t_1); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = __pyx_v_sigindex_candidates; __Pyx_INCREF(__pyx_t_13); __pyx_t_5 = 0; + for (;;) { + if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_13)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_13, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + #else + __pyx_t_1 = PySequence_ITEM(__pyx_t_13, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_sn, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + if (unlikely(__pyx_v_sn == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyDict_Values(__pyx_v_sn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_19 = __Pyx_PyList_Extend(__pyx_v_found_candidates, __pyx_t_1); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + goto __pyx_L103; + } + /*else*/ { + __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_INCREF(__pyx_v_sigindex_matches); + __Pyx_GIVEREF(__pyx_v_sigindex_matches); + PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_sigindex_matches); + __Pyx_INCREF(__pyx_v_sigindex_candidates); + __Pyx_GIVEREF(__pyx_v_sigindex_candidates); + PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_v_sigindex_candidates); + __pyx_t_1 = __pyx_t_13; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + for (;;) { + if (__pyx_t_5 >= 2) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_13 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_13); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + #else + __pyx_t_13 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + #endif + __Pyx_XDECREF_SET(__pyx_v_search_list, ((PyObject*)__pyx_t_13)); + __pyx_t_13 = 0; + if (unlikely(__pyx_v_search_list == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_13 = __pyx_v_search_list; __Pyx_INCREF(__pyx_t_13); __pyx_t_18 = 0; + for (;;) { + if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_13)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_16 = PyList_GET_ITEM(__pyx_t_13, __pyx_t_18); __Pyx_INCREF(__pyx_t_16); __pyx_t_18++; if (unlikely((0 < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + #else + __pyx_t_16 = PySequence_ITEM(__pyx_t_13, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + #endif + if (!(likely(PyDict_CheckExact(__pyx_t_16))||((__pyx_t_16) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_16))) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_sn, ((PyObject*)__pyx_t_16)); + __pyx_t_16 = 0; + if (unlikely(__pyx_v_sn == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_v_dst_type, __pyx_v_sn, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 228, __pyx_L1_error) + if (__pyx_t_4) { + if (unlikely(__pyx_v_sn == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_16 = __Pyx_PyDict_GetItem(__pyx_v_sn, __pyx_v_dst_type); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_19 = __Pyx_PyList_Append(__pyx_v_found_matches, __pyx_t_16); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + } + } + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_L103:; + __Pyx_INCREF(__pyx_v_found_matches); + __Pyx_DECREF_SET(__pyx_v_sigindex_matches, __pyx_v_found_matches); + __Pyx_INCREF(__pyx_v_found_candidates); + __Pyx_DECREF_SET(__pyx_v_sigindex_candidates, __pyx_v_found_candidates); + __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_found_matches) != 0); + if (!__pyx_t_2) { + } else { + __pyx_t_4 = __pyx_t_2; + goto __pyx_L118_bool_binop_done; + } + __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_found_candidates) != 0); + __pyx_t_4 = __pyx_t_2; + __pyx_L118_bool_binop_done:; + __pyx_t_2 = (!__pyx_t_4); + if (__pyx_t_2) { + goto __pyx_L102_break; + } + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L120_for_end; + __pyx_L102_break:; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L120_for_end; + __pyx_L120_for_end:; + __Pyx_INCREF(__pyx_v_sigindex_matches); + __pyx_v_candidates = __pyx_v_sigindex_matches; + __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0); + __pyx_t_4 = (!__pyx_t_2); + if (unlikely(__pyx_t_4)) { + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_Raise(__pyx_t_6, 0, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_14 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_14 > 1); + if (unlikely(__pyx_t_4)) { + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_Raise(__pyx_t_6, 0, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(0, 228, __pyx_L1_error) + } + /*else*/ { + __Pyx_XDECREF(__pyx_r); + if (unlikely(__pyx_v_signatures == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 228, __pyx_L1_error) + } + __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; } - __pyx_L3:; - - /* "View.MemoryView":255 - * result.data = buf - * - * return result # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(((PyObject *)__pyx_r)); - __Pyx_INCREF(((PyObject *)__pyx_v_result)); - __pyx_r = __pyx_v_result; - goto __pyx_L0; - - /* "View.MemoryView":244 - * - * @cname("__pyx_array_new") - * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< - * char *mode, char *buf): - * cdef array result - */ /* function exit code */ __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.array_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_16); + __Pyx_XDECREF(__pyx_t_17); + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_result); - __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_XDECREF(__pyx_v_search_list); + __Pyx_XDECREF(__pyx_v_sn); + __Pyx_XDECREF(__pyx_v_sigindex_node); + __Pyx_XDECREF(__pyx_v_dest_sig); + __Pyx_XDECREF((PyObject *)__pyx_v_ndarray); + __Pyx_XDECREF(__pyx_v_arg_as_memoryview); + __Pyx_XDECREF(__pyx_v_arg); + __Pyx_XDECREF(__pyx_v_dtype); + __Pyx_XDECREF(__pyx_v_arg_base); + __Pyx_XDECREF(__pyx_v_sig); + __Pyx_XDECREF(__pyx_v_sig_series); + __Pyx_XDECREF(__pyx_v_last_type); + __Pyx_XDECREF(__pyx_v_sig_type); + __Pyx_XDECREF(__pyx_v_sigindex_matches); + __Pyx_XDECREF(__pyx_v_sigindex_candidates); + __Pyx_XDECREF(__pyx_v_dst_type); + __Pyx_XDECREF(__pyx_v_found_matches); + __Pyx_XDECREF(__pyx_v_found_candidates); + __Pyx_XDECREF(__pyx_v_candidates); + __Pyx_XDECREF(__pyx_v_kwargs); + __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "View.MemoryView":281 - * cdef class Enum(object): - * cdef object name - * def __init__(self, name): # <<<<<<<<<<<<<< - * self.name = name - * def __repr__(self): - */ - /* Python wrapper */ -static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_name = 0; +static PyObject *__pyx_fuse_0_0__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_19_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_fuse_0_0__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_19_fit_efm = {"__pyx_fuse_0_0_fit_efm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0_0__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_19_fit_efm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm}; +static PyObject *__pyx_fuse_0_0__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_19_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + int __pyx_v_num_threads; + __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_V = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_H1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_H2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - int __pyx_r; + PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + __Pyx_RefNannySetupContext("_fit_efm (wrapper)", 0); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0}; - PyObject* values[1] = {0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_num_threads,&__pyx_n_s_A,&__pyx_n_s_A_uids,&__pyx_n_s_A_iids,&__pyx_n_s_A_user_counts,&__pyx_n_s_A_item_counts,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_aids,&__pyx_n_s_X_user_counts,&__pyx_n_s_X_aspect_counts,&__pyx_n_s_Y,&__pyx_n_s_Y_iids,&__pyx_n_s_Y_aids,&__pyx_n_s_Y_item_counts,&__pyx_n_s_Y_aspect_counts,&__pyx_n_s_U1,&__pyx_n_s_U2,&__pyx_n_s_V,&__pyx_n_s_H1,&__pyx_n_s_H2,0}; + PyObject* values[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (__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); + switch (__pyx_nargs) { + case 22: values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + CYTHON_FALLTHROUGH; + case 21: values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + CYTHON_FALLTHROUGH; + case 20: values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + CYTHON_FALLTHROUGH; + case 19: values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + CYTHON_FALLTHROUGH; + case 18: values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + CYTHON_FALLTHROUGH; + case 17: values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + CYTHON_FALLTHROUGH; + case 16: values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num_threads)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 1); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 2); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 3); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 4); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_user_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 5); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_item_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 6); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 7); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 8); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 9); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_user_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 10); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aspect_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 11); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 12); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 13); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 14); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 15: + if (likely((values[15] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_item_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 15); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 16: + if (likely((values[16] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_aspect_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 16); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 17: + if (likely((values[17] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 17); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 18: + if (likely((values[18] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 18); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 19: + if (likely((values[19] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_V)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 19); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 20: + if (likely((values[20] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_H1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 20); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 21: + if (likely((values[21] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_H2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 21); __PYX_ERR(0, 228, __pyx_L3_error) + } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(2, 281, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_fit_efm") < 0)) __PYX_ERR(0, 228, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { + } else if (unlikely(__pyx_nargs != 22)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); } - __pyx_v_name = values[0]; + __pyx_v_self = values[0]; + __pyx_v_num_threads = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L3_error) + __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_uids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_iids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_user_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_item_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_user_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aspect_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_Y = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_iids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_item_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aspect_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_U1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_U2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_V = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_V.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_H1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[20], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_H2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 281, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, __pyx_nargs); __PYX_ERR(0, 228, __pyx_L3_error) __pyx_L3_error:; - __Pyx_AddTraceback("View.MemoryView.Enum.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_V, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H2, 1); + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); - return -1; + return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v_name); + __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_18_fit_efm(__pyx_self, __pyx_v_self, __pyx_v_num_threads, __pyx_v_A, __pyx_v_A_uids, __pyx_v_A_iids, __pyx_v_A_user_counts, __pyx_v_A_item_counts, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_aids, __pyx_v_X_user_counts, __pyx_v_X_aspect_counts, __pyx_v_Y, __pyx_v_Y_iids, __pyx_v_Y_aids, __pyx_v_Y_item_counts, __pyx_v_Y_aspect_counts, __pyx_v_U1, __pyx_v_U2, __pyx_v_V, __pyx_v_H1, __pyx_v_H2); /* function exit code */ + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_V, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H2, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name) { - int __pyx_r; +static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_18_fit_efm(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_A_uids, __Pyx_memviewslice __pyx_v_A_iids, __Pyx_memviewslice __pyx_v_A_user_counts, __Pyx_memviewslice __pyx_v_A_item_counts, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_X_user_counts, __Pyx_memviewslice __pyx_v_X_aspect_counts, __Pyx_memviewslice __pyx_v_Y, __Pyx_memviewslice __pyx_v_Y_iids, __Pyx_memviewslice __pyx_v_Y_aids, __Pyx_memviewslice __pyx_v_Y_item_counts, __Pyx_memviewslice __pyx_v_Y_aspect_counts, __Pyx_memviewslice __pyx_v_U1, __Pyx_memviewslice __pyx_v_U2, __Pyx_memviewslice __pyx_v_V, __Pyx_memviewslice __pyx_v_H1, __Pyx_memviewslice __pyx_v_H2) { + long __pyx_v_num_users; + long __pyx_v_num_items; + long __pyx_v_num_aspects; + int __pyx_v_num_explicit_factors; + int __pyx_v_num_latent_factors; + float __pyx_v_lambda_x; + float __pyx_v_lambda_y; + float __pyx_v_lambda_u; + float __pyx_v_lambda_h; + float __pyx_v_lambda_v; + float __pyx_v_prediction; + float __pyx_v_score; + float __pyx_v_loss; + PyArrayObject *__pyx_v_U1_numerator = 0; + PyArrayObject *__pyx_v_U1_denominator = 0; + PyArrayObject *__pyx_v_U2_numerator = 0; + PyArrayObject *__pyx_v_U2_denominator = 0; + PyArrayObject *__pyx_v_V_numerator = 0; + PyArrayObject *__pyx_v_V_denominator = 0; + PyArrayObject *__pyx_v_H1_numerator = 0; + PyArrayObject *__pyx_v_H1_denominator = 0; + PyArrayObject *__pyx_v_H2_numerator = 0; + PyArrayObject *__pyx_v_H2_denominator = 0; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_v_k; + int __pyx_v_idx; + float __pyx_v_eps; + PyObject *__pyx_v_t = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_denominator; + __Pyx_Buffer __pyx_pybuffer_H1_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_numerator; + __Pyx_Buffer __pyx_pybuffer_H1_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_denominator; + __Pyx_Buffer __pyx_pybuffer_H2_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_numerator; + __Pyx_Buffer __pyx_pybuffer_H2_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_denominator; + __Pyx_Buffer __pyx_pybuffer_U1_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_numerator; + __Pyx_Buffer __pyx_pybuffer_U1_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_denominator; + __Pyx_Buffer __pyx_pybuffer_U2_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_numerator; + __Pyx_Buffer __pyx_pybuffer_U2_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_V_denominator; + __Pyx_Buffer __pyx_pybuffer_V_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_V_numerator; + __Pyx_Buffer __pyx_pybuffer_V_numerator; + PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__", 0); + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + long __pyx_t_3; + int __pyx_t_4; + float __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyArrayObject *__pyx_t_9 = NULL; + PyArrayObject *__pyx_t_10 = NULL; + PyArrayObject *__pyx_t_11 = NULL; + PyArrayObject *__pyx_t_12 = NULL; + PyArrayObject *__pyx_t_13 = NULL; + PyArrayObject *__pyx_t_14 = NULL; + PyArrayObject *__pyx_t_15 = NULL; + PyArrayObject *__pyx_t_16 = NULL; + PyArrayObject *__pyx_t_17 = NULL; + PyArrayObject *__pyx_t_18 = NULL; + Py_ssize_t __pyx_t_19; + PyObject *(*__pyx_t_20)(PyObject *); + Py_ssize_t __pyx_t_21; + Py_ssize_t __pyx_t_22; + Py_ssize_t __pyx_t_23; + Py_ssize_t __pyx_t_24; + Py_ssize_t __pyx_t_25; + Py_ssize_t __pyx_t_26; + Py_ssize_t __pyx_t_27; + float __pyx_t_28; + int __pyx_t_29; + int __pyx_t_30; + long __pyx_t_31; + long __pyx_t_32; + Py_ssize_t __pyx_t_33; + Py_ssize_t __pyx_t_34; + __pyx_t_5numpy_float32_t __pyx_t_35; + __pyx_t_5numpy_float32_t __pyx_t_36; + int __pyx_t_37; + Py_UCS4 __pyx_t_38; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_fuse_0_0_fit_efm", 0); + __pyx_pybuffer_U1_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_U1_numerator.refcount = 0; + __pyx_pybuffernd_U1_numerator.data = NULL; + __pyx_pybuffernd_U1_numerator.rcbuffer = &__pyx_pybuffer_U1_numerator; + __pyx_pybuffer_U1_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_U1_denominator.refcount = 0; + __pyx_pybuffernd_U1_denominator.data = NULL; + __pyx_pybuffernd_U1_denominator.rcbuffer = &__pyx_pybuffer_U1_denominator; + __pyx_pybuffer_U2_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_U2_numerator.refcount = 0; + __pyx_pybuffernd_U2_numerator.data = NULL; + __pyx_pybuffernd_U2_numerator.rcbuffer = &__pyx_pybuffer_U2_numerator; + __pyx_pybuffer_U2_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_U2_denominator.refcount = 0; + __pyx_pybuffernd_U2_denominator.data = NULL; + __pyx_pybuffernd_U2_denominator.rcbuffer = &__pyx_pybuffer_U2_denominator; + __pyx_pybuffer_V_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_V_numerator.refcount = 0; + __pyx_pybuffernd_V_numerator.data = NULL; + __pyx_pybuffernd_V_numerator.rcbuffer = &__pyx_pybuffer_V_numerator; + __pyx_pybuffer_V_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_V_denominator.refcount = 0; + __pyx_pybuffernd_V_denominator.data = NULL; + __pyx_pybuffernd_V_denominator.rcbuffer = &__pyx_pybuffer_V_denominator; + __pyx_pybuffer_H1_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_H1_numerator.refcount = 0; + __pyx_pybuffernd_H1_numerator.data = NULL; + __pyx_pybuffernd_H1_numerator.rcbuffer = &__pyx_pybuffer_H1_numerator; + __pyx_pybuffer_H1_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_H1_denominator.refcount = 0; + __pyx_pybuffernd_H1_denominator.data = NULL; + __pyx_pybuffernd_H1_denominator.rcbuffer = &__pyx_pybuffer_H1_denominator; + __pyx_pybuffer_H2_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_H2_numerator.refcount = 0; + __pyx_pybuffernd_H2_numerator.data = NULL; + __pyx_pybuffernd_H2_numerator.rcbuffer = &__pyx_pybuffer_H2_numerator; + __pyx_pybuffer_H2_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_H2_denominator.refcount = 0; + __pyx_pybuffernd_H2_denominator.data = NULL; + __pyx_pybuffernd_H2_denominator.rcbuffer = &__pyx_pybuffer_H2_denominator; - /* "View.MemoryView":282 - * cdef object name - * def __init__(self, name): - * self.name = name # <<<<<<<<<<<<<< - * def __repr__(self): - * return self.name + /* "cornac/models/efm/recom_efm.pyx":238 + * """ + * cdef: + * long num_users = self.train_set.num_users # <<<<<<<<<<<<<< + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects */ - __Pyx_INCREF(__pyx_v_name); - __Pyx_GIVEREF(__pyx_v_name); - __Pyx_GOTREF(__pyx_v_self->name); - __Pyx_DECREF(__pyx_v_self->name); - __pyx_v_self->name = __pyx_v_name; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_num_users = __pyx_t_3; - /* "View.MemoryView":281 - * cdef class Enum(object): - * cdef object name - * def __init__(self, name): # <<<<<<<<<<<<<< - * self.name = name - * def __repr__(self): + /* "cornac/models/efm/recom_efm.pyx":239 + * cdef: + * long num_users = self.train_set.num_users + * long num_items = self.train_set.num_items # <<<<<<<<<<<<<< + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_items = __pyx_t_3; - /* function exit code */ - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":240 + * long num_users = self.train_set.num_users + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< + * int num_explicit_factors = self.num_explicit_factors + * int num_latent_factors = self.num_latent_factors + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_aspects = __pyx_t_3; -/* "View.MemoryView":283 - * def __init__(self, name): - * self.name = name - * def __repr__(self): # <<<<<<<<<<<<<< - * return self.name + /* "cornac/models/efm/recom_efm.pyx":241 + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors # <<<<<<<<<<<<<< + * int num_latent_factors = self.num_latent_factors * */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_explicit_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_explicit_factors = __pyx_t_4; -/* Python wrapper */ -static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); - __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__repr__", 0); - - /* "View.MemoryView":284 - * self.name = name - * def __repr__(self): - * return self.name # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":242 + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors + * int num_latent_factors = self.num_latent_factors # <<<<<<<<<<<<<< * - * cdef generic = Enum("") + * floating lambda_x = self.lambda_x */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->name); - __pyx_r = __pyx_v_self->name; - goto __pyx_L0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_latent_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 242, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_latent_factors = __pyx_t_4; - /* "View.MemoryView":283 - * def __init__(self, name): - * self.name = name - * def __repr__(self): # <<<<<<<<<<<<<< - * return self.name + /* "cornac/models/efm/recom_efm.pyx":244 + * int num_latent_factors = self.num_latent_factors * + * floating lambda_x = self.lambda_x # <<<<<<<<<<<<<< + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_x = __pyx_t_5; - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":245 + * + * floating lambda_x = self.lambda_x + * floating lambda_y = self.lambda_y # <<<<<<<<<<<<<< + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 245, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_y = __pyx_t_5; -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict + /* "cornac/models/efm/recom_efm.pyx":246 + * floating lambda_x = self.lambda_x + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u # <<<<<<<<<<<<<< + * floating lambda_h = self.lambda_h + * floating lambda_v = self.lambda_v */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_u); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_u = __pyx_t_5; -/* Python wrapper */ -static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf___pyx_MemviewEnum___reduce_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + /* "cornac/models/efm/recom_efm.pyx":247 + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h # <<<<<<<<<<<<<< + * floating lambda_v = self.lambda_v + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_h); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_h = __pyx_t_5; - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":248 + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h + * floating lambda_v = self.lambda_v # <<<<<<<<<<<<<< + * + * floating prediction, score, loss + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_v); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 248, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 248, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_v = __pyx_t_5; -static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { - PyObject *__pyx_v_state = 0; - PyObject *__pyx_v__dict = 0; - int __pyx_v_use_setstate; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); + /* "cornac/models/efm/recom_efm.pyx":252 + * floating prediction, score, loss + * + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 252, __pyx_L1_error) + __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 252, __pyx_L1_error) + } else {__pyx_pybuffernd_U1_numerator.diminfo[0].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_numerator.diminfo[0].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_numerator.diminfo[1].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_numerator.diminfo[1].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_9 = 0; + __pyx_v_U1_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "(tree fragment)":5 - * cdef object _dict - * cdef bint use_setstate - * state = (self.name,) # <<<<<<<<<<<<<< - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: + /* "cornac/models/efm/recom_efm.pyx":253 + * + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self->name); - __Pyx_GIVEREF(__pyx_v_self->name); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name); - __pyx_v_state = ((PyObject*)__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 253, __pyx_L1_error) + __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 253, __pyx_L1_error) + } else {__pyx_pybuffernd_U1_denominator.diminfo[0].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_denominator.diminfo[0].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_denominator.diminfo[1].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_denominator.diminfo[1].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_10 = 0; + __pyx_v_U1_denominator = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; - /* "(tree fragment)":6 - * cdef bint use_setstate - * state = (self.name,) - * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< - * if _dict is not None: - * state += (_dict,) + /* "cornac/models/efm/recom_efm.pyx":254 + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) */ - __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_v__dict = __pyx_t_1; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); __pyx_t_1 = 0; - - /* "(tree fragment)":7 - * state = (self.name,) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True - */ - __pyx_t_2 = (__pyx_v__dict != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - - /* "(tree fragment)":8 - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - * state += (_dict,) # <<<<<<<<<<<<<< - * use_setstate = True - * else: - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v__dict); - __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); - __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4)); - __pyx_t_4 = 0; - - /* "(tree fragment)":9 - * if _dict is not None: - * state += (_dict,) - * use_setstate = True # <<<<<<<<<<<<<< - * else: - * use_setstate = self.name is not None - */ - __pyx_v_use_setstate = 1; - - /* "(tree fragment)":7 - * state = (self.name,) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True - */ - goto __pyx_L3; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 254, __pyx_L1_error) + __pyx_t_11 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 254, __pyx_L1_error) + } else {__pyx_pybuffernd_U2_numerator.diminfo[0].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_numerator.diminfo[0].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_numerator.diminfo[1].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_numerator.diminfo[1].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[1]; + } } + __pyx_t_11 = 0; + __pyx_v_U2_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "(tree fragment)":11 - * use_setstate = True - * else: - * use_setstate = self.name is not None # <<<<<<<<<<<<<< - * if use_setstate: - * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + /* "cornac/models/efm/recom_efm.pyx":255 + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) */ - /*else*/ { - __pyx_t_3 = (__pyx_v_self->name != Py_None); - __pyx_v_use_setstate = __pyx_t_3; + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 255, __pyx_L1_error) + __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 255, __pyx_L1_error) + } else {__pyx_pybuffernd_U2_denominator.diminfo[0].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_denominator.diminfo[0].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_denominator.diminfo[1].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_denominator.diminfo[1].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[1]; + } } - __pyx_L3:; - - /* "(tree fragment)":12 - * else: - * use_setstate = self.name is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state - * else: - */ - __pyx_t_3 = (__pyx_v_use_setstate != 0); - if (__pyx_t_3) { - - /* "(tree fragment)":13 - * use_setstate = self.name is not None - * if use_setstate: - * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state # <<<<<<<<<<<<<< - * else: - * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_184977713); - __Pyx_GIVEREF(__pyx_int_184977713); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); - __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); - __pyx_t_4 = 0; - __pyx_t_1 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; + __pyx_t_12 = 0; + __pyx_v_U2_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "(tree fragment)":12 - * else: - * use_setstate = self.name is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state - * else: + /* "cornac/models/efm/recom_efm.pyx":256 + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 256, __pyx_L1_error) + __pyx_t_13 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_V_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 256, __pyx_L1_error) + } else {__pyx_pybuffernd_V_numerator.diminfo[0].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_numerator.diminfo[0].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_numerator.diminfo[1].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_numerator.diminfo[1].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[1]; + } } + __pyx_t_13 = 0; + __pyx_v_V_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "(tree fragment)":15 - * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state - * else: - * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_Enum__set_state(self, __pyx_state) + /* "cornac/models/efm/recom_efm.pyx":257 + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_184977713); - __Pyx_GIVEREF(__pyx_int_184977713); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); - __pyx_t_5 = 0; - __pyx_t_1 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 257, __pyx_L1_error) + __pyx_t_14 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_V_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 257, __pyx_L1_error) + } else {__pyx_pybuffernd_V_denominator.diminfo[0].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_denominator.diminfo[0].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_denominator.diminfo[1].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_denominator.diminfo[1].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[1]; + } } + __pyx_t_14 = 0; + __pyx_v_V_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.Enum.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_state); - __Pyx_XDECREF(__pyx_v__dict); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":16 - * else: - * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_Enum__set_state(self, __pyx_state) + /* "cornac/models/efm/recom_efm.pyx":258 + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 258, __pyx_L1_error) + __pyx_t_15 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 258, __pyx_L1_error) + } else {__pyx_pybuffernd_H1_numerator.diminfo[0].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_numerator.diminfo[0].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_numerator.diminfo[1].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_numerator.diminfo[1].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_15 = 0; + __pyx_v_H1_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; -/* Python wrapper */ -static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf___pyx_MemviewEnum_2__setstate_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); - - /* "(tree fragment)":17 - * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_Enum__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":259 + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error) - __pyx_t_1 = __pyx_unpickle_Enum__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 259, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 259, __pyx_L1_error) + __pyx_t_16 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 259, __pyx_L1_error) + } else {__pyx_pybuffernd_H1_denominator.diminfo[0].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_denominator.diminfo[0].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_denominator.diminfo[1].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_denominator.diminfo[1].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_16 = 0; + __pyx_v_H1_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "(tree fragment)":16 - * else: - * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_Enum__set_state(self, __pyx_state) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":298 - * - * @cname('__pyx_align_pointer') - * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< - * "Align pointer memory on a given boundary" - * cdef Py_intptr_t aligned_p = memory - */ - -static void *__pyx_align_pointer(void *__pyx_v_memory, size_t __pyx_v_alignment) { - Py_intptr_t __pyx_v_aligned_p; - size_t __pyx_v_offset; - void *__pyx_r; - int __pyx_t_1; - - /* "View.MemoryView":300 - * cdef void *align_pointer(void *memory, size_t alignment) nogil: - * "Align pointer memory on a given boundary" - * cdef Py_intptr_t aligned_p = memory # <<<<<<<<<<<<<< - * cdef size_t offset - * - */ - __pyx_v_aligned_p = ((Py_intptr_t)__pyx_v_memory); - - /* "View.MemoryView":304 - * - * with cython.cdivision(True): - * offset = aligned_p % alignment # <<<<<<<<<<<<<< - * - * if offset > 0: - */ - __pyx_v_offset = (__pyx_v_aligned_p % __pyx_v_alignment); - - /* "View.MemoryView":306 - * offset = aligned_p % alignment - * - * if offset > 0: # <<<<<<<<<<<<<< - * aligned_p += alignment - offset - * - */ - __pyx_t_1 = ((__pyx_v_offset > 0) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":307 - * - * if offset > 0: - * aligned_p += alignment - offset # <<<<<<<<<<<<<< - * - * return aligned_p + /* "cornac/models/efm/recom_efm.pyx":260 + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * int i, j, k, idx */ - __pyx_v_aligned_p = (__pyx_v_aligned_p + (__pyx_v_alignment - __pyx_v_offset)); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 260, __pyx_L1_error) + __pyx_t_17 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 260, __pyx_L1_error) + } else {__pyx_pybuffernd_H2_numerator.diminfo[0].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_numerator.diminfo[0].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_numerator.diminfo[1].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_numerator.diminfo[1].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_17 = 0; + __pyx_v_H2_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":306 - * offset = aligned_p % alignment - * - * if offset > 0: # <<<<<<<<<<<<<< - * aligned_p += alignment - offset - * + /* "cornac/models/efm/recom_efm.pyx":261 + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * int i, j, k, idx + * long n_ratings */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 261, __pyx_L1_error) + __pyx_t_18 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 261, __pyx_L1_error) + } else {__pyx_pybuffernd_H2_denominator.diminfo[0].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_denominator.diminfo[0].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_denominator.diminfo[1].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_denominator.diminfo[1].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[1]; + } } + __pyx_t_18 = 0; + __pyx_v_H2_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":309 - * aligned_p += alignment - offset - * - * return aligned_p # <<<<<<<<<<<<<< - * + /* "cornac/models/efm/recom_efm.pyx":265 + * long n_ratings * - */ - __pyx_r = ((void *)__pyx_v_aligned_p); - goto __pyx_L0; - - /* "View.MemoryView":298 + * floating eps = 1e-9 # <<<<<<<<<<<<<< * - * @cname('__pyx_align_pointer') - * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< - * "Align pointer memory on a given boundary" - * cdef Py_intptr_t aligned_p = memory + * for t in range(1, self.max_iter + 1): */ + __pyx_v_eps = 1e-9; - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":345 - * cdef __Pyx_TypeInfo *typeinfo + /* "cornac/models/efm/recom_efm.pyx":267 + * floating eps = 1e-9 * - * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< - * self.obj = obj - * self.flags = flags + * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< + * loss = 0. + * U1_numerator.fill(0) */ - -/* Python wrapper */ -static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_obj = 0; - int __pyx_v_flags; - int __pyx_v_dtype_is_object; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_flags,&__pyx_n_s_dtype_is_object,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flags)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(2, 345, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dtype_is_object); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(2, 345, __pyx_L3_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_max_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_int_1); + __Pyx_GIVEREF(__pyx_int_1); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { + __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_19 = 0; + __pyx_t_20 = NULL; + } else { + __pyx_t_19 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_20 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 267, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + for (;;) { + if (likely(!__pyx_t_20)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 267, __pyx_L1_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } else { + if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 267, __pyx_L1_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif } } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + __pyx_t_2 = __pyx_t_20(__pyx_t_1); + if (unlikely(!__pyx_t_2)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 267, __pyx_L1_error) + } break; - default: goto __pyx_L5_argtuple_error; } + __Pyx_GOTREF(__pyx_t_2); } - __pyx_v_obj = values[0]; - __pyx_v_flags = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_flags == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 345, __pyx_L3_error) - if (values[2]) { - __pyx_v_dtype_is_object = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_dtype_is_object == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 345, __pyx_L3_error) - } else { - __pyx_v_dtype_is_object = ((int)0); - } - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 345, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return -1; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_obj, __pyx_v_flags, __pyx_v_dtype_is_object); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__cinit__", 0); - - /* "View.MemoryView":346 - * - * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): - * self.obj = obj # <<<<<<<<<<<<<< - * self.flags = flags - * if type(self) is memoryview or obj is not None: - */ - __Pyx_INCREF(__pyx_v_obj); - __Pyx_GIVEREF(__pyx_v_obj); - __Pyx_GOTREF(__pyx_v_self->obj); - __Pyx_DECREF(__pyx_v_self->obj); - __pyx_v_self->obj = __pyx_v_obj; - - /* "View.MemoryView":347 - * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): - * self.obj = obj - * self.flags = flags # <<<<<<<<<<<<<< - * if type(self) is memoryview or obj is not None: - * __Pyx_GetBuffer(obj, &self.view, flags) - */ - __pyx_v_self->flags = __pyx_v_flags; - - /* "View.MemoryView":348 - * self.obj = obj - * self.flags = flags - * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< - * __Pyx_GetBuffer(obj, &self.view, flags) - * if self.view.obj == NULL: - */ - __pyx_t_2 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))) == ((PyObject *)__pyx_memoryview_type)); - __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_v_obj != Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); - __pyx_t_1 = __pyx_t_2; - __pyx_L4_bool_binop_done:; - if (__pyx_t_1) { - - /* "View.MemoryView":349 - * self.flags = flags - * if type(self) is memoryview or obj is not None: - * __Pyx_GetBuffer(obj, &self.view, flags) # <<<<<<<<<<<<<< - * if self.view.obj == NULL: - * (<__pyx_buffer *> &self.view).obj = Py_None - */ - __pyx_t_4 = __Pyx_GetBuffer(__pyx_v_obj, (&__pyx_v_self->view), __pyx_v_flags); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 349, __pyx_L1_error) - - /* "View.MemoryView":350 - * if type(self) is memoryview or obj is not None: - * __Pyx_GetBuffer(obj, &self.view, flags) - * if self.view.obj == NULL: # <<<<<<<<<<<<<< - * (<__pyx_buffer *> &self.view).obj = Py_None - * Py_INCREF(Py_None) - */ - __pyx_t_1 = ((((PyObject *)__pyx_v_self->view.obj) == NULL) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":351 - * __Pyx_GetBuffer(obj, &self.view, flags) - * if self.view.obj == NULL: - * (<__pyx_buffer *> &self.view).obj = Py_None # <<<<<<<<<<<<<< - * Py_INCREF(Py_None) - * - */ - ((Py_buffer *)(&__pyx_v_self->view))->obj = Py_None; + __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2); + __pyx_t_2 = 0; - /* "View.MemoryView":352 - * if self.view.obj == NULL: - * (<__pyx_buffer *> &self.view).obj = Py_None - * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":268 * - * global __pyx_memoryview_thread_locks_used + * for t in range(1, self.max_iter + 1): + * loss = 0. # <<<<<<<<<<<<<< + * U1_numerator.fill(0) + * U1_denominator.fill(0) */ - Py_INCREF(Py_None); + __pyx_v_loss = 0.; - /* "View.MemoryView":350 - * if type(self) is memoryview or obj is not None: - * __Pyx_GetBuffer(obj, &self.view, flags) - * if self.view.obj == NULL: # <<<<<<<<<<<<<< - * (<__pyx_buffer *> &self.view).obj = Py_None - * Py_INCREF(Py_None) + /* "cornac/models/efm/recom_efm.pyx":269 + * for t in range(1, self.max_iter + 1): + * loss = 0. + * U1_numerator.fill(0) # <<<<<<<<<<<<<< + * U1_denominator.fill(0) + * U2_numerator.fill(0) */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":348 - * self.obj = obj - * self.flags = flags - * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< - * __Pyx_GetBuffer(obj, &self.view, flags) - * if self.view.obj == NULL: - */ - } - - /* "View.MemoryView":355 - * - * global __pyx_memoryview_thread_locks_used - * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< - * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] - * __pyx_memoryview_thread_locks_used += 1 - */ - __pyx_t_1 = ((__pyx_memoryview_thread_locks_used < 8) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":356 - * global __pyx_memoryview_thread_locks_used - * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: - * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] # <<<<<<<<<<<<<< - * __pyx_memoryview_thread_locks_used += 1 - * if self.lock is NULL: - */ - __pyx_v_self->lock = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); - - /* "View.MemoryView":357 - * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: - * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] - * __pyx_memoryview_thread_locks_used += 1 # <<<<<<<<<<<<<< - * if self.lock is NULL: - * self.lock = PyThread_allocate_lock() - */ - __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used + 1); - - /* "View.MemoryView":355 - * - * global __pyx_memoryview_thread_locks_used - * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< - * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] - * __pyx_memoryview_thread_locks_used += 1 + /* "cornac/models/efm/recom_efm.pyx":270 + * loss = 0. + * U1_numerator.fill(0) + * U1_denominator.fill(0) # <<<<<<<<<<<<<< + * U2_numerator.fill(0) + * U2_denominator.fill(0) */ - } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":358 - * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] - * __pyx_memoryview_thread_locks_used += 1 - * if self.lock is NULL: # <<<<<<<<<<<<<< - * self.lock = PyThread_allocate_lock() - * if self.lock is NULL: + /* "cornac/models/efm/recom_efm.pyx":271 + * U1_numerator.fill(0) + * U1_denominator.fill(0) + * U2_numerator.fill(0) # <<<<<<<<<<<<<< + * U2_denominator.fill(0) + * V_numerator.fill(0) */ - __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); - if (__pyx_t_1) { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":359 - * __pyx_memoryview_thread_locks_used += 1 - * if self.lock is NULL: - * self.lock = PyThread_allocate_lock() # <<<<<<<<<<<<<< - * if self.lock is NULL: - * raise MemoryError + /* "cornac/models/efm/recom_efm.pyx":272 + * U1_denominator.fill(0) + * U2_numerator.fill(0) + * U2_denominator.fill(0) # <<<<<<<<<<<<<< + * V_numerator.fill(0) + * V_denominator.fill(0) */ - __pyx_v_self->lock = PyThread_allocate_lock(); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":360 - * if self.lock is NULL: - * self.lock = PyThread_allocate_lock() - * if self.lock is NULL: # <<<<<<<<<<<<<< - * raise MemoryError - * + /* "cornac/models/efm/recom_efm.pyx":273 + * U2_numerator.fill(0) + * U2_denominator.fill(0) + * V_numerator.fill(0) # <<<<<<<<<<<<<< + * V_denominator.fill(0) + * H1_numerator.fill(0) */ - __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); - if (unlikely(__pyx_t_1)) { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":361 - * self.lock = PyThread_allocate_lock() - * if self.lock is NULL: - * raise MemoryError # <<<<<<<<<<<<<< - * - * if flags & PyBUF_FORMAT: + /* "cornac/models/efm/recom_efm.pyx":274 + * U2_denominator.fill(0) + * V_numerator.fill(0) + * V_denominator.fill(0) # <<<<<<<<<<<<<< + * H1_numerator.fill(0) + * H1_denominator.fill(0) */ - PyErr_NoMemory(); __PYX_ERR(2, 361, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 274, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":360 - * if self.lock is NULL: - * self.lock = PyThread_allocate_lock() - * if self.lock is NULL: # <<<<<<<<<<<<<< - * raise MemoryError - * + /* "cornac/models/efm/recom_efm.pyx":275 + * V_numerator.fill(0) + * V_denominator.fill(0) + * H1_numerator.fill(0) # <<<<<<<<<<<<<< + * H1_denominator.fill(0) + * H2_numerator.fill(0) */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":358 - * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] - * __pyx_memoryview_thread_locks_used += 1 - * if self.lock is NULL: # <<<<<<<<<<<<<< - * self.lock = PyThread_allocate_lock() - * if self.lock is NULL: + /* "cornac/models/efm/recom_efm.pyx":276 + * V_denominator.fill(0) + * H1_numerator.fill(0) + * H1_denominator.fill(0) # <<<<<<<<<<<<<< + * H2_numerator.fill(0) + * H2_denominator.fill(0) */ - } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":363 - * raise MemoryError + /* "cornac/models/efm/recom_efm.pyx":277 + * H1_numerator.fill(0) + * H1_denominator.fill(0) + * H2_numerator.fill(0) # <<<<<<<<<<<<<< + * H2_denominator.fill(0) * - * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< - * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') - * else: */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); - if (__pyx_t_1) { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 277, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":364 + /* "cornac/models/efm/recom_efm.pyx":278 + * H1_denominator.fill(0) + * H2_numerator.fill(0) + * H2_denominator.fill(0) # <<<<<<<<<<<<<< * - * if flags & PyBUF_FORMAT: - * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') # <<<<<<<<<<<<<< - * else: - * self.dtype_is_object = dtype_is_object + * with nogil, parallel(num_threads=num_threads): */ - __pyx_t_2 = (((__pyx_v_self->view.format[0]) == 'O') != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L11_bool_binop_done; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } } - __pyx_t_2 = (((__pyx_v_self->view.format[1]) == '\x00') != 0); - __pyx_t_1 = __pyx_t_2; - __pyx_L11_bool_binop_done:; - __pyx_v_self->dtype_is_object = __pyx_t_1; + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":363 - * raise MemoryError + /* "cornac/models/efm/recom_efm.pyx":280 + * H2_denominator.fill(0) * - * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< - * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') - * else: + * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): */ - goto __pyx_L10; - } + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) private(__pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_3, __pyx_t_30, __pyx_t_31, __pyx_t_32, __pyx_t_33, __pyx_t_34, __pyx_t_35, __pyx_t_36, __pyx_t_4, __pyx_t_5) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_num_threads) + #endif /* _OPENMP */ + { + #ifdef _OPENMP + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + Py_BEGIN_ALLOW_THREADS + #endif /* _OPENMP */ - /* "View.MemoryView":366 - * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') - * else: - * self.dtype_is_object = dtype_is_object # <<<<<<<<<<<<<< - * - * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( + /* "cornac/models/efm/recom_efm.pyx":282 + * with nogil, parallel(num_threads=num_threads): + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): # <<<<<<<<<<<<<< + * i = A_uids[idx] + * j = A_iids[idx] */ - /*else*/ { - __pyx_v_self->dtype_is_object = __pyx_v_dtype_is_object; - } - __pyx_L10:; + if (unlikely(!__pyx_v_A.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("A"); __PYX_ERR(0, 282, __pyx_L12_error) } + __pyx_t_21 = (__pyx_v_A.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + float __pyx_parallel_temp4 = ((float)__PYX_NAN()); + float __pyx_parallel_temp5 = ((float)__PYX_NAN()); + float __pyx_parallel_temp6 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_23 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((float)__PYX_NAN()); + __pyx_v_score = ((float)__PYX_NAN()); - /* "View.MemoryView":368 - * self.dtype_is_object = dtype_is_object - * - * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( # <<<<<<<<<<<<<< - * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) - * self.typeinfo = NULL + /* "cornac/models/efm/recom_efm.pyx":283 + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): + * i = A_uids[idx] # <<<<<<<<<<<<<< + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ */ - __pyx_v_self->acquisition_count_aligned_p = ((__pyx_atomic_int *)__pyx_align_pointer(((void *)(&(__pyx_v_self->acquisition_count[0]))), (sizeof(__pyx_atomic_int)))); + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i = (*((short *) ( /* dim=0 */ (__pyx_v_A_uids.data + __pyx_t_24 * __pyx_v_A_uids.strides[0]) ))); - /* "View.MemoryView":370 - * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( - * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) - * self.typeinfo = NULL # <<<<<<<<<<<<<< - * - * def __dealloc__(memoryview self): + /* "cornac/models/efm/recom_efm.pyx":284 + * for idx in prange(A.shape[0]): + * i = A_uids[idx] + * j = A_iids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) */ - __pyx_v_self->typeinfo = NULL; + __pyx_t_24 = __pyx_v_idx; + __pyx_v_j = (*((short *) ( /* dim=0 */ (__pyx_v_A_iids.data + __pyx_t_24 * __pyx_v_A_iids.strides[0]) ))); - /* "View.MemoryView":345 - * cdef __Pyx_TypeInfo *typeinfo - * - * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< - * self.obj = obj - * self.flags = flags + /* "cornac/models/efm/recom_efm.pyx":285 + * i = A_uids[idx] + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ # <<<<<<<<<<<<<< + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = 0; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = 0; + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 285, __pyx_L16_error) - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":372 - * self.typeinfo = NULL - * - * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< - * if self.obj is not None: - * __Pyx_ReleaseBuffer(&self.view) + /* "cornac/models/efm/recom_efm.pyx":286 + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) # <<<<<<<<<<<<<< + * score = A[idx] + * loss += (prediction - score) * (prediction - score) */ + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = 0; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = 0; + __pyx_t_28 = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_latent_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_27 * __pyx_v_H1.strides[0]) ) + __pyx_t_26 * __pyx_v_H1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_24 * __pyx_v_H2.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 286, __pyx_L16_error) + __pyx_v_prediction = (__pyx_t_5 + __pyx_t_28); -/* Python wrapper */ -static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); - __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self) { - int __pyx_v_i; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - int __pyx_t_5; - PyThread_type_lock __pyx_t_6; - PyThread_type_lock __pyx_t_7; - __Pyx_RefNannySetupContext("__dealloc__", 0); - - /* "View.MemoryView":373 - * - * def __dealloc__(memoryview self): - * if self.obj is not None: # <<<<<<<<<<<<<< - * __Pyx_ReleaseBuffer(&self.view) - * elif (<__pyx_buffer *> &self.view).obj == Py_None: + /* "cornac/models/efm/recom_efm.pyx":287 + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): */ - __pyx_t_1 = (__pyx_v_self->obj != Py_None); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ))); - /* "View.MemoryView":374 - * def __dealloc__(memoryview self): - * if self.obj is not None: - * __Pyx_ReleaseBuffer(&self.view) # <<<<<<<<<<<<<< - * elif (<__pyx_buffer *> &self.view).obj == Py_None: - * + /* "cornac/models/efm/recom_efm.pyx":288 + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] */ - __Pyx_ReleaseBuffer((&__pyx_v_self->view)); + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - /* "View.MemoryView":373 - * - * def __dealloc__(memoryview self): - * if self.obj is not None: # <<<<<<<<<<<<<< - * __Pyx_ReleaseBuffer(&self.view) - * elif (<__pyx_buffer *> &self.view).obj == Py_None: + /* "cornac/models/efm/recom_efm.pyx":289 + * score = A[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] */ - goto __pyx_L3; - } + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":375 - * if self.obj is not None: - * __Pyx_ReleaseBuffer(&self.view) - * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< - * - * (<__pyx_buffer *> &self.view).obj = NULL + /* "cornac/models/efm/recom_efm.pyx":290 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] # <<<<<<<<<<<<<< + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] */ - __pyx_t_2 = ((((Py_buffer *)(&__pyx_v_self->view))->obj == Py_None) != 0); - if (__pyx_t_2) { + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_24 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":377 - * elif (<__pyx_buffer *> &self.view).obj == Py_None: - * - * (<__pyx_buffer *> &self.view).obj = NULL # <<<<<<<<<<<<<< - * Py_DECREF(Py_None) - * + /* "cornac/models/efm/recom_efm.pyx":291 + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] # <<<<<<<<<<<<<< + * U2_numerator[j, k] += score * U1[i, k] + * U2_denominator[j, k] += prediction * U1[i, k] */ - ((Py_buffer *)(&__pyx_v_self->view))->obj = NULL; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_24 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":378 - * - * (<__pyx_buffer *> &self.view).obj = NULL - * Py_DECREF(Py_None) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":292 + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] # <<<<<<<<<<<<<< + * U2_denominator[j, k] += prediction * U1[i, k] * - * cdef int i */ - Py_DECREF(Py_None); + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))); - /* "View.MemoryView":375 - * if self.obj is not None: - * __Pyx_ReleaseBuffer(&self.view) - * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":293 + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] + * U2_denominator[j, k] += prediction * U1[i, k] # <<<<<<<<<<<<<< * - * (<__pyx_buffer *> &self.view).obj = NULL - */ - } - __pyx_L3:; - - /* "View.MemoryView":382 - * cdef int i - * global __pyx_memoryview_thread_locks_used - * if self.lock != NULL: # <<<<<<<<<<<<<< - * for i in range(__pyx_memoryview_thread_locks_used): - * if __pyx_memoryview_thread_locks[i] is self.lock: - */ - __pyx_t_2 = ((__pyx_v_self->lock != NULL) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":383 - * global __pyx_memoryview_thread_locks_used - * if self.lock != NULL: - * for i in range(__pyx_memoryview_thread_locks_used): # <<<<<<<<<<<<<< - * if __pyx_memoryview_thread_locks[i] is self.lock: - * __pyx_memoryview_thread_locks_used -= 1 - */ - __pyx_t_3 = __pyx_memoryview_thread_locks_used; - __pyx_t_4 = __pyx_t_3; - for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { - __pyx_v_i = __pyx_t_5; - - /* "View.MemoryView":384 - * if self.lock != NULL: - * for i in range(__pyx_memoryview_thread_locks_used): - * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< - * __pyx_memoryview_thread_locks_used -= 1 - * if i != __pyx_memoryview_thread_locks_used: - */ - __pyx_t_2 = (((__pyx_memoryview_thread_locks[__pyx_v_i]) == __pyx_v_self->lock) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":385 - * for i in range(__pyx_memoryview_thread_locks_used): - * if __pyx_memoryview_thread_locks[i] is self.lock: - * __pyx_memoryview_thread_locks_used -= 1 # <<<<<<<<<<<<<< - * if i != __pyx_memoryview_thread_locks_used: - * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * for k in range(num_latent_factors): */ - __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used - 1); + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )))); + } - /* "View.MemoryView":386 - * if __pyx_memoryview_thread_locks[i] is self.lock: - * __pyx_memoryview_thread_locks_used -= 1 - * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< - * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( - * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + /* "cornac/models/efm/recom_efm.pyx":295 + * U2_denominator[j, k] += prediction * U1[i, k] + * + * for k in range(num_latent_factors): # <<<<<<<<<<<<<< + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] */ - __pyx_t_2 = ((__pyx_v_i != __pyx_memoryview_thread_locks_used) != 0); - if (__pyx_t_2) { + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":388 - * if i != __pyx_memoryview_thread_locks_used: - * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( - * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) # <<<<<<<<<<<<<< - * break - * else: + /* "cornac/models/efm/recom_efm.pyx":296 + * + * for k in range(num_latent_factors): + * H1_numerator[i, k] += score * H2[j, k] # <<<<<<<<<<<<<< + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] */ - __pyx_t_6 = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); - __pyx_t_7 = (__pyx_memoryview_thread_locks[__pyx_v_i]); + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_24 * __pyx_v_H2.strides[0]) ) + __pyx_t_25 * __pyx_v_H2.strides[1]) )))); - /* "View.MemoryView":387 - * __pyx_memoryview_thread_locks_used -= 1 - * if i != __pyx_memoryview_thread_locks_used: - * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( # <<<<<<<<<<<<<< - * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) - * break + /* "cornac/models/efm/recom_efm.pyx":297 + * for k in range(num_latent_factors): + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] # <<<<<<<<<<<<<< + * H2_numerator[j, k] += score * H1[i, k] + * H2_denominator[j, k] += prediction * H1[i, k] */ - (__pyx_memoryview_thread_locks[__pyx_v_i]) = __pyx_t_6; - (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]) = __pyx_t_7; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_24 * __pyx_v_H2.strides[1]) )))); - /* "View.MemoryView":386 - * if __pyx_memoryview_thread_locks[i] is self.lock: - * __pyx_memoryview_thread_locks_used -= 1 - * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< - * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( - * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + /* "cornac/models/efm/recom_efm.pyx":298 + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] # <<<<<<<<<<<<<< + * H2_denominator[j, k] += prediction * H1[i, k] + * */ - } + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_24 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))); - /* "View.MemoryView":389 - * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( - * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) - * break # <<<<<<<<<<<<<< - * else: - * PyThread_free_lock(self.lock) + /* "cornac/models/efm/recom_efm.pyx":299 + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] + * H2_denominator[j, k] += prediction * H1[i, k] # <<<<<<<<<<<<<< + * + * for idx in prange(X.shape[0]): */ - goto __pyx_L6_break; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_25 * __pyx_v_H1.strides[0]) ) + __pyx_t_24 * __pyx_v_H1.strides[1]) )))); + } + goto __pyx_L23; + __pyx_L16_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L22; + __pyx_L22:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates0) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L23:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":384 - * if self.lock != NULL: - * for i in range(__pyx_memoryview_thread_locks_used): - * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< - * __pyx_memoryview_thread_locks_used -= 1 - * if i != __pyx_memoryview_thread_locks_used: + /* "cornac/models/efm/recom_efm.pyx":301 + * H2_denominator[j, k] += prediction * H1[i, k] + * + * for idx in prange(X.shape[0]): # <<<<<<<<<<<<<< + * i = X_uids[idx] + * j = X_aids[idx] */ - } - } - /*else*/ { + if (unlikely(!__pyx_v_X.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("X"); __PYX_ERR(0, 301, __pyx_L12_error) } + __pyx_t_23 = (__pyx_v_X.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + float __pyx_parallel_temp4 = ((float)__PYX_NAN()); + float __pyx_parallel_temp5 = ((float)__PYX_NAN()); + float __pyx_parallel_temp6 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_21 = (__pyx_t_23 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_21 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((float)__PYX_NAN()); + __pyx_v_score = ((float)__PYX_NAN()); - /* "View.MemoryView":391 - * break - * else: - * PyThread_free_lock(self.lock) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":302 * - * cdef char *get_item_pointer(memoryview self, object index) except NULL: + * for idx in prange(X.shape[0]): + * i = X_uids[idx] # <<<<<<<<<<<<<< + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) */ - PyThread_free_lock(__pyx_v_self->lock); - } - __pyx_L6_break:; + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i = (*((short *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_24 * __pyx_v_X_uids.strides[0]) ))); - /* "View.MemoryView":382 - * cdef int i - * global __pyx_memoryview_thread_locks_used - * if self.lock != NULL: # <<<<<<<<<<<<<< - * for i in range(__pyx_memoryview_thread_locks_used): - * if __pyx_memoryview_thread_locks[i] is self.lock: + /* "cornac/models/efm/recom_efm.pyx":303 + * for idx in prange(X.shape[0]): + * i = X_uids[idx] + * j = X_aids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] */ - } + __pyx_t_24 = __pyx_v_idx; + __pyx_v_j = (*((short *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_24 * __pyx_v_X_aids.strides[0]) ))); - /* "View.MemoryView":372 - * self.typeinfo = NULL - * - * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< - * if self.obj is not None: - * __Pyx_ReleaseBuffer(&self.view) + /* "cornac/models/efm/recom_efm.pyx":304 + * i = X_uids[idx] + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< + * score = X[idx] + * loss += (prediction - score) * (prediction - score) */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = 0; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = 0; + __pyx_t_28 = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 304, __pyx_L26_error) + __pyx_v_prediction = __pyx_t_28; - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} + /* "cornac/models/efm/recom_efm.pyx":305 + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + */ + __pyx_t_27 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_27 * __pyx_v_X.strides[0]) ))); -/* "View.MemoryView":393 - * PyThread_free_lock(self.lock) - * - * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< - * cdef Py_ssize_t dim - * cdef char *itemp = self.view.buf + /* "cornac/models/efm/recom_efm.pyx":306 + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] */ + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); -static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { - Py_ssize_t __pyx_v_dim; - char *__pyx_v_itemp; - PyObject *__pyx_v_idx = NULL; - char *__pyx_r; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - PyObject *(*__pyx_t_4)(PyObject *); - PyObject *__pyx_t_5 = NULL; - Py_ssize_t __pyx_t_6; - char *__pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_item_pointer", 0); + /* "cornac/models/efm/recom_efm.pyx":307 + * score = X[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + */ + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":395 - * cdef char *get_item_pointer(memoryview self, object index) except NULL: - * cdef Py_ssize_t dim - * cdef char *itemp = self.view.buf # <<<<<<<<<<<<<< - * - * for dim, idx in enumerate(index): + /* "cornac/models/efm/recom_efm.pyx":308 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] # <<<<<<<<<<<<<< + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] */ - __pyx_v_itemp = ((char *)__pyx_v_self->view.buf); + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_27 * __pyx_v_U1.strides[0]) ) + __pyx_t_26 * __pyx_v_U1.strides[1]) )))); - /* "View.MemoryView":397 - * cdef char *itemp = self.view.buf - * - * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< - * itemp = pybuffer_index(&self.view, itemp, idx, dim) - * + /* "cornac/models/efm/recom_efm.pyx":309 + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] # <<<<<<<<<<<<<< + * U1_numerator[i, k] += lambda_x * score * V[j, k] + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] */ - __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_v_index)) || PyTuple_CheckExact(__pyx_v_index)) { - __pyx_t_2 = __pyx_v_index; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; - __pyx_t_4 = NULL; - } else { - __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 397, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 397, __pyx_L1_error) - } - for (;;) { - if (likely(!__pyx_t_4)) { - if (likely(PyList_CheckExact(__pyx_t_2))) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(2, 397, __pyx_L1_error) - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 397, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - } else { - if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(2, 397, __pyx_L1_error) - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 397, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - } - } else { - __pyx_t_5 = __pyx_t_4(__pyx_t_2); - if (unlikely(!__pyx_t_5)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(2, 397, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_5); - } - __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5); - __pyx_t_5 = 0; - __pyx_v_dim = __pyx_t_1; - __pyx_t_1 = (__pyx_t_1 + 1); + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_26 * __pyx_v_U1.strides[0]) ) + __pyx_t_27 * __pyx_v_U1.strides[1]) )))); - /* "View.MemoryView":398 - * - * for dim, idx in enumerate(index): - * itemp = pybuffer_index(&self.view, itemp, idx, dim) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":310 + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] # <<<<<<<<<<<<<< + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] * - * return itemp */ - __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 398, __pyx_L1_error) - __pyx_t_7 = __pyx_pybuffer_index((&__pyx_v_self->view), __pyx_v_itemp, __pyx_t_6, __pyx_v_dim); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(2, 398, __pyx_L1_error) - __pyx_v_itemp = __pyx_t_7; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_27 * __pyx_v_V.strides[0]) ) + __pyx_t_26 * __pyx_v_V.strides[1]) )))); - /* "View.MemoryView":397 - * cdef char *itemp = self.view.buf - * - * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< - * itemp = pybuffer_index(&self.view, itemp, idx, dim) + /* "cornac/models/efm/recom_efm.pyx":311 + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] # <<<<<<<<<<<<<< * + * for idx in prange(Y.shape[0]): */ - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) )))); + } + goto __pyx_L31; + __pyx_L26_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L30; + __pyx_L30:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates1) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L31:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":400 - * itemp = pybuffer_index(&self.view, itemp, idx, dim) - * - * return itemp # <<<<<<<<<<<<<< - * + /* "cornac/models/efm/recom_efm.pyx":313 + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] * + * for idx in prange(Y.shape[0]): # <<<<<<<<<<<<<< + * i = Y_iids[idx] + * j = Y_aids[idx] */ - __pyx_r = __pyx_v_itemp; - goto __pyx_L0; + if (unlikely(!__pyx_v_Y.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("Y"); __PYX_ERR(0, 313, __pyx_L12_error) } + __pyx_t_21 = (__pyx_v_Y.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + float __pyx_parallel_temp4 = ((float)__PYX_NAN()); + float __pyx_parallel_temp5 = ((float)__PYX_NAN()); + float __pyx_parallel_temp6 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_23 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((float)__PYX_NAN()); + __pyx_v_score = ((float)__PYX_NAN()); - /* "View.MemoryView":393 - * PyThread_free_lock(self.lock) + /* "cornac/models/efm/recom_efm.pyx":314 * - * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< - * cdef Py_ssize_t dim - * cdef char *itemp = self.view.buf + * for idx in prange(Y.shape[0]): + * i = Y_iids[idx] # <<<<<<<<<<<<<< + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) */ + __pyx_t_27 = __pyx_v_idx; + __pyx_v_i = (*((short *) ( /* dim=0 */ (__pyx_v_Y_iids.data + __pyx_t_27 * __pyx_v_Y_iids.strides[0]) ))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.memoryview.get_item_pointer", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_idx); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":315 + * for idx in prange(Y.shape[0]): + * i = Y_iids[idx] + * j = Y_aids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] + */ + __pyx_t_27 = __pyx_v_idx; + __pyx_v_j = (*((short *) ( /* dim=0 */ (__pyx_v_Y_aids.data + __pyx_t_27 * __pyx_v_Y_aids.strides[0]) ))); -/* "View.MemoryView":403 - * - * - * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< - * if index is Ellipsis: - * return self + /* "cornac/models/efm/recom_efm.pyx":316 + * i = Y_iids[idx] + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) */ + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = 0; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = 0; + __pyx_t_28 = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_27 * __pyx_v_U2.strides[0]) ) + __pyx_t_26 * __pyx_v_U2.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 316, __pyx_L34_error) + __pyx_v_prediction = __pyx_t_28; -/* Python wrapper */ -static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/ -static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index)); + /* "cornac/models/efm/recom_efm.pyx":317 + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_Y.data + __pyx_t_24 * __pyx_v_Y.strides[0]) ))); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":318 + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] + */ + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); -static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { - PyObject *__pyx_v_have_slices = NULL; - PyObject *__pyx_v_indices = NULL; - char *__pyx_v_itemp; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - char *__pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__getitem__", 0); + /* "cornac/models/efm/recom_efm.pyx":319 + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + */ + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":404 - * - * def __getitem__(memoryview self, object index): - * if index is Ellipsis: # <<<<<<<<<<<<<< - * return self - * + /* "cornac/models/efm/recom_efm.pyx":320 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] # <<<<<<<<<<<<<< + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] */ - __pyx_t_1 = (__pyx_v_index == __pyx_builtin_Ellipsis); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_24 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":405 - * def __getitem__(memoryview self, object index): - * if index is Ellipsis: - * return self # <<<<<<<<<<<<<< - * - * have_slices, indices = _unellipsify(index, self.view.ndim) + /* "cornac/models/efm/recom_efm.pyx":321 + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] # <<<<<<<<<<<<<< + * U2_numerator[i, k] += lambda_y * score * V[j, k] + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __pyx_r = ((PyObject *)__pyx_v_self); - goto __pyx_L0; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_24 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":404 - * - * def __getitem__(memoryview self, object index): - * if index is Ellipsis: # <<<<<<<<<<<<<< - * return self + /* "cornac/models/efm/recom_efm.pyx":322 + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] # <<<<<<<<<<<<<< + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] * */ - } + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )))); - /* "View.MemoryView":407 - * return self - * - * have_slices, indices = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":323 + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] # <<<<<<<<<<<<<< * - * cdef char *itemp + * # update V */ - __pyx_t_3 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 407, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (likely(__pyx_t_3 != Py_None)) { - PyObject* sequence = __pyx_t_3; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(2, 407, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - #else - __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 407, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 407, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else { - __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 407, __pyx_L1_error) - } - __pyx_v_have_slices = __pyx_t_4; - __pyx_t_4 = 0; - __pyx_v_indices = __pyx_t_5; - __pyx_t_5 = 0; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))); + } + goto __pyx_L39; + __pyx_L34_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L38; + __pyx_L38:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates2) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L39:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":410 + /* "cornac/models/efm/recom_efm.pyx":326 * - * cdef char *itemp - * if have_slices: # <<<<<<<<<<<<<< - * return memview_slice(self, indices) - * else: + * # update V + * for i in prange(num_aspects): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 410, __pyx_L1_error) - if (__pyx_t_2) { + __pyx_t_3 = __pyx_v_num_aspects; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + float __pyx_parallel_temp2 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_32 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_32 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_32; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* "View.MemoryView":411 - * cdef char *itemp - * if have_slices: - * return memview_slice(self, indices) # <<<<<<<<<<<<<< - * else: - * itemp = self.get_item_pointer(indices) + /* "cornac/models/efm/recom_efm.pyx":327 + * # update V + * for i in prange(num_aspects): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = ((PyObject *)__pyx_memview_slice(__pyx_v_self, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 411, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":410 - * - * cdef char *itemp - * if have_slices: # <<<<<<<<<<<<<< - * return memview_slice(self, indices) - * else: + /* "cornac/models/efm/recom_efm.pyx":328 + * for i in prange(num_aspects): + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] # <<<<<<<<<<<<<< + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) */ - } + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_v * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) ))))); - /* "View.MemoryView":413 - * return memview_slice(self, indices) - * else: - * itemp = self.get_item_pointer(indices) # <<<<<<<<<<<<<< - * return self.convert_item_to_object(itemp) + /* "cornac/models/efm/recom_efm.pyx":329 + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps # <<<<<<<<<<<<<< + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) * */ - /*else*/ { - __pyx_t_6 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_indices); if (unlikely(__pyx_t_6 == ((char *)NULL))) __PYX_ERR(2, 413, __pyx_L1_error) - __pyx_v_itemp = __pyx_t_6; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_33 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += (((((*((short *) ( /* dim=0 */ (__pyx_v_X_aspect_counts.data + __pyx_t_27 * __pyx_v_X_aspect_counts.strides[0]) ))) + (*((short *) ( /* dim=0 */ (__pyx_v_Y_aspect_counts.data + __pyx_t_26 * __pyx_v_Y_aspect_counts.strides[0]) )))) * __pyx_v_lambda_v) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":414 - * else: - * itemp = self.get_item_pointer(indices) - * return self.convert_item_to_object(itemp) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":330 + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) # <<<<<<<<<<<<<< * - * def __setitem__(memoryview self, object index, object value): + * # update U1, H1 */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->convert_item_to_object(__pyx_v_self, __pyx_v_itemp); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 414, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - } + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_V_numerator.diminfo[1].strides)); + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_V_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 330, __pyx_L42_error) + } + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L47; + __pyx_L42_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L46; + __pyx_L46:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates3) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L47:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":403 - * + /* "cornac/models/efm/recom_efm.pyx":333 * - * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< - * if index is Ellipsis: - * return self + * # update U1, H1 + * for i in prange(num_users): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] */ + __pyx_t_32 = __pyx_v_num_users; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + float __pyx_parallel_temp2 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_3 = (__pyx_t_32 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_3 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_3; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.memoryview.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_have_slices); - __Pyx_XDECREF(__pyx_v_indices); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":416 - * return self.convert_item_to_object(itemp) - * - * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< - * if self.view.readonly: - * raise TypeError("Cannot assign to read-only memoryview") + /* "cornac/models/efm/recom_efm.pyx":334 + * # update U1, H1 + * for i in prange(num_users): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps */ + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; -/* Python wrapper */ -static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value)); + /* "cornac/models/efm/recom_efm.pyx":335 + * for i in prange(num_users): + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] # <<<<<<<<<<<<<< + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_26 * __pyx_v_U1.strides[0]) ) + __pyx_t_27 * __pyx_v_U1.strides[1]) ))))); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":336 + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps # <<<<<<<<<<<<<< + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): + */ + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_34 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (((((*((short *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_27 * __pyx_v_A_user_counts.strides[0]) ))) + (*((short *) ( /* dim=0 */ (__pyx_v_X_user_counts.data + __pyx_t_26 * __pyx_v_X_user_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))) + __pyx_v_eps); -static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { - PyObject *__pyx_v_have_slices = NULL; - PyObject *__pyx_v_obj = NULL; - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setitem__", 0); - __Pyx_INCREF(__pyx_v_index); + /* "cornac/models/efm/recom_efm.pyx":337 + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) # <<<<<<<<<<<<<< + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] + */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_U1_numerator.diminfo[1].strides)); + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U1_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_35 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 337, __pyx_L50_error) + } + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_35)); + } - /* "View.MemoryView":417 - * - * def __setitem__(memoryview self, object index, object value): - * if self.view.readonly: # <<<<<<<<<<<<<< - * raise TypeError("Cannot assign to read-only memoryview") - * + /* "cornac/models/efm/recom_efm.pyx":338 + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): # <<<<<<<<<<<<<< + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps */ - __pyx_t_1 = (__pyx_v_self->view.readonly != 0); - if (unlikely(__pyx_t_1)) { + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":418 - * def __setitem__(memoryview self, object index, object value): - * if self.view.readonly: - * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< - * - * have_slices, index = _unellipsify(index, self.view.ndim) + /* "cornac/models/efm/recom_efm.pyx":339 + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] # <<<<<<<<<<<<<< + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) */ - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 418, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_Raise(__pyx_t_2, 0, 0, 0); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __PYX_ERR(2, 418, __pyx_L1_error) + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_24 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_26 * __pyx_v_H1.strides[0]) ) + __pyx_t_27 * __pyx_v_H1.strides[1]) ))))); - /* "View.MemoryView":417 - * - * def __setitem__(memoryview self, object index, object value): - * if self.view.readonly: # <<<<<<<<<<<<<< - * raise TypeError("Cannot assign to read-only memoryview") + /* "cornac/models/efm/recom_efm.pyx":340 + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps # <<<<<<<<<<<<<< + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) * */ - } + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += ((((*((short *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_27 * __pyx_v_A_user_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_26 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":420 - * raise TypeError("Cannot assign to read-only memoryview") - * - * have_slices, index = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":341 + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) # <<<<<<<<<<<<<< * - * if have_slices: + * # update U2, H2 */ - __pyx_t_2 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (likely(__pyx_t_2 != Py_None)) { - PyObject* sequence = __pyx_t_2; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(2, 420, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - #else - __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } else { - __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 420, __pyx_L1_error) - } - __pyx_v_have_slices = __pyx_t_3; - __pyx_t_3 = 0; - __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_4); - __pyx_t_4 = 0; + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H1_numerator.diminfo[1].strides)); + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_H1_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 341, __pyx_L50_error) + } + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_25 * __pyx_v_H1.strides[0]) ) + __pyx_t_26 * __pyx_v_H1.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L57; + __pyx_L50_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L56; + __pyx_L56:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates4) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L57:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":422 - * have_slices, index = _unellipsify(index, self.view.ndim) + /* "cornac/models/efm/recom_efm.pyx":344 * - * if have_slices: # <<<<<<<<<<<<<< - * obj = self.is_slice(value) - * if obj: + * # update U2, H2 + * for i in prange(num_items): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 422, __pyx_L1_error) - if (__pyx_t_1) { + __pyx_t_3 = __pyx_v_num_items; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + float __pyx_parallel_temp2 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_32 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_32 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_32; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* "View.MemoryView":423 - * - * if have_slices: - * obj = self.is_slice(value) # <<<<<<<<<<<<<< - * if obj: - * self.setitem_slice_assignment(self[index], obj) + /* "cornac/models/efm/recom_efm.pyx":345 + * # update U2, H2 + * for i in prange(num_items): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps */ - __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 423, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_obj = __pyx_t_2; - __pyx_t_2 = 0; + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":424 - * if have_slices: - * obj = self.is_slice(value) - * if obj: # <<<<<<<<<<<<<< - * self.setitem_slice_assignment(self[index], obj) - * else: + /* "cornac/models/efm/recom_efm.pyx":346 + * for i in prange(num_items): + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] # <<<<<<<<<<<<<< + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 424, __pyx_L1_error) - if (__pyx_t_1) { + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_27 * __pyx_v_U2.strides[0]) ) + __pyx_t_33 * __pyx_v_U2.strides[1]) ))))); - /* "View.MemoryView":425 - * obj = self.is_slice(value) - * if obj: - * self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<< - * else: - * self.setitem_slice_assign_scalar(self[index], value) + /* "cornac/models/efm/recom_efm.pyx":347 + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps # <<<<<<<<<<<<<< + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): */ - __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assignment(__pyx_v_self, __pyx_t_2, __pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_33 = __pyx_v_i; + __pyx_t_27 = __pyx_v_i; + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (((((*((short *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_33 * __pyx_v_A_item_counts.strides[0]) ))) + (*((short *) ( /* dim=0 */ (__pyx_v_Y_item_counts.data + __pyx_t_27 * __pyx_v_Y_item_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_26 * __pyx_v_U2.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":424 - * if have_slices: - * obj = self.is_slice(value) - * if obj: # <<<<<<<<<<<<<< - * self.setitem_slice_assignment(self[index], obj) - * else: + /* "cornac/models/efm/recom_efm.pyx":348 + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) # <<<<<<<<<<<<<< + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] */ - goto __pyx_L5; - } + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U2_numerator.diminfo[1].strides)); + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_35 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 348, __pyx_L60_error) + } + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_35)); + } - /* "View.MemoryView":427 - * self.setitem_slice_assignment(self[index], obj) - * else: - * self.setitem_slice_assign_scalar(self[index], value) # <<<<<<<<<<<<<< - * else: - * self.setitem_indexed(index, value) + /* "cornac/models/efm/recom_efm.pyx":349 + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): # <<<<<<<<<<<<<< + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps */ - /*else*/ { - __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_memoryview_type))))) __PYX_ERR(2, 427, __pyx_L1_error) - __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assign_scalar(__pyx_v_self, ((struct __pyx_memoryview_obj *)__pyx_t_4), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __pyx_L5:; + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":422 - * have_slices, index = _unellipsify(index, self.view.ndim) - * - * if have_slices: # <<<<<<<<<<<<<< - * obj = self.is_slice(value) - * if obj: + /* "cornac/models/efm/recom_efm.pyx":350 + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] # <<<<<<<<<<<<<< + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) */ - goto __pyx_L4; - } + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_26 * __pyx_v_H2.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_27 * __pyx_v_H2.strides[0]) ) + __pyx_t_33 * __pyx_v_H2.strides[1]) ))))); - /* "View.MemoryView":429 - * self.setitem_slice_assign_scalar(self[index], value) - * else: - * self.setitem_indexed(index, value) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":351 + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps # <<<<<<<<<<<<<< + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) * - * cdef is_slice(self, obj): */ - /*else*/ { - __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_indexed(__pyx_v_self, __pyx_v_index, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __pyx_L4:; + __pyx_t_33 = __pyx_v_i; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += ((((*((short *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_33 * __pyx_v_A_item_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_27 * __pyx_v_H2.strides[0]) ) + __pyx_t_26 * __pyx_v_H2.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":416 - * return self.convert_item_to_object(itemp) + /* "cornac/models/efm/recom_efm.pyx":352 + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) # <<<<<<<<<<<<<< * - * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< - * if self.view.readonly: - * raise TypeError("Cannot assign to read-only memoryview") + * if self.verbose: */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("View.MemoryView.memoryview.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_have_slices); - __Pyx_XDECREF(__pyx_v_obj); - __Pyx_XDECREF(__pyx_v_index); - __Pyx_RefNannyFinishContext(); - return __pyx_r; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H2_numerator.diminfo[1].strides)); + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 352, __pyx_L60_error) + } + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_26 * __pyx_v_H2.strides[0]) ) + __pyx_t_27 * __pyx_v_H2.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L67; + __pyx_L60_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L66; + __pyx_L66:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates5) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L67:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } + goto __pyx_L69; + __pyx_L12_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L69; + __pyx_L69:; + #ifdef _OPENMP + Py_END_ALLOW_THREADS + #else +{ +#ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #endif /* _OPENMP */ + /* Clean up any temporaries */ + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + #ifndef _OPENMP } +#endif /* _OPENMP */ + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif + } -/* "View.MemoryView":431 - * self.setitem_indexed(index, value) + /* "cornac/models/efm/recom_efm.pyx":280 + * H2_denominator.fill(0) * - * cdef is_slice(self, obj): # <<<<<<<<<<<<<< - * if not isinstance(obj, memoryview): - * try: + * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L9; + } + __pyx_L8_error: { + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L1_error; + } + __pyx_L9:; + } + } -static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("is_slice", 0); - __Pyx_INCREF(__pyx_v_obj); - - /* "View.MemoryView":432 + /* "cornac/models/efm/recom_efm.pyx":354 + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + * + * if self.verbose: # <<<<<<<<<<<<<< + * print('iter: %d, loss: %f' % (t, loss)) * - * cdef is_slice(self, obj): - * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< - * try: - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, - */ - __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_memoryview_type); - __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":433 - * cdef is_slice(self, obj): - * if not isinstance(obj, memoryview): - * try: # <<<<<<<<<<<<<< - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, - * self.dtype_is_object) - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_5); - /*try:*/ { - - /* "View.MemoryView":434 - * if not isinstance(obj, memoryview): - * try: - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< - * self.dtype_is_object) - * except TypeError: - */ - __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_self->flags & (~PyBUF_WRITABLE)) | PyBUF_ANY_CONTIGUOUS)); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 434, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_6); - - /* "View.MemoryView":435 - * try: - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, - * self.dtype_is_object) # <<<<<<<<<<<<<< - * except TypeError: - * return None - */ - __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 435, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - - /* "View.MemoryView":434 - * if not isinstance(obj, memoryview): - * try: - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< - * self.dtype_is_object) - * except TypeError: */ - __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 434, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_obj); - __Pyx_GIVEREF(__pyx_v_obj); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_obj); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7); - __pyx_t_6 = 0; - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 434, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_7); - __pyx_t_7 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 354, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_37 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_37 < 0))) __PYX_ERR(0, 354, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_37) { - /* "View.MemoryView":433 - * cdef is_slice(self, obj): - * if not isinstance(obj, memoryview): - * try: # <<<<<<<<<<<<<< - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, - * self.dtype_is_object) + /* "cornac/models/efm/recom_efm.pyx":355 + * + * if self.verbose: + * print('iter: %d, loss: %f' % (t, loss)) # <<<<<<<<<<<<<< + * + * if self.verbose: */ - } - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L9_try_end; - __pyx_L4_error:; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_23 = 0; + __pyx_t_38 = 127; + __Pyx_INCREF(__pyx_kp_u_iter); + __pyx_t_23 += 6; + __Pyx_GIVEREF(__pyx_kp_u_iter); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_iter); + __pyx_t_6 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_t), __pyx_n_u_d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_38 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_38) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_38; + __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u_loss); + __pyx_t_23 += 8; + __Pyx_GIVEREF(__pyx_kp_u_loss); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_loss); + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_Format(__pyx_t_6, __pyx_n_u_f); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_38 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_38) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_38; + __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_23, __pyx_t_38); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":436 - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, - * self.dtype_is_object) - * except TypeError: # <<<<<<<<<<<<<< - * return None + /* "cornac/models/efm/recom_efm.pyx":354 + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + * + * if self.verbose: # <<<<<<<<<<<<<< + * print('iter: %d, loss: %f' % (t, loss)) * */ - __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError); - if (__pyx_t_9) { - __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(2, 436, __pyx_L6_except_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_6); + } - /* "View.MemoryView":437 - * self.dtype_is_object) - * except TypeError: - * return None # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":267 + * floating eps = 1e-9 * - * return obj + * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< + * loss = 0. + * U1_numerator.fill(0) */ - __Pyx_XDECREF(__pyx_r); - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L7_except_return; - } - goto __pyx_L6_except_error; - __pyx_L6_except_error:; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":433 - * cdef is_slice(self, obj): - * if not isinstance(obj, memoryview): - * try: # <<<<<<<<<<<<<< - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, - * self.dtype_is_object) + /* "cornac/models/efm/recom_efm.pyx":357 + * print('iter: %d, loss: %f' % (t, loss)) + * + * if self.verbose: # <<<<<<<<<<<<<< + * print('Optimization finished!') + * */ - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); - goto __pyx_L1_error; - __pyx_L7_except_return:; - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); - goto __pyx_L0; - __pyx_L9_try_end:; - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_37 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_37 < 0))) __PYX_ERR(0, 357, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_37) { - /* "View.MemoryView":432 + /* "cornac/models/efm/recom_efm.pyx":358 * - * cdef is_slice(self, obj): - * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< - * try: - * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * if self.verbose: + * print('Optimization finished!') # <<<<<<<<<<<<<< + * + * def _build_matrices(self, data_set): */ - } + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":439 - * return None + /* "cornac/models/efm/recom_efm.pyx":357 + * print('iter: %d, loss: %f' % (t, loss)) * - * return obj # <<<<<<<<<<<<<< + * if self.verbose: # <<<<<<<<<<<<<< + * print('Optimization finished!') * - * cdef setitem_slice_assignment(self, dst, src): */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_obj); - __pyx_r = __pyx_v_obj; - goto __pyx_L0; + } - /* "View.MemoryView":431 - * self.setitem_indexed(index, value) + /* "cornac/models/efm/recom_efm.pyx":228 * - * cdef is_slice(self, obj): # <<<<<<<<<<<<<< - * if not isinstance(obj, memoryview): - * try: + * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def _fit_efm(self, int num_threads, */ /* 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_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_obj); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_U1_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_U1_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_U2_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_U2_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_V_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_V_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_H1_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_H1_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_H2_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_H2_denominator); + __Pyx_XDECREF(__pyx_v_t); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "View.MemoryView":441 - * return obj - * - * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice dst_slice - * cdef __Pyx_memviewslice src_slice - */ - -static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src) { - __Pyx_memviewslice __pyx_v_dst_slice; - __Pyx_memviewslice __pyx_v_src_slice; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_memviewslice *__pyx_t_1; - __Pyx_memviewslice *__pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_t_5; - int __pyx_t_6; +/* Python wrapper */ +static PyObject *__pyx_fuse_0_1__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_21_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_fuse_0_1__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_21_fit_efm = {"__pyx_fuse_0_1_fit_efm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0_1__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_21_fit_efm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm}; +static PyObject *__pyx_fuse_0_1__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_21_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + int __pyx_v_num_threads; + __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_V = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_H1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_H2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("setitem_slice_assignment", 0); - - /* "View.MemoryView":445 - * cdef __Pyx_memviewslice src_slice - * - * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< - * get_slice_from_memview(dst, &dst_slice)[0], - * src.ndim, dst.ndim, self.dtype_is_object) - */ - if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(2, 445, __pyx_L1_error) - __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(2, 445, __pyx_L1_error) - - /* "View.MemoryView":446 - * - * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], - * get_slice_from_memview(dst, &dst_slice)[0], # <<<<<<<<<<<<<< - * src.ndim, dst.ndim, self.dtype_is_object) - * - */ - if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(2, 446, __pyx_L1_error) - __pyx_t_2 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice)); if (unlikely(__pyx_t_2 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(2, 446, __pyx_L1_error) - - /* "View.MemoryView":447 - * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], - * get_slice_from_memview(dst, &dst_slice)[0], - * src.ndim, dst.ndim, self.dtype_is_object) # <<<<<<<<<<<<<< - * - * cdef setitem_slice_assign_scalar(self, memoryview dst, value): - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 447, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 447, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 447, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 447, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "View.MemoryView":445 - * cdef __Pyx_memviewslice src_slice - * - * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< - * get_slice_from_memview(dst, &dst_slice)[0], - * src.ndim, dst.ndim, self.dtype_is_object) - */ - __pyx_t_6 = __pyx_memoryview_copy_contents((__pyx_t_1[0]), (__pyx_t_2[0]), __pyx_t_4, __pyx_t_5, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 445, __pyx_L1_error) - - /* "View.MemoryView":441 - * return obj - * - * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice dst_slice - * cdef __Pyx_memviewslice src_slice - */ + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_fit_efm (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_num_threads,&__pyx_n_s_A,&__pyx_n_s_A_uids,&__pyx_n_s_A_iids,&__pyx_n_s_A_user_counts,&__pyx_n_s_A_item_counts,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_aids,&__pyx_n_s_X_user_counts,&__pyx_n_s_X_aspect_counts,&__pyx_n_s_Y,&__pyx_n_s_Y_iids,&__pyx_n_s_Y_aids,&__pyx_n_s_Y_item_counts,&__pyx_n_s_Y_aspect_counts,&__pyx_n_s_U1,&__pyx_n_s_U2,&__pyx_n_s_V,&__pyx_n_s_H1,&__pyx_n_s_H2,0}; + PyObject* values[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 22: values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + CYTHON_FALLTHROUGH; + case 21: values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + CYTHON_FALLTHROUGH; + case 20: values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + CYTHON_FALLTHROUGH; + case 19: values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + CYTHON_FALLTHROUGH; + case 18: values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + CYTHON_FALLTHROUGH; + case 17: values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + CYTHON_FALLTHROUGH; + case 16: values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num_threads)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 1); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 2); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 3); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 4); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_user_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 5); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_item_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 6); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 7); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 8); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 9); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_user_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 10); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aspect_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 11); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 12); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 13); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 14); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 15: + if (likely((values[15] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_item_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 15); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 16: + if (likely((values[16] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_aspect_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 16); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 17: + if (likely((values[17] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 17); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 18: + if (likely((values[18] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 18); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 19: + if (likely((values[19] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_V)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 19); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 20: + if (likely((values[20] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_H1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 20); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 21: + if (likely((values[21] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_H2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 21); __PYX_ERR(0, 228, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_fit_efm") < 0)) __PYX_ERR(0, 228, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 22)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + } + __pyx_v_self = values[0]; + __pyx_v_num_threads = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L3_error) + __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_uids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_iids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_user_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_item_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_user_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aspect_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_Y = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_iids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_item_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aspect_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_U1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_U2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_V = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_V.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_H1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[20], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_H2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, __pyx_nargs); __PYX_ERR(0, 228, __pyx_L3_error) + __pyx_L3_error:; + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_V, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H2, 1); + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_20_fit_efm(__pyx_self, __pyx_v_self, __pyx_v_num_threads, __pyx_v_A, __pyx_v_A_uids, __pyx_v_A_iids, __pyx_v_A_user_counts, __pyx_v_A_item_counts, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_aids, __pyx_v_X_user_counts, __pyx_v_X_aspect_counts, __pyx_v_Y, __pyx_v_Y_iids, __pyx_v_Y_aids, __pyx_v_Y_item_counts, __pyx_v_Y_aspect_counts, __pyx_v_U1, __pyx_v_U2, __pyx_v_V, __pyx_v_H1, __pyx_v_H2); /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_V, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H2, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "View.MemoryView":449 - * src.ndim, dst.ndim, self.dtype_is_object) - * - * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< - * cdef int array[128] - * cdef void *tmp = NULL - */ - -static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value) { - int __pyx_v_array[0x80]; - void *__pyx_v_tmp; - void *__pyx_v_item; - __Pyx_memviewslice *__pyx_v_dst_slice; - __Pyx_memviewslice __pyx_v_tmp_slice; +static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_20_fit_efm(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_A_uids, __Pyx_memviewslice __pyx_v_A_iids, __Pyx_memviewslice __pyx_v_A_user_counts, __Pyx_memviewslice __pyx_v_A_item_counts, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_X_user_counts, __Pyx_memviewslice __pyx_v_X_aspect_counts, __Pyx_memviewslice __pyx_v_Y, __Pyx_memviewslice __pyx_v_Y_iids, __Pyx_memviewslice __pyx_v_Y_aids, __Pyx_memviewslice __pyx_v_Y_item_counts, __Pyx_memviewslice __pyx_v_Y_aspect_counts, __Pyx_memviewslice __pyx_v_U1, __Pyx_memviewslice __pyx_v_U2, __Pyx_memviewslice __pyx_v_V, __Pyx_memviewslice __pyx_v_H1, __Pyx_memviewslice __pyx_v_H2) { + long __pyx_v_num_users; + long __pyx_v_num_items; + long __pyx_v_num_aspects; + int __pyx_v_num_explicit_factors; + int __pyx_v_num_latent_factors; + float __pyx_v_lambda_x; + float __pyx_v_lambda_y; + float __pyx_v_lambda_u; + float __pyx_v_lambda_h; + float __pyx_v_lambda_v; + float __pyx_v_prediction; + float __pyx_v_score; + float __pyx_v_loss; + PyArrayObject *__pyx_v_U1_numerator = 0; + PyArrayObject *__pyx_v_U1_denominator = 0; + PyArrayObject *__pyx_v_U2_numerator = 0; + PyArrayObject *__pyx_v_U2_denominator = 0; + PyArrayObject *__pyx_v_V_numerator = 0; + PyArrayObject *__pyx_v_V_denominator = 0; + PyArrayObject *__pyx_v_H1_numerator = 0; + PyArrayObject *__pyx_v_H1_denominator = 0; + PyArrayObject *__pyx_v_H2_numerator = 0; + PyArrayObject *__pyx_v_H2_denominator = 0; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_v_k; + int __pyx_v_idx; + float __pyx_v_eps; + PyObject *__pyx_v_t = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_denominator; + __Pyx_Buffer __pyx_pybuffer_H1_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_numerator; + __Pyx_Buffer __pyx_pybuffer_H1_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_denominator; + __Pyx_Buffer __pyx_pybuffer_H2_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_numerator; + __Pyx_Buffer __pyx_pybuffer_H2_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_denominator; + __Pyx_Buffer __pyx_pybuffer_U1_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_numerator; + __Pyx_Buffer __pyx_pybuffer_U1_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_denominator; + __Pyx_Buffer __pyx_pybuffer_U2_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_numerator; + __Pyx_Buffer __pyx_pybuffer_U2_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_V_denominator; + __Pyx_Buffer __pyx_pybuffer_V_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_V_numerator; + __Pyx_Buffer __pyx_pybuffer_V_numerator; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_memviewslice *__pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + long __pyx_t_3; int __pyx_t_4; - int __pyx_t_5; - char const *__pyx_t_6; + float __pyx_t_5; + PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; + PyArrayObject *__pyx_t_9 = NULL; + PyArrayObject *__pyx_t_10 = NULL; + PyArrayObject *__pyx_t_11 = NULL; + PyArrayObject *__pyx_t_12 = NULL; + PyArrayObject *__pyx_t_13 = NULL; + PyArrayObject *__pyx_t_14 = NULL; + PyArrayObject *__pyx_t_15 = NULL; + PyArrayObject *__pyx_t_16 = NULL; + PyArrayObject *__pyx_t_17 = NULL; + PyArrayObject *__pyx_t_18 = NULL; + Py_ssize_t __pyx_t_19; + PyObject *(*__pyx_t_20)(PyObject *); + Py_ssize_t __pyx_t_21; + Py_ssize_t __pyx_t_22; + Py_ssize_t __pyx_t_23; + Py_ssize_t __pyx_t_24; + Py_ssize_t __pyx_t_25; + Py_ssize_t __pyx_t_26; + Py_ssize_t __pyx_t_27; + float __pyx_t_28; + int __pyx_t_29; + int __pyx_t_30; + long __pyx_t_31; + long __pyx_t_32; + Py_ssize_t __pyx_t_33; + Py_ssize_t __pyx_t_34; + __pyx_t_5numpy_float32_t __pyx_t_35; + __pyx_t_5numpy_float32_t __pyx_t_36; + int __pyx_t_37; + Py_UCS4 __pyx_t_38; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0); + __Pyx_RefNannySetupContext("__pyx_fuse_0_1_fit_efm", 0); + __pyx_pybuffer_U1_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_U1_numerator.refcount = 0; + __pyx_pybuffernd_U1_numerator.data = NULL; + __pyx_pybuffernd_U1_numerator.rcbuffer = &__pyx_pybuffer_U1_numerator; + __pyx_pybuffer_U1_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_U1_denominator.refcount = 0; + __pyx_pybuffernd_U1_denominator.data = NULL; + __pyx_pybuffernd_U1_denominator.rcbuffer = &__pyx_pybuffer_U1_denominator; + __pyx_pybuffer_U2_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_U2_numerator.refcount = 0; + __pyx_pybuffernd_U2_numerator.data = NULL; + __pyx_pybuffernd_U2_numerator.rcbuffer = &__pyx_pybuffer_U2_numerator; + __pyx_pybuffer_U2_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_U2_denominator.refcount = 0; + __pyx_pybuffernd_U2_denominator.data = NULL; + __pyx_pybuffernd_U2_denominator.rcbuffer = &__pyx_pybuffer_U2_denominator; + __pyx_pybuffer_V_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_V_numerator.refcount = 0; + __pyx_pybuffernd_V_numerator.data = NULL; + __pyx_pybuffernd_V_numerator.rcbuffer = &__pyx_pybuffer_V_numerator; + __pyx_pybuffer_V_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_V_denominator.refcount = 0; + __pyx_pybuffernd_V_denominator.data = NULL; + __pyx_pybuffernd_V_denominator.rcbuffer = &__pyx_pybuffer_V_denominator; + __pyx_pybuffer_H1_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_H1_numerator.refcount = 0; + __pyx_pybuffernd_H1_numerator.data = NULL; + __pyx_pybuffernd_H1_numerator.rcbuffer = &__pyx_pybuffer_H1_numerator; + __pyx_pybuffer_H1_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_H1_denominator.refcount = 0; + __pyx_pybuffernd_H1_denominator.data = NULL; + __pyx_pybuffernd_H1_denominator.rcbuffer = &__pyx_pybuffer_H1_denominator; + __pyx_pybuffer_H2_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_H2_numerator.refcount = 0; + __pyx_pybuffernd_H2_numerator.data = NULL; + __pyx_pybuffernd_H2_numerator.rcbuffer = &__pyx_pybuffer_H2_numerator; + __pyx_pybuffer_H2_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_H2_denominator.refcount = 0; + __pyx_pybuffernd_H2_denominator.data = NULL; + __pyx_pybuffernd_H2_denominator.rcbuffer = &__pyx_pybuffer_H2_denominator; + + /* "cornac/models/efm/recom_efm.pyx":238 + * """ + * cdef: + * long num_users = self.train_set.num_users # <<<<<<<<<<<<<< + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_num_users = __pyx_t_3; - /* "View.MemoryView":451 - * cdef setitem_slice_assign_scalar(self, memoryview dst, value): - * cdef int array[128] - * cdef void *tmp = NULL # <<<<<<<<<<<<<< - * cdef void *item - * + /* "cornac/models/efm/recom_efm.pyx":239 + * cdef: + * long num_users = self.train_set.num_users + * long num_items = self.train_set.num_items # <<<<<<<<<<<<<< + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors */ - __pyx_v_tmp = NULL; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_items = __pyx_t_3; - /* "View.MemoryView":456 - * cdef __Pyx_memviewslice *dst_slice - * cdef __Pyx_memviewslice tmp_slice - * dst_slice = get_slice_from_memview(dst, &tmp_slice) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":240 + * long num_users = self.train_set.num_users + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< + * int num_explicit_factors = self.num_explicit_factors + * int num_latent_factors = self.num_latent_factors + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_aspects = __pyx_t_3; + + /* "cornac/models/efm/recom_efm.pyx":241 + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors # <<<<<<<<<<<<<< + * int num_latent_factors = self.num_latent_factors * - * if self.view.itemsize > sizeof(array): */ - __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(2, 456, __pyx_L1_error) - __pyx_v_dst_slice = __pyx_t_1; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_explicit_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_explicit_factors = __pyx_t_4; - /* "View.MemoryView":458 - * dst_slice = get_slice_from_memview(dst, &tmp_slice) + /* "cornac/models/efm/recom_efm.pyx":242 + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors + * int num_latent_factors = self.num_latent_factors # <<<<<<<<<<<<<< * - * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< - * tmp = PyMem_Malloc(self.view.itemsize) - * if tmp == NULL: + * floating lambda_x = self.lambda_x */ - __pyx_t_2 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0); - if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_latent_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 242, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_latent_factors = __pyx_t_4; - /* "View.MemoryView":459 + /* "cornac/models/efm/recom_efm.pyx":244 + * int num_latent_factors = self.num_latent_factors * - * if self.view.itemsize > sizeof(array): - * tmp = PyMem_Malloc(self.view.itemsize) # <<<<<<<<<<<<<< - * if tmp == NULL: - * raise MemoryError + * floating lambda_x = self.lambda_x # <<<<<<<<<<<<<< + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u */ - __pyx_v_tmp = PyMem_Malloc(__pyx_v_self->view.itemsize); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_x = __pyx_t_5; - /* "View.MemoryView":460 - * if self.view.itemsize > sizeof(array): - * tmp = PyMem_Malloc(self.view.itemsize) - * if tmp == NULL: # <<<<<<<<<<<<<< - * raise MemoryError - * item = tmp + /* "cornac/models/efm/recom_efm.pyx":245 + * + * floating lambda_x = self.lambda_x + * floating lambda_y = self.lambda_y # <<<<<<<<<<<<<< + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h */ - __pyx_t_2 = ((__pyx_v_tmp == NULL) != 0); - if (unlikely(__pyx_t_2)) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 245, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_y = __pyx_t_5; - /* "View.MemoryView":461 - * tmp = PyMem_Malloc(self.view.itemsize) - * if tmp == NULL: - * raise MemoryError # <<<<<<<<<<<<<< - * item = tmp - * else: + /* "cornac/models/efm/recom_efm.pyx":246 + * floating lambda_x = self.lambda_x + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u # <<<<<<<<<<<<<< + * floating lambda_h = self.lambda_h + * floating lambda_v = self.lambda_v */ - PyErr_NoMemory(); __PYX_ERR(2, 461, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_u); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_u = __pyx_t_5; - /* "View.MemoryView":460 - * if self.view.itemsize > sizeof(array): - * tmp = PyMem_Malloc(self.view.itemsize) - * if tmp == NULL: # <<<<<<<<<<<<<< - * raise MemoryError - * item = tmp + /* "cornac/models/efm/recom_efm.pyx":247 + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h # <<<<<<<<<<<<<< + * floating lambda_v = self.lambda_v + * */ - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_h); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_h = __pyx_t_5; - /* "View.MemoryView":462 - * if tmp == NULL: - * raise MemoryError - * item = tmp # <<<<<<<<<<<<<< - * else: - * item = array + /* "cornac/models/efm/recom_efm.pyx":248 + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h + * floating lambda_v = self.lambda_v # <<<<<<<<<<<<<< + * + * floating prediction, score, loss */ - __pyx_v_item = __pyx_v_tmp; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_v); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 248, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 248, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_v = __pyx_t_5; - /* "View.MemoryView":458 - * dst_slice = get_slice_from_memview(dst, &tmp_slice) + /* "cornac/models/efm/recom_efm.pyx":252 + * floating prediction, score, loss * - * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< - * tmp = PyMem_Malloc(self.view.itemsize) - * if tmp == NULL: + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) */ - goto __pyx_L3; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 252, __pyx_L1_error) + __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 252, __pyx_L1_error) + } else {__pyx_pybuffernd_U1_numerator.diminfo[0].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_numerator.diminfo[0].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_numerator.diminfo[1].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_numerator.diminfo[1].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[1]; + } } + __pyx_t_9 = 0; + __pyx_v_U1_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":464 - * item = tmp - * else: - * item = array # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":253 * - * try: + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) */ - /*else*/ { - __pyx_v_item = ((void *)__pyx_v_array); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 253, __pyx_L1_error) + __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 253, __pyx_L1_error) + } else {__pyx_pybuffernd_U1_denominator.diminfo[0].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_denominator.diminfo[0].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_denominator.diminfo[1].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_denominator.diminfo[1].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[1]; + } } - __pyx_L3:; + __pyx_t_10 = 0; + __pyx_v_U1_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":466 - * item = array - * - * try: # <<<<<<<<<<<<<< - * if self.dtype_is_object: - * ( item)[0] = value + /* "cornac/models/efm/recom_efm.pyx":254 + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) */ - /*try:*/ { + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 254, __pyx_L1_error) + __pyx_t_11 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 254, __pyx_L1_error) + } else {__pyx_pybuffernd_U2_numerator.diminfo[0].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_numerator.diminfo[0].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_numerator.diminfo[1].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_numerator.diminfo[1].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_11 = 0; + __pyx_v_U2_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":467 - * - * try: - * if self.dtype_is_object: # <<<<<<<<<<<<<< - * ( item)[0] = value - * else: + /* "cornac/models/efm/recom_efm.pyx":255 + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) */ - __pyx_t_2 = (__pyx_v_self->dtype_is_object != 0); - if (__pyx_t_2) { + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 255, __pyx_L1_error) + __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 255, __pyx_L1_error) + } else {__pyx_pybuffernd_U2_denominator.diminfo[0].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_denominator.diminfo[0].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_denominator.diminfo[1].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_denominator.diminfo[1].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_12 = 0; + __pyx_v_U2_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":468 - * try: - * if self.dtype_is_object: - * ( item)[0] = value # <<<<<<<<<<<<<< - * else: - * self.assign_item_from_object( item, value) + /* "cornac/models/efm/recom_efm.pyx":256 + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) */ - (((PyObject **)__pyx_v_item)[0]) = ((PyObject *)__pyx_v_value); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 256, __pyx_L1_error) + __pyx_t_13 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_V_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 256, __pyx_L1_error) + } else {__pyx_pybuffernd_V_numerator.diminfo[0].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_numerator.diminfo[0].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_numerator.diminfo[1].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_numerator.diminfo[1].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_13 = 0; + __pyx_v_V_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":467 - * - * try: - * if self.dtype_is_object: # <<<<<<<<<<<<<< - * ( item)[0] = value - * else: + /* "cornac/models/efm/recom_efm.pyx":257 + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) */ - goto __pyx_L8; + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 257, __pyx_L1_error) + __pyx_t_14 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_V_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 257, __pyx_L1_error) + } else {__pyx_pybuffernd_V_denominator.diminfo[0].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_denominator.diminfo[0].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_denominator.diminfo[1].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_denominator.diminfo[1].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[1]; } + } + __pyx_t_14 = 0; + __pyx_v_V_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":470 - * ( item)[0] = value - * else: - * self.assign_item_from_object( item, value) # <<<<<<<<<<<<<< - * - * + /* "cornac/models/efm/recom_efm.pyx":258 + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) */ - /*else*/ { - __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 470, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 258, __pyx_L1_error) + __pyx_t_15 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 258, __pyx_L1_error) + } else {__pyx_pybuffernd_H1_numerator.diminfo[0].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_numerator.diminfo[0].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_numerator.diminfo[1].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_numerator.diminfo[1].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[1]; } - __pyx_L8:; - - /* "View.MemoryView":474 - * - * - * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< - * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) - * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, - */ - __pyx_t_2 = ((__pyx_v_self->view.suboffsets != NULL) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":475 - * - * if self.view.suboffsets != NULL: - * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) # <<<<<<<<<<<<<< - * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, - * item, self.dtype_is_object) - */ - __pyx_t_3 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 475, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_15 = 0; + __pyx_v_H1_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":474 - * - * - * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< - * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) - * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + /* "cornac/models/efm/recom_efm.pyx":259 + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 259, __pyx_L1_error) + __pyx_t_16 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 259, __pyx_L1_error) + } else {__pyx_pybuffernd_H1_denominator.diminfo[0].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_denominator.diminfo[0].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_denominator.diminfo[1].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_denominator.diminfo[1].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[1]; } - - /* "View.MemoryView":476 - * if self.view.suboffsets != NULL: - * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) - * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, # <<<<<<<<<<<<<< - * item, self.dtype_is_object) - * finally: - */ - __pyx_memoryview_slice_assign_scalar(__pyx_v_dst_slice, __pyx_v_dst->view.ndim, __pyx_v_self->view.itemsize, __pyx_v_item, __pyx_v_self->dtype_is_object); } + __pyx_t_16 = 0; + __pyx_v_H1_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":479 - * item, self.dtype_is_object) - * finally: - * PyMem_Free(tmp) # <<<<<<<<<<<<<< - * - * cdef setitem_indexed(self, index, value): + /* "cornac/models/efm/recom_efm.pyx":260 + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * int i, j, k, idx */ - /*finally:*/ { - /*normal exit:*/{ - PyMem_Free(__pyx_v_tmp); - goto __pyx_L7; - } - __pyx_L6_error:; - /*exception exit:*/{ - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); - __Pyx_XGOTREF(__pyx_t_7); - __Pyx_XGOTREF(__pyx_t_8); - __Pyx_XGOTREF(__pyx_t_9); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename; - { - PyMem_Free(__pyx_v_tmp); - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - } - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9); - __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; - __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6; - goto __pyx_L1_error; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 260, __pyx_L1_error) + __pyx_t_17 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 260, __pyx_L1_error) + } else {__pyx_pybuffernd_H2_numerator.diminfo[0].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_numerator.diminfo[0].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_numerator.diminfo[1].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_numerator.diminfo[1].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[1]; } - __pyx_L7:; } + __pyx_t_17 = 0; + __pyx_v_H2_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":449 - * src.ndim, dst.ndim, self.dtype_is_object) - * - * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< - * cdef int array[128] - * cdef void *tmp = NULL - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":481 - * PyMem_Free(tmp) - * - * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< - * cdef char *itemp = self.get_item_pointer(index) - * self.assign_item_from_object(itemp, value) + /* "cornac/models/efm/recom_efm.pyx":261 + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * int i, j, k, idx + * long n_ratings */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 261, __pyx_L1_error) + __pyx_t_18 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 261, __pyx_L1_error) + } else {__pyx_pybuffernd_H2_denominator.diminfo[0].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_denominator.diminfo[0].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_denominator.diminfo[1].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_denominator.diminfo[1].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_18 = 0; + __pyx_v_H2_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; -static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { - char *__pyx_v_itemp; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - char *__pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("setitem_indexed", 0); - - /* "View.MemoryView":482 + /* "cornac/models/efm/recom_efm.pyx":265 + * long n_ratings * - * cdef setitem_indexed(self, index, value): - * cdef char *itemp = self.get_item_pointer(index) # <<<<<<<<<<<<<< - * self.assign_item_from_object(itemp, value) + * floating eps = 1e-9 # <<<<<<<<<<<<<< * + * for t in range(1, self.max_iter + 1): */ - __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_index); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(2, 482, __pyx_L1_error) - __pyx_v_itemp = __pyx_t_1; + __pyx_v_eps = 1e-9; - /* "View.MemoryView":483 - * cdef setitem_indexed(self, index, value): - * cdef char *itemp = self.get_item_pointer(index) - * self.assign_item_from_object(itemp, value) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":267 + * floating eps = 1e-9 * - * cdef convert_item_to_object(self, char *itemp): + * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< + * loss = 0. + * U1_numerator.fill(0) */ - __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 483, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_max_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_int_1); + __Pyx_GIVEREF(__pyx_int_1); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { + __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_19 = 0; + __pyx_t_20 = NULL; + } else { + __pyx_t_19 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_20 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 267, __pyx_L1_error) + } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + for (;;) { + if (likely(!__pyx_t_20)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 267, __pyx_L1_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } else { + if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 267, __pyx_L1_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } + } else { + __pyx_t_2 = __pyx_t_20(__pyx_t_1); + if (unlikely(!__pyx_t_2)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 267, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_2); + } + __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2); + __pyx_t_2 = 0; - /* "View.MemoryView":481 - * PyMem_Free(tmp) + /* "cornac/models/efm/recom_efm.pyx":268 * - * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< - * cdef char *itemp = self.get_item_pointer(index) - * self.assign_item_from_object(itemp, value) + * for t in range(1, self.max_iter + 1): + * loss = 0. # <<<<<<<<<<<<<< + * U1_numerator.fill(0) + * U1_denominator.fill(0) */ + __pyx_v_loss = 0.; - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":485 - * self.assign_item_from_object(itemp, value) - * - * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" + /* "cornac/models/efm/recom_efm.pyx":269 + * for t in range(1, self.max_iter + 1): + * loss = 0. + * U1_numerator.fill(0) # <<<<<<<<<<<<<< + * U1_denominator.fill(0) + * U2_numerator.fill(0) */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; -static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp) { - PyObject *__pyx_v_struct = NULL; - PyObject *__pyx_v_bytesitem = 0; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - PyObject *__pyx_t_9 = NULL; - size_t __pyx_t_10; - int __pyx_t_11; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("convert_item_to_object", 0); + /* "cornac/models/efm/recom_efm.pyx":270 + * loss = 0. + * U1_numerator.fill(0) + * U1_denominator.fill(0) # <<<<<<<<<<<<<< + * U2_numerator.fill(0) + * U2_denominator.fill(0) + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":488 - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" - * import struct # <<<<<<<<<<<<<< - * cdef bytes bytesitem - * + /* "cornac/models/efm/recom_efm.pyx":271 + * U1_numerator.fill(0) + * U1_denominator.fill(0) + * U2_numerator.fill(0) # <<<<<<<<<<<<<< + * U2_denominator.fill(0) + * V_numerator.fill(0) */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 488, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_struct = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":491 - * cdef bytes bytesitem - * - * bytesitem = itemp[:self.view.itemsize] # <<<<<<<<<<<<<< - * try: - * result = struct.unpack(self.view.format, bytesitem) + /* "cornac/models/efm/recom_efm.pyx":272 + * U1_denominator.fill(0) + * U2_numerator.fill(0) + * U2_denominator.fill(0) # <<<<<<<<<<<<<< + * V_numerator.fill(0) + * V_denominator.fill(0) */ - __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_itemp + 0, __pyx_v_self->view.itemsize - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 491, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_bytesitem = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":492 - * - * bytesitem = itemp[:self.view.itemsize] - * try: # <<<<<<<<<<<<<< - * result = struct.unpack(self.view.format, bytesitem) - * except struct.error: + /* "cornac/models/efm/recom_efm.pyx":273 + * U2_numerator.fill(0) + * U2_denominator.fill(0) + * V_numerator.fill(0) # <<<<<<<<<<<<<< + * V_denominator.fill(0) + * H1_numerator.fill(0) */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_4); - /*try:*/ { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":493 - * bytesitem = itemp[:self.view.itemsize] - * try: - * result = struct.unpack(self.view.format, bytesitem) # <<<<<<<<<<<<<< - * except struct.error: - * raise ValueError("Unable to convert item to object") + /* "cornac/models/efm/recom_efm.pyx":274 + * U2_denominator.fill(0) + * V_numerator.fill(0) + * V_denominator.fill(0) # <<<<<<<<<<<<<< + * H1_numerator.fill(0) + * H1_denominator.fill(0) */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_unpack); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 493, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 493, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - __pyx_t_8 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - __pyx_t_8 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_5)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 493, __pyx_L3_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 493, __pyx_L3_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } else - #endif - { - __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 493, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_9); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL; - } - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_6); - __Pyx_INCREF(__pyx_v_bytesitem); - __Pyx_GIVEREF(__pyx_v_bytesitem); - PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_bytesitem); - __pyx_t_6 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 493, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 274, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_result = __pyx_t_1; - __pyx_t_1 = 0; + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":492 - * - * bytesitem = itemp[:self.view.itemsize] - * try: # <<<<<<<<<<<<<< - * result = struct.unpack(self.view.format, bytesitem) - * except struct.error: + /* "cornac/models/efm/recom_efm.pyx":275 + * V_numerator.fill(0) + * V_denominator.fill(0) + * H1_numerator.fill(0) # <<<<<<<<<<<<<< + * H1_denominator.fill(0) + * H2_numerator.fill(0) */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":497 - * raise ValueError("Unable to convert item to object") - * else: - * if len(self.view.format) == 1: # <<<<<<<<<<<<<< - * return result[0] - * return result + /* "cornac/models/efm/recom_efm.pyx":276 + * V_denominator.fill(0) + * H1_numerator.fill(0) + * H1_denominator.fill(0) # <<<<<<<<<<<<<< + * H2_numerator.fill(0) + * H2_denominator.fill(0) */ - /*else:*/ { - __pyx_t_10 = strlen(__pyx_v_self->view.format); - __pyx_t_11 = ((__pyx_t_10 == 1) != 0); - if (__pyx_t_11) { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":498 - * else: - * if len(self.view.format) == 1: - * return result[0] # <<<<<<<<<<<<<< - * return result + /* "cornac/models/efm/recom_efm.pyx":277 + * H1_numerator.fill(0) + * H1_denominator.fill(0) + * H2_numerator.fill(0) # <<<<<<<<<<<<<< + * H2_denominator.fill(0) * */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_result, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 498, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L6_except_return; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 277, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":497 - * raise ValueError("Unable to convert item to object") - * else: - * if len(self.view.format) == 1: # <<<<<<<<<<<<<< - * return result[0] - * return result + /* "cornac/models/efm/recom_efm.pyx":278 + * H1_denominator.fill(0) + * H2_numerator.fill(0) + * H2_denominator.fill(0) # <<<<<<<<<<<<<< + * + * with nogil, parallel(num_threads=num_threads): */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":499 - * if len(self.view.format) == 1: - * return result[0] - * return result # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":280 + * H2_denominator.fill(0) * - * cdef assign_item_from_object(self, char *itemp, object value): + * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_result); - __pyx_r = __pyx_v_result; - goto __pyx_L6_except_return; - } - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) private(__pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_3, __pyx_t_30, __pyx_t_31, __pyx_t_32, __pyx_t_33, __pyx_t_34, __pyx_t_35, __pyx_t_36, __pyx_t_4, __pyx_t_5) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_num_threads) + #endif /* _OPENMP */ + { + #ifdef _OPENMP + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + Py_BEGIN_ALLOW_THREADS + #endif /* _OPENMP */ - /* "View.MemoryView":494 - * try: - * result = struct.unpack(self.view.format, bytesitem) - * except struct.error: # <<<<<<<<<<<<<< - * raise ValueError("Unable to convert item to object") - * else: + /* "cornac/models/efm/recom_efm.pyx":282 + * with nogil, parallel(num_threads=num_threads): + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): # <<<<<<<<<<<<<< + * i = A_uids[idx] + * j = A_iids[idx] */ - __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_9); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 494, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_6); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_9); - __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_9 = 0; - if (__pyx_t_8) { - __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(2, 494, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_1); + if (unlikely(!__pyx_v_A.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("A"); __PYX_ERR(0, 282, __pyx_L12_error) } + __pyx_t_21 = (__pyx_v_A.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + float __pyx_parallel_temp4 = ((float)__PYX_NAN()); + float __pyx_parallel_temp5 = ((float)__PYX_NAN()); + float __pyx_parallel_temp6 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_23 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((float)__PYX_NAN()); + __pyx_v_score = ((float)__PYX_NAN()); - /* "View.MemoryView":495 - * result = struct.unpack(self.view.format, bytesitem) - * except struct.error: - * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< - * else: - * if len(self.view.format) == 1: + /* "cornac/models/efm/recom_efm.pyx":283 + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): + * i = A_uids[idx] # <<<<<<<<<<<<<< + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ */ - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 495, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_Raise(__pyx_t_6, 0, 0, 0); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __PYX_ERR(2, 495, __pyx_L5_except_error) - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i = (*((int *) ( /* dim=0 */ (__pyx_v_A_uids.data + __pyx_t_24 * __pyx_v_A_uids.strides[0]) ))); - /* "View.MemoryView":492 - * - * bytesitem = itemp[:self.view.itemsize] - * try: # <<<<<<<<<<<<<< - * result = struct.unpack(self.view.format, bytesitem) - * except struct.error: + /* "cornac/models/efm/recom_efm.pyx":284 + * for idx in prange(A.shape[0]): + * i = A_uids[idx] + * j = A_iids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) */ - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L1_error; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L0; - } + __pyx_t_24 = __pyx_v_idx; + __pyx_v_j = (*((int *) ( /* dim=0 */ (__pyx_v_A_iids.data + __pyx_t_24 * __pyx_v_A_iids.strides[0]) ))); - /* "View.MemoryView":485 - * self.assign_item_from_object(itemp, value) - * - * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" + /* "cornac/models/efm/recom_efm.pyx":285 + * i = A_uids[idx] + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ # <<<<<<<<<<<<<< + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = 0; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = 0; + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 285, __pyx_L16_error) - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_struct); - __Pyx_XDECREF(__pyx_v_bytesitem); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":286 + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) # <<<<<<<<<<<<<< + * score = A[idx] + * loss += (prediction - score) * (prediction - score) + */ + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = 0; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = 0; + __pyx_t_28 = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_latent_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_27 * __pyx_v_H1.strides[0]) ) + __pyx_t_26 * __pyx_v_H1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_24 * __pyx_v_H2.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 286, __pyx_L16_error) + __pyx_v_prediction = (__pyx_t_5 + __pyx_t_28); -/* "View.MemoryView":501 - * return result - * - * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" + /* "cornac/models/efm/recom_efm.pyx":287 + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ))); -static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { - PyObject *__pyx_v_struct = NULL; - char __pyx_v_c; - PyObject *__pyx_v_bytesvalue = 0; - Py_ssize_t __pyx_v_i; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - Py_ssize_t __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - char *__pyx_t_11; - char *__pyx_t_12; - char *__pyx_t_13; - char *__pyx_t_14; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("assign_item_from_object", 0); + /* "cornac/models/efm/recom_efm.pyx":288 + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] + */ + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); + + /* "cornac/models/efm/recom_efm.pyx":289 + * score = A[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] + */ + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":504 - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" - * import struct # <<<<<<<<<<<<<< - * cdef char c - * cdef bytes bytesvalue + /* "cornac/models/efm/recom_efm.pyx":290 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] # <<<<<<<<<<<<<< + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 504, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_struct = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_24 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":509 - * cdef Py_ssize_t i - * - * if isinstance(value, tuple): # <<<<<<<<<<<<<< - * bytesvalue = struct.pack(self.view.format, *value) - * else: + /* "cornac/models/efm/recom_efm.pyx":291 + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] # <<<<<<<<<<<<<< + * U2_numerator[j, k] += score * U1[i, k] + * U2_denominator[j, k] += prediction * U1[i, k] */ - __pyx_t_2 = PyTuple_Check(__pyx_v_value); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_24 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":510 + /* "cornac/models/efm/recom_efm.pyx":292 + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] # <<<<<<<<<<<<<< + * U2_denominator[j, k] += prediction * U1[i, k] * - * if isinstance(value, tuple): - * bytesvalue = struct.pack(self.view.format, *value) # <<<<<<<<<<<<<< - * else: - * bytesvalue = struct.pack(self.view.format, value) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 510, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 510, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 510, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 510, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 510, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 510, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(2, 510, __pyx_L1_error) - __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); - __pyx_t_4 = 0; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))); - /* "View.MemoryView":509 - * cdef Py_ssize_t i + /* "cornac/models/efm/recom_efm.pyx":293 + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] + * U2_denominator[j, k] += prediction * U1[i, k] # <<<<<<<<<<<<<< * - * if isinstance(value, tuple): # <<<<<<<<<<<<<< - * bytesvalue = struct.pack(self.view.format, *value) - * else: + * for k in range(num_latent_factors): */ - goto __pyx_L3; - } + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )))); + } - /* "View.MemoryView":512 - * bytesvalue = struct.pack(self.view.format, *value) - * else: - * bytesvalue = struct.pack(self.view.format, value) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":295 + * U2_denominator[j, k] += prediction * U1[i, k] * - * for i, c in enumerate(bytesvalue): + * for k in range(num_latent_factors): # <<<<<<<<<<<<<< + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] */ - /*else*/ { - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 512, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 512, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = NULL; - __pyx_t_7 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - __pyx_t_7 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; - __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 512, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; - __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 512, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } else - #endif - { - __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 512, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - if (__pyx_t_5) { - __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL; - } - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1); - __Pyx_INCREF(__pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_value); - __pyx_t_1 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 512, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(2, 512, __pyx_L1_error) - __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); - __pyx_t_4 = 0; - } - __pyx_L3:; + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":514 - * bytesvalue = struct.pack(self.view.format, value) - * - * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< - * itemp[i] = c + /* "cornac/models/efm/recom_efm.pyx":296 * + * for k in range(num_latent_factors): + * H1_numerator[i, k] += score * H2[j, k] # <<<<<<<<<<<<<< + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] */ - __pyx_t_9 = 0; - if (unlikely(__pyx_v_bytesvalue == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable"); - __PYX_ERR(2, 514, __pyx_L1_error) - } - __Pyx_INCREF(__pyx_v_bytesvalue); - __pyx_t_10 = __pyx_v_bytesvalue; - __pyx_t_12 = PyBytes_AS_STRING(__pyx_t_10); - __pyx_t_13 = (__pyx_t_12 + PyBytes_GET_SIZE(__pyx_t_10)); - for (__pyx_t_14 = __pyx_t_12; __pyx_t_14 < __pyx_t_13; __pyx_t_14++) { - __pyx_t_11 = __pyx_t_14; - __pyx_v_c = (__pyx_t_11[0]); + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_24 * __pyx_v_H2.strides[0]) ) + __pyx_t_25 * __pyx_v_H2.strides[1]) )))); - /* "View.MemoryView":515 - * - * for i, c in enumerate(bytesvalue): - * itemp[i] = c # <<<<<<<<<<<<<< - * - * @cname('getbuffer') + /* "cornac/models/efm/recom_efm.pyx":297 + * for k in range(num_latent_factors): + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] # <<<<<<<<<<<<<< + * H2_numerator[j, k] += score * H1[i, k] + * H2_denominator[j, k] += prediction * H1[i, k] */ - __pyx_v_i = __pyx_t_9; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_24 * __pyx_v_H2.strides[1]) )))); - /* "View.MemoryView":514 - * bytesvalue = struct.pack(self.view.format, value) - * - * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< - * itemp[i] = c + /* "cornac/models/efm/recom_efm.pyx":298 + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] # <<<<<<<<<<<<<< + * H2_denominator[j, k] += prediction * H1[i, k] * */ - __pyx_t_9 = (__pyx_t_9 + 1); + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_24 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))); - /* "View.MemoryView":515 + /* "cornac/models/efm/recom_efm.pyx":299 + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] + * H2_denominator[j, k] += prediction * H1[i, k] # <<<<<<<<<<<<<< * - * for i, c in enumerate(bytesvalue): - * itemp[i] = c # <<<<<<<<<<<<<< + * for idx in prange(X.shape[0]): + */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_25 * __pyx_v_H1.strides[0]) ) + __pyx_t_24 * __pyx_v_H1.strides[1]) )))); + } + goto __pyx_L23; + __pyx_L16_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L22; + __pyx_L22:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates6) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L23:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } + + /* "cornac/models/efm/recom_efm.pyx":301 + * H2_denominator[j, k] += prediction * H1[i, k] * - * @cname('getbuffer') + * for idx in prange(X.shape[0]): # <<<<<<<<<<<<<< + * i = X_uids[idx] + * j = X_aids[idx] */ - (__pyx_v_itemp[__pyx_v_i]) = __pyx_v_c; - } - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_v_X.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("X"); __PYX_ERR(0, 301, __pyx_L12_error) } + __pyx_t_23 = (__pyx_v_X.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + float __pyx_parallel_temp4 = ((float)__PYX_NAN()); + float __pyx_parallel_temp5 = ((float)__PYX_NAN()); + float __pyx_parallel_temp6 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_21 = (__pyx_t_23 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_21 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((float)__PYX_NAN()); + __pyx_v_score = ((float)__PYX_NAN()); - /* "View.MemoryView":501 - * return result + /* "cornac/models/efm/recom_efm.pyx":302 * - * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" + * for idx in prange(X.shape[0]): + * i = X_uids[idx] # <<<<<<<<<<<<<< + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i = (*((int *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_24 * __pyx_v_X_uids.strides[0]) ))); - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("View.MemoryView.memoryview.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_struct); - __Pyx_XDECREF(__pyx_v_bytesvalue); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":303 + * for idx in prange(X.shape[0]): + * i = X_uids[idx] + * j = X_aids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_j = (*((int *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_24 * __pyx_v_X_aids.strides[0]) ))); -/* "View.MemoryView":518 - * - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< - * if flags & PyBUF_WRITABLE and self.view.readonly: - * raise ValueError("Cannot create writable memory view from read-only memoryview") + /* "cornac/models/efm/recom_efm.pyx":304 + * i = X_uids[idx] + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< + * score = X[idx] + * loss += (prediction - score) * (prediction - score) */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = 0; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = 0; + __pyx_t_28 = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 304, __pyx_L26_error) + __pyx_v_prediction = __pyx_t_28; -/* Python wrapper */ -static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ -static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); + /* "cornac/models/efm/recom_efm.pyx":305 + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + */ + __pyx_t_27 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_27 * __pyx_v_X.strides[0]) ))); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":306 + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] + */ + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); -static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t *__pyx_t_4; - char *__pyx_t_5; - void *__pyx_t_6; - int __pyx_t_7; - Py_ssize_t __pyx_t_8; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - if (__pyx_v_info == NULL) { - PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); - return -1; - } - __Pyx_RefNannySetupContext("__getbuffer__", 0); - __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(__pyx_v_info->obj); + /* "cornac/models/efm/recom_efm.pyx":307 + * score = X[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + */ + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":519 - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): - * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< - * raise ValueError("Cannot create writable memory view from read-only memoryview") + /* "cornac/models/efm/recom_efm.pyx":308 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] # <<<<<<<<<<<<<< + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] + */ + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_27 * __pyx_v_U1.strides[0]) ) + __pyx_t_26 * __pyx_v_U1.strides[1]) )))); + + /* "cornac/models/efm/recom_efm.pyx":309 + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] # <<<<<<<<<<<<<< + * U1_numerator[i, k] += lambda_x * score * V[j, k] + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] + */ + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_26 * __pyx_v_U1.strides[0]) ) + __pyx_t_27 * __pyx_v_U1.strides[1]) )))); + + /* "cornac/models/efm/recom_efm.pyx":310 + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] # <<<<<<<<<<<<<< + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] * */ - __pyx_t_2 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_2 = (__pyx_v_self->view.readonly != 0); - __pyx_t_1 = __pyx_t_2; - __pyx_L4_bool_binop_done:; - if (unlikely(__pyx_t_1)) { + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_27 * __pyx_v_V.strides[0]) ) + __pyx_t_26 * __pyx_v_V.strides[1]) )))); - /* "View.MemoryView":520 - * def __getbuffer__(self, Py_buffer *info, int flags): - * if flags & PyBUF_WRITABLE and self.view.readonly: - * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":311 + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] # <<<<<<<<<<<<<< * - * if flags & PyBUF_ND: + * for idx in prange(Y.shape[0]): */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 520, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(2, 520, __pyx_L1_error) + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) )))); + } + goto __pyx_L31; + __pyx_L26_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L30; + __pyx_L30:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates7) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L31:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":519 - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): - * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< - * raise ValueError("Cannot create writable memory view from read-only memoryview") + /* "cornac/models/efm/recom_efm.pyx":313 + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] + * + * for idx in prange(Y.shape[0]): # <<<<<<<<<<<<<< + * i = Y_iids[idx] + * j = Y_aids[idx] + */ + if (unlikely(!__pyx_v_Y.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("Y"); __PYX_ERR(0, 313, __pyx_L12_error) } + __pyx_t_21 = (__pyx_v_Y.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + float __pyx_parallel_temp4 = ((float)__PYX_NAN()); + float __pyx_parallel_temp5 = ((float)__PYX_NAN()); + float __pyx_parallel_temp6 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_23 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((float)__PYX_NAN()); + __pyx_v_score = ((float)__PYX_NAN()); + + /* "cornac/models/efm/recom_efm.pyx":314 * + * for idx in prange(Y.shape[0]): + * i = Y_iids[idx] # <<<<<<<<<<<<<< + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + */ + __pyx_t_27 = __pyx_v_idx; + __pyx_v_i = (*((int *) ( /* dim=0 */ (__pyx_v_Y_iids.data + __pyx_t_27 * __pyx_v_Y_iids.strides[0]) ))); + + /* "cornac/models/efm/recom_efm.pyx":315 + * for idx in prange(Y.shape[0]): + * i = Y_iids[idx] + * j = Y_aids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] + */ + __pyx_t_27 = __pyx_v_idx; + __pyx_v_j = (*((int *) ( /* dim=0 */ (__pyx_v_Y_aids.data + __pyx_t_27 * __pyx_v_Y_aids.strides[0]) ))); + + /* "cornac/models/efm/recom_efm.pyx":316 + * i = Y_iids[idx] + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) + */ + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = 0; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = 0; + __pyx_t_28 = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_27 * __pyx_v_U2.strides[0]) ) + __pyx_t_26 * __pyx_v_U2.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 316, __pyx_L34_error) + __pyx_v_prediction = __pyx_t_28; + + /* "cornac/models/efm/recom_efm.pyx":317 + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): */ - } + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_Y.data + __pyx_t_24 * __pyx_v_Y.strides[0]) ))); - /* "View.MemoryView":522 - * raise ValueError("Cannot create writable memory view from read-only memoryview") - * - * if flags & PyBUF_ND: # <<<<<<<<<<<<<< - * info.shape = self.view.shape - * else: + /* "cornac/models/efm/recom_efm.pyx":318 + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_ND) != 0); - if (__pyx_t_1) { + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - /* "View.MemoryView":523 - * - * if flags & PyBUF_ND: - * info.shape = self.view.shape # <<<<<<<<<<<<<< - * else: - * info.shape = NULL + /* "cornac/models/efm/recom_efm.pyx":319 + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] */ - __pyx_t_4 = __pyx_v_self->view.shape; - __pyx_v_info->shape = __pyx_t_4; + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":522 - * raise ValueError("Cannot create writable memory view from read-only memoryview") - * - * if flags & PyBUF_ND: # <<<<<<<<<<<<<< - * info.shape = self.view.shape - * else: + /* "cornac/models/efm/recom_efm.pyx":320 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] # <<<<<<<<<<<<<< + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] */ - goto __pyx_L6; - } + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_24 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":525 - * info.shape = self.view.shape - * else: - * info.shape = NULL # <<<<<<<<<<<<<< - * - * if flags & PyBUF_STRIDES: + /* "cornac/models/efm/recom_efm.pyx":321 + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] # <<<<<<<<<<<<<< + * U2_numerator[i, k] += lambda_y * score * V[j, k] + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] */ - /*else*/ { - __pyx_v_info->shape = NULL; - } - __pyx_L6:; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_24 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":527 - * info.shape = NULL + /* "cornac/models/efm/recom_efm.pyx":322 + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] # <<<<<<<<<<<<<< + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] * - * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< - * info.strides = self.view.strides - * else: */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0); - if (__pyx_t_1) { + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )))); - /* "View.MemoryView":528 + /* "cornac/models/efm/recom_efm.pyx":323 + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] # <<<<<<<<<<<<<< * - * if flags & PyBUF_STRIDES: - * info.strides = self.view.strides # <<<<<<<<<<<<<< - * else: - * info.strides = NULL + * # update V */ - __pyx_t_4 = __pyx_v_self->view.strides; - __pyx_v_info->strides = __pyx_t_4; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))); + } + goto __pyx_L39; + __pyx_L34_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L38; + __pyx_L38:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates8) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L39:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":527 - * info.shape = NULL + /* "cornac/models/efm/recom_efm.pyx":326 * - * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< - * info.strides = self.view.strides - * else: + * # update V + * for i in prange(num_aspects): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] */ - goto __pyx_L7; - } + __pyx_t_3 = __pyx_v_num_aspects; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + float __pyx_parallel_temp2 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_32 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_32 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_32; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* "View.MemoryView":530 - * info.strides = self.view.strides - * else: - * info.strides = NULL # <<<<<<<<<<<<<< - * - * if flags & PyBUF_INDIRECT: + /* "cornac/models/efm/recom_efm.pyx":327 + * # update V + * for i in prange(num_aspects): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps */ - /*else*/ { - __pyx_v_info->strides = NULL; - } - __pyx_L7:; + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":532 - * info.strides = NULL - * - * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< - * info.suboffsets = self.view.suboffsets - * else: + /* "cornac/models/efm/recom_efm.pyx":328 + * for i in prange(num_aspects): + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] # <<<<<<<<<<<<<< + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_INDIRECT) != 0); - if (__pyx_t_1) { + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_v * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) ))))); - /* "View.MemoryView":533 + /* "cornac/models/efm/recom_efm.pyx":329 + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps # <<<<<<<<<<<<<< + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) * - * if flags & PyBUF_INDIRECT: - * info.suboffsets = self.view.suboffsets # <<<<<<<<<<<<<< - * else: - * info.suboffsets = NULL */ - __pyx_t_4 = __pyx_v_self->view.suboffsets; - __pyx_v_info->suboffsets = __pyx_t_4; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_33 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += (((((*((int *) ( /* dim=0 */ (__pyx_v_X_aspect_counts.data + __pyx_t_27 * __pyx_v_X_aspect_counts.strides[0]) ))) + (*((int *) ( /* dim=0 */ (__pyx_v_Y_aspect_counts.data + __pyx_t_26 * __pyx_v_Y_aspect_counts.strides[0]) )))) * __pyx_v_lambda_v) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":532 - * info.strides = NULL + /* "cornac/models/efm/recom_efm.pyx":330 + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) # <<<<<<<<<<<<<< * - * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< - * info.suboffsets = self.view.suboffsets - * else: + * # update U1, H1 */ - goto __pyx_L8; - } + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_V_numerator.diminfo[1].strides)); + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_V_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 330, __pyx_L42_error) + } + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L47; + __pyx_L42_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L46; + __pyx_L46:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates9) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L47:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":535 - * info.suboffsets = self.view.suboffsets - * else: - * info.suboffsets = NULL # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":333 * - * if flags & PyBUF_FORMAT: + * # update U1, H1 + * for i in prange(num_users): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] */ - /*else*/ { - __pyx_v_info->suboffsets = NULL; - } - __pyx_L8:; + __pyx_t_32 = __pyx_v_num_users; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + float __pyx_parallel_temp2 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_3 = (__pyx_t_32 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_3 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_3; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* "View.MemoryView":537 - * info.suboffsets = NULL - * - * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< - * info.format = self.view.format - * else: + /* "cornac/models/efm/recom_efm.pyx":334 + * # update U1, H1 + * for i in prange(num_users): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); - if (__pyx_t_1) { + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":538 - * - * if flags & PyBUF_FORMAT: - * info.format = self.view.format # <<<<<<<<<<<<<< - * else: - * info.format = NULL + /* "cornac/models/efm/recom_efm.pyx":335 + * for i in prange(num_users): + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] # <<<<<<<<<<<<<< + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) */ - __pyx_t_5 = __pyx_v_self->view.format; - __pyx_v_info->format = __pyx_t_5; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_26 * __pyx_v_U1.strides[0]) ) + __pyx_t_27 * __pyx_v_U1.strides[1]) ))))); - /* "View.MemoryView":537 - * info.suboffsets = NULL - * - * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< - * info.format = self.view.format - * else: + /* "cornac/models/efm/recom_efm.pyx":336 + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps # <<<<<<<<<<<<<< + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): */ - goto __pyx_L9; - } + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_34 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (((((*((int *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_27 * __pyx_v_A_user_counts.strides[0]) ))) + (*((int *) ( /* dim=0 */ (__pyx_v_X_user_counts.data + __pyx_t_26 * __pyx_v_X_user_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":540 - * info.format = self.view.format - * else: - * info.format = NULL # <<<<<<<<<<<<<< - * - * info.buf = self.view.buf + /* "cornac/models/efm/recom_efm.pyx":337 + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) # <<<<<<<<<<<<<< + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] */ - /*else*/ { - __pyx_v_info->format = NULL; - } - __pyx_L9:; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_U1_numerator.diminfo[1].strides)); + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U1_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_35 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 337, __pyx_L50_error) + } + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_35)); + } - /* "View.MemoryView":542 - * info.format = NULL - * - * info.buf = self.view.buf # <<<<<<<<<<<<<< - * info.ndim = self.view.ndim - * info.itemsize = self.view.itemsize + /* "cornac/models/efm/recom_efm.pyx":338 + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): # <<<<<<<<<<<<<< + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps */ - __pyx_t_6 = __pyx_v_self->view.buf; - __pyx_v_info->buf = __pyx_t_6; + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":543 - * - * info.buf = self.view.buf - * info.ndim = self.view.ndim # <<<<<<<<<<<<<< - * info.itemsize = self.view.itemsize - * info.len = self.view.len + /* "cornac/models/efm/recom_efm.pyx":339 + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] # <<<<<<<<<<<<<< + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) */ - __pyx_t_7 = __pyx_v_self->view.ndim; - __pyx_v_info->ndim = __pyx_t_7; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_24 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_26 * __pyx_v_H1.strides[0]) ) + __pyx_t_27 * __pyx_v_H1.strides[1]) ))))); - /* "View.MemoryView":544 - * info.buf = self.view.buf - * info.ndim = self.view.ndim - * info.itemsize = self.view.itemsize # <<<<<<<<<<<<<< - * info.len = self.view.len - * info.readonly = self.view.readonly + /* "cornac/models/efm/recom_efm.pyx":340 + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps # <<<<<<<<<<<<<< + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) + * */ - __pyx_t_8 = __pyx_v_self->view.itemsize; - __pyx_v_info->itemsize = __pyx_t_8; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += ((((*((int *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_27 * __pyx_v_A_user_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_26 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":545 - * info.ndim = self.view.ndim - * info.itemsize = self.view.itemsize - * info.len = self.view.len # <<<<<<<<<<<<<< - * info.readonly = self.view.readonly - * info.obj = self + /* "cornac/models/efm/recom_efm.pyx":341 + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) # <<<<<<<<<<<<<< + * + * # update U2, H2 */ - __pyx_t_8 = __pyx_v_self->view.len; - __pyx_v_info->len = __pyx_t_8; + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H1_numerator.diminfo[1].strides)); + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_H1_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 341, __pyx_L50_error) + } + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_25 * __pyx_v_H1.strides[0]) ) + __pyx_t_26 * __pyx_v_H1.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L57; + __pyx_L50_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L56; + __pyx_L56:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates10) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L57:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":546 - * info.itemsize = self.view.itemsize - * info.len = self.view.len - * info.readonly = self.view.readonly # <<<<<<<<<<<<<< - * info.obj = self + /* "cornac/models/efm/recom_efm.pyx":344 * + * # update U2, H2 + * for i in prange(num_items): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] */ - __pyx_t_1 = __pyx_v_self->view.readonly; - __pyx_v_info->readonly = __pyx_t_1; + __pyx_t_3 = __pyx_v_num_items; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + float __pyx_parallel_temp2 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_32 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_32 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_32; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* "View.MemoryView":547 - * info.len = self.view.len - * info.readonly = self.view.readonly - * info.obj = self # <<<<<<<<<<<<<< - * - * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") + /* "cornac/models/efm/recom_efm.pyx":345 + * # update U2, H2 + * for i in prange(num_items): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps */ - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); - __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":518 - * - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< - * if flags & PyBUF_WRITABLE and self.view.readonly: - * raise ValueError("Cannot create writable memory view from read-only memoryview") + /* "cornac/models/efm/recom_efm.pyx":346 + * for i in prange(num_items): + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] # <<<<<<<<<<<<<< + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) */ + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_27 * __pyx_v_U2.strides[0]) ) + __pyx_t_33 * __pyx_v_U2.strides[1]) ))))); - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - if (__pyx_v_info->obj != NULL) { - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; - } - goto __pyx_L2; - __pyx_L0:; - if (__pyx_v_info->obj == Py_None) { - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; - } - __pyx_L2:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":553 - * - * @property - * def T(self): # <<<<<<<<<<<<<< - * cdef _memoryviewslice result = memoryview_copy(self) - * transpose_memslice(&result.from_slice) + /* "cornac/models/efm/recom_efm.pyx":347 + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps # <<<<<<<<<<<<<< + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): */ + __pyx_t_33 = __pyx_v_i; + __pyx_t_27 = __pyx_v_i; + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (((((*((int *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_33 * __pyx_v_A_item_counts.strides[0]) ))) + (*((int *) ( /* dim=0 */ (__pyx_v_Y_item_counts.data + __pyx_t_27 * __pyx_v_Y_item_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_26 * __pyx_v_U2.strides[1]) )))) + __pyx_v_eps); -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":554 - * @property - * def T(self): - * cdef _memoryviewslice result = memoryview_copy(self) # <<<<<<<<<<<<<< - * transpose_memslice(&result.from_slice) - * return result + /* "cornac/models/efm/recom_efm.pyx":348 + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) # <<<<<<<<<<<<<< + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] */ - __pyx_t_1 = __pyx_memoryview_copy_object(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 554, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_memoryviewslice_type))))) __PYX_ERR(2, 554, __pyx_L1_error) - __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_1); - __pyx_t_1 = 0; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U2_numerator.diminfo[1].strides)); + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_35 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 348, __pyx_L60_error) + } + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_35)); + } - /* "View.MemoryView":555 - * def T(self): - * cdef _memoryviewslice result = memoryview_copy(self) - * transpose_memslice(&result.from_slice) # <<<<<<<<<<<<<< - * return result - * + /* "cornac/models/efm/recom_efm.pyx":349 + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): # <<<<<<<<<<<<<< + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps */ - __pyx_t_2 = __pyx_memslice_transpose((&__pyx_v_result->from_slice)); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(2, 555, __pyx_L1_error) + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":556 - * cdef _memoryviewslice result = memoryview_copy(self) - * transpose_memslice(&result.from_slice) - * return result # <<<<<<<<<<<<<< - * - * @property + /* "cornac/models/efm/recom_efm.pyx":350 + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] # <<<<<<<<<<<<<< + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_result)); - __pyx_r = ((PyObject *)__pyx_v_result); - goto __pyx_L0; + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_26 * __pyx_v_H2.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_27 * __pyx_v_H2.strides[0]) ) + __pyx_t_33 * __pyx_v_H2.strides[1]) ))))); - /* "View.MemoryView":553 + /* "cornac/models/efm/recom_efm.pyx":351 + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps # <<<<<<<<<<<<<< + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) * - * @property - * def T(self): # <<<<<<<<<<<<<< - * cdef _memoryviewslice result = memoryview_copy(self) - * transpose_memslice(&result.from_slice) */ + __pyx_t_33 = __pyx_v_i; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += ((((*((int *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_33 * __pyx_v_A_item_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_27 * __pyx_v_H2.strides[0]) ) + __pyx_t_26 * __pyx_v_H2.strides[1]) )))) + __pyx_v_eps); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview.T.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":559 - * - * @property - * def base(self): # <<<<<<<<<<<<<< - * return self.obj + /* "cornac/models/efm/recom_efm.pyx":352 + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) # <<<<<<<<<<<<<< * + * if self.verbose: */ - -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H2_numerator.diminfo[1].strides)); + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 352, __pyx_L60_error) + } + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_26 * __pyx_v_H2.strides[0]) ) + __pyx_t_27 * __pyx_v_H2.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L67; + __pyx_L60_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L66; + __pyx_L66:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates11) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L67:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } + goto __pyx_L69; + __pyx_L12_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L69; + __pyx_L69:; + #ifdef _OPENMP + Py_END_ALLOW_THREADS + #else +{ +#ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #endif /* _OPENMP */ + /* Clean up any temporaries */ + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + #ifndef _OPENMP } +#endif /* _OPENMP */ + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif + } -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":560 - * @property - * def base(self): - * return self.obj # <<<<<<<<<<<<<< - * - * @property - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->obj); - __pyx_r = __pyx_v_self->obj; - goto __pyx_L0; - - /* "View.MemoryView":559 - * - * @property - * def base(self): # <<<<<<<<<<<<<< - * return self.obj + /* "cornac/models/efm/recom_efm.pyx":280 + * H2_denominator.fill(0) * + * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L9; + } + __pyx_L8_error: { + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L1_error; + } + __pyx_L9:; + } + } - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":563 - * - * @property - * def shape(self): # <<<<<<<<<<<<<< - * return tuple([length for length in self.view.shape[:self.view.ndim]]) + /* "cornac/models/efm/recom_efm.pyx":354 + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - Py_ssize_t __pyx_v_length; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t *__pyx_t_2; - Py_ssize_t *__pyx_t_3; - Py_ssize_t *__pyx_t_4; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":564 - * @property - * def shape(self): - * return tuple([length for length in self.view.shape[:self.view.ndim]]) # <<<<<<<<<<<<<< + * if self.verbose: # <<<<<<<<<<<<<< + * print('iter: %d, loss: %f' % (t, loss)) * - * @property */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 564, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); - for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { - __pyx_t_2 = __pyx_t_4; - __pyx_v_length = (__pyx_t_2[0]); - __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 564, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(2, 564, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 564, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 354, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_37 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_37 < 0))) __PYX_ERR(0, 354, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_37) { - /* "View.MemoryView":563 + /* "cornac/models/efm/recom_efm.pyx":355 * - * @property - * def shape(self): # <<<<<<<<<<<<<< - * return tuple([length for length in self.view.shape[:self.view.ndim]]) + * if self.verbose: + * print('iter: %d, loss: %f' % (t, loss)) # <<<<<<<<<<<<<< * + * if self.verbose: */ + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_23 = 0; + __pyx_t_38 = 127; + __Pyx_INCREF(__pyx_kp_u_iter); + __pyx_t_23 += 6; + __Pyx_GIVEREF(__pyx_kp_u_iter); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_iter); + __pyx_t_6 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_t), __pyx_n_u_d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_38 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_38) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_38; + __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u_loss); + __pyx_t_23 += 8; + __Pyx_GIVEREF(__pyx_kp_u_loss); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_loss); + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_Format(__pyx_t_6, __pyx_n_u_f); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_38 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_38) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_38; + __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_23, __pyx_t_38); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.memoryview.shape.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":567 + /* "cornac/models/efm/recom_efm.pyx":354 + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) * - * @property - * def strides(self): # <<<<<<<<<<<<<< - * if self.view.strides == NULL: + * if self.verbose: # <<<<<<<<<<<<<< + * print('iter: %d, loss: %f' % (t, loss)) * */ + } -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - Py_ssize_t __pyx_v_stride; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t *__pyx_t_3; - Py_ssize_t *__pyx_t_4; - Py_ssize_t *__pyx_t_5; - PyObject *__pyx_t_6 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":568 - * @property - * def strides(self): - * if self.view.strides == NULL: # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":267 + * floating eps = 1e-9 * - * raise ValueError("Buffer view does not expose strides") + * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< + * loss = 0. + * U1_numerator.fill(0) */ - __pyx_t_1 = ((__pyx_v_self->view.strides == NULL) != 0); - if (unlikely(__pyx_t_1)) { + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":570 - * if self.view.strides == NULL: + /* "cornac/models/efm/recom_efm.pyx":357 + * print('iter: %d, loss: %f' % (t, loss)) * - * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< + * if self.verbose: # <<<<<<<<<<<<<< + * print('Optimization finished!') * - * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) */ - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 570, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_Raise(__pyx_t_2, 0, 0, 0); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __PYX_ERR(2, 570, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_37 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_37 < 0))) __PYX_ERR(0, 357, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_37) { - /* "View.MemoryView":568 - * @property - * def strides(self): - * if self.view.strides == NULL: # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":358 + * + * if self.verbose: + * print('Optimization finished!') # <<<<<<<<<<<<<< * - * raise ValueError("Buffer view does not expose strides") + * def _build_matrices(self, data_set): */ - } + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":572 - * raise ValueError("Buffer view does not expose strides") + /* "cornac/models/efm/recom_efm.pyx":357 + * print('iter: %d, loss: %f' % (t, loss)) * - * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) # <<<<<<<<<<<<<< + * if self.verbose: # <<<<<<<<<<<<<< + * print('Optimization finished!') * - * @property */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 572, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = (__pyx_v_self->view.strides + __pyx_v_self->view.ndim); - for (__pyx_t_5 = __pyx_v_self->view.strides; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { - __pyx_t_3 = __pyx_t_5; - __pyx_v_stride = (__pyx_t_3[0]); - __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_stride); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 572, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(2, 572, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } - __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 572, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L0; - /* "View.MemoryView":567 + /* "cornac/models/efm/recom_efm.pyx":228 * - * @property - * def strides(self): # <<<<<<<<<<<<<< - * if self.view.strides == NULL: * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def _fit_efm(self, int num_threads, */ /* 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_6); - __Pyx_AddTraceback("View.MemoryView.memoryview.strides.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; + goto __pyx_L2; __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_U1_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_U1_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_U2_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_U2_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_V_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_V_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_H1_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_H1_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_H2_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_H2_denominator); + __Pyx_XDECREF(__pyx_v_t); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "View.MemoryView":575 - * - * @property - * def suboffsets(self): # <<<<<<<<<<<<<< - * if self.view.suboffsets == NULL: - * return (-1,) * self.view.ndim - */ - /* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self) { +static PyObject *__pyx_fuse_0_2__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_23_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_fuse_0_2__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_23_fit_efm = {"__pyx_fuse_0_2_fit_efm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0_2__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_23_fit_efm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm}; +static PyObject *__pyx_fuse_0_2__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_23_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + int __pyx_v_num_threads; + __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_V = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_H1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_H2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + __Pyx_RefNannySetupContext("_fit_efm (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_num_threads,&__pyx_n_s_A,&__pyx_n_s_A_uids,&__pyx_n_s_A_iids,&__pyx_n_s_A_user_counts,&__pyx_n_s_A_item_counts,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_aids,&__pyx_n_s_X_user_counts,&__pyx_n_s_X_aspect_counts,&__pyx_n_s_Y,&__pyx_n_s_Y_iids,&__pyx_n_s_Y_aids,&__pyx_n_s_Y_item_counts,&__pyx_n_s_Y_aspect_counts,&__pyx_n_s_U1,&__pyx_n_s_U2,&__pyx_n_s_V,&__pyx_n_s_H1,&__pyx_n_s_H2,0}; + PyObject* values[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 22: values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + CYTHON_FALLTHROUGH; + case 21: values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + CYTHON_FALLTHROUGH; + case 20: values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + CYTHON_FALLTHROUGH; + case 19: values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + CYTHON_FALLTHROUGH; + case 18: values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + CYTHON_FALLTHROUGH; + case 17: values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + CYTHON_FALLTHROUGH; + case 16: values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num_threads)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 1); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 2); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 3); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 4); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_user_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 5); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_item_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 6); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 7); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 8); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 9); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_user_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 10); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aspect_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 11); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 12); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 13); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 14); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 15: + if (likely((values[15] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_item_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 15); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 16: + if (likely((values[16] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_aspect_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 16); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 17: + if (likely((values[17] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 17); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 18: + if (likely((values[18] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 18); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 19: + if (likely((values[19] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_V)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 19); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 20: + if (likely((values[20] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_H1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 20); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 21: + if (likely((values[21] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_H2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 21); __PYX_ERR(0, 228, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_fit_efm") < 0)) __PYX_ERR(0, 228, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 22)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + } + __pyx_v_self = values[0]; + __pyx_v_num_threads = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L3_error) + __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_uids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_iids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_user_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_item_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_user_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aspect_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_Y = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_iids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_item_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aspect_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_U1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_U2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_V = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_V.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_H1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[20], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_H2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, __pyx_nargs); __PYX_ERR(0, 228, __pyx_L3_error) + __pyx_L3_error:; + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_V, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H2, 1); + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_22_fit_efm(__pyx_self, __pyx_v_self, __pyx_v_num_threads, __pyx_v_A, __pyx_v_A_uids, __pyx_v_A_iids, __pyx_v_A_user_counts, __pyx_v_A_item_counts, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_aids, __pyx_v_X_user_counts, __pyx_v_X_aspect_counts, __pyx_v_Y, __pyx_v_Y_iids, __pyx_v_Y_aids, __pyx_v_Y_item_counts, __pyx_v_Y_aspect_counts, __pyx_v_U1, __pyx_v_U2, __pyx_v_V, __pyx_v_H1, __pyx_v_H2); /* function exit code */ + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_V, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H2, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - Py_ssize_t __pyx_v_suboffset; +static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_22_fit_efm(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_A_uids, __Pyx_memviewslice __pyx_v_A_iids, __Pyx_memviewslice __pyx_v_A_user_counts, __Pyx_memviewslice __pyx_v_A_item_counts, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_X_user_counts, __Pyx_memviewslice __pyx_v_X_aspect_counts, __Pyx_memviewslice __pyx_v_Y, __Pyx_memviewslice __pyx_v_Y_iids, __Pyx_memviewslice __pyx_v_Y_aids, __Pyx_memviewslice __pyx_v_Y_item_counts, __Pyx_memviewslice __pyx_v_Y_aspect_counts, __Pyx_memviewslice __pyx_v_U1, __Pyx_memviewslice __pyx_v_U2, __Pyx_memviewslice __pyx_v_V, __Pyx_memviewslice __pyx_v_H1, __Pyx_memviewslice __pyx_v_H2) { + long __pyx_v_num_users; + long __pyx_v_num_items; + long __pyx_v_num_aspects; + int __pyx_v_num_explicit_factors; + int __pyx_v_num_latent_factors; + float __pyx_v_lambda_x; + float __pyx_v_lambda_y; + float __pyx_v_lambda_u; + float __pyx_v_lambda_h; + float __pyx_v_lambda_v; + float __pyx_v_prediction; + float __pyx_v_score; + float __pyx_v_loss; + PyArrayObject *__pyx_v_U1_numerator = 0; + PyArrayObject *__pyx_v_U1_denominator = 0; + PyArrayObject *__pyx_v_U2_numerator = 0; + PyArrayObject *__pyx_v_U2_denominator = 0; + PyArrayObject *__pyx_v_V_numerator = 0; + PyArrayObject *__pyx_v_V_denominator = 0; + PyArrayObject *__pyx_v_H1_numerator = 0; + PyArrayObject *__pyx_v_H1_denominator = 0; + PyArrayObject *__pyx_v_H2_numerator = 0; + PyArrayObject *__pyx_v_H2_denominator = 0; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_v_k; + int __pyx_v_idx; + float __pyx_v_eps; + PyObject *__pyx_v_t = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_denominator; + __Pyx_Buffer __pyx_pybuffer_H1_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_numerator; + __Pyx_Buffer __pyx_pybuffer_H1_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_denominator; + __Pyx_Buffer __pyx_pybuffer_H2_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_numerator; + __Pyx_Buffer __pyx_pybuffer_H2_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_denominator; + __Pyx_Buffer __pyx_pybuffer_U1_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_numerator; + __Pyx_Buffer __pyx_pybuffer_U1_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_denominator; + __Pyx_Buffer __pyx_pybuffer_U2_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_numerator; + __Pyx_Buffer __pyx_pybuffer_U2_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_V_denominator; + __Pyx_Buffer __pyx_pybuffer_V_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_V_numerator; + __Pyx_Buffer __pyx_pybuffer_V_numerator; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - int __pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t *__pyx_t_4; - Py_ssize_t *__pyx_t_5; - Py_ssize_t *__pyx_t_6; + long __pyx_t_3; + int __pyx_t_4; + float __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyArrayObject *__pyx_t_9 = NULL; + PyArrayObject *__pyx_t_10 = NULL; + PyArrayObject *__pyx_t_11 = NULL; + PyArrayObject *__pyx_t_12 = NULL; + PyArrayObject *__pyx_t_13 = NULL; + PyArrayObject *__pyx_t_14 = NULL; + PyArrayObject *__pyx_t_15 = NULL; + PyArrayObject *__pyx_t_16 = NULL; + PyArrayObject *__pyx_t_17 = NULL; + PyArrayObject *__pyx_t_18 = NULL; + Py_ssize_t __pyx_t_19; + PyObject *(*__pyx_t_20)(PyObject *); + Py_ssize_t __pyx_t_21; + Py_ssize_t __pyx_t_22; + Py_ssize_t __pyx_t_23; + Py_ssize_t __pyx_t_24; + Py_ssize_t __pyx_t_25; + Py_ssize_t __pyx_t_26; + Py_ssize_t __pyx_t_27; + float __pyx_t_28; + int __pyx_t_29; + int __pyx_t_30; + long __pyx_t_31; + long __pyx_t_32; + Py_ssize_t __pyx_t_33; + Py_ssize_t __pyx_t_34; + __pyx_t_5numpy_float32_t __pyx_t_35; + __pyx_t_5numpy_float32_t __pyx_t_36; + int __pyx_t_37; + Py_UCS4 __pyx_t_38; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":576 - * @property - * def suboffsets(self): - * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< - * return (-1,) * self.view.ndim - * - */ - __pyx_t_1 = ((__pyx_v_self->view.suboffsets == NULL) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":577 - * def suboffsets(self): - * if self.view.suboffsets == NULL: - * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< - * - * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 577, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_Multiply(__pyx_tuple__28, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 577, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "View.MemoryView":576 - * @property - * def suboffsets(self): - * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< - * return (-1,) * self.view.ndim - * - */ - } - - /* "View.MemoryView":579 - * return (-1,) * self.view.ndim - * - * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) # <<<<<<<<<<<<<< - * - * @property - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 579, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = (__pyx_v_self->view.suboffsets + __pyx_v_self->view.ndim); - for (__pyx_t_6 = __pyx_v_self->view.suboffsets; __pyx_t_6 < __pyx_t_5; __pyx_t_6++) { - __pyx_t_4 = __pyx_t_6; - __pyx_v_suboffset = (__pyx_t_4[0]); - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_suboffset); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 579, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_2))) __PYX_ERR(2, 579, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 579, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "View.MemoryView":575 - * - * @property - * def suboffsets(self): # <<<<<<<<<<<<<< - * if self.view.suboffsets == NULL: - * return (-1,) * self.view.ndim - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview.suboffsets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + __Pyx_RefNannySetupContext("__pyx_fuse_0_2_fit_efm", 0); + __pyx_pybuffer_U1_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_U1_numerator.refcount = 0; + __pyx_pybuffernd_U1_numerator.data = NULL; + __pyx_pybuffernd_U1_numerator.rcbuffer = &__pyx_pybuffer_U1_numerator; + __pyx_pybuffer_U1_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_U1_denominator.refcount = 0; + __pyx_pybuffernd_U1_denominator.data = NULL; + __pyx_pybuffernd_U1_denominator.rcbuffer = &__pyx_pybuffer_U1_denominator; + __pyx_pybuffer_U2_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_U2_numerator.refcount = 0; + __pyx_pybuffernd_U2_numerator.data = NULL; + __pyx_pybuffernd_U2_numerator.rcbuffer = &__pyx_pybuffer_U2_numerator; + __pyx_pybuffer_U2_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_U2_denominator.refcount = 0; + __pyx_pybuffernd_U2_denominator.data = NULL; + __pyx_pybuffernd_U2_denominator.rcbuffer = &__pyx_pybuffer_U2_denominator; + __pyx_pybuffer_V_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_V_numerator.refcount = 0; + __pyx_pybuffernd_V_numerator.data = NULL; + __pyx_pybuffernd_V_numerator.rcbuffer = &__pyx_pybuffer_V_numerator; + __pyx_pybuffer_V_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_V_denominator.refcount = 0; + __pyx_pybuffernd_V_denominator.data = NULL; + __pyx_pybuffernd_V_denominator.rcbuffer = &__pyx_pybuffer_V_denominator; + __pyx_pybuffer_H1_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_H1_numerator.refcount = 0; + __pyx_pybuffernd_H1_numerator.data = NULL; + __pyx_pybuffernd_H1_numerator.rcbuffer = &__pyx_pybuffer_H1_numerator; + __pyx_pybuffer_H1_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_H1_denominator.refcount = 0; + __pyx_pybuffernd_H1_denominator.data = NULL; + __pyx_pybuffernd_H1_denominator.rcbuffer = &__pyx_pybuffer_H1_denominator; + __pyx_pybuffer_H2_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_H2_numerator.refcount = 0; + __pyx_pybuffernd_H2_numerator.data = NULL; + __pyx_pybuffernd_H2_numerator.rcbuffer = &__pyx_pybuffer_H2_numerator; + __pyx_pybuffer_H2_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_H2_denominator.refcount = 0; + __pyx_pybuffernd_H2_denominator.data = NULL; + __pyx_pybuffernd_H2_denominator.rcbuffer = &__pyx_pybuffer_H2_denominator; -/* "View.MemoryView":582 - * - * @property - * def ndim(self): # <<<<<<<<<<<<<< - * return self.view.ndim - * + /* "cornac/models/efm/recom_efm.pyx":238 + * """ + * cdef: + * long num_users = self.train_set.num_users # <<<<<<<<<<<<<< + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_num_users = __pyx_t_3; -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":583 - * @property - * def ndim(self): - * return self.view.ndim # <<<<<<<<<<<<<< - * - * @property + /* "cornac/models/efm/recom_efm.pyx":239 + * cdef: + * long num_users = self.train_set.num_users + * long num_items = self.train_set.num_items # <<<<<<<<<<<<<< + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 583, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_items = __pyx_t_3; - /* "View.MemoryView":582 - * - * @property - * def ndim(self): # <<<<<<<<<<<<<< - * return self.view.ndim - * + /* "cornac/models/efm/recom_efm.pyx":240 + * long num_users = self.train_set.num_users + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< + * int num_explicit_factors = self.num_explicit_factors + * int num_latent_factors = self.num_latent_factors */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_aspects = __pyx_t_3; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":586 - * - * @property - * def itemsize(self): # <<<<<<<<<<<<<< - * return self.view.itemsize + /* "cornac/models/efm/recom_efm.pyx":241 + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors # <<<<<<<<<<<<<< + * int num_latent_factors = self.num_latent_factors * */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_explicit_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_explicit_factors = __pyx_t_4; -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":587 - * @property - * def itemsize(self): - * return self.view.itemsize # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":242 + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors + * int num_latent_factors = self.num_latent_factors # <<<<<<<<<<<<<< * - * @property + * floating lambda_x = self.lambda_x */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 587, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_latent_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 242, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_latent_factors = __pyx_t_4; - /* "View.MemoryView":586 - * - * @property - * def itemsize(self): # <<<<<<<<<<<<<< - * return self.view.itemsize + /* "cornac/models/efm/recom_efm.pyx":244 + * int num_latent_factors = self.num_latent_factors * + * floating lambda_x = self.lambda_x # <<<<<<<<<<<<<< + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_x = __pyx_t_5; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview.itemsize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":590 - * - * @property - * def nbytes(self): # <<<<<<<<<<<<<< - * return self.size * self.view.itemsize + /* "cornac/models/efm/recom_efm.pyx":245 * + * floating lambda_x = self.lambda_x + * floating lambda_y = self.lambda_y # <<<<<<<<<<<<<< + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 245, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_y = __pyx_t_5; -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + /* "cornac/models/efm/recom_efm.pyx":246 + * floating lambda_x = self.lambda_x + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u # <<<<<<<<<<<<<< + * floating lambda_h = self.lambda_h + * floating lambda_v = self.lambda_v + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_u); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_u = __pyx_t_5; - /* "View.MemoryView":591 - * @property - * def nbytes(self): - * return self.size * self.view.itemsize # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":247 + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h # <<<<<<<<<<<<<< + * floating lambda_v = self.lambda_v * - * @property */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 591, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_h); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 591, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 591, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; + __pyx_v_lambda_h = __pyx_t_5; - /* "View.MemoryView":590 - * - * @property - * def nbytes(self): # <<<<<<<<<<<<<< - * return self.size * self.view.itemsize + /* "cornac/models/efm/recom_efm.pyx":248 + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h + * floating lambda_v = self.lambda_v # <<<<<<<<<<<<<< * + * floating prediction, score, loss */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_v); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 248, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 248, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_v = __pyx_t_5; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":594 + /* "cornac/models/efm/recom_efm.pyx":252 + * floating prediction, score, loss * - * @property - * def size(self): # <<<<<<<<<<<<<< - * if self._size is None: - * result = 1 + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 252, __pyx_L1_error) + __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 252, __pyx_L1_error) + } else {__pyx_pybuffernd_U1_numerator.diminfo[0].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_numerator.diminfo[0].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_numerator.diminfo[1].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_numerator.diminfo[1].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_9 = 0; + __pyx_v_U1_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_length = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - Py_ssize_t *__pyx_t_3; - Py_ssize_t *__pyx_t_4; - Py_ssize_t *__pyx_t_5; - PyObject *__pyx_t_6 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":595 - * @property - * def size(self): - * if self._size is None: # <<<<<<<<<<<<<< - * result = 1 + /* "cornac/models/efm/recom_efm.pyx":253 * + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) */ - __pyx_t_1 = (__pyx_v_self->_size == Py_None); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 253, __pyx_L1_error) + __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 253, __pyx_L1_error) + } else {__pyx_pybuffernd_U1_denominator.diminfo[0].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_denominator.diminfo[0].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_denominator.diminfo[1].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_denominator.diminfo[1].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_10 = 0; + __pyx_v_U1_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":596 - * def size(self): - * if self._size is None: - * result = 1 # <<<<<<<<<<<<<< - * - * for length in self.view.shape[:self.view.ndim]: + /* "cornac/models/efm/recom_efm.pyx":254 + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) */ - __Pyx_INCREF(__pyx_int_1); - __pyx_v_result = __pyx_int_1; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 254, __pyx_L1_error) + __pyx_t_11 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 254, __pyx_L1_error) + } else {__pyx_pybuffernd_U2_numerator.diminfo[0].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_numerator.diminfo[0].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_numerator.diminfo[1].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_numerator.diminfo[1].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_11 = 0; + __pyx_v_U2_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":598 - * result = 1 - * - * for length in self.view.shape[:self.view.ndim]: # <<<<<<<<<<<<<< - * result *= length - * + /* "cornac/models/efm/recom_efm.pyx":255 + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) */ - __pyx_t_4 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); - for (__pyx_t_5 = __pyx_v_self->view.shape; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { - __pyx_t_3 = __pyx_t_5; - __pyx_t_6 = PyInt_FromSsize_t((__pyx_t_3[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 598, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_6); - __pyx_t_6 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 255, __pyx_L1_error) + __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 255, __pyx_L1_error) + } else {__pyx_pybuffernd_U2_denominator.diminfo[0].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_denominator.diminfo[0].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_denominator.diminfo[1].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_denominator.diminfo[1].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_12 = 0; + __pyx_v_U2_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":599 - * - * for length in self.view.shape[:self.view.ndim]: - * result *= length # <<<<<<<<<<<<<< - * - * self._size = result + /* "cornac/models/efm/recom_efm.pyx":256 + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) */ - __pyx_t_6 = PyNumber_InPlaceMultiply(__pyx_v_result, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 599, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_6); - __pyx_t_6 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 256, __pyx_L1_error) + __pyx_t_13 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_V_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 256, __pyx_L1_error) + } else {__pyx_pybuffernd_V_numerator.diminfo[0].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_numerator.diminfo[0].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_numerator.diminfo[1].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_numerator.diminfo[1].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[1]; } + } + __pyx_t_13 = 0; + __pyx_v_V_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":601 - * result *= length - * - * self._size = result # <<<<<<<<<<<<<< - * - * return self._size + /* "cornac/models/efm/recom_efm.pyx":257 + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) */ - __Pyx_INCREF(__pyx_v_result); - __Pyx_GIVEREF(__pyx_v_result); - __Pyx_GOTREF(__pyx_v_self->_size); - __Pyx_DECREF(__pyx_v_self->_size); - __pyx_v_self->_size = __pyx_v_result; + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 257, __pyx_L1_error) + __pyx_t_14 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_V_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 257, __pyx_L1_error) + } else {__pyx_pybuffernd_V_denominator.diminfo[0].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_denominator.diminfo[0].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_denominator.diminfo[1].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_denominator.diminfo[1].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_14 = 0; + __pyx_v_V_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":595 - * @property - * def size(self): - * if self._size is None: # <<<<<<<<<<<<<< - * result = 1 - * + /* "cornac/models/efm/recom_efm.pyx":258 + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 258, __pyx_L1_error) + __pyx_t_15 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 258, __pyx_L1_error) + } else {__pyx_pybuffernd_H1_numerator.diminfo[0].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_numerator.diminfo[0].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_numerator.diminfo[1].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_numerator.diminfo[1].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[1]; + } } + __pyx_t_15 = 0; + __pyx_v_H1_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":603 - * self._size = result - * - * return self._size # <<<<<<<<<<<<<< - * - * def __len__(self): + /* "cornac/models/efm/recom_efm.pyx":259 + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->_size); - __pyx_r = __pyx_v_self->_size; - goto __pyx_L0; + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 259, __pyx_L1_error) + __pyx_t_16 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 259, __pyx_L1_error) + } else {__pyx_pybuffernd_H1_denominator.diminfo[0].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_denominator.diminfo[0].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_denominator.diminfo[1].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_denominator.diminfo[1].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_16 = 0; + __pyx_v_H1_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":594 - * - * @property - * def size(self): # <<<<<<<<<<<<<< - * if self._size is None: - * result = 1 + /* "cornac/models/efm/recom_efm.pyx":260 + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * int i, j, k, idx */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 260, __pyx_L1_error) + __pyx_t_17 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 260, __pyx_L1_error) + } else {__pyx_pybuffernd_H2_numerator.diminfo[0].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_numerator.diminfo[0].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_numerator.diminfo[1].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_numerator.diminfo[1].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_17 = 0; + __pyx_v_H2_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("View.MemoryView.memoryview.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_length); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":605 - * return self._size - * - * def __len__(self): # <<<<<<<<<<<<<< - * if self.view.ndim >= 1: - * return self.view.shape[0] + /* "cornac/models/efm/recom_efm.pyx":261 + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * int i, j, k, idx + * long n_ratings */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 261, __pyx_L1_error) + __pyx_t_18 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 261, __pyx_L1_error) + } else {__pyx_pybuffernd_H2_denominator.diminfo[0].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_denominator.diminfo[0].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_denominator.diminfo[1].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_denominator.diminfo[1].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_18 = 0; + __pyx_v_H2_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; -/* Python wrapper */ -static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self); /*proto*/ -static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) { - Py_ssize_t __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self) { - Py_ssize_t __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("__len__", 0); - - /* "View.MemoryView":606 - * - * def __len__(self): - * if self.view.ndim >= 1: # <<<<<<<<<<<<<< - * return self.view.shape[0] + /* "cornac/models/efm/recom_efm.pyx":265 + * long n_ratings * - */ - __pyx_t_1 = ((__pyx_v_self->view.ndim >= 1) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":607 - * def __len__(self): - * if self.view.ndim >= 1: - * return self.view.shape[0] # <<<<<<<<<<<<<< + * floating eps = 1e-9 # <<<<<<<<<<<<<< * - * return 0 + * for t in range(1, self.max_iter + 1): */ - __pyx_r = (__pyx_v_self->view.shape[0]); - goto __pyx_L0; + __pyx_v_eps = 1e-9; - /* "View.MemoryView":606 - * - * def __len__(self): - * if self.view.ndim >= 1: # <<<<<<<<<<<<<< - * return self.view.shape[0] + /* "cornac/models/efm/recom_efm.pyx":267 + * floating eps = 1e-9 * + * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< + * loss = 0. + * U1_numerator.fill(0) */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_max_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_int_1); + __Pyx_GIVEREF(__pyx_int_1); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { + __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_19 = 0; + __pyx_t_20 = NULL; + } else { + __pyx_t_19 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_20 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 267, __pyx_L1_error) } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + for (;;) { + if (likely(!__pyx_t_20)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 267, __pyx_L1_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } else { + if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 267, __pyx_L1_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } + } else { + __pyx_t_2 = __pyx_t_20(__pyx_t_1); + if (unlikely(!__pyx_t_2)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 267, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_2); + } + __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2); + __pyx_t_2 = 0; - /* "View.MemoryView":609 - * return self.view.shape[0] - * - * return 0 # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":268 * - * def __repr__(self): + * for t in range(1, self.max_iter + 1): + * loss = 0. # <<<<<<<<<<<<<< + * U1_numerator.fill(0) + * U1_denominator.fill(0) */ - __pyx_r = 0; - goto __pyx_L0; + __pyx_v_loss = 0.; - /* "View.MemoryView":605 - * return self._size - * - * def __len__(self): # <<<<<<<<<<<<<< - * if self.view.ndim >= 1: - * return self.view.shape[0] + /* "cornac/models/efm/recom_efm.pyx":269 + * for t in range(1, self.max_iter + 1): + * loss = 0. + * U1_numerator.fill(0) # <<<<<<<<<<<<<< + * U1_denominator.fill(0) + * U2_numerator.fill(0) */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* function exit code */ - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":270 + * loss = 0. + * U1_numerator.fill(0) + * U1_denominator.fill(0) # <<<<<<<<<<<<<< + * U2_numerator.fill(0) + * U2_denominator.fill(0) + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; -/* "View.MemoryView":611 - * return 0 - * - * def __repr__(self): # <<<<<<<<<<<<<< - * return "" % (self.base.__class__.__name__, - * id(self)) + /* "cornac/models/efm/recom_efm.pyx":271 + * U1_numerator.fill(0) + * U1_denominator.fill(0) + * U2_numerator.fill(0) # <<<<<<<<<<<<<< + * U2_denominator.fill(0) + * V_numerator.fill(0) */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; -/* Python wrapper */ -static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + /* "cornac/models/efm/recom_efm.pyx":272 + * U1_denominator.fill(0) + * U2_numerator.fill(0) + * U2_denominator.fill(0) # <<<<<<<<<<<<<< + * V_numerator.fill(0) + * V_denominator.fill(0) + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":273 + * U2_numerator.fill(0) + * U2_denominator.fill(0) + * V_numerator.fill(0) # <<<<<<<<<<<<<< + * V_denominator.fill(0) + * H1_numerator.fill(0) + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; -static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__repr__", 0); + /* "cornac/models/efm/recom_efm.pyx":274 + * U2_denominator.fill(0) + * V_numerator.fill(0) + * V_denominator.fill(0) # <<<<<<<<<<<<<< + * H1_numerator.fill(0) + * H1_denominator.fill(0) + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 274, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":612 - * - * def __repr__(self): - * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< - * id(self)) - * + /* "cornac/models/efm/recom_efm.pyx":275 + * V_numerator.fill(0) + * V_denominator.fill(0) + * H1_numerator.fill(0) # <<<<<<<<<<<<<< + * H1_denominator.fill(0) + * H2_numerator.fill(0) */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 612, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 612, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 612, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":613 - * def __repr__(self): - * return "" % (self.base.__class__.__name__, - * id(self)) # <<<<<<<<<<<<<< - * - * def __str__(self): + /* "cornac/models/efm/recom_efm.pyx":276 + * V_denominator.fill(0) + * H1_numerator.fill(0) + * H1_denominator.fill(0) # <<<<<<<<<<<<<< + * H2_numerator.fill(0) + * H2_denominator.fill(0) */ - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 613, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":612 - * - * def __repr__(self): - * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< - * id(self)) + /* "cornac/models/efm/recom_efm.pyx":277 + * H1_numerator.fill(0) + * H1_denominator.fill(0) + * H2_numerator.fill(0) # <<<<<<<<<<<<<< + * H2_denominator.fill(0) * */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 612, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 612, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 277, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":611 - * return 0 + /* "cornac/models/efm/recom_efm.pyx":278 + * H1_denominator.fill(0) + * H2_numerator.fill(0) + * H2_denominator.fill(0) # <<<<<<<<<<<<<< * - * def __repr__(self): # <<<<<<<<<<<<<< - * return "" % (self.base.__class__.__name__, - * id(self)) + * with nogil, parallel(num_threads=num_threads): */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":615 - * id(self)) - * - * def __str__(self): # <<<<<<<<<<<<<< - * return "" % (self.base.__class__.__name__,) + /* "cornac/models/efm/recom_efm.pyx":280 + * H2_denominator.fill(0) * + * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): */ + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) private(__pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_3, __pyx_t_30, __pyx_t_31, __pyx_t_32, __pyx_t_33, __pyx_t_34, __pyx_t_35, __pyx_t_36, __pyx_t_4, __pyx_t_5) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_num_threads) + #endif /* _OPENMP */ + { + #ifdef _OPENMP + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + Py_BEGIN_ALLOW_THREADS + #endif /* _OPENMP */ -/* Python wrapper */ -static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + /* "cornac/models/efm/recom_efm.pyx":282 + * with nogil, parallel(num_threads=num_threads): + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): # <<<<<<<<<<<<<< + * i = A_uids[idx] + * j = A_iids[idx] + */ + if (unlikely(!__pyx_v_A.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("A"); __PYX_ERR(0, 282, __pyx_L12_error) } + __pyx_t_21 = (__pyx_v_A.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + float __pyx_parallel_temp4 = ((float)__PYX_NAN()); + float __pyx_parallel_temp5 = ((float)__PYX_NAN()); + float __pyx_parallel_temp6 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_23 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((float)__PYX_NAN()); + __pyx_v_score = ((float)__PYX_NAN()); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":283 + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): + * i = A_uids[idx] # <<<<<<<<<<<<<< + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i = (*((long *) ( /* dim=0 */ (__pyx_v_A_uids.data + __pyx_t_24 * __pyx_v_A_uids.strides[0]) ))); -static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__str__", 0); + /* "cornac/models/efm/recom_efm.pyx":284 + * for idx in prange(A.shape[0]): + * i = A_uids[idx] + * j = A_iids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_j = (*((long *) ( /* dim=0 */ (__pyx_v_A_iids.data + __pyx_t_24 * __pyx_v_A_iids.strides[0]) ))); - /* "View.MemoryView":616 - * - * def __str__(self): - * return "" % (self.base.__class__.__name__,) # <<<<<<<<<<<<<< - * - * + /* "cornac/models/efm/recom_efm.pyx":285 + * i = A_uids[idx] + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ # <<<<<<<<<<<<<< + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 616, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 616, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 616, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 616, __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_PyString_Format(__pyx_kp_s_MemoryView_of_r_object, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 616, __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; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = 0; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = 0; + __pyx_t_5 = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 285, __pyx_L16_error) - /* "View.MemoryView":615 - * id(self)) - * - * def __str__(self): # <<<<<<<<<<<<<< - * return "" % (self.base.__class__.__name__,) - * + /* "cornac/models/efm/recom_efm.pyx":286 + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) # <<<<<<<<<<<<<< + * score = A[idx] + * loss += (prediction - score) * (prediction - score) */ + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = 0; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = 0; + __pyx_t_28 = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_latent_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_27 * __pyx_v_H1.strides[0]) ) + __pyx_t_26 * __pyx_v_H1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_24 * __pyx_v_H2.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 286, __pyx_L16_error) + __pyx_v_prediction = (__pyx_t_5 + __pyx_t_28); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":287 + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ))); -/* "View.MemoryView":619 - * - * - * def is_c_contig(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp + /* "cornac/models/efm/recom_efm.pyx":288 + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] */ + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); -/* Python wrapper */ -static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("is_c_contig (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); + /* "cornac/models/efm/recom_efm.pyx":289 + * score = A[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] + */ + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":290 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] # <<<<<<<<<<<<<< + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] + */ + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_24 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))); -static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self) { - __Pyx_memviewslice *__pyx_v_mslice; - __Pyx_memviewslice __pyx_v_tmp; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_memviewslice *__pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("is_c_contig", 0); + /* "cornac/models/efm/recom_efm.pyx":291 + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] # <<<<<<<<<<<<<< + * U2_numerator[j, k] += score * U1[i, k] + * U2_denominator[j, k] += prediction * U1[i, k] + */ + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_24 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":622 - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp - * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< - * return slice_is_contig(mslice[0], 'C', self.view.ndim) + /* "cornac/models/efm/recom_efm.pyx":292 + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] # <<<<<<<<<<<<<< + * U2_denominator[j, k] += prediction * U1[i, k] * */ - __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(2, 622, __pyx_L1_error) - __pyx_v_mslice = __pyx_t_1; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))); - /* "View.MemoryView":623 - * cdef __Pyx_memviewslice tmp - * mslice = get_slice_from_memview(self, &tmp) - * return slice_is_contig(mslice[0], 'C', self.view.ndim) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":293 + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] + * U2_denominator[j, k] += prediction * U1[i, k] # <<<<<<<<<<<<<< * - * def is_f_contig(self): + * for k in range(num_latent_factors): */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 623, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )))); + } - /* "View.MemoryView":619 - * + /* "cornac/models/efm/recom_efm.pyx":295 + * U2_denominator[j, k] += prediction * U1[i, k] * - * def is_c_contig(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp + * for k in range(num_latent_factors): # <<<<<<<<<<<<<< + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] */ + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":625 - * return slice_is_contig(mslice[0], 'C', self.view.ndim) + /* "cornac/models/efm/recom_efm.pyx":296 * - * def is_f_contig(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp + * for k in range(num_latent_factors): + * H1_numerator[i, k] += score * H2[j, k] # <<<<<<<<<<<<<< + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] */ + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_24 * __pyx_v_H2.strides[0]) ) + __pyx_t_25 * __pyx_v_H2.strides[1]) )))); -/* Python wrapper */ -static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("is_f_contig (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":297 + * for k in range(num_latent_factors): + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] # <<<<<<<<<<<<<< + * H2_numerator[j, k] += score * H1[i, k] + * H2_denominator[j, k] += prediction * H1[i, k] + */ + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_24 * __pyx_v_H2.strides[1]) )))); -static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self) { - __Pyx_memviewslice *__pyx_v_mslice; - __Pyx_memviewslice __pyx_v_tmp; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_memviewslice *__pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("is_f_contig", 0); + /* "cornac/models/efm/recom_efm.pyx":298 + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] # <<<<<<<<<<<<<< + * H2_denominator[j, k] += prediction * H1[i, k] + * + */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_24 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))); - /* "View.MemoryView":628 - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp - * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< - * return slice_is_contig(mslice[0], 'F', self.view.ndim) + /* "cornac/models/efm/recom_efm.pyx":299 + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] + * H2_denominator[j, k] += prediction * H1[i, k] # <<<<<<<<<<<<<< * + * for idx in prange(X.shape[0]): */ - __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(2, 628, __pyx_L1_error) - __pyx_v_mslice = __pyx_t_1; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_25 * __pyx_v_H1.strides[0]) ) + __pyx_t_24 * __pyx_v_H1.strides[1]) )))); + } + goto __pyx_L23; + __pyx_L16_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L22; + __pyx_L22:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates12) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L23:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":629 - * cdef __Pyx_memviewslice tmp - * mslice = get_slice_from_memview(self, &tmp) - * return slice_is_contig(mslice[0], 'F', self.view.ndim) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":301 + * H2_denominator[j, k] += prediction * H1[i, k] * - * def copy(self): + * for idx in prange(X.shape[0]): # <<<<<<<<<<<<<< + * i = X_uids[idx] + * j = X_aids[idx] */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 629, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; + if (unlikely(!__pyx_v_X.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("X"); __PYX_ERR(0, 301, __pyx_L12_error) } + __pyx_t_23 = (__pyx_v_X.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + float __pyx_parallel_temp4 = ((float)__PYX_NAN()); + float __pyx_parallel_temp5 = ((float)__PYX_NAN()); + float __pyx_parallel_temp6 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_21 = (__pyx_t_23 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_21 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((float)__PYX_NAN()); + __pyx_v_score = ((float)__PYX_NAN()); - /* "View.MemoryView":625 - * return slice_is_contig(mslice[0], 'C', self.view.ndim) + /* "cornac/models/efm/recom_efm.pyx":302 * - * def is_f_contig(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp + * for idx in prange(X.shape[0]): + * i = X_uids[idx] # <<<<<<<<<<<<<< + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i = (*((long *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_24 * __pyx_v_X_uids.strides[0]) ))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":303 + * for idx in prange(X.shape[0]): + * i = X_uids[idx] + * j = X_aids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_j = (*((long *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_24 * __pyx_v_X_aids.strides[0]) ))); -/* "View.MemoryView":631 - * return slice_is_contig(mslice[0], 'F', self.view.ndim) - * - * def copy(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice mslice - * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + /* "cornac/models/efm/recom_efm.pyx":304 + * i = X_uids[idx] + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< + * score = X[idx] + * loss += (prediction - score) * (prediction - score) */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = 0; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = 0; + __pyx_t_28 = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 304, __pyx_L26_error) + __pyx_v_prediction = __pyx_t_28; -/* Python wrapper */ -static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("copy (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(((struct __pyx_memoryview_obj *)__pyx_v_self)); + /* "cornac/models/efm/recom_efm.pyx":305 + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + */ + __pyx_t_27 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_27 * __pyx_v_X.strides[0]) ))); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":306 + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] + */ + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); -static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self) { - __Pyx_memviewslice __pyx_v_mslice; - int __pyx_v_flags; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_memviewslice __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("copy", 0); + /* "cornac/models/efm/recom_efm.pyx":307 + * score = X[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + */ + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":633 - * def copy(self): - * cdef __Pyx_memviewslice mslice - * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS # <<<<<<<<<<<<<< - * - * slice_copy(self, &mslice) + /* "cornac/models/efm/recom_efm.pyx":308 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] # <<<<<<<<<<<<<< + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] */ - __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_F_CONTIGUOUS)); + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_27 * __pyx_v_U1.strides[0]) ) + __pyx_t_26 * __pyx_v_U1.strides[1]) )))); - /* "View.MemoryView":635 - * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS - * - * slice_copy(self, &mslice) # <<<<<<<<<<<<<< - * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, - * self.view.itemsize, + /* "cornac/models/efm/recom_efm.pyx":309 + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] # <<<<<<<<<<<<<< + * U1_numerator[i, k] += lambda_x * score * V[j, k] + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] */ - __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_mslice)); + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_26 * __pyx_v_U1.strides[0]) ) + __pyx_t_27 * __pyx_v_U1.strides[1]) )))); - /* "View.MemoryView":636 + /* "cornac/models/efm/recom_efm.pyx":310 + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] # <<<<<<<<<<<<<< + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] * - * slice_copy(self, &mslice) - * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, # <<<<<<<<<<<<<< - * self.view.itemsize, - * flags|PyBUF_C_CONTIGUOUS, */ - __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_mslice), ((char *)"c"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_C_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 636, __pyx_L1_error) - __pyx_v_mslice = __pyx_t_1; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_27 * __pyx_v_V.strides[0]) ) + __pyx_t_26 * __pyx_v_V.strides[1]) )))); - /* "View.MemoryView":641 - * self.dtype_is_object) - * - * return memoryview_copy_from_slice(self, &mslice) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":311 + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] # <<<<<<<<<<<<<< * - * def copy_fortran(self): + * for idx in prange(Y.shape[0]): */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_mslice)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 641, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) )))); + } + goto __pyx_L31; + __pyx_L26_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L30; + __pyx_L30:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates13) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L31:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":631 - * return slice_is_contig(mslice[0], 'F', self.view.ndim) + /* "cornac/models/efm/recom_efm.pyx":313 + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] * - * def copy(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice mslice - * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + * for idx in prange(Y.shape[0]): # <<<<<<<<<<<<<< + * i = Y_iids[idx] + * j = Y_aids[idx] */ + if (unlikely(!__pyx_v_Y.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("Y"); __PYX_ERR(0, 313, __pyx_L12_error) } + __pyx_t_21 = (__pyx_v_Y.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + float __pyx_parallel_temp4 = ((float)__PYX_NAN()); + float __pyx_parallel_temp5 = ((float)__PYX_NAN()); + float __pyx_parallel_temp6 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_23 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((float)__PYX_NAN()); + __pyx_v_score = ((float)__PYX_NAN()); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":643 - * return memoryview_copy_from_slice(self, &mslice) + /* "cornac/models/efm/recom_efm.pyx":314 * - * def copy_fortran(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice src, dst - * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + * for idx in prange(Y.shape[0]): + * i = Y_iids[idx] # <<<<<<<<<<<<<< + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) */ + __pyx_t_27 = __pyx_v_idx; + __pyx_v_i = (*((long *) ( /* dim=0 */ (__pyx_v_Y_iids.data + __pyx_t_27 * __pyx_v_Y_iids.strides[0]) ))); -/* Python wrapper */ -static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("copy_fortran (wrapper)", 0); - __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(((struct __pyx_memoryview_obj *)__pyx_v_self)); + /* "cornac/models/efm/recom_efm.pyx":315 + * for idx in prange(Y.shape[0]): + * i = Y_iids[idx] + * j = Y_aids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] + */ + __pyx_t_27 = __pyx_v_idx; + __pyx_v_j = (*((long *) ( /* dim=0 */ (__pyx_v_Y_aids.data + __pyx_t_27 * __pyx_v_Y_aids.strides[0]) ))); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":316 + * i = Y_iids[idx] + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) + */ + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = 0; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = 0; + __pyx_t_28 = __pyx_fuse_0__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_27 * __pyx_v_U2.strides[0]) ) + __pyx_t_26 * __pyx_v_U2.strides[1]) )))), 1, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 316, __pyx_L34_error) + __pyx_v_prediction = __pyx_t_28; -static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self) { - __Pyx_memviewslice __pyx_v_src; - __Pyx_memviewslice __pyx_v_dst; - int __pyx_v_flags; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_memviewslice __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("copy_fortran", 0); + /* "cornac/models/efm/recom_efm.pyx":317 + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((float *) ( /* dim=0 */ (__pyx_v_Y.data + __pyx_t_24 * __pyx_v_Y.strides[0]) ))); - /* "View.MemoryView":645 - * def copy_fortran(self): - * cdef __Pyx_memviewslice src, dst - * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS # <<<<<<<<<<<<<< - * - * slice_copy(self, &src) + /* "cornac/models/efm/recom_efm.pyx":318 + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] */ - __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_C_CONTIGUOUS)); + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - /* "View.MemoryView":647 - * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS - * - * slice_copy(self, &src) # <<<<<<<<<<<<<< - * dst = slice_copy_contig(&src, "fortran", self.view.ndim, - * self.view.itemsize, + /* "cornac/models/efm/recom_efm.pyx":319 + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] */ - __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_src)); + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":648 - * - * slice_copy(self, &src) - * dst = slice_copy_contig(&src, "fortran", self.view.ndim, # <<<<<<<<<<<<<< - * self.view.itemsize, - * flags|PyBUF_F_CONTIGUOUS, + /* "cornac/models/efm/recom_efm.pyx":320 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] # <<<<<<<<<<<<<< + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] */ - __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_src), ((char *)"fortran"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_F_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 648, __pyx_L1_error) - __pyx_v_dst = __pyx_t_1; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_24 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":653 - * self.dtype_is_object) - * - * return memoryview_copy_from_slice(self, &dst) # <<<<<<<<<<<<<< - * - * + /* "cornac/models/efm/recom_efm.pyx":321 + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] # <<<<<<<<<<<<<< + * U2_numerator[i, k] += lambda_y * score * V[j, k] + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_dst)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 653, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_24 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":643 - * return memoryview_copy_from_slice(self, &mslice) + /* "cornac/models/efm/recom_efm.pyx":322 + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] # <<<<<<<<<<<<<< + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] * - * def copy_fortran(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice src, dst - * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS */ + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): + /* "cornac/models/efm/recom_efm.pyx":323 + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] # <<<<<<<<<<<<<< + * + * # update V */ + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))); + } + goto __pyx_L39; + __pyx_L34_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L38; + __pyx_L38:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates14) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L39:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } -/* Python wrapper */ -static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf___pyx_memoryview___reduce_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); - - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + /* "cornac/models/efm/recom_efm.pyx":326 + * + * # update V + * for i in prange(num_aspects): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(2, 2, __pyx_L1_error) + __pyx_t_3 = __pyx_v_num_aspects; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + float __pyx_parallel_temp2 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_32 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_32 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_32; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): + /* "cornac/models/efm/recom_efm.pyx":327 + * # update V + * for i in prange(num_aspects): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps */ + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + /* "cornac/models/efm/recom_efm.pyx":328 + * for i in prange(num_aspects): + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] # <<<<<<<<<<<<<< + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_v * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) ))))); -/* Python wrapper */ -static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf___pyx_memoryview_2__setstate_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); - - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":329 + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps # <<<<<<<<<<<<<< + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) + * */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(2, 4, __pyx_L1_error) + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_33 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += (((((*((long *) ( /* dim=0 */ (__pyx_v_X_aspect_counts.data + __pyx_t_27 * __pyx_v_X_aspect_counts.strides[0]) ))) + (*((long *) ( /* dim=0 */ (__pyx_v_Y_aspect_counts.data + __pyx_t_26 * __pyx_v_Y_aspect_counts.strides[0]) )))) * __pyx_v_lambda_v) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))) + __pyx_v_eps); - /* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + /* "cornac/models/efm/recom_efm.pyx":330 + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) # <<<<<<<<<<<<<< + * + * # update U1, H1 */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_V_numerator.diminfo[1].strides)); + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_V_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 330, __pyx_L42_error) + } + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L47; + __pyx_L42_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L46; + __pyx_L46:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates15) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L47:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":657 + /* "cornac/models/efm/recom_efm.pyx":333 * - * @cname('__pyx_memoryview_new') - * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< - * cdef memoryview result = memoryview(o, flags, dtype_is_object) - * result.typeinfo = typeinfo + * # update U1, H1 + * for i in prange(num_users): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] */ + __pyx_t_32 = __pyx_v_num_users; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + float __pyx_parallel_temp2 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_3 = (__pyx_t_32 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_3 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_3; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); -static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_flags, int __pyx_v_dtype_is_object, __Pyx_TypeInfo *__pyx_v_typeinfo) { - struct __pyx_memoryview_obj *__pyx_v_result = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("memoryview_cwrapper", 0); + /* "cornac/models/efm/recom_efm.pyx":334 + * # update U1, H1 + * for i in prange(num_users): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + */ + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":658 - * @cname('__pyx_memoryview_new') - * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): - * cdef memoryview result = memoryview(o, flags, dtype_is_object) # <<<<<<<<<<<<<< - * result.typeinfo = typeinfo - * return result + /* "cornac/models/efm/recom_efm.pyx":335 + * for i in prange(num_users): + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] # <<<<<<<<<<<<<< + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) */ - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 658, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 658, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 658, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_o); - __Pyx_GIVEREF(__pyx_v_o); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_o); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 658, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_result = ((struct __pyx_memoryview_obj *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_26 * __pyx_v_U1.strides[0]) ) + __pyx_t_27 * __pyx_v_U1.strides[1]) ))))); - /* "View.MemoryView":659 - * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): - * cdef memoryview result = memoryview(o, flags, dtype_is_object) - * result.typeinfo = typeinfo # <<<<<<<<<<<<<< - * return result - * + /* "cornac/models/efm/recom_efm.pyx":336 + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps # <<<<<<<<<<<<<< + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): */ - __pyx_v_result->typeinfo = __pyx_v_typeinfo; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_34 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (((((*((long *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_27 * __pyx_v_A_user_counts.strides[0]) ))) + (*((long *) ( /* dim=0 */ (__pyx_v_X_user_counts.data + __pyx_t_26 * __pyx_v_X_user_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":660 - * cdef memoryview result = memoryview(o, flags, dtype_is_object) - * result.typeinfo = typeinfo - * return result # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_check') + /* "cornac/models/efm/recom_efm.pyx":337 + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) # <<<<<<<<<<<<<< + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] + */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_U1_numerator.diminfo[1].strides)); + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U1_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_35 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 337, __pyx_L50_error) + } + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_35)); + } + + /* "cornac/models/efm/recom_efm.pyx":338 + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): # <<<<<<<<<<<<<< + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_result)); - __pyx_r = ((PyObject *)__pyx_v_result); - goto __pyx_L0; + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":657 - * - * @cname('__pyx_memoryview_new') - * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< - * cdef memoryview result = memoryview(o, flags, dtype_is_object) - * result.typeinfo = typeinfo + /* "cornac/models/efm/recom_efm.pyx":339 + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] # <<<<<<<<<<<<<< + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_24 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_26 * __pyx_v_H1.strides[0]) ) + __pyx_t_27 * __pyx_v_H1.strides[1]) ))))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":663 - * - * @cname('__pyx_memoryview_check') - * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< - * return isinstance(o, memoryview) + /* "cornac/models/efm/recom_efm.pyx":340 + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps # <<<<<<<<<<<<<< + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) * */ + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += ((((*((long *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_27 * __pyx_v_A_user_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_26 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))) + __pyx_v_eps); -static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("memoryview_check", 0); - - /* "View.MemoryView":664 - * @cname('__pyx_memoryview_check') - * cdef inline bint memoryview_check(object o): - * return isinstance(o, memoryview) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":341 + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) # <<<<<<<<<<<<<< * - * cdef tuple _unellipsify(object index, int ndim): + * # update U2, H2 */ - __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_o, __pyx_memoryview_type); - __pyx_r = __pyx_t_1; - goto __pyx_L0; + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H1_numerator.diminfo[1].strides)); + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_H1_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 341, __pyx_L50_error) + } + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_25 * __pyx_v_H1.strides[0]) ) + __pyx_t_26 * __pyx_v_H1.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L57; + __pyx_L50_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L56; + __pyx_L56:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates16) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L57:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":663 - * - * @cname('__pyx_memoryview_check') - * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< - * return isinstance(o, memoryview) + /* "cornac/models/efm/recom_efm.pyx":344 * + * # update U2, H2 + * for i in prange(num_items): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] */ + __pyx_t_3 = __pyx_v_num_items; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + float __pyx_parallel_temp2 = ((float)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_32 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_32 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_32; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* function exit code */ - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":666 - * return isinstance(o, memoryview) - * - * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< - * """ - * Replace all ellipses with full slices and fill incomplete indices with + /* "cornac/models/efm/recom_efm.pyx":345 + * # update U2, H2 + * for i in prange(num_items): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps */ + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; -static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) { - PyObject *__pyx_v_tup = NULL; - PyObject *__pyx_v_result = NULL; - int __pyx_v_have_slices; - int __pyx_v_seen_ellipsis; - CYTHON_UNUSED PyObject *__pyx_v_idx = NULL; - PyObject *__pyx_v_item = NULL; - Py_ssize_t __pyx_v_nslices; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - PyObject *__pyx_t_7 = NULL; - Py_ssize_t __pyx_t_8; - int __pyx_t_9; - int __pyx_t_10; - PyObject *__pyx_t_11 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_unellipsify", 0); - - /* "View.MemoryView":671 - * full slices. - * """ - * if not isinstance(index, tuple): # <<<<<<<<<<<<<< - * tup = (index,) - * else: + /* "cornac/models/efm/recom_efm.pyx":346 + * for i in prange(num_items): + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] # <<<<<<<<<<<<<< + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) */ - __pyx_t_1 = PyTuple_Check(__pyx_v_index); - __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); - if (__pyx_t_2) { + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_27 * __pyx_v_U2.strides[0]) ) + __pyx_t_33 * __pyx_v_U2.strides[1]) ))))); - /* "View.MemoryView":672 - * """ - * if not isinstance(index, tuple): - * tup = (index,) # <<<<<<<<<<<<<< - * else: - * tup = index + /* "cornac/models/efm/recom_efm.pyx":347 + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps # <<<<<<<<<<<<<< + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 672, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_index); - __Pyx_GIVEREF(__pyx_v_index); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_index); - __pyx_v_tup = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_t_33 = __pyx_v_i; + __pyx_t_27 = __pyx_v_i; + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (((((*((long *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_33 * __pyx_v_A_item_counts.strides[0]) ))) + (*((long *) ( /* dim=0 */ (__pyx_v_Y_item_counts.data + __pyx_t_27 * __pyx_v_Y_item_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_26 * __pyx_v_U2.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":671 - * full slices. - * """ - * if not isinstance(index, tuple): # <<<<<<<<<<<<<< - * tup = (index,) - * else: + /* "cornac/models/efm/recom_efm.pyx":348 + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) # <<<<<<<<<<<<<< + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] */ - goto __pyx_L3; - } + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U2_numerator.diminfo[1].strides)); + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_35 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 348, __pyx_L60_error) + } + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_35)); + } - /* "View.MemoryView":674 - * tup = (index,) - * else: - * tup = index # <<<<<<<<<<<<<< - * - * result = [] + /* "cornac/models/efm/recom_efm.pyx":349 + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): # <<<<<<<<<<<<<< + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps */ - /*else*/ { - __Pyx_INCREF(__pyx_v_index); - __pyx_v_tup = __pyx_v_index; - } - __pyx_L3:; + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":676 - * tup = index - * - * result = [] # <<<<<<<<<<<<<< - * have_slices = False - * seen_ellipsis = False + /* "cornac/models/efm/recom_efm.pyx":350 + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] # <<<<<<<<<<<<<< + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 676, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_result = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_26 * __pyx_v_H2.strides[1]) )))) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_27 * __pyx_v_H2.strides[0]) ) + __pyx_t_33 * __pyx_v_H2.strides[1]) ))))); - /* "View.MemoryView":677 + /* "cornac/models/efm/recom_efm.pyx":351 + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps # <<<<<<<<<<<<<< + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) * - * result = [] - * have_slices = False # <<<<<<<<<<<<<< - * seen_ellipsis = False - * for idx, item in enumerate(tup): */ - __pyx_v_have_slices = 0; - - /* "View.MemoryView":678 - * result = [] - * have_slices = False - * seen_ellipsis = False # <<<<<<<<<<<<<< - * for idx, item in enumerate(tup): - * if item is Ellipsis: - */ - __pyx_v_seen_ellipsis = 0; + __pyx_t_33 = __pyx_v_i; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += ((((*((long *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_33 * __pyx_v_A_item_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_27 * __pyx_v_H2.strides[0]) ) + __pyx_t_26 * __pyx_v_H2.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":679 - * have_slices = False - * seen_ellipsis = False - * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< - * if item is Ellipsis: - * if not seen_ellipsis: + /* "cornac/models/efm/recom_efm.pyx":352 + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) # <<<<<<<<<<<<<< + * + * if self.verbose: */ - __Pyx_INCREF(__pyx_int_0); - __pyx_t_3 = __pyx_int_0; - if (likely(PyList_CheckExact(__pyx_v_tup)) || PyTuple_CheckExact(__pyx_v_tup)) { - __pyx_t_4 = __pyx_v_tup; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_tup); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 679, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 679, __pyx_L1_error) - } - for (;;) { - if (likely(!__pyx_t_6)) { - if (likely(PyList_CheckExact(__pyx_t_4))) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(2, 679, __pyx_L1_error) - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 679, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - #endif - } else { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(2, 679, __pyx_L1_error) - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 679, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - #endif - } - } else { - __pyx_t_7 = __pyx_t_6(__pyx_t_4); - if (unlikely(!__pyx_t_7)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(2, 679, __pyx_L1_error) + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H2_numerator.diminfo[1].strides)); + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 352, __pyx_L60_error) + } + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + *((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_26 * __pyx_v_H2.strides[0]) ) + __pyx_t_27 * __pyx_v_H2.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L67; + __pyx_L60_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L66; + __pyx_L66:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates17) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L67:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } + goto __pyx_L69; + __pyx_L12_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L69; + __pyx_L69:; + #ifdef _OPENMP + Py_END_ALLOW_THREADS + #else +{ +#ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #endif /* _OPENMP */ + /* Clean up any temporaries */ + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + #ifndef _OPENMP +} +#endif /* _OPENMP */ + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif } - break; - } - __Pyx_GOTREF(__pyx_t_7); - } - __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_7); - __pyx_t_7 = 0; - __Pyx_INCREF(__pyx_t_3); - __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_3); - __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 679, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); - __pyx_t_3 = __pyx_t_7; - __pyx_t_7 = 0; - /* "View.MemoryView":680 - * seen_ellipsis = False - * for idx, item in enumerate(tup): - * if item is Ellipsis: # <<<<<<<<<<<<<< - * if not seen_ellipsis: - * result.extend([slice(None)] * (ndim - len(tup) + 1)) - */ - __pyx_t_2 = (__pyx_v_item == __pyx_builtin_Ellipsis); - __pyx_t_1 = (__pyx_t_2 != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":681 - * for idx, item in enumerate(tup): - * if item is Ellipsis: - * if not seen_ellipsis: # <<<<<<<<<<<<<< - * result.extend([slice(None)] * (ndim - len(tup) + 1)) - * seen_ellipsis = True - */ - __pyx_t_1 = ((!(__pyx_v_seen_ellipsis != 0)) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":682 - * if item is Ellipsis: - * if not seen_ellipsis: - * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< - * seen_ellipsis = True - * else: + /* "cornac/models/efm/recom_efm.pyx":280 + * H2_denominator.fill(0) + * + * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): */ - __pyx_t_8 = PyObject_Length(__pyx_v_tup); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(2, 682, __pyx_L1_error) - __pyx_t_7 = PyList_New(1 * ((((__pyx_v_ndim - __pyx_t_8) + 1)<0) ? 0:((__pyx_v_ndim - __pyx_t_8) + 1))); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 682, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - { Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < ((__pyx_v_ndim - __pyx_t_8) + 1); __pyx_temp++) { - __Pyx_INCREF(__pyx_slice__12); - __Pyx_GIVEREF(__pyx_slice__12); - PyList_SET_ITEM(__pyx_t_7, __pyx_temp, __pyx_slice__12); + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L9; + } + __pyx_L8_error: { + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L1_error; } + __pyx_L9:; } - __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_7); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 682, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "View.MemoryView":683 - * if not seen_ellipsis: - * result.extend([slice(None)] * (ndim - len(tup) + 1)) - * seen_ellipsis = True # <<<<<<<<<<<<<< - * else: - * result.append(slice(None)) - */ - __pyx_v_seen_ellipsis = 1; - - /* "View.MemoryView":681 - * for idx, item in enumerate(tup): - * if item is Ellipsis: - * if not seen_ellipsis: # <<<<<<<<<<<<<< - * result.extend([slice(None)] * (ndim - len(tup) + 1)) - * seen_ellipsis = True - */ - goto __pyx_L7; - } + } - /* "View.MemoryView":685 - * seen_ellipsis = True - * else: - * result.append(slice(None)) # <<<<<<<<<<<<<< - * have_slices = True - * else: + /* "cornac/models/efm/recom_efm.pyx":354 + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + * + * if self.verbose: # <<<<<<<<<<<<<< + * print('iter: %d, loss: %f' % (t, loss)) + * */ - /*else*/ { - __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_slice__12); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 685, __pyx_L1_error) - } - __pyx_L7:; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 354, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_37 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_37 < 0))) __PYX_ERR(0, 354, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_37) { - /* "View.MemoryView":686 - * else: - * result.append(slice(None)) - * have_slices = True # <<<<<<<<<<<<<< - * else: - * if not isinstance(item, slice) and not PyIndex_Check(item): + /* "cornac/models/efm/recom_efm.pyx":355 + * + * if self.verbose: + * print('iter: %d, loss: %f' % (t, loss)) # <<<<<<<<<<<<<< + * + * if self.verbose: */ - __pyx_v_have_slices = 1; + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_23 = 0; + __pyx_t_38 = 127; + __Pyx_INCREF(__pyx_kp_u_iter); + __pyx_t_23 += 6; + __Pyx_GIVEREF(__pyx_kp_u_iter); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_iter); + __pyx_t_6 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_t), __pyx_n_u_d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_38 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_38) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_38; + __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u_loss); + __pyx_t_23 += 8; + __Pyx_GIVEREF(__pyx_kp_u_loss); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_loss); + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_Format(__pyx_t_6, __pyx_n_u_f); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_38 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_38) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_38; + __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_23, __pyx_t_38); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":680 - * seen_ellipsis = False - * for idx, item in enumerate(tup): - * if item is Ellipsis: # <<<<<<<<<<<<<< - * if not seen_ellipsis: - * result.extend([slice(None)] * (ndim - len(tup) + 1)) + /* "cornac/models/efm/recom_efm.pyx":354 + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) + * + * if self.verbose: # <<<<<<<<<<<<<< + * print('iter: %d, loss: %f' % (t, loss)) + * */ - goto __pyx_L6; } - /* "View.MemoryView":688 - * have_slices = True - * else: - * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< - * raise TypeError("Cannot index with type '%s'" % type(item)) + /* "cornac/models/efm/recom_efm.pyx":267 + * floating eps = 1e-9 * + * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< + * loss = 0. + * U1_numerator.fill(0) */ - /*else*/ { - __pyx_t_2 = PySlice_Check(__pyx_v_item); - __pyx_t_10 = ((!(__pyx_t_2 != 0)) != 0); - if (__pyx_t_10) { - } else { - __pyx_t_1 = __pyx_t_10; - goto __pyx_L9_bool_binop_done; - } - __pyx_t_10 = ((!(PyIndex_Check(__pyx_v_item) != 0)) != 0); - __pyx_t_1 = __pyx_t_10; - __pyx_L9_bool_binop_done:; - if (unlikely(__pyx_t_1)) { + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":689 - * else: - * if not isinstance(item, slice) and not PyIndex_Check(item): - * raise TypeError("Cannot index with type '%s'" % type(item)) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":357 + * print('iter: %d, loss: %f' % (t, loss)) + * + * if self.verbose: # <<<<<<<<<<<<<< + * print('Optimization finished!') * - * have_slices = have_slices or isinstance(item, slice) */ - __pyx_t_7 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_index_with_type_s, ((PyObject *)Py_TYPE(__pyx_v_item))); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 689, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 689, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_Raise(__pyx_t_11, 0, 0, 0); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __PYX_ERR(2, 689, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_37 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_37 < 0))) __PYX_ERR(0, 357, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_37) { - /* "View.MemoryView":688 - * have_slices = True - * else: - * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< - * raise TypeError("Cannot index with type '%s'" % type(item)) + /* "cornac/models/efm/recom_efm.pyx":358 + * + * if self.verbose: + * print('Optimization finished!') # <<<<<<<<<<<<<< * + * def _build_matrices(self, data_set): */ - } + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":691 - * raise TypeError("Cannot index with type '%s'" % type(item)) + /* "cornac/models/efm/recom_efm.pyx":357 + * print('iter: %d, loss: %f' % (t, loss)) * - * have_slices = have_slices or isinstance(item, slice) # <<<<<<<<<<<<<< - * result.append(item) + * if self.verbose: # <<<<<<<<<<<<<< + * print('Optimization finished!') * */ - __pyx_t_10 = (__pyx_v_have_slices != 0); - if (!__pyx_t_10) { - } else { - __pyx_t_1 = __pyx_t_10; - goto __pyx_L11_bool_binop_done; - } - __pyx_t_10 = PySlice_Check(__pyx_v_item); - __pyx_t_2 = (__pyx_t_10 != 0); - __pyx_t_1 = __pyx_t_2; - __pyx_L11_bool_binop_done:; - __pyx_v_have_slices = __pyx_t_1; + } - /* "View.MemoryView":692 + /* "cornac/models/efm/recom_efm.pyx":228 * - * have_slices = have_slices or isinstance(item, slice) - * result.append(item) # <<<<<<<<<<<<<< * - * nslices = ndim - len(result) + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def _fit_efm(self, int num_threads, */ - __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_v_item); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 692, __pyx_L1_error) - } - __pyx_L6:; - /* "View.MemoryView":679 - * have_slices = False - * seen_ellipsis = False - * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< - * if item is Ellipsis: - * if not seen_ellipsis: - */ + /* 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_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_U1_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_U1_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_U2_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_U2_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_V_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_V_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_H1_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_H1_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_H2_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_H2_denominator); + __Pyx_XDECREF(__pyx_v_t); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_fuse_1_0__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_25_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_fuse_1_0__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_25_fit_efm = {"__pyx_fuse_1_0_fit_efm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1_0__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_25_fit_efm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm}; +static PyObject *__pyx_fuse_1_0__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_25_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + int __pyx_v_num_threads; + __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_V = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_H1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_H2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_fit_efm (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_num_threads,&__pyx_n_s_A,&__pyx_n_s_A_uids,&__pyx_n_s_A_iids,&__pyx_n_s_A_user_counts,&__pyx_n_s_A_item_counts,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_aids,&__pyx_n_s_X_user_counts,&__pyx_n_s_X_aspect_counts,&__pyx_n_s_Y,&__pyx_n_s_Y_iids,&__pyx_n_s_Y_aids,&__pyx_n_s_Y_item_counts,&__pyx_n_s_Y_aspect_counts,&__pyx_n_s_U1,&__pyx_n_s_U2,&__pyx_n_s_V,&__pyx_n_s_H1,&__pyx_n_s_H2,0}; + PyObject* values[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 22: values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + CYTHON_FALLTHROUGH; + case 21: values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + CYTHON_FALLTHROUGH; + case 20: values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + CYTHON_FALLTHROUGH; + case 19: values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + CYTHON_FALLTHROUGH; + case 18: values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + CYTHON_FALLTHROUGH; + case 17: values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + CYTHON_FALLTHROUGH; + case 16: values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num_threads)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 1); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 2); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 3); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 4); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_user_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 5); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_item_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 6); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 7); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 8); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 9); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_user_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 10); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aspect_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 11); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 12); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 13); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 14); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 15: + if (likely((values[15] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_item_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 15); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 16: + if (likely((values[16] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_aspect_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 16); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 17: + if (likely((values[17] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 17); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 18: + if (likely((values[18] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 18); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 19: + if (likely((values[19] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_V)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 19); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 20: + if (likely((values[20] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_H1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 20); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 21: + if (likely((values[21] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_H2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 21); __PYX_ERR(0, 228, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_fit_efm") < 0)) __PYX_ERR(0, 228, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 22)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + } + __pyx_v_self = values[0]; + __pyx_v_num_threads = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L3_error) + __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_uids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_iids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_user_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_item_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_user_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aspect_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_Y = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_iids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_item_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_short(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aspect_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_U1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_U2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_V = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_V.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_H1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[20], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_H2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, __pyx_nargs); __PYX_ERR(0, 228, __pyx_L3_error) + __pyx_L3_error:; + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_V, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H2, 1); + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_24_fit_efm(__pyx_self, __pyx_v_self, __pyx_v_num_threads, __pyx_v_A, __pyx_v_A_uids, __pyx_v_A_iids, __pyx_v_A_user_counts, __pyx_v_A_item_counts, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_aids, __pyx_v_X_user_counts, __pyx_v_X_aspect_counts, __pyx_v_Y, __pyx_v_Y_iids, __pyx_v_Y_aids, __pyx_v_Y_item_counts, __pyx_v_Y_aspect_counts, __pyx_v_U1, __pyx_v_U2, __pyx_v_V, __pyx_v_H1, __pyx_v_H2); + + /* function exit code */ + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_V, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H2, 1); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_24_fit_efm(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_A_uids, __Pyx_memviewslice __pyx_v_A_iids, __Pyx_memviewslice __pyx_v_A_user_counts, __Pyx_memviewslice __pyx_v_A_item_counts, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_X_user_counts, __Pyx_memviewslice __pyx_v_X_aspect_counts, __Pyx_memviewslice __pyx_v_Y, __Pyx_memviewslice __pyx_v_Y_iids, __Pyx_memviewslice __pyx_v_Y_aids, __Pyx_memviewslice __pyx_v_Y_item_counts, __Pyx_memviewslice __pyx_v_Y_aspect_counts, __Pyx_memviewslice __pyx_v_U1, __Pyx_memviewslice __pyx_v_U2, __Pyx_memviewslice __pyx_v_V, __Pyx_memviewslice __pyx_v_H1, __Pyx_memviewslice __pyx_v_H2) { + long __pyx_v_num_users; + long __pyx_v_num_items; + long __pyx_v_num_aspects; + int __pyx_v_num_explicit_factors; + int __pyx_v_num_latent_factors; + double __pyx_v_lambda_x; + double __pyx_v_lambda_y; + double __pyx_v_lambda_u; + double __pyx_v_lambda_h; + double __pyx_v_lambda_v; + double __pyx_v_prediction; + double __pyx_v_score; + double __pyx_v_loss; + PyArrayObject *__pyx_v_U1_numerator = 0; + PyArrayObject *__pyx_v_U1_denominator = 0; + PyArrayObject *__pyx_v_U2_numerator = 0; + PyArrayObject *__pyx_v_U2_denominator = 0; + PyArrayObject *__pyx_v_V_numerator = 0; + PyArrayObject *__pyx_v_V_denominator = 0; + PyArrayObject *__pyx_v_H1_numerator = 0; + PyArrayObject *__pyx_v_H1_denominator = 0; + PyArrayObject *__pyx_v_H2_numerator = 0; + PyArrayObject *__pyx_v_H2_denominator = 0; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_v_k; + int __pyx_v_idx; + double __pyx_v_eps; + PyObject *__pyx_v_t = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_denominator; + __Pyx_Buffer __pyx_pybuffer_H1_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_numerator; + __Pyx_Buffer __pyx_pybuffer_H1_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_denominator; + __Pyx_Buffer __pyx_pybuffer_H2_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_numerator; + __Pyx_Buffer __pyx_pybuffer_H2_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_denominator; + __Pyx_Buffer __pyx_pybuffer_U1_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_numerator; + __Pyx_Buffer __pyx_pybuffer_U1_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_denominator; + __Pyx_Buffer __pyx_pybuffer_U2_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_numerator; + __Pyx_Buffer __pyx_pybuffer_U2_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_V_denominator; + __Pyx_Buffer __pyx_pybuffer_V_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_V_numerator; + __Pyx_Buffer __pyx_pybuffer_V_numerator; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + long __pyx_t_3; + int __pyx_t_4; + double __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyArrayObject *__pyx_t_9 = NULL; + PyArrayObject *__pyx_t_10 = NULL; + PyArrayObject *__pyx_t_11 = NULL; + PyArrayObject *__pyx_t_12 = NULL; + PyArrayObject *__pyx_t_13 = NULL; + PyArrayObject *__pyx_t_14 = NULL; + PyArrayObject *__pyx_t_15 = NULL; + PyArrayObject *__pyx_t_16 = NULL; + PyArrayObject *__pyx_t_17 = NULL; + PyArrayObject *__pyx_t_18 = NULL; + Py_ssize_t __pyx_t_19; + PyObject *(*__pyx_t_20)(PyObject *); + Py_ssize_t __pyx_t_21; + Py_ssize_t __pyx_t_22; + Py_ssize_t __pyx_t_23; + Py_ssize_t __pyx_t_24; + Py_ssize_t __pyx_t_25; + Py_ssize_t __pyx_t_26; + Py_ssize_t __pyx_t_27; + double __pyx_t_28; + int __pyx_t_29; + int __pyx_t_30; + long __pyx_t_31; + long __pyx_t_32; + Py_ssize_t __pyx_t_33; + Py_ssize_t __pyx_t_34; + __pyx_t_5numpy_float32_t __pyx_t_35; + __pyx_t_5numpy_float32_t __pyx_t_36; + int __pyx_t_37; + Py_UCS4 __pyx_t_38; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_fuse_1_0_fit_efm", 0); + __pyx_pybuffer_U1_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_U1_numerator.refcount = 0; + __pyx_pybuffernd_U1_numerator.data = NULL; + __pyx_pybuffernd_U1_numerator.rcbuffer = &__pyx_pybuffer_U1_numerator; + __pyx_pybuffer_U1_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_U1_denominator.refcount = 0; + __pyx_pybuffernd_U1_denominator.data = NULL; + __pyx_pybuffernd_U1_denominator.rcbuffer = &__pyx_pybuffer_U1_denominator; + __pyx_pybuffer_U2_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_U2_numerator.refcount = 0; + __pyx_pybuffernd_U2_numerator.data = NULL; + __pyx_pybuffernd_U2_numerator.rcbuffer = &__pyx_pybuffer_U2_numerator; + __pyx_pybuffer_U2_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_U2_denominator.refcount = 0; + __pyx_pybuffernd_U2_denominator.data = NULL; + __pyx_pybuffernd_U2_denominator.rcbuffer = &__pyx_pybuffer_U2_denominator; + __pyx_pybuffer_V_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_V_numerator.refcount = 0; + __pyx_pybuffernd_V_numerator.data = NULL; + __pyx_pybuffernd_V_numerator.rcbuffer = &__pyx_pybuffer_V_numerator; + __pyx_pybuffer_V_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_V_denominator.refcount = 0; + __pyx_pybuffernd_V_denominator.data = NULL; + __pyx_pybuffernd_V_denominator.rcbuffer = &__pyx_pybuffer_V_denominator; + __pyx_pybuffer_H1_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_H1_numerator.refcount = 0; + __pyx_pybuffernd_H1_numerator.data = NULL; + __pyx_pybuffernd_H1_numerator.rcbuffer = &__pyx_pybuffer_H1_numerator; + __pyx_pybuffer_H1_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_H1_denominator.refcount = 0; + __pyx_pybuffernd_H1_denominator.data = NULL; + __pyx_pybuffernd_H1_denominator.rcbuffer = &__pyx_pybuffer_H1_denominator; + __pyx_pybuffer_H2_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_H2_numerator.refcount = 0; + __pyx_pybuffernd_H2_numerator.data = NULL; + __pyx_pybuffernd_H2_numerator.rcbuffer = &__pyx_pybuffer_H2_numerator; + __pyx_pybuffer_H2_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_H2_denominator.refcount = 0; + __pyx_pybuffernd_H2_denominator.data = NULL; + __pyx_pybuffernd_H2_denominator.rcbuffer = &__pyx_pybuffer_H2_denominator; - /* "View.MemoryView":694 - * result.append(item) - * - * nslices = ndim - len(result) # <<<<<<<<<<<<<< - * if nslices: - * result.extend([slice(None)] * nslices) + /* "cornac/models/efm/recom_efm.pyx":238 + * """ + * cdef: + * long num_users = self.train_set.num_users # <<<<<<<<<<<<<< + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects */ - __pyx_t_5 = PyList_GET_SIZE(__pyx_v_result); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(2, 694, __pyx_L1_error) - __pyx_v_nslices = (__pyx_v_ndim - __pyx_t_5); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_num_users = __pyx_t_3; - /* "View.MemoryView":695 - * - * nslices = ndim - len(result) - * if nslices: # <<<<<<<<<<<<<< - * result.extend([slice(None)] * nslices) - * + /* "cornac/models/efm/recom_efm.pyx":239 + * cdef: + * long num_users = self.train_set.num_users + * long num_items = self.train_set.num_items # <<<<<<<<<<<<<< + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors */ - __pyx_t_1 = (__pyx_v_nslices != 0); - if (__pyx_t_1) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_items = __pyx_t_3; - /* "View.MemoryView":696 - * nslices = ndim - len(result) - * if nslices: - * result.extend([slice(None)] * nslices) # <<<<<<<<<<<<<< - * - * return have_slices or nslices, tuple(result) + /* "cornac/models/efm/recom_efm.pyx":240 + * long num_users = self.train_set.num_users + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< + * int num_explicit_factors = self.num_explicit_factors + * int num_latent_factors = self.num_latent_factors */ - __pyx_t_3 = PyList_New(1 * ((__pyx_v_nslices<0) ? 0:__pyx_v_nslices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 696, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - { Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < __pyx_v_nslices; __pyx_temp++) { - __Pyx_INCREF(__pyx_slice__12); - __Pyx_GIVEREF(__pyx_slice__12); - PyList_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_slice__12); - } - } - __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 696, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_aspects = __pyx_t_3; - /* "View.MemoryView":695 - * - * nslices = ndim - len(result) - * if nslices: # <<<<<<<<<<<<<< - * result.extend([slice(None)] * nslices) + /* "cornac/models/efm/recom_efm.pyx":241 + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors # <<<<<<<<<<<<<< + * int num_latent_factors = self.num_latent_factors * */ - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_explicit_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_explicit_factors = __pyx_t_4; - /* "View.MemoryView":698 - * result.extend([slice(None)] * nslices) - * - * return have_slices or nslices, tuple(result) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":242 + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors + * int num_latent_factors = self.num_latent_factors # <<<<<<<<<<<<<< * - * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * floating lambda_x = self.lambda_x */ - __Pyx_XDECREF(__pyx_r); - if (!__pyx_v_have_slices) { - } else { - __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_have_slices); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 698, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L14_bool_binop_done; - } - __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_nslices); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 698, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __pyx_t_4; - __pyx_t_4 = 0; - __pyx_L14_bool_binop_done:; - __pyx_t_4 = PyList_AsTuple(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 698, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 698, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_4); - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_r = ((PyObject*)__pyx_t_11); - __pyx_t_11 = 0; - goto __pyx_L0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_latent_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 242, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_latent_factors = __pyx_t_4; - /* "View.MemoryView":666 - * return isinstance(o, memoryview) + /* "cornac/models/efm/recom_efm.pyx":244 + * int num_latent_factors = self.num_latent_factors * - * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< - * """ - * Replace all ellipses with full slices and fill incomplete indices with + * floating lambda_x = self.lambda_x # <<<<<<<<<<<<<< + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_x = __pyx_t_5; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("View.MemoryView._unellipsify", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_tup); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_idx); - __Pyx_XDECREF(__pyx_v_item); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":700 - * return have_slices or nslices, tuple(result) + /* "cornac/models/efm/recom_efm.pyx":245 * - * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< - * for suboffset in suboffsets[:ndim]: - * if suboffset >= 0: + * floating lambda_x = self.lambda_x + * floating lambda_y = self.lambda_y # <<<<<<<<<<<<<< + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 245, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_y = __pyx_t_5; -static PyObject *assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int __pyx_v_ndim) { - Py_ssize_t __pyx_v_suboffset; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - Py_ssize_t *__pyx_t_1; - Py_ssize_t *__pyx_t_2; - Py_ssize_t *__pyx_t_3; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("assert_direct_dimensions", 0); - - /* "View.MemoryView":701 - * - * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): - * for suboffset in suboffsets[:ndim]: # <<<<<<<<<<<<<< - * if suboffset >= 0: - * raise ValueError("Indirect dimensions not supported") + /* "cornac/models/efm/recom_efm.pyx":246 + * floating lambda_x = self.lambda_x + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u # <<<<<<<<<<<<<< + * floating lambda_h = self.lambda_h + * floating lambda_v = self.lambda_v */ - __pyx_t_2 = (__pyx_v_suboffsets + __pyx_v_ndim); - for (__pyx_t_3 = __pyx_v_suboffsets; __pyx_t_3 < __pyx_t_2; __pyx_t_3++) { - __pyx_t_1 = __pyx_t_3; - __pyx_v_suboffset = (__pyx_t_1[0]); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_u); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_u = __pyx_t_5; - /* "View.MemoryView":702 - * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): - * for suboffset in suboffsets[:ndim]: - * if suboffset >= 0: # <<<<<<<<<<<<<< - * raise ValueError("Indirect dimensions not supported") + /* "cornac/models/efm/recom_efm.pyx":247 + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h # <<<<<<<<<<<<<< + * floating lambda_v = self.lambda_v * */ - __pyx_t_4 = ((__pyx_v_suboffset >= 0) != 0); - if (unlikely(__pyx_t_4)) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_h); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_h = __pyx_t_5; - /* "View.MemoryView":703 - * for suboffset in suboffsets[:ndim]: - * if suboffset >= 0: - * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< - * + /* "cornac/models/efm/recom_efm.pyx":248 + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h + * floating lambda_v = self.lambda_v # <<<<<<<<<<<<<< * + * floating prediction, score, loss */ - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 703, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_Raise(__pyx_t_5, 0, 0, 0); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __PYX_ERR(2, 703, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_v); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 248, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 248, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_v = __pyx_t_5; - /* "View.MemoryView":702 - * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): - * for suboffset in suboffsets[:ndim]: - * if suboffset >= 0: # <<<<<<<<<<<<<< - * raise ValueError("Indirect dimensions not supported") + /* "cornac/models/efm/recom_efm.pyx":252 + * floating prediction, score, loss * + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 252, __pyx_L1_error) + __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 252, __pyx_L1_error) + } else {__pyx_pybuffernd_U1_numerator.diminfo[0].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_numerator.diminfo[0].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_numerator.diminfo[1].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_numerator.diminfo[1].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[1]; } } + __pyx_t_9 = 0; + __pyx_v_U1_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":700 - * return have_slices or nslices, tuple(result) - * - * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< - * for suboffset in suboffsets[:ndim]: - * if suboffset >= 0: - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.assert_direct_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":710 + /* "cornac/models/efm/recom_efm.pyx":253 * - * @cname('__pyx_memview_slice') - * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< - * cdef int new_ndim = 0, suboffset_dim = -1, dim - * cdef bint negative_step + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 253, __pyx_L1_error) + __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 253, __pyx_L1_error) + } else {__pyx_pybuffernd_U1_denominator.diminfo[0].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_denominator.diminfo[0].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_denominator.diminfo[1].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_denominator.diminfo[1].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_10 = 0; + __pyx_v_U1_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; -static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *__pyx_v_memview, PyObject *__pyx_v_indices) { - int __pyx_v_new_ndim; - int __pyx_v_suboffset_dim; - int __pyx_v_dim; - __Pyx_memviewslice __pyx_v_src; - __Pyx_memviewslice __pyx_v_dst; - __Pyx_memviewslice *__pyx_v_p_src; - struct __pyx_memoryviewslice_obj *__pyx_v_memviewsliceobj = 0; - __Pyx_memviewslice *__pyx_v_p_dst; - int *__pyx_v_p_suboffset_dim; - Py_ssize_t __pyx_v_start; - Py_ssize_t __pyx_v_stop; - Py_ssize_t __pyx_v_step; - int __pyx_v_have_start; - int __pyx_v_have_stop; - int __pyx_v_have_step; - PyObject *__pyx_v_index = NULL; - struct __pyx_memoryview_obj *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - struct __pyx_memoryview_obj *__pyx_t_4; - char *__pyx_t_5; - int __pyx_t_6; - Py_ssize_t __pyx_t_7; - PyObject *(*__pyx_t_8)(PyObject *); - PyObject *__pyx_t_9 = NULL; - Py_ssize_t __pyx_t_10; - int __pyx_t_11; - Py_ssize_t __pyx_t_12; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("memview_slice", 0); - - /* "View.MemoryView":711 - * @cname('__pyx_memview_slice') - * cdef memoryview memview_slice(memoryview memview, object indices): - * cdef int new_ndim = 0, suboffset_dim = -1, dim # <<<<<<<<<<<<<< - * cdef bint negative_step - * cdef __Pyx_memviewslice src, dst + /* "cornac/models/efm/recom_efm.pyx":254 + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) */ - __pyx_v_new_ndim = 0; - __pyx_v_suboffset_dim = -1; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 254, __pyx_L1_error) + __pyx_t_11 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 254, __pyx_L1_error) + } else {__pyx_pybuffernd_U2_numerator.diminfo[0].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_numerator.diminfo[0].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_numerator.diminfo[1].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_numerator.diminfo[1].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_11 = 0; + __pyx_v_U2_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":718 - * - * - * memset(&dst, 0, sizeof(dst)) # <<<<<<<<<<<<<< - * - * cdef _memoryviewslice memviewsliceobj + /* "cornac/models/efm/recom_efm.pyx":255 + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) */ - (void)(memset((&__pyx_v_dst), 0, (sizeof(__pyx_v_dst)))); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 255, __pyx_L1_error) + __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 255, __pyx_L1_error) + } else {__pyx_pybuffernd_U2_denominator.diminfo[0].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_denominator.diminfo[0].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_denominator.diminfo[1].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_denominator.diminfo[1].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_12 = 0; + __pyx_v_U2_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":722 - * cdef _memoryviewslice memviewsliceobj - * - * assert memview.view.ndim > 0 # <<<<<<<<<<<<<< - * - * if isinstance(memview, _memoryviewslice): + /* "cornac/models/efm/recom_efm.pyx":256 + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) */ - #ifndef CYTHON_WITHOUT_ASSERTIONS - if (unlikely(!Py_OptimizeFlag)) { - if (unlikely(!((__pyx_v_memview->view.ndim > 0) != 0))) { - PyErr_SetNone(PyExc_AssertionError); - __PYX_ERR(2, 722, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 256, __pyx_L1_error) + __pyx_t_13 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_V_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 256, __pyx_L1_error) + } else {__pyx_pybuffernd_V_numerator.diminfo[0].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_numerator.diminfo[0].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_numerator.diminfo[1].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_numerator.diminfo[1].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[1]; } } - #endif - - /* "View.MemoryView":724 - * assert memview.view.ndim > 0 - * - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * memviewsliceobj = memview - * p_src = &memviewsliceobj.from_slice - */ - __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":725 - * - * if isinstance(memview, _memoryviewslice): - * memviewsliceobj = memview # <<<<<<<<<<<<<< - * p_src = &memviewsliceobj.from_slice - * else: - */ - if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(2, 725, __pyx_L1_error) - __pyx_t_3 = ((PyObject *)__pyx_v_memview); - __Pyx_INCREF(__pyx_t_3); - __pyx_v_memviewsliceobj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); - __pyx_t_3 = 0; - - /* "View.MemoryView":726 - * if isinstance(memview, _memoryviewslice): - * memviewsliceobj = memview - * p_src = &memviewsliceobj.from_slice # <<<<<<<<<<<<<< - * else: - * slice_copy(memview, &src) - */ - __pyx_v_p_src = (&__pyx_v_memviewsliceobj->from_slice); + __pyx_t_13 = 0; + __pyx_v_V_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":724 - * assert memview.view.ndim > 0 - * - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * memviewsliceobj = memview - * p_src = &memviewsliceobj.from_slice + /* "cornac/models/efm/recom_efm.pyx":257 + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) */ - goto __pyx_L3; + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 257, __pyx_L1_error) + __pyx_t_14 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_V_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 257, __pyx_L1_error) + } else {__pyx_pybuffernd_V_denominator.diminfo[0].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_denominator.diminfo[0].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_denominator.diminfo[1].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_denominator.diminfo[1].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[1]; + } } + __pyx_t_14 = 0; + __pyx_v_V_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":728 - * p_src = &memviewsliceobj.from_slice - * else: - * slice_copy(memview, &src) # <<<<<<<<<<<<<< - * p_src = &src - * + /* "cornac/models/efm/recom_efm.pyx":258 + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) */ - /*else*/ { - __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_src)); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 258, __pyx_L1_error) + __pyx_t_15 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 258, __pyx_L1_error) + } else {__pyx_pybuffernd_H1_numerator.diminfo[0].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_numerator.diminfo[0].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_numerator.diminfo[1].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_numerator.diminfo[1].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_15 = 0; + __pyx_v_H1_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":729 - * else: - * slice_copy(memview, &src) - * p_src = &src # <<<<<<<<<<<<<< - * - * + /* "cornac/models/efm/recom_efm.pyx":259 + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) */ - __pyx_v_p_src = (&__pyx_v_src); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 259, __pyx_L1_error) + __pyx_t_16 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 259, __pyx_L1_error) + } else {__pyx_pybuffernd_H1_denominator.diminfo[0].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_denominator.diminfo[0].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_denominator.diminfo[1].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_denominator.diminfo[1].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[1]; + } } - __pyx_L3:; + __pyx_t_16 = 0; + __pyx_v_H1_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":735 - * - * - * dst.memview = p_src.memview # <<<<<<<<<<<<<< - * dst.data = p_src.data - * + /* "cornac/models/efm/recom_efm.pyx":260 + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * int i, j, k, idx */ - __pyx_t_4 = __pyx_v_p_src->memview; - __pyx_v_dst.memview = __pyx_t_4; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 260, __pyx_L1_error) + __pyx_t_17 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 260, __pyx_L1_error) + } else {__pyx_pybuffernd_H2_numerator.diminfo[0].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_numerator.diminfo[0].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_numerator.diminfo[1].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_numerator.diminfo[1].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_17 = 0; + __pyx_v_H2_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":736 - * - * dst.memview = p_src.memview - * dst.data = p_src.data # <<<<<<<<<<<<<< - * - * + /* "cornac/models/efm/recom_efm.pyx":261 + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * int i, j, k, idx + * long n_ratings */ - __pyx_t_5 = __pyx_v_p_src->data; - __pyx_v_dst.data = __pyx_t_5; + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 261, __pyx_L1_error) + __pyx_t_18 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 261, __pyx_L1_error) + } else {__pyx_pybuffernd_H2_denominator.diminfo[0].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_denominator.diminfo[0].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_denominator.diminfo[1].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_denominator.diminfo[1].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_18 = 0; + __pyx_v_H2_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":741 - * + /* "cornac/models/efm/recom_efm.pyx":265 + * long n_ratings * - * cdef __Pyx_memviewslice *p_dst = &dst # <<<<<<<<<<<<<< - * cdef int *p_suboffset_dim = &suboffset_dim - * cdef Py_ssize_t start, stop, step - */ - __pyx_v_p_dst = (&__pyx_v_dst); - - /* "View.MemoryView":742 + * floating eps = 1e-9 # <<<<<<<<<<<<<< * - * cdef __Pyx_memviewslice *p_dst = &dst - * cdef int *p_suboffset_dim = &suboffset_dim # <<<<<<<<<<<<<< - * cdef Py_ssize_t start, stop, step - * cdef bint have_start, have_stop, have_step + * for t in range(1, self.max_iter + 1): */ - __pyx_v_p_suboffset_dim = (&__pyx_v_suboffset_dim); + __pyx_v_eps = 1e-9; - /* "View.MemoryView":746 - * cdef bint have_start, have_stop, have_step + /* "cornac/models/efm/recom_efm.pyx":267 + * floating eps = 1e-9 * - * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< - * if PyIndex_Check(index): - * slice_memviewslice( + * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< + * loss = 0. + * U1_numerator.fill(0) */ - __pyx_t_6 = 0; - if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) { - __pyx_t_3 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0; - __pyx_t_8 = NULL; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_max_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_int_1); + __Pyx_GIVEREF(__pyx_int_1); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { + __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_19 = 0; + __pyx_t_20 = NULL; } else { - __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 746, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 746, __pyx_L1_error) + __pyx_t_19 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_20 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 267, __pyx_L1_error) } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { - if (likely(!__pyx_t_8)) { - if (likely(PyList_CheckExact(__pyx_t_3))) { - if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break; + if (likely(!__pyx_t_20)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_1)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(2, 746, __pyx_L1_error) + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 267, __pyx_L1_error) #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 746, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); + __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); #endif } else { - if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(2, 746, __pyx_L1_error) + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 267, __pyx_L1_error) #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 746, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); + __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); #endif } } else { - __pyx_t_9 = __pyx_t_8(__pyx_t_3); - if (unlikely(!__pyx_t_9)) { + __pyx_t_2 = __pyx_t_20(__pyx_t_1); + if (unlikely(!__pyx_t_2)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(2, 746, __pyx_L1_error) + else __PYX_ERR(0, 267, __pyx_L1_error) } break; } - __Pyx_GOTREF(__pyx_t_9); + __Pyx_GOTREF(__pyx_t_2); } - __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_9); - __pyx_t_9 = 0; - __pyx_v_dim = __pyx_t_6; - __pyx_t_6 = (__pyx_t_6 + 1); + __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2); + __pyx_t_2 = 0; - /* "View.MemoryView":747 + /* "cornac/models/efm/recom_efm.pyx":268 * - * for dim, index in enumerate(indices): - * if PyIndex_Check(index): # <<<<<<<<<<<<<< - * slice_memviewslice( - * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], - */ - __pyx_t_2 = (PyIndex_Check(__pyx_v_index) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":751 - * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], - * dim, new_ndim, p_suboffset_dim, - * index, 0, 0, # start, stop, step # <<<<<<<<<<<<<< - * 0, 0, 0, # have_{start,stop,step} - * False) - */ - __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 751, __pyx_L1_error) - - /* "View.MemoryView":748 - * for dim, index in enumerate(indices): - * if PyIndex_Check(index): - * slice_memviewslice( # <<<<<<<<<<<<<< - * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], - * dim, new_ndim, p_suboffset_dim, + * for t in range(1, self.max_iter + 1): + * loss = 0. # <<<<<<<<<<<<<< + * U1_numerator.fill(0) + * U1_denominator.fill(0) */ - __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_t_10, 0, 0, 0, 0, 0, 0); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 748, __pyx_L1_error) + __pyx_v_loss = 0.; - /* "View.MemoryView":747 - * - * for dim, index in enumerate(indices): - * if PyIndex_Check(index): # <<<<<<<<<<<<<< - * slice_memviewslice( - * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + /* "cornac/models/efm/recom_efm.pyx":269 + * for t in range(1, self.max_iter + 1): + * loss = 0. + * U1_numerator.fill(0) # <<<<<<<<<<<<<< + * U1_denominator.fill(0) + * U2_numerator.fill(0) */ - goto __pyx_L6; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":754 - * 0, 0, 0, # have_{start,stop,step} - * False) - * elif index is None: # <<<<<<<<<<<<<< - * p_dst.shape[new_ndim] = 1 - * p_dst.strides[new_ndim] = 0 - */ - __pyx_t_2 = (__pyx_v_index == Py_None); - __pyx_t_1 = (__pyx_t_2 != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":755 - * False) - * elif index is None: - * p_dst.shape[new_ndim] = 1 # <<<<<<<<<<<<<< - * p_dst.strides[new_ndim] = 0 - * p_dst.suboffsets[new_ndim] = -1 + /* "cornac/models/efm/recom_efm.pyx":270 + * loss = 0. + * U1_numerator.fill(0) + * U1_denominator.fill(0) # <<<<<<<<<<<<<< + * U2_numerator.fill(0) + * U2_denominator.fill(0) */ - (__pyx_v_p_dst->shape[__pyx_v_new_ndim]) = 1; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":756 - * elif index is None: - * p_dst.shape[new_ndim] = 1 - * p_dst.strides[new_ndim] = 0 # <<<<<<<<<<<<<< - * p_dst.suboffsets[new_ndim] = -1 - * new_ndim += 1 + /* "cornac/models/efm/recom_efm.pyx":271 + * U1_numerator.fill(0) + * U1_denominator.fill(0) + * U2_numerator.fill(0) # <<<<<<<<<<<<<< + * U2_denominator.fill(0) + * V_numerator.fill(0) */ - (__pyx_v_p_dst->strides[__pyx_v_new_ndim]) = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":757 - * p_dst.shape[new_ndim] = 1 - * p_dst.strides[new_ndim] = 0 - * p_dst.suboffsets[new_ndim] = -1 # <<<<<<<<<<<<<< - * new_ndim += 1 - * else: + /* "cornac/models/efm/recom_efm.pyx":272 + * U1_denominator.fill(0) + * U2_numerator.fill(0) + * U2_denominator.fill(0) # <<<<<<<<<<<<<< + * V_numerator.fill(0) + * V_denominator.fill(0) */ - (__pyx_v_p_dst->suboffsets[__pyx_v_new_ndim]) = -1L; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":758 - * p_dst.strides[new_ndim] = 0 - * p_dst.suboffsets[new_ndim] = -1 - * new_ndim += 1 # <<<<<<<<<<<<<< - * else: - * start = index.start or 0 + /* "cornac/models/efm/recom_efm.pyx":273 + * U2_numerator.fill(0) + * U2_denominator.fill(0) + * V_numerator.fill(0) # <<<<<<<<<<<<<< + * V_denominator.fill(0) + * H1_numerator.fill(0) */ - __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":754 - * 0, 0, 0, # have_{start,stop,step} - * False) - * elif index is None: # <<<<<<<<<<<<<< - * p_dst.shape[new_ndim] = 1 - * p_dst.strides[new_ndim] = 0 + /* "cornac/models/efm/recom_efm.pyx":274 + * U2_denominator.fill(0) + * V_numerator.fill(0) + * V_denominator.fill(0) # <<<<<<<<<<<<<< + * H1_numerator.fill(0) + * H1_denominator.fill(0) */ - goto __pyx_L6; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 274, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":760 - * new_ndim += 1 - * else: - * start = index.start or 0 # <<<<<<<<<<<<<< - * stop = index.stop or 0 - * step = index.step or 0 + /* "cornac/models/efm/recom_efm.pyx":275 + * V_numerator.fill(0) + * V_denominator.fill(0) + * H1_numerator.fill(0) # <<<<<<<<<<<<<< + * H1_denominator.fill(0) + * H2_numerator.fill(0) */ - /*else*/ { - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 760, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 760, __pyx_L1_error) - if (!__pyx_t_1) { - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } else { - __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 760, __pyx_L1_error) - __pyx_t_10 = __pyx_t_12; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L7_bool_binop_done; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; } - __pyx_t_10 = 0; - __pyx_L7_bool_binop_done:; - __pyx_v_start = __pyx_t_10; + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":761 - * else: - * start = index.start or 0 - * stop = index.stop or 0 # <<<<<<<<<<<<<< - * step = index.step or 0 - * + /* "cornac/models/efm/recom_efm.pyx":276 + * V_denominator.fill(0) + * H1_numerator.fill(0) + * H1_denominator.fill(0) # <<<<<<<<<<<<<< + * H2_numerator.fill(0) + * H2_denominator.fill(0) */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 761, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 761, __pyx_L1_error) - if (!__pyx_t_1) { - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } else { - __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 761, __pyx_L1_error) - __pyx_t_10 = __pyx_t_12; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L9_bool_binop_done; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; } - __pyx_t_10 = 0; - __pyx_L9_bool_binop_done:; - __pyx_v_stop = __pyx_t_10; + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":762 - * start = index.start or 0 - * stop = index.stop or 0 - * step = index.step or 0 # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":277 + * H1_numerator.fill(0) + * H1_denominator.fill(0) + * H2_numerator.fill(0) # <<<<<<<<<<<<<< + * H2_denominator.fill(0) * - * have_start = index.start is not None */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 762, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 762, __pyx_L1_error) - if (!__pyx_t_1) { - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } else { - __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 762, __pyx_L1_error) - __pyx_t_10 = __pyx_t_12; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L11_bool_binop_done; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 277, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; } - __pyx_t_10 = 0; - __pyx_L11_bool_binop_done:; - __pyx_v_step = __pyx_t_10; + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":764 - * step = index.step or 0 + /* "cornac/models/efm/recom_efm.pyx":278 + * H1_denominator.fill(0) + * H2_numerator.fill(0) + * H2_denominator.fill(0) # <<<<<<<<<<<<<< * - * have_start = index.start is not None # <<<<<<<<<<<<<< - * have_stop = index.stop is not None - * have_step = index.step is not None + * with nogil, parallel(num_threads=num_threads): */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 764, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_1 = (__pyx_t_9 != Py_None); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_v_have_start = __pyx_t_1; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":765 - * - * have_start = index.start is not None - * have_stop = index.stop is not None # <<<<<<<<<<<<<< - * have_step = index.step is not None + /* "cornac/models/efm/recom_efm.pyx":280 + * H2_denominator.fill(0) * + * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 765, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_1 = (__pyx_t_9 != Py_None); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_v_have_stop = __pyx_t_1; + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) private(__pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_3, __pyx_t_30, __pyx_t_31, __pyx_t_32, __pyx_t_33, __pyx_t_34, __pyx_t_35, __pyx_t_36, __pyx_t_4, __pyx_t_5) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_num_threads) + #endif /* _OPENMP */ + { + #ifdef _OPENMP + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + Py_BEGIN_ALLOW_THREADS + #endif /* _OPENMP */ - /* "View.MemoryView":766 - * have_start = index.start is not None - * have_stop = index.stop is not None - * have_step = index.step is not None # <<<<<<<<<<<<<< - * - * slice_memviewslice( + /* "cornac/models/efm/recom_efm.pyx":282 + * with nogil, parallel(num_threads=num_threads): + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): # <<<<<<<<<<<<<< + * i = A_uids[idx] + * j = A_iids[idx] */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 766, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_1 = (__pyx_t_9 != Py_None); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_v_have_step = __pyx_t_1; + if (unlikely(!__pyx_v_A.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("A"); __PYX_ERR(0, 282, __pyx_L12_error) } + __pyx_t_21 = (__pyx_v_A.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + double __pyx_parallel_temp4 = ((double)__PYX_NAN()); + double __pyx_parallel_temp5 = ((double)__PYX_NAN()); + double __pyx_parallel_temp6 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_23 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((double)__PYX_NAN()); + __pyx_v_score = ((double)__PYX_NAN()); - /* "View.MemoryView":768 - * have_step = index.step is not None - * - * slice_memviewslice( # <<<<<<<<<<<<<< - * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], - * dim, new_ndim, p_suboffset_dim, + /* "cornac/models/efm/recom_efm.pyx":283 + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): + * i = A_uids[idx] # <<<<<<<<<<<<<< + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ */ - __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_have_start, __pyx_v_have_stop, __pyx_v_have_step, 1); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 768, __pyx_L1_error) + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i = (*((short *) ( /* dim=0 */ (__pyx_v_A_uids.data + __pyx_t_24 * __pyx_v_A_uids.strides[0]) ))); - /* "View.MemoryView":774 - * have_start, have_stop, have_step, - * True) - * new_ndim += 1 # <<<<<<<<<<<<<< - * - * if isinstance(memview, _memoryviewslice): + /* "cornac/models/efm/recom_efm.pyx":284 + * for idx in prange(A.shape[0]): + * i = A_uids[idx] + * j = A_iids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) */ - __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); - } - __pyx_L6:; + __pyx_t_24 = __pyx_v_idx; + __pyx_v_j = (*((short *) ( /* dim=0 */ (__pyx_v_A_iids.data + __pyx_t_24 * __pyx_v_A_iids.strides[0]) ))); - /* "View.MemoryView":746 - * cdef bint have_start, have_stop, have_step - * - * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< - * if PyIndex_Check(index): - * slice_memviewslice( + /* "cornac/models/efm/recom_efm.pyx":285 + * i = A_uids[idx] + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ # <<<<<<<<<<<<<< + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] */ - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = 0; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = 0; + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 285, __pyx_L16_error) - /* "View.MemoryView":776 - * new_ndim += 1 - * - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * return memoryview_fromslice(dst, new_ndim, - * memviewsliceobj.to_object_func, + /* "cornac/models/efm/recom_efm.pyx":286 + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) # <<<<<<<<<<<<<< + * score = A[idx] + * loss += (prediction - score) * (prediction - score) */ - __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = 0; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = 0; + __pyx_t_28 = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_latent_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_27 * __pyx_v_H1.strides[0]) ) + __pyx_t_26 * __pyx_v_H1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_24 * __pyx_v_H2.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 286, __pyx_L16_error) + __pyx_v_prediction = (__pyx_t_5 + __pyx_t_28); - /* "View.MemoryView":777 - * - * if isinstance(memview, _memoryviewslice): - * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< - * memviewsliceobj.to_object_func, - * memviewsliceobj.to_dtype_func, + /* "cornac/models/efm/recom_efm.pyx":287 + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): */ - __Pyx_XDECREF(((PyObject *)__pyx_r)); + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ))); - /* "View.MemoryView":778 - * if isinstance(memview, _memoryviewslice): - * return memoryview_fromslice(dst, new_ndim, - * memviewsliceobj.to_object_func, # <<<<<<<<<<<<<< - * memviewsliceobj.to_dtype_func, - * memview.dtype_is_object) + /* "cornac/models/efm/recom_efm.pyx":288 + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] */ - if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(2, 778, __pyx_L1_error) } + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - /* "View.MemoryView":779 - * return memoryview_fromslice(dst, new_ndim, - * memviewsliceobj.to_object_func, - * memviewsliceobj.to_dtype_func, # <<<<<<<<<<<<<< - * memview.dtype_is_object) - * else: + /* "cornac/models/efm/recom_efm.pyx":289 + * score = A[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] */ - if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(2, 779, __pyx_L1_error) } + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":777 - * - * if isinstance(memview, _memoryviewslice): - * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< - * memviewsliceobj.to_object_func, - * memviewsliceobj.to_dtype_func, + /* "cornac/models/efm/recom_efm.pyx":290 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] # <<<<<<<<<<<<<< + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] */ - __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, __pyx_v_memviewsliceobj->to_object_func, __pyx_v_memviewsliceobj->to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 777, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(2, 777, __pyx_L1_error) - __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); - __pyx_t_3 = 0; - goto __pyx_L0; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_24 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":776 - * new_ndim += 1 - * - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * return memoryview_fromslice(dst, new_ndim, - * memviewsliceobj.to_object_func, + /* "cornac/models/efm/recom_efm.pyx":291 + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] # <<<<<<<<<<<<<< + * U2_numerator[j, k] += score * U1[i, k] + * U2_denominator[j, k] += prediction * U1[i, k] */ - } + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_24 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":782 - * memview.dtype_is_object) - * else: - * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< - * memview.dtype_is_object) + /* "cornac/models/efm/recom_efm.pyx":292 + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] # <<<<<<<<<<<<<< + * U2_denominator[j, k] += prediction * U1[i, k] * */ - /*else*/ { - __Pyx_XDECREF(((PyObject *)__pyx_r)); + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))); - /* "View.MemoryView":783 - * else: - * return memoryview_fromslice(dst, new_ndim, NULL, NULL, - * memview.dtype_is_object) # <<<<<<<<<<<<<< - * + /* "cornac/models/efm/recom_efm.pyx":293 + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] + * U2_denominator[j, k] += prediction * U1[i, k] # <<<<<<<<<<<<<< * + * for k in range(num_latent_factors): */ - __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, NULL, NULL, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 782, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )))); + } - /* "View.MemoryView":782 - * memview.dtype_is_object) - * else: - * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< - * memview.dtype_is_object) + /* "cornac/models/efm/recom_efm.pyx":295 + * U2_denominator[j, k] += prediction * U1[i, k] * + * for k in range(num_latent_factors): # <<<<<<<<<<<<<< + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] */ - if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(2, 782, __pyx_L1_error) - __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); - __pyx_t_3 = 0; - goto __pyx_L0; - } + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":710 + /* "cornac/models/efm/recom_efm.pyx":296 * - * @cname('__pyx_memview_slice') - * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< - * cdef int new_ndim = 0, suboffset_dim = -1, dim - * cdef bint negative_step + * for k in range(num_latent_factors): + * H1_numerator[i, k] += score * H2[j, k] # <<<<<<<<<<<<<< + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] */ + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_24 * __pyx_v_H2.strides[0]) ) + __pyx_t_25 * __pyx_v_H2.strides[1]) )))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("View.MemoryView.memview_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_memviewsliceobj); - __Pyx_XDECREF(__pyx_v_index); - __Pyx_XGIVEREF((PyObject *)__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":807 - * - * @cname('__pyx_memoryview_slice_memviewslice') - * cdef int slice_memviewslice( # <<<<<<<<<<<<<< - * __Pyx_memviewslice *dst, - * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, + /* "cornac/models/efm/recom_efm.pyx":297 + * for k in range(num_latent_factors): + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] # <<<<<<<<<<<<<< + * H2_numerator[j, k] += score * H1[i, k] + * H2_denominator[j, k] += prediction * H1[i, k] */ + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_24 * __pyx_v_H2.strides[1]) )))); -static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx_v_dst, Py_ssize_t __pyx_v_shape, Py_ssize_t __pyx_v_stride, Py_ssize_t __pyx_v_suboffset, int __pyx_v_dim, int __pyx_v_new_ndim, int *__pyx_v_suboffset_dim, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_stop, Py_ssize_t __pyx_v_step, int __pyx_v_have_start, int __pyx_v_have_stop, int __pyx_v_have_step, int __pyx_v_is_slice) { - Py_ssize_t __pyx_v_new_shape; - int __pyx_v_negative_step; - int __pyx_r; - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - - /* "View.MemoryView":827 - * cdef bint negative_step - * - * if not is_slice: # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":298 + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] # <<<<<<<<<<<<<< + * H2_denominator[j, k] += prediction * H1[i, k] * - * if start < 0: */ - __pyx_t_1 = ((!(__pyx_v_is_slice != 0)) != 0); - if (__pyx_t_1) { + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_24 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))); - /* "View.MemoryView":829 - * if not is_slice: + /* "cornac/models/efm/recom_efm.pyx":299 + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] + * H2_denominator[j, k] += prediction * H1[i, k] # <<<<<<<<<<<<<< * - * if start < 0: # <<<<<<<<<<<<<< - * start += shape - * if not 0 <= start < shape: + * for idx in prange(X.shape[0]): */ - __pyx_t_1 = ((__pyx_v_start < 0) != 0); - if (__pyx_t_1) { + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_25 * __pyx_v_H1.strides[0]) ) + __pyx_t_24 * __pyx_v_H1.strides[1]) )))); + } + goto __pyx_L23; + __pyx_L16_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L22; + __pyx_L22:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates18) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L23:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":830 + /* "cornac/models/efm/recom_efm.pyx":301 + * H2_denominator[j, k] += prediction * H1[i, k] * - * if start < 0: - * start += shape # <<<<<<<<<<<<<< - * if not 0 <= start < shape: - * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + * for idx in prange(X.shape[0]): # <<<<<<<<<<<<<< + * i = X_uids[idx] + * j = X_aids[idx] */ - __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + if (unlikely(!__pyx_v_X.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("X"); __PYX_ERR(0, 301, __pyx_L12_error) } + __pyx_t_23 = (__pyx_v_X.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + double __pyx_parallel_temp4 = ((double)__PYX_NAN()); + double __pyx_parallel_temp5 = ((double)__PYX_NAN()); + double __pyx_parallel_temp6 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_21 = (__pyx_t_23 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_21 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((double)__PYX_NAN()); + __pyx_v_score = ((double)__PYX_NAN()); - /* "View.MemoryView":829 - * if not is_slice: + /* "cornac/models/efm/recom_efm.pyx":302 * - * if start < 0: # <<<<<<<<<<<<<< - * start += shape - * if not 0 <= start < shape: + * for idx in prange(X.shape[0]): + * i = X_uids[idx] # <<<<<<<<<<<<<< + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) */ - } + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i = (*((short *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_24 * __pyx_v_X_uids.strides[0]) ))); - /* "View.MemoryView":831 - * if start < 0: - * start += shape - * if not 0 <= start < shape: # <<<<<<<<<<<<<< - * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) - * else: + /* "cornac/models/efm/recom_efm.pyx":303 + * for idx in prange(X.shape[0]): + * i = X_uids[idx] + * j = X_aids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] */ - __pyx_t_1 = (0 <= __pyx_v_start); - if (__pyx_t_1) { - __pyx_t_1 = (__pyx_v_start < __pyx_v_shape); - } - __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); - if (__pyx_t_2) { + __pyx_t_24 = __pyx_v_idx; + __pyx_v_j = (*((short *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_24 * __pyx_v_X_aids.strides[0]) ))); - /* "View.MemoryView":832 - * start += shape - * if not 0 <= start < shape: - * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) # <<<<<<<<<<<<<< - * else: - * + /* "cornac/models/efm/recom_efm.pyx":304 + * i = X_uids[idx] + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< + * score = X[idx] + * loss += (prediction - score) * (prediction - score) */ - __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"Index out of bounds (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 832, __pyx_L1_error) + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = 0; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = 0; + __pyx_t_28 = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 304, __pyx_L26_error) + __pyx_v_prediction = __pyx_t_28; - /* "View.MemoryView":831 - * if start < 0: - * start += shape - * if not 0 <= start < shape: # <<<<<<<<<<<<<< - * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) - * else: + /* "cornac/models/efm/recom_efm.pyx":305 + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): */ - } + __pyx_t_27 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_27 * __pyx_v_X.strides[0]) ))); - /* "View.MemoryView":827 - * cdef bint negative_step - * - * if not is_slice: # <<<<<<<<<<<<<< - * - * if start < 0: + /* "cornac/models/efm/recom_efm.pyx":306 + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] */ - goto __pyx_L3; - } + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - /* "View.MemoryView":835 - * else: - * - * negative_step = have_step != 0 and step < 0 # <<<<<<<<<<<<<< - * - * if have_step and step == 0: + /* "cornac/models/efm/recom_efm.pyx":307 + * score = X[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] */ - /*else*/ { - __pyx_t_1 = ((__pyx_v_have_step != 0) != 0); - if (__pyx_t_1) { - } else { - __pyx_t_2 = __pyx_t_1; - goto __pyx_L6_bool_binop_done; - } - __pyx_t_1 = ((__pyx_v_step < 0) != 0); - __pyx_t_2 = __pyx_t_1; - __pyx_L6_bool_binop_done:; - __pyx_v_negative_step = __pyx_t_2; + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":837 - * negative_step = have_step != 0 and step < 0 - * - * if have_step and step == 0: # <<<<<<<<<<<<<< - * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) - * + /* "cornac/models/efm/recom_efm.pyx":308 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] # <<<<<<<<<<<<<< + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] */ - __pyx_t_1 = (__pyx_v_have_step != 0); - if (__pyx_t_1) { - } else { - __pyx_t_2 = __pyx_t_1; - goto __pyx_L9_bool_binop_done; - } - __pyx_t_1 = ((__pyx_v_step == 0) != 0); - __pyx_t_2 = __pyx_t_1; - __pyx_L9_bool_binop_done:; - if (__pyx_t_2) { + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_27 * __pyx_v_U1.strides[0]) ) + __pyx_t_26 * __pyx_v_U1.strides[1]) )))); - /* "View.MemoryView":838 - * - * if have_step and step == 0: - * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) # <<<<<<<<<<<<<< - * - * + /* "cornac/models/efm/recom_efm.pyx":309 + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] # <<<<<<<<<<<<<< + * U1_numerator[i, k] += lambda_x * score * V[j, k] + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] */ - __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Step may not be zero (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 838, __pyx_L1_error) + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_26 * __pyx_v_U1.strides[0]) ) + __pyx_t_27 * __pyx_v_U1.strides[1]) )))); - /* "View.MemoryView":837 - * negative_step = have_step != 0 and step < 0 - * - * if have_step and step == 0: # <<<<<<<<<<<<<< - * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) + /* "cornac/models/efm/recom_efm.pyx":310 + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] # <<<<<<<<<<<<<< + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] * */ - } + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_27 * __pyx_v_V.strides[0]) ) + __pyx_t_26 * __pyx_v_V.strides[1]) )))); - /* "View.MemoryView":841 - * + /* "cornac/models/efm/recom_efm.pyx":311 + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] # <<<<<<<<<<<<<< * - * if have_start: # <<<<<<<<<<<<<< - * if start < 0: - * start += shape + * for idx in prange(Y.shape[0]): */ - __pyx_t_2 = (__pyx_v_have_start != 0); - if (__pyx_t_2) { + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) )))); + } + goto __pyx_L31; + __pyx_L26_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L30; + __pyx_L30:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates19) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L31:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":842 + /* "cornac/models/efm/recom_efm.pyx":313 + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] * - * if have_start: - * if start < 0: # <<<<<<<<<<<<<< - * start += shape - * if start < 0: - */ - __pyx_t_2 = ((__pyx_v_start < 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":843 - * if have_start: - * if start < 0: - * start += shape # <<<<<<<<<<<<<< - * if start < 0: - * start = 0 - */ - __pyx_v_start = (__pyx_v_start + __pyx_v_shape); - - /* "View.MemoryView":844 - * if start < 0: - * start += shape - * if start < 0: # <<<<<<<<<<<<<< - * start = 0 - * elif start >= shape: + * for idx in prange(Y.shape[0]): # <<<<<<<<<<<<<< + * i = Y_iids[idx] + * j = Y_aids[idx] */ - __pyx_t_2 = ((__pyx_v_start < 0) != 0); - if (__pyx_t_2) { + if (unlikely(!__pyx_v_Y.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("Y"); __PYX_ERR(0, 313, __pyx_L12_error) } + __pyx_t_21 = (__pyx_v_Y.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + double __pyx_parallel_temp4 = ((double)__PYX_NAN()); + double __pyx_parallel_temp5 = ((double)__PYX_NAN()); + double __pyx_parallel_temp6 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_23 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((double)__PYX_NAN()); + __pyx_v_score = ((double)__PYX_NAN()); - /* "View.MemoryView":845 - * start += shape - * if start < 0: - * start = 0 # <<<<<<<<<<<<<< - * elif start >= shape: - * if negative_step: + /* "cornac/models/efm/recom_efm.pyx":314 + * + * for idx in prange(Y.shape[0]): + * i = Y_iids[idx] # <<<<<<<<<<<<<< + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) */ - __pyx_v_start = 0; + __pyx_t_27 = __pyx_v_idx; + __pyx_v_i = (*((short *) ( /* dim=0 */ (__pyx_v_Y_iids.data + __pyx_t_27 * __pyx_v_Y_iids.strides[0]) ))); - /* "View.MemoryView":844 - * if start < 0: - * start += shape - * if start < 0: # <<<<<<<<<<<<<< - * start = 0 - * elif start >= shape: + /* "cornac/models/efm/recom_efm.pyx":315 + * for idx in prange(Y.shape[0]): + * i = Y_iids[idx] + * j = Y_aids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] */ - } + __pyx_t_27 = __pyx_v_idx; + __pyx_v_j = (*((short *) ( /* dim=0 */ (__pyx_v_Y_aids.data + __pyx_t_27 * __pyx_v_Y_aids.strides[0]) ))); - /* "View.MemoryView":842 - * - * if have_start: - * if start < 0: # <<<<<<<<<<<<<< - * start += shape - * if start < 0: + /* "cornac/models/efm/recom_efm.pyx":316 + * i = Y_iids[idx] + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) */ - goto __pyx_L12; - } + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = 0; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = 0; + __pyx_t_28 = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_27 * __pyx_v_U2.strides[0]) ) + __pyx_t_26 * __pyx_v_U2.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 316, __pyx_L34_error) + __pyx_v_prediction = __pyx_t_28; - /* "View.MemoryView":846 - * if start < 0: - * start = 0 - * elif start >= shape: # <<<<<<<<<<<<<< - * if negative_step: - * start = shape - 1 + /* "cornac/models/efm/recom_efm.pyx":317 + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): */ - __pyx_t_2 = ((__pyx_v_start >= __pyx_v_shape) != 0); - if (__pyx_t_2) { + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_Y.data + __pyx_t_24 * __pyx_v_Y.strides[0]) ))); - /* "View.MemoryView":847 - * start = 0 - * elif start >= shape: - * if negative_step: # <<<<<<<<<<<<<< - * start = shape - 1 - * else: + /* "cornac/models/efm/recom_efm.pyx":318 + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] */ - __pyx_t_2 = (__pyx_v_negative_step != 0); - if (__pyx_t_2) { + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - /* "View.MemoryView":848 - * elif start >= shape: - * if negative_step: - * start = shape - 1 # <<<<<<<<<<<<<< - * else: - * start = shape + /* "cornac/models/efm/recom_efm.pyx":319 + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] */ - __pyx_v_start = (__pyx_v_shape - 1); + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":847 - * start = 0 - * elif start >= shape: - * if negative_step: # <<<<<<<<<<<<<< - * start = shape - 1 - * else: + /* "cornac/models/efm/recom_efm.pyx":320 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] # <<<<<<<<<<<<<< + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] */ - goto __pyx_L14; - } + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_24 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":850 - * start = shape - 1 - * else: - * start = shape # <<<<<<<<<<<<<< - * else: - * if negative_step: + /* "cornac/models/efm/recom_efm.pyx":321 + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] # <<<<<<<<<<<<<< + * U2_numerator[i, k] += lambda_y * score * V[j, k] + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] */ - /*else*/ { - __pyx_v_start = __pyx_v_shape; - } - __pyx_L14:; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_24 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":846 - * if start < 0: - * start = 0 - * elif start >= shape: # <<<<<<<<<<<<<< - * if negative_step: - * start = shape - 1 + /* "cornac/models/efm/recom_efm.pyx":322 + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] # <<<<<<<<<<<<<< + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] + * */ - } - __pyx_L12:; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )))); - /* "View.MemoryView":841 - * + /* "cornac/models/efm/recom_efm.pyx":323 + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] # <<<<<<<<<<<<<< * - * if have_start: # <<<<<<<<<<<<<< - * if start < 0: - * start += shape + * # update V */ - goto __pyx_L11; - } + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))); + } + goto __pyx_L39; + __pyx_L34_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L38; + __pyx_L38:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates20) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L39:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":852 - * start = shape - * else: - * if negative_step: # <<<<<<<<<<<<<< - * start = shape - 1 - * else: + /* "cornac/models/efm/recom_efm.pyx":326 + * + * # update V + * for i in prange(num_aspects): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] */ - /*else*/ { - __pyx_t_2 = (__pyx_v_negative_step != 0); - if (__pyx_t_2) { + __pyx_t_3 = __pyx_v_num_aspects; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + double __pyx_parallel_temp2 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_32 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_32 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_32; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* "View.MemoryView":853 - * else: - * if negative_step: - * start = shape - 1 # <<<<<<<<<<<<<< - * else: - * start = 0 + /* "cornac/models/efm/recom_efm.pyx":327 + * # update V + * for i in prange(num_aspects): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps */ - __pyx_v_start = (__pyx_v_shape - 1); + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":852 - * start = shape - * else: - * if negative_step: # <<<<<<<<<<<<<< - * start = shape - 1 - * else: + /* "cornac/models/efm/recom_efm.pyx":328 + * for i in prange(num_aspects): + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] # <<<<<<<<<<<<<< + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) */ - goto __pyx_L15; - } + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_v * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) ))))); - /* "View.MemoryView":855 - * start = shape - 1 - * else: - * start = 0 # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":329 + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps # <<<<<<<<<<<<<< + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) * - * if have_stop: */ - /*else*/ { - __pyx_v_start = 0; - } - __pyx_L15:; - } - __pyx_L11:; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_33 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += (((((*((short *) ( /* dim=0 */ (__pyx_v_X_aspect_counts.data + __pyx_t_27 * __pyx_v_X_aspect_counts.strides[0]) ))) + (*((short *) ( /* dim=0 */ (__pyx_v_Y_aspect_counts.data + __pyx_t_26 * __pyx_v_Y_aspect_counts.strides[0]) )))) * __pyx_v_lambda_v) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":857 - * start = 0 + /* "cornac/models/efm/recom_efm.pyx":330 + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) # <<<<<<<<<<<<<< * - * if have_stop: # <<<<<<<<<<<<<< - * if stop < 0: - * stop += shape + * # update U1, H1 */ - __pyx_t_2 = (__pyx_v_have_stop != 0); - if (__pyx_t_2) { + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_V_numerator.diminfo[1].strides)); + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_V_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 330, __pyx_L42_error) + } + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L47; + __pyx_L42_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L46; + __pyx_L46:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates21) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L47:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":858 + /* "cornac/models/efm/recom_efm.pyx":333 * - * if have_stop: - * if stop < 0: # <<<<<<<<<<<<<< - * stop += shape - * if stop < 0: - */ - __pyx_t_2 = ((__pyx_v_stop < 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":859 - * if have_stop: - * if stop < 0: - * stop += shape # <<<<<<<<<<<<<< - * if stop < 0: - * stop = 0 - */ - __pyx_v_stop = (__pyx_v_stop + __pyx_v_shape); - - /* "View.MemoryView":860 - * if stop < 0: - * stop += shape - * if stop < 0: # <<<<<<<<<<<<<< - * stop = 0 - * elif stop > shape: + * # update U1, H1 + * for i in prange(num_users): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] */ - __pyx_t_2 = ((__pyx_v_stop < 0) != 0); - if (__pyx_t_2) { + __pyx_t_32 = __pyx_v_num_users; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + double __pyx_parallel_temp2 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_3 = (__pyx_t_32 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_3 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_3; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* "View.MemoryView":861 - * stop += shape - * if stop < 0: - * stop = 0 # <<<<<<<<<<<<<< - * elif stop > shape: - * stop = shape + /* "cornac/models/efm/recom_efm.pyx":334 + * # update U1, H1 + * for i in prange(num_users): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps */ - __pyx_v_stop = 0; + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":860 - * if stop < 0: - * stop += shape - * if stop < 0: # <<<<<<<<<<<<<< - * stop = 0 - * elif stop > shape: + /* "cornac/models/efm/recom_efm.pyx":335 + * for i in prange(num_users): + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] # <<<<<<<<<<<<<< + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) */ - } + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_26 * __pyx_v_U1.strides[0]) ) + __pyx_t_27 * __pyx_v_U1.strides[1]) ))))); - /* "View.MemoryView":858 - * - * if have_stop: - * if stop < 0: # <<<<<<<<<<<<<< - * stop += shape - * if stop < 0: + /* "cornac/models/efm/recom_efm.pyx":336 + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps # <<<<<<<<<<<<<< + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): */ - goto __pyx_L17; - } + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_34 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (((((*((short *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_27 * __pyx_v_A_user_counts.strides[0]) ))) + (*((short *) ( /* dim=0 */ (__pyx_v_X_user_counts.data + __pyx_t_26 * __pyx_v_X_user_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":862 - * if stop < 0: - * stop = 0 - * elif stop > shape: # <<<<<<<<<<<<<< - * stop = shape - * else: + /* "cornac/models/efm/recom_efm.pyx":337 + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) # <<<<<<<<<<<<<< + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] */ - __pyx_t_2 = ((__pyx_v_stop > __pyx_v_shape) != 0); - if (__pyx_t_2) { + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_U1_numerator.diminfo[1].strides)); + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U1_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_35 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 337, __pyx_L50_error) + } + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_35)); + } - /* "View.MemoryView":863 - * stop = 0 - * elif stop > shape: - * stop = shape # <<<<<<<<<<<<<< - * else: - * if negative_step: + /* "cornac/models/efm/recom_efm.pyx":338 + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): # <<<<<<<<<<<<<< + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps */ - __pyx_v_stop = __pyx_v_shape; + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":862 - * if stop < 0: - * stop = 0 - * elif stop > shape: # <<<<<<<<<<<<<< - * stop = shape - * else: + /* "cornac/models/efm/recom_efm.pyx":339 + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] # <<<<<<<<<<<<<< + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) */ - } - __pyx_L17:; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_24 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_26 * __pyx_v_H1.strides[0]) ) + __pyx_t_27 * __pyx_v_H1.strides[1]) ))))); - /* "View.MemoryView":857 - * start = 0 + /* "cornac/models/efm/recom_efm.pyx":340 + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps # <<<<<<<<<<<<<< + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) * - * if have_stop: # <<<<<<<<<<<<<< - * if stop < 0: - * stop += shape */ - goto __pyx_L16; - } + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += ((((*((short *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_27 * __pyx_v_A_user_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_26 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":865 - * stop = shape - * else: - * if negative_step: # <<<<<<<<<<<<<< - * stop = -1 - * else: + /* "cornac/models/efm/recom_efm.pyx":341 + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) # <<<<<<<<<<<<<< + * + * # update U2, H2 */ - /*else*/ { - __pyx_t_2 = (__pyx_v_negative_step != 0); - if (__pyx_t_2) { + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H1_numerator.diminfo[1].strides)); + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_H1_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 341, __pyx_L50_error) + } + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_25 * __pyx_v_H1.strides[0]) ) + __pyx_t_26 * __pyx_v_H1.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L57; + __pyx_L50_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L56; + __pyx_L56:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates22) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L57:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":866 - * else: - * if negative_step: - * stop = -1 # <<<<<<<<<<<<<< - * else: - * stop = shape + /* "cornac/models/efm/recom_efm.pyx":344 + * + * # update U2, H2 + * for i in prange(num_items): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] */ - __pyx_v_stop = -1L; + __pyx_t_3 = __pyx_v_num_items; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + double __pyx_parallel_temp2 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_32 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_32 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_32; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* "View.MemoryView":865 - * stop = shape - * else: - * if negative_step: # <<<<<<<<<<<<<< - * stop = -1 - * else: + /* "cornac/models/efm/recom_efm.pyx":345 + * # update U2, H2 + * for i in prange(num_items): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps */ - goto __pyx_L19; - } + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":868 - * stop = -1 - * else: - * stop = shape # <<<<<<<<<<<<<< - * - * if not have_step: + /* "cornac/models/efm/recom_efm.pyx":346 + * for i in prange(num_items): + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] # <<<<<<<<<<<<<< + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) */ - /*else*/ { - __pyx_v_stop = __pyx_v_shape; - } - __pyx_L19:; - } - __pyx_L16:; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_27 * __pyx_v_U2.strides[0]) ) + __pyx_t_33 * __pyx_v_U2.strides[1]) ))))); - /* "View.MemoryView":870 - * stop = shape - * - * if not have_step: # <<<<<<<<<<<<<< - * step = 1 - * + /* "cornac/models/efm/recom_efm.pyx":347 + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps # <<<<<<<<<<<<<< + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): */ - __pyx_t_2 = ((!(__pyx_v_have_step != 0)) != 0); - if (__pyx_t_2) { + __pyx_t_33 = __pyx_v_i; + __pyx_t_27 = __pyx_v_i; + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (((((*((short *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_33 * __pyx_v_A_item_counts.strides[0]) ))) + (*((short *) ( /* dim=0 */ (__pyx_v_Y_item_counts.data + __pyx_t_27 * __pyx_v_Y_item_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_26 * __pyx_v_U2.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":871 - * - * if not have_step: - * step = 1 # <<<<<<<<<<<<<< - * - * + /* "cornac/models/efm/recom_efm.pyx":348 + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) # <<<<<<<<<<<<<< + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] */ - __pyx_v_step = 1; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U2_numerator.diminfo[1].strides)); + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_35 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 348, __pyx_L60_error) + } + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_35)); + } - /* "View.MemoryView":870 - * stop = shape - * - * if not have_step: # <<<<<<<<<<<<<< - * step = 1 - * + /* "cornac/models/efm/recom_efm.pyx":349 + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): # <<<<<<<<<<<<<< + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps */ - } + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":875 - * - * with cython.cdivision(True): - * new_shape = (stop - start) // step # <<<<<<<<<<<<<< - * - * if (stop - start) - step * new_shape: + /* "cornac/models/efm/recom_efm.pyx":350 + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] # <<<<<<<<<<<<<< + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) */ - __pyx_v_new_shape = ((__pyx_v_stop - __pyx_v_start) / __pyx_v_step); + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_26 * __pyx_v_H2.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_27 * __pyx_v_H2.strides[0]) ) + __pyx_t_33 * __pyx_v_H2.strides[1]) ))))); - /* "View.MemoryView":877 - * new_shape = (stop - start) // step - * - * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< - * new_shape += 1 + /* "cornac/models/efm/recom_efm.pyx":351 + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps # <<<<<<<<<<<<<< + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) * */ - __pyx_t_2 = (((__pyx_v_stop - __pyx_v_start) - (__pyx_v_step * __pyx_v_new_shape)) != 0); - if (__pyx_t_2) { + __pyx_t_33 = __pyx_v_i; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += ((((*((short *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_33 * __pyx_v_A_item_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_27 * __pyx_v_H2.strides[0]) ) + __pyx_t_26 * __pyx_v_H2.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":878 - * - * if (stop - start) - step * new_shape: - * new_shape += 1 # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":352 + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) # <<<<<<<<<<<<<< * - * if new_shape < 0: + * if self.verbose: */ - __pyx_v_new_shape = (__pyx_v_new_shape + 1); + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H2_numerator.diminfo[1].strides)); + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 352, __pyx_L60_error) + } + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_26 * __pyx_v_H2.strides[0]) ) + __pyx_t_27 * __pyx_v_H2.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L67; + __pyx_L60_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L66; + __pyx_L66:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates23) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L67:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } + goto __pyx_L69; + __pyx_L12_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L69; + __pyx_L69:; + #ifdef _OPENMP + Py_END_ALLOW_THREADS + #else +{ +#ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #endif /* _OPENMP */ + /* Clean up any temporaries */ + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + #ifndef _OPENMP +} +#endif /* _OPENMP */ + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif + } - /* "View.MemoryView":877 - * new_shape = (stop - start) // step - * - * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< - * new_shape += 1 + /* "cornac/models/efm/recom_efm.pyx":280 + * H2_denominator.fill(0) * + * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L9; + } + __pyx_L8_error: { + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L1_error; + } + __pyx_L9:; + } } - /* "View.MemoryView":880 - * new_shape += 1 + /* "cornac/models/efm/recom_efm.pyx":354 + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) * - * if new_shape < 0: # <<<<<<<<<<<<<< - * new_shape = 0 + * if self.verbose: # <<<<<<<<<<<<<< + * print('iter: %d, loss: %f' % (t, loss)) * */ - __pyx_t_2 = ((__pyx_v_new_shape < 0) != 0); - if (__pyx_t_2) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 354, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_37 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_37 < 0))) __PYX_ERR(0, 354, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_37) { - /* "View.MemoryView":881 - * - * if new_shape < 0: - * new_shape = 0 # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":355 * + * if self.verbose: + * print('iter: %d, loss: %f' % (t, loss)) # <<<<<<<<<<<<<< * + * if self.verbose: */ - __pyx_v_new_shape = 0; + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_23 = 0; + __pyx_t_38 = 127; + __Pyx_INCREF(__pyx_kp_u_iter); + __pyx_t_23 += 6; + __Pyx_GIVEREF(__pyx_kp_u_iter); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_iter); + __pyx_t_6 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_t), __pyx_n_u_d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_38 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_38) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_38; + __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u_loss); + __pyx_t_23 += 8; + __Pyx_GIVEREF(__pyx_kp_u_loss); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_loss); + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_Format(__pyx_t_6, __pyx_n_u_f); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_38 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_38) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_38; + __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_23, __pyx_t_38); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":880 - * new_shape += 1 + /* "cornac/models/efm/recom_efm.pyx":354 + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) * - * if new_shape < 0: # <<<<<<<<<<<<<< - * new_shape = 0 + * if self.verbose: # <<<<<<<<<<<<<< + * print('iter: %d, loss: %f' % (t, loss)) * */ } - /* "View.MemoryView":884 - * - * - * dst.strides[new_ndim] = stride * step # <<<<<<<<<<<<<< - * dst.shape[new_ndim] = new_shape - * dst.suboffsets[new_ndim] = suboffset - */ - (__pyx_v_dst->strides[__pyx_v_new_ndim]) = (__pyx_v_stride * __pyx_v_step); - - /* "View.MemoryView":885 - * - * dst.strides[new_ndim] = stride * step - * dst.shape[new_ndim] = new_shape # <<<<<<<<<<<<<< - * dst.suboffsets[new_ndim] = suboffset - * - */ - (__pyx_v_dst->shape[__pyx_v_new_ndim]) = __pyx_v_new_shape; - - /* "View.MemoryView":886 - * dst.strides[new_ndim] = stride * step - * dst.shape[new_ndim] = new_shape - * dst.suboffsets[new_ndim] = suboffset # <<<<<<<<<<<<<< - * + /* "cornac/models/efm/recom_efm.pyx":267 + * floating eps = 1e-9 * + * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< + * loss = 0. + * U1_numerator.fill(0) */ - (__pyx_v_dst->suboffsets[__pyx_v_new_ndim]) = __pyx_v_suboffset; } - __pyx_L3:; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":889 - * + /* "cornac/models/efm/recom_efm.pyx":357 + * print('iter: %d, loss: %f' % (t, loss)) * - * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< - * dst.data += start * stride - * else: - */ - __pyx_t_2 = (((__pyx_v_suboffset_dim[0]) < 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":890 + * if self.verbose: # <<<<<<<<<<<<<< + * print('Optimization finished!') * - * if suboffset_dim[0] < 0: - * dst.data += start * stride # <<<<<<<<<<<<<< - * else: - * dst.suboffsets[suboffset_dim[0]] += start * stride */ - __pyx_v_dst->data = (__pyx_v_dst->data + (__pyx_v_start * __pyx_v_stride)); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_37 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_37 < 0))) __PYX_ERR(0, 357, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_37) { - /* "View.MemoryView":889 + /* "cornac/models/efm/recom_efm.pyx":358 * + * if self.verbose: + * print('Optimization finished!') # <<<<<<<<<<<<<< * - * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< - * dst.data += start * stride - * else: + * def _build_matrices(self, data_set): */ - goto __pyx_L23; - } + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":892 - * dst.data += start * stride - * else: - * dst.suboffsets[suboffset_dim[0]] += start * stride # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":357 + * print('iter: %d, loss: %f' % (t, loss)) + * + * if self.verbose: # <<<<<<<<<<<<<< + * print('Optimization finished!') * - * if suboffset >= 0: */ - /*else*/ { - __pyx_t_3 = (__pyx_v_suboffset_dim[0]); - (__pyx_v_dst->suboffsets[__pyx_t_3]) = ((__pyx_v_dst->suboffsets[__pyx_t_3]) + (__pyx_v_start * __pyx_v_stride)); } - __pyx_L23:; - /* "View.MemoryView":894 - * dst.suboffsets[suboffset_dim[0]] += start * stride + /* "cornac/models/efm/recom_efm.pyx":228 * - * if suboffset >= 0: # <<<<<<<<<<<<<< - * if not is_slice: - * if new_ndim == 0: - */ - __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":895 * - * if suboffset >= 0: - * if not is_slice: # <<<<<<<<<<<<<< - * if new_ndim == 0: - * dst.data = ( dst.data)[0] + suboffset - */ - __pyx_t_2 = ((!(__pyx_v_is_slice != 0)) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":896 - * if suboffset >= 0: - * if not is_slice: - * if new_ndim == 0: # <<<<<<<<<<<<<< - * dst.data = ( dst.data)[0] + suboffset - * else: - */ - __pyx_t_2 = ((__pyx_v_new_ndim == 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":897 - * if not is_slice: - * if new_ndim == 0: - * dst.data = ( dst.data)[0] + suboffset # <<<<<<<<<<<<<< - * else: - * _err_dim(IndexError, "All dimensions preceding dimension %d " - */ - __pyx_v_dst->data = ((((char **)__pyx_v_dst->data)[0]) + __pyx_v_suboffset); - - /* "View.MemoryView":896 - * if suboffset >= 0: - * if not is_slice: - * if new_ndim == 0: # <<<<<<<<<<<<<< - * dst.data = ( dst.data)[0] + suboffset - * else: + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def _fit_efm(self, int num_threads, */ - goto __pyx_L26; - } - /* "View.MemoryView":899 - * dst.data = ( dst.data)[0] + suboffset - * else: - * _err_dim(IndexError, "All dimensions preceding dimension %d " # <<<<<<<<<<<<<< - * "must be indexed and not sliced", dim) - * else: - */ - /*else*/ { + /* 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_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_U1_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_U1_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_U2_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_U2_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_V_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_V_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_H1_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_H1_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_H2_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_H2_denominator); + __Pyx_XDECREF(__pyx_v_t); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "View.MemoryView":900 - * else: - * _err_dim(IndexError, "All dimensions preceding dimension %d " - * "must be indexed and not sliced", dim) # <<<<<<<<<<<<<< - * else: - * suboffset_dim[0] = new_ndim - */ - __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"All dimensions preceding dimension %d must be indexed and not sliced"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 899, __pyx_L1_error) +/* Python wrapper */ +static PyObject *__pyx_fuse_1_1__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_27_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_fuse_1_1__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_27_fit_efm = {"__pyx_fuse_1_1_fit_efm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1_1__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_27_fit_efm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm}; +static PyObject *__pyx_fuse_1_1__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_27_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + int __pyx_v_num_threads; + __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_V = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_H1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_H2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_fit_efm (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_num_threads,&__pyx_n_s_A,&__pyx_n_s_A_uids,&__pyx_n_s_A_iids,&__pyx_n_s_A_user_counts,&__pyx_n_s_A_item_counts,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_aids,&__pyx_n_s_X_user_counts,&__pyx_n_s_X_aspect_counts,&__pyx_n_s_Y,&__pyx_n_s_Y_iids,&__pyx_n_s_Y_aids,&__pyx_n_s_Y_item_counts,&__pyx_n_s_Y_aspect_counts,&__pyx_n_s_U1,&__pyx_n_s_U2,&__pyx_n_s_V,&__pyx_n_s_H1,&__pyx_n_s_H2,0}; + PyObject* values[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 22: values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + CYTHON_FALLTHROUGH; + case 21: values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + CYTHON_FALLTHROUGH; + case 20: values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + CYTHON_FALLTHROUGH; + case 19: values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + CYTHON_FALLTHROUGH; + case 18: values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + CYTHON_FALLTHROUGH; + case 17: values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + CYTHON_FALLTHROUGH; + case 16: values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; } - __pyx_L26:; - - /* "View.MemoryView":895 - * - * if suboffset >= 0: - * if not is_slice: # <<<<<<<<<<<<<< - * if new_ndim == 0: - * dst.data = ( dst.data)[0] + suboffset - */ - goto __pyx_L25; - } - - /* "View.MemoryView":902 - * "must be indexed and not sliced", dim) - * else: - * suboffset_dim[0] = new_ndim # <<<<<<<<<<<<<< - * - * return 0 - */ - /*else*/ { - (__pyx_v_suboffset_dim[0]) = __pyx_v_new_ndim; + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num_threads)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 1); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 2); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 3); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 4); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_user_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 5); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_item_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 6); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 7); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 8); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 9); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_user_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 10); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aspect_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 11); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 12); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 13); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 14); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 15: + if (likely((values[15] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_item_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 15); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 16: + if (likely((values[16] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_aspect_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 16); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 17: + if (likely((values[17] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 17); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 18: + if (likely((values[18] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 18); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 19: + if (likely((values[19] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_V)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 19); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 20: + if (likely((values[20] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_H1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 20); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 21: + if (likely((values[21] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_H2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 21); __PYX_ERR(0, 228, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_fit_efm") < 0)) __PYX_ERR(0, 228, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 22)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); } - __pyx_L25:; - - /* "View.MemoryView":894 - * dst.suboffsets[suboffset_dim[0]] += start * stride - * - * if suboffset >= 0: # <<<<<<<<<<<<<< - * if not is_slice: - * if new_ndim == 0: - */ + __pyx_v_self = values[0]; + __pyx_v_num_threads = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L3_error) + __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_uids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_iids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_user_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_item_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_user_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aspect_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_Y = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_iids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_item_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aspect_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_U1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_U2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_V = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_V.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_H1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[20], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_H2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) } - - /* "View.MemoryView":904 - * suboffset_dim[0] = new_ndim - * - * return 0 # <<<<<<<<<<<<<< - * - * - */ - __pyx_r = 0; - goto __pyx_L0; - - /* "View.MemoryView":807 - * - * @cname('__pyx_memoryview_slice_memviewslice') - * cdef int slice_memviewslice( # <<<<<<<<<<<<<< - * __Pyx_memviewslice *dst, - * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, - */ + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, __pyx_nargs); __PYX_ERR(0, 228, __pyx_L3_error) + __pyx_L3_error:; + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_V, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H2, 1); + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_26_fit_efm(__pyx_self, __pyx_v_self, __pyx_v_num_threads, __pyx_v_A, __pyx_v_A_uids, __pyx_v_A_iids, __pyx_v_A_user_counts, __pyx_v_A_item_counts, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_aids, __pyx_v_X_user_counts, __pyx_v_X_aspect_counts, __pyx_v_Y, __pyx_v_Y_iids, __pyx_v_Y_aids, __pyx_v_Y_item_counts, __pyx_v_Y_aspect_counts, __pyx_v_U1, __pyx_v_U2, __pyx_v_V, __pyx_v_H1, __pyx_v_H2); /* function exit code */ - __pyx_L1_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_AddTraceback("View.MemoryView.slice_memviewslice", __pyx_clineno, __pyx_lineno, __pyx_filename); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_r = -1; - __pyx_L0:; + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_V, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H2, 1); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "View.MemoryView":910 - * - * @cname('__pyx_pybuffer_index') - * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< - * Py_ssize_t dim) except NULL: - * cdef Py_ssize_t shape, stride, suboffset = -1 - */ - -static char *__pyx_pybuffer_index(Py_buffer *__pyx_v_view, char *__pyx_v_bufp, Py_ssize_t __pyx_v_index, Py_ssize_t __pyx_v_dim) { - Py_ssize_t __pyx_v_shape; - Py_ssize_t __pyx_v_stride; - Py_ssize_t __pyx_v_suboffset; - Py_ssize_t __pyx_v_itemsize; - char *__pyx_v_resultp; - char *__pyx_r; +static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_26_fit_efm(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_A_uids, __Pyx_memviewslice __pyx_v_A_iids, __Pyx_memviewslice __pyx_v_A_user_counts, __Pyx_memviewslice __pyx_v_A_item_counts, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_X_user_counts, __Pyx_memviewslice __pyx_v_X_aspect_counts, __Pyx_memviewslice __pyx_v_Y, __Pyx_memviewslice __pyx_v_Y_iids, __Pyx_memviewslice __pyx_v_Y_aids, __Pyx_memviewslice __pyx_v_Y_item_counts, __Pyx_memviewslice __pyx_v_Y_aspect_counts, __Pyx_memviewslice __pyx_v_U1, __Pyx_memviewslice __pyx_v_U2, __Pyx_memviewslice __pyx_v_V, __Pyx_memviewslice __pyx_v_H1, __Pyx_memviewslice __pyx_v_H2) { + long __pyx_v_num_users; + long __pyx_v_num_items; + long __pyx_v_num_aspects; + int __pyx_v_num_explicit_factors; + int __pyx_v_num_latent_factors; + double __pyx_v_lambda_x; + double __pyx_v_lambda_y; + double __pyx_v_lambda_u; + double __pyx_v_lambda_h; + double __pyx_v_lambda_v; + double __pyx_v_prediction; + double __pyx_v_score; + double __pyx_v_loss; + PyArrayObject *__pyx_v_U1_numerator = 0; + PyArrayObject *__pyx_v_U1_denominator = 0; + PyArrayObject *__pyx_v_U2_numerator = 0; + PyArrayObject *__pyx_v_U2_denominator = 0; + PyArrayObject *__pyx_v_V_numerator = 0; + PyArrayObject *__pyx_v_V_denominator = 0; + PyArrayObject *__pyx_v_H1_numerator = 0; + PyArrayObject *__pyx_v_H1_denominator = 0; + PyArrayObject *__pyx_v_H2_numerator = 0; + PyArrayObject *__pyx_v_H2_denominator = 0; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_v_k; + int __pyx_v_idx; + double __pyx_v_eps; + PyObject *__pyx_v_t = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_denominator; + __Pyx_Buffer __pyx_pybuffer_H1_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_numerator; + __Pyx_Buffer __pyx_pybuffer_H1_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_denominator; + __Pyx_Buffer __pyx_pybuffer_H2_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_numerator; + __Pyx_Buffer __pyx_pybuffer_H2_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_denominator; + __Pyx_Buffer __pyx_pybuffer_U1_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_numerator; + __Pyx_Buffer __pyx_pybuffer_U1_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_denominator; + __Pyx_Buffer __pyx_pybuffer_U2_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_numerator; + __Pyx_Buffer __pyx_pybuffer_U2_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_V_denominator; + __Pyx_Buffer __pyx_pybuffer_V_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_V_numerator; + __Pyx_Buffer __pyx_pybuffer_V_numerator; + PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + long __pyx_t_3; + int __pyx_t_4; + double __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyArrayObject *__pyx_t_9 = NULL; + PyArrayObject *__pyx_t_10 = NULL; + PyArrayObject *__pyx_t_11 = NULL; + PyArrayObject *__pyx_t_12 = NULL; + PyArrayObject *__pyx_t_13 = NULL; + PyArrayObject *__pyx_t_14 = NULL; + PyArrayObject *__pyx_t_15 = NULL; + PyArrayObject *__pyx_t_16 = NULL; + PyArrayObject *__pyx_t_17 = NULL; + PyArrayObject *__pyx_t_18 = NULL; + Py_ssize_t __pyx_t_19; + PyObject *(*__pyx_t_20)(PyObject *); + Py_ssize_t __pyx_t_21; + Py_ssize_t __pyx_t_22; + Py_ssize_t __pyx_t_23; + Py_ssize_t __pyx_t_24; + Py_ssize_t __pyx_t_25; + Py_ssize_t __pyx_t_26; + Py_ssize_t __pyx_t_27; + double __pyx_t_28; + int __pyx_t_29; + int __pyx_t_30; + long __pyx_t_31; + long __pyx_t_32; + Py_ssize_t __pyx_t_33; + Py_ssize_t __pyx_t_34; + __pyx_t_5numpy_float32_t __pyx_t_35; + __pyx_t_5numpy_float32_t __pyx_t_36; + int __pyx_t_37; + Py_UCS4 __pyx_t_38; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("pybuffer_index", 0); + __Pyx_RefNannySetupContext("__pyx_fuse_1_1_fit_efm", 0); + __pyx_pybuffer_U1_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_U1_numerator.refcount = 0; + __pyx_pybuffernd_U1_numerator.data = NULL; + __pyx_pybuffernd_U1_numerator.rcbuffer = &__pyx_pybuffer_U1_numerator; + __pyx_pybuffer_U1_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_U1_denominator.refcount = 0; + __pyx_pybuffernd_U1_denominator.data = NULL; + __pyx_pybuffernd_U1_denominator.rcbuffer = &__pyx_pybuffer_U1_denominator; + __pyx_pybuffer_U2_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_U2_numerator.refcount = 0; + __pyx_pybuffernd_U2_numerator.data = NULL; + __pyx_pybuffernd_U2_numerator.rcbuffer = &__pyx_pybuffer_U2_numerator; + __pyx_pybuffer_U2_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_U2_denominator.refcount = 0; + __pyx_pybuffernd_U2_denominator.data = NULL; + __pyx_pybuffernd_U2_denominator.rcbuffer = &__pyx_pybuffer_U2_denominator; + __pyx_pybuffer_V_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_V_numerator.refcount = 0; + __pyx_pybuffernd_V_numerator.data = NULL; + __pyx_pybuffernd_V_numerator.rcbuffer = &__pyx_pybuffer_V_numerator; + __pyx_pybuffer_V_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_V_denominator.refcount = 0; + __pyx_pybuffernd_V_denominator.data = NULL; + __pyx_pybuffernd_V_denominator.rcbuffer = &__pyx_pybuffer_V_denominator; + __pyx_pybuffer_H1_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_H1_numerator.refcount = 0; + __pyx_pybuffernd_H1_numerator.data = NULL; + __pyx_pybuffernd_H1_numerator.rcbuffer = &__pyx_pybuffer_H1_numerator; + __pyx_pybuffer_H1_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_H1_denominator.refcount = 0; + __pyx_pybuffernd_H1_denominator.data = NULL; + __pyx_pybuffernd_H1_denominator.rcbuffer = &__pyx_pybuffer_H1_denominator; + __pyx_pybuffer_H2_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_H2_numerator.refcount = 0; + __pyx_pybuffernd_H2_numerator.data = NULL; + __pyx_pybuffernd_H2_numerator.rcbuffer = &__pyx_pybuffer_H2_numerator; + __pyx_pybuffer_H2_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_H2_denominator.refcount = 0; + __pyx_pybuffernd_H2_denominator.data = NULL; + __pyx_pybuffernd_H2_denominator.rcbuffer = &__pyx_pybuffer_H2_denominator; - /* "View.MemoryView":912 - * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, - * Py_ssize_t dim) except NULL: - * cdef Py_ssize_t shape, stride, suboffset = -1 # <<<<<<<<<<<<<< - * cdef Py_ssize_t itemsize = view.itemsize - * cdef char *resultp + /* "cornac/models/efm/recom_efm.pyx":238 + * """ + * cdef: + * long num_users = self.train_set.num_users # <<<<<<<<<<<<<< + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects */ - __pyx_v_suboffset = -1L; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_num_users = __pyx_t_3; - /* "View.MemoryView":913 - * Py_ssize_t dim) except NULL: - * cdef Py_ssize_t shape, stride, suboffset = -1 - * cdef Py_ssize_t itemsize = view.itemsize # <<<<<<<<<<<<<< - * cdef char *resultp - * + /* "cornac/models/efm/recom_efm.pyx":239 + * cdef: + * long num_users = self.train_set.num_users + * long num_items = self.train_set.num_items # <<<<<<<<<<<<<< + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors */ - __pyx_t_1 = __pyx_v_view->itemsize; - __pyx_v_itemsize = __pyx_t_1; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_items = __pyx_t_3; - /* "View.MemoryView":916 - * cdef char *resultp - * - * if view.ndim == 0: # <<<<<<<<<<<<<< - * shape = view.len / itemsize - * stride = itemsize + /* "cornac/models/efm/recom_efm.pyx":240 + * long num_users = self.train_set.num_users + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< + * int num_explicit_factors = self.num_explicit_factors + * int num_latent_factors = self.num_latent_factors */ - __pyx_t_2 = ((__pyx_v_view->ndim == 0) != 0); - if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_aspects = __pyx_t_3; - /* "View.MemoryView":917 + /* "cornac/models/efm/recom_efm.pyx":241 + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors # <<<<<<<<<<<<<< + * int num_latent_factors = self.num_latent_factors * - * if view.ndim == 0: - * shape = view.len / itemsize # <<<<<<<<<<<<<< - * stride = itemsize - * else: */ - if (unlikely(__pyx_v_itemsize == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); - __PYX_ERR(2, 917, __pyx_L1_error) - } - else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_view->len))) { - PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); - __PYX_ERR(2, 917, __pyx_L1_error) - } - __pyx_v_shape = __Pyx_div_Py_ssize_t(__pyx_v_view->len, __pyx_v_itemsize); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_explicit_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_explicit_factors = __pyx_t_4; - /* "View.MemoryView":918 - * if view.ndim == 0: - * shape = view.len / itemsize - * stride = itemsize # <<<<<<<<<<<<<< - * else: - * shape = view.shape[dim] + /* "cornac/models/efm/recom_efm.pyx":242 + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors + * int num_latent_factors = self.num_latent_factors # <<<<<<<<<<<<<< + * + * floating lambda_x = self.lambda_x */ - __pyx_v_stride = __pyx_v_itemsize; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_latent_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 242, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_latent_factors = __pyx_t_4; - /* "View.MemoryView":916 - * cdef char *resultp + /* "cornac/models/efm/recom_efm.pyx":244 + * int num_latent_factors = self.num_latent_factors * - * if view.ndim == 0: # <<<<<<<<<<<<<< - * shape = view.len / itemsize - * stride = itemsize + * floating lambda_x = self.lambda_x # <<<<<<<<<<<<<< + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u */ - goto __pyx_L3; - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_x = __pyx_t_5; - /* "View.MemoryView":920 - * stride = itemsize - * else: - * shape = view.shape[dim] # <<<<<<<<<<<<<< - * stride = view.strides[dim] - * if view.suboffsets != NULL: + /* "cornac/models/efm/recom_efm.pyx":245 + * + * floating lambda_x = self.lambda_x + * floating lambda_y = self.lambda_y # <<<<<<<<<<<<<< + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h */ - /*else*/ { - __pyx_v_shape = (__pyx_v_view->shape[__pyx_v_dim]); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 245, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_y = __pyx_t_5; - /* "View.MemoryView":921 - * else: - * shape = view.shape[dim] - * stride = view.strides[dim] # <<<<<<<<<<<<<< - * if view.suboffsets != NULL: - * suboffset = view.suboffsets[dim] + /* "cornac/models/efm/recom_efm.pyx":246 + * floating lambda_x = self.lambda_x + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u # <<<<<<<<<<<<<< + * floating lambda_h = self.lambda_h + * floating lambda_v = self.lambda_v */ - __pyx_v_stride = (__pyx_v_view->strides[__pyx_v_dim]); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_u); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_u = __pyx_t_5; - /* "View.MemoryView":922 - * shape = view.shape[dim] - * stride = view.strides[dim] - * if view.suboffsets != NULL: # <<<<<<<<<<<<<< - * suboffset = view.suboffsets[dim] + /* "cornac/models/efm/recom_efm.pyx":247 + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h # <<<<<<<<<<<<<< + * floating lambda_v = self.lambda_v * */ - __pyx_t_2 = ((__pyx_v_view->suboffsets != NULL) != 0); - if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_h); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_h = __pyx_t_5; - /* "View.MemoryView":923 - * stride = view.strides[dim] - * if view.suboffsets != NULL: - * suboffset = view.suboffsets[dim] # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":248 + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h + * floating lambda_v = self.lambda_v # <<<<<<<<<<<<<< * - * if index < 0: + * floating prediction, score, loss */ - __pyx_v_suboffset = (__pyx_v_view->suboffsets[__pyx_v_dim]); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_v); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 248, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 248, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_v = __pyx_t_5; - /* "View.MemoryView":922 - * shape = view.shape[dim] - * stride = view.strides[dim] - * if view.suboffsets != NULL: # <<<<<<<<<<<<<< - * suboffset = view.suboffsets[dim] + /* "cornac/models/efm/recom_efm.pyx":252 + * floating prediction, score, loss * + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 252, __pyx_L1_error) + __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 252, __pyx_L1_error) + } else {__pyx_pybuffernd_U1_numerator.diminfo[0].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_numerator.diminfo[0].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_numerator.diminfo[1].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_numerator.diminfo[1].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[1]; } } - __pyx_L3:; + __pyx_t_9 = 0; + __pyx_v_U1_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":925 - * suboffset = view.suboffsets[dim] + /* "cornac/models/efm/recom_efm.pyx":253 * - * if index < 0: # <<<<<<<<<<<<<< - * index += view.shape[dim] - * if index < 0: + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) */ - __pyx_t_2 = ((__pyx_v_index < 0) != 0); - if (__pyx_t_2) { + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 253, __pyx_L1_error) + __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 253, __pyx_L1_error) + } else {__pyx_pybuffernd_U1_denominator.diminfo[0].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_denominator.diminfo[0].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_denominator.diminfo[1].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_denominator.diminfo[1].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_10 = 0; + __pyx_v_U1_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":926 - * - * if index < 0: - * index += view.shape[dim] # <<<<<<<<<<<<<< - * if index < 0: - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + /* "cornac/models/efm/recom_efm.pyx":254 + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) */ - __pyx_v_index = (__pyx_v_index + (__pyx_v_view->shape[__pyx_v_dim])); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 254, __pyx_L1_error) + __pyx_t_11 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 254, __pyx_L1_error) + } else {__pyx_pybuffernd_U2_numerator.diminfo[0].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_numerator.diminfo[0].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_numerator.diminfo[1].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_numerator.diminfo[1].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_11 = 0; + __pyx_v_U2_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":927 - * if index < 0: - * index += view.shape[dim] - * if index < 0: # <<<<<<<<<<<<<< - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) - * + /* "cornac/models/efm/recom_efm.pyx":255 + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) */ - __pyx_t_2 = ((__pyx_v_index < 0) != 0); - if (unlikely(__pyx_t_2)) { + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 255, __pyx_L1_error) + __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 255, __pyx_L1_error) + } else {__pyx_pybuffernd_U2_denominator.diminfo[0].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_denominator.diminfo[0].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_denominator.diminfo[1].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_denominator.diminfo[1].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_12 = 0; + __pyx_v_U2_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":928 - * index += view.shape[dim] - * if index < 0: - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< - * - * if index >= shape: + /* "cornac/models/efm/recom_efm.pyx":256 + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) */ - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 928, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 928, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 928, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(2, 928, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 256, __pyx_L1_error) + __pyx_t_13 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_V_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 256, __pyx_L1_error) + } else {__pyx_pybuffernd_V_numerator.diminfo[0].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_numerator.diminfo[0].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_numerator.diminfo[1].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_numerator.diminfo[1].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_13 = 0; + __pyx_v_V_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":927 - * if index < 0: - * index += view.shape[dim] - * if index < 0: # <<<<<<<<<<<<<< - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) - * + /* "cornac/models/efm/recom_efm.pyx":257 + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 257, __pyx_L1_error) + __pyx_t_14 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_V_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 257, __pyx_L1_error) + } else {__pyx_pybuffernd_V_denominator.diminfo[0].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_denominator.diminfo[0].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_denominator.diminfo[1].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_denominator.diminfo[1].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_14 = 0; + __pyx_v_V_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "cornac/models/efm/recom_efm.pyx":258 + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 258, __pyx_L1_error) + __pyx_t_15 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 258, __pyx_L1_error) + } else {__pyx_pybuffernd_H1_numerator.diminfo[0].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_numerator.diminfo[0].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_numerator.diminfo[1].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_numerator.diminfo[1].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_15 = 0; + __pyx_v_H1_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; + + /* "cornac/models/efm/recom_efm.pyx":259 + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 259, __pyx_L1_error) + __pyx_t_16 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 259, __pyx_L1_error) + } else {__pyx_pybuffernd_H1_denominator.diminfo[0].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_denominator.diminfo[0].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_denominator.diminfo[1].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_denominator.diminfo[1].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[1]; } + } + __pyx_t_16 = 0; + __pyx_v_H1_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":925 - * suboffset = view.suboffsets[dim] - * - * if index < 0: # <<<<<<<<<<<<<< - * index += view.shape[dim] - * if index < 0: + /* "cornac/models/efm/recom_efm.pyx":260 + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * int i, j, k, idx */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 260, __pyx_L1_error) + __pyx_t_17 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 260, __pyx_L1_error) + } else {__pyx_pybuffernd_H2_numerator.diminfo[0].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_numerator.diminfo[0].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_numerator.diminfo[1].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_numerator.diminfo[1].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[1]; + } } + __pyx_t_17 = 0; + __pyx_v_H2_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":930 - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) - * - * if index >= shape: # <<<<<<<<<<<<<< - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) - * + /* "cornac/models/efm/recom_efm.pyx":261 + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * int i, j, k, idx + * long n_ratings */ - __pyx_t_2 = ((__pyx_v_index >= __pyx_v_shape) != 0); - if (unlikely(__pyx_t_2)) { + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 261, __pyx_L1_error) + __pyx_t_18 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 261, __pyx_L1_error) + } else {__pyx_pybuffernd_H2_denominator.diminfo[0].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_denominator.diminfo[0].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_denominator.diminfo[1].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_denominator.diminfo[1].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_18 = 0; + __pyx_v_H2_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":931 + /* "cornac/models/efm/recom_efm.pyx":265 + * long n_ratings * - * if index >= shape: - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< + * floating eps = 1e-9 # <<<<<<<<<<<<<< * - * resultp = bufp + index * stride + * for t in range(1, self.max_iter + 1): */ - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 931, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 931, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 931, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(2, 931, __pyx_L1_error) + __pyx_v_eps = 1e-9; - /* "View.MemoryView":930 - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) - * - * if index >= shape: # <<<<<<<<<<<<<< - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + /* "cornac/models/efm/recom_efm.pyx":267 + * floating eps = 1e-9 * + * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< + * loss = 0. + * U1_numerator.fill(0) */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_max_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_int_1); + __Pyx_GIVEREF(__pyx_int_1); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { + __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_19 = 0; + __pyx_t_20 = NULL; + } else { + __pyx_t_19 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_20 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 267, __pyx_L1_error) } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + for (;;) { + if (likely(!__pyx_t_20)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 267, __pyx_L1_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } else { + if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 267, __pyx_L1_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } + } else { + __pyx_t_2 = __pyx_t_20(__pyx_t_1); + if (unlikely(!__pyx_t_2)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 267, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_2); + } + __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2); + __pyx_t_2 = 0; - /* "View.MemoryView":933 - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + /* "cornac/models/efm/recom_efm.pyx":268 * - * resultp = bufp + index * stride # <<<<<<<<<<<<<< - * if suboffset >= 0: - * resultp = ( resultp)[0] + suboffset + * for t in range(1, self.max_iter + 1): + * loss = 0. # <<<<<<<<<<<<<< + * U1_numerator.fill(0) + * U1_denominator.fill(0) */ - __pyx_v_resultp = (__pyx_v_bufp + (__pyx_v_index * __pyx_v_stride)); + __pyx_v_loss = 0.; - /* "View.MemoryView":934 - * - * resultp = bufp + index * stride - * if suboffset >= 0: # <<<<<<<<<<<<<< - * resultp = ( resultp)[0] + suboffset - * + /* "cornac/models/efm/recom_efm.pyx":269 + * for t in range(1, self.max_iter + 1): + * loss = 0. + * U1_numerator.fill(0) # <<<<<<<<<<<<<< + * U1_denominator.fill(0) + * U2_numerator.fill(0) */ - __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); - if (__pyx_t_2) { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":935 - * resultp = bufp + index * stride - * if suboffset >= 0: - * resultp = ( resultp)[0] + suboffset # <<<<<<<<<<<<<< - * - * return resultp + /* "cornac/models/efm/recom_efm.pyx":270 + * loss = 0. + * U1_numerator.fill(0) + * U1_denominator.fill(0) # <<<<<<<<<<<<<< + * U2_numerator.fill(0) + * U2_denominator.fill(0) */ - __pyx_v_resultp = ((((char **)__pyx_v_resultp)[0]) + __pyx_v_suboffset); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":934 - * - * resultp = bufp + index * stride - * if suboffset >= 0: # <<<<<<<<<<<<<< - * resultp = ( resultp)[0] + suboffset - * + /* "cornac/models/efm/recom_efm.pyx":271 + * U1_numerator.fill(0) + * U1_denominator.fill(0) + * U2_numerator.fill(0) # <<<<<<<<<<<<<< + * U2_denominator.fill(0) + * V_numerator.fill(0) */ - } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":937 - * resultp = ( resultp)[0] + suboffset - * - * return resultp # <<<<<<<<<<<<<< - * - * + /* "cornac/models/efm/recom_efm.pyx":272 + * U1_denominator.fill(0) + * U2_numerator.fill(0) + * U2_denominator.fill(0) # <<<<<<<<<<<<<< + * V_numerator.fill(0) + * V_denominator.fill(0) */ - __pyx_r = __pyx_v_resultp; - goto __pyx_L0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":910 - * - * @cname('__pyx_pybuffer_index') - * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< - * Py_ssize_t dim) except NULL: - * cdef Py_ssize_t shape, stride, suboffset = -1 + /* "cornac/models/efm/recom_efm.pyx":273 + * U2_numerator.fill(0) + * U2_denominator.fill(0) + * V_numerator.fill(0) # <<<<<<<<<<<<<< + * V_denominator.fill(0) + * H1_numerator.fill(0) */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("View.MemoryView.pybuffer_index", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":274 + * U2_denominator.fill(0) + * V_numerator.fill(0) + * V_denominator.fill(0) # <<<<<<<<<<<<<< + * H1_numerator.fill(0) + * H1_denominator.fill(0) + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 274, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; -/* "View.MemoryView":943 - * - * @cname('__pyx_memslice_transpose') - * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< - * cdef int ndim = memslice.memview.view.ndim - * + /* "cornac/models/efm/recom_efm.pyx":275 + * V_numerator.fill(0) + * V_denominator.fill(0) + * H1_numerator.fill(0) # <<<<<<<<<<<<<< + * H1_denominator.fill(0) + * H2_numerator.fill(0) */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; -static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) { - int __pyx_v_ndim; - Py_ssize_t *__pyx_v_shape; - Py_ssize_t *__pyx_v_strides; - int __pyx_v_i; - int __pyx_v_j; - int __pyx_r; - int __pyx_t_1; - Py_ssize_t *__pyx_t_2; - long __pyx_t_3; - long __pyx_t_4; - Py_ssize_t __pyx_t_5; - Py_ssize_t __pyx_t_6; - int __pyx_t_7; - int __pyx_t_8; - int __pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; + /* "cornac/models/efm/recom_efm.pyx":276 + * V_denominator.fill(0) + * H1_numerator.fill(0) + * H1_denominator.fill(0) # <<<<<<<<<<<<<< + * H2_numerator.fill(0) + * H2_denominator.fill(0) + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":944 - * @cname('__pyx_memslice_transpose') - * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: - * cdef int ndim = memslice.memview.view.ndim # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":277 + * H1_numerator.fill(0) + * H1_denominator.fill(0) + * H2_numerator.fill(0) # <<<<<<<<<<<<<< + * H2_denominator.fill(0) * - * cdef Py_ssize_t *shape = memslice.shape */ - __pyx_t_1 = __pyx_v_memslice->memview->view.ndim; - __pyx_v_ndim = __pyx_t_1; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 277, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":946 - * cdef int ndim = memslice.memview.view.ndim - * - * cdef Py_ssize_t *shape = memslice.shape # <<<<<<<<<<<<<< - * cdef Py_ssize_t *strides = memslice.strides + /* "cornac/models/efm/recom_efm.pyx":278 + * H1_denominator.fill(0) + * H2_numerator.fill(0) + * H2_denominator.fill(0) # <<<<<<<<<<<<<< * + * with nogil, parallel(num_threads=num_threads): */ - __pyx_t_2 = __pyx_v_memslice->shape; - __pyx_v_shape = __pyx_t_2; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":947 - * - * cdef Py_ssize_t *shape = memslice.shape - * cdef Py_ssize_t *strides = memslice.strides # <<<<<<<<<<<<<< - * + /* "cornac/models/efm/recom_efm.pyx":280 + * H2_denominator.fill(0) * + * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): */ - __pyx_t_2 = __pyx_v_memslice->strides; - __pyx_v_strides = __pyx_t_2; + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) private(__pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_3, __pyx_t_30, __pyx_t_31, __pyx_t_32, __pyx_t_33, __pyx_t_34, __pyx_t_35, __pyx_t_36, __pyx_t_4, __pyx_t_5) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_num_threads) + #endif /* _OPENMP */ + { + #ifdef _OPENMP + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + Py_BEGIN_ALLOW_THREADS + #endif /* _OPENMP */ - /* "View.MemoryView":951 - * - * cdef int i, j - * for i in range(ndim / 2): # <<<<<<<<<<<<<< - * j = ndim - 1 - i - * strides[i], strides[j] = strides[j], strides[i] + /* "cornac/models/efm/recom_efm.pyx":282 + * with nogil, parallel(num_threads=num_threads): + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): # <<<<<<<<<<<<<< + * i = A_uids[idx] + * j = A_iids[idx] */ - __pyx_t_3 = __Pyx_div_long(__pyx_v_ndim, 2); - __pyx_t_4 = __pyx_t_3; - for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) { - __pyx_v_i = __pyx_t_1; + if (unlikely(!__pyx_v_A.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("A"); __PYX_ERR(0, 282, __pyx_L12_error) } + __pyx_t_21 = (__pyx_v_A.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + double __pyx_parallel_temp4 = ((double)__PYX_NAN()); + double __pyx_parallel_temp5 = ((double)__PYX_NAN()); + double __pyx_parallel_temp6 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_23 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((double)__PYX_NAN()); + __pyx_v_score = ((double)__PYX_NAN()); - /* "View.MemoryView":952 - * cdef int i, j - * for i in range(ndim / 2): - * j = ndim - 1 - i # <<<<<<<<<<<<<< - * strides[i], strides[j] = strides[j], strides[i] - * shape[i], shape[j] = shape[j], shape[i] + /* "cornac/models/efm/recom_efm.pyx":283 + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): + * i = A_uids[idx] # <<<<<<<<<<<<<< + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ */ - __pyx_v_j = ((__pyx_v_ndim - 1) - __pyx_v_i); + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i = (*((int *) ( /* dim=0 */ (__pyx_v_A_uids.data + __pyx_t_24 * __pyx_v_A_uids.strides[0]) ))); - /* "View.MemoryView":953 - * for i in range(ndim / 2): - * j = ndim - 1 - i - * strides[i], strides[j] = strides[j], strides[i] # <<<<<<<<<<<<<< - * shape[i], shape[j] = shape[j], shape[i] - * + /* "cornac/models/efm/recom_efm.pyx":284 + * for idx in prange(A.shape[0]): + * i = A_uids[idx] + * j = A_iids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) */ - __pyx_t_5 = (__pyx_v_strides[__pyx_v_j]); - __pyx_t_6 = (__pyx_v_strides[__pyx_v_i]); - (__pyx_v_strides[__pyx_v_i]) = __pyx_t_5; - (__pyx_v_strides[__pyx_v_j]) = __pyx_t_6; + __pyx_t_24 = __pyx_v_idx; + __pyx_v_j = (*((int *) ( /* dim=0 */ (__pyx_v_A_iids.data + __pyx_t_24 * __pyx_v_A_iids.strides[0]) ))); - /* "View.MemoryView":954 - * j = ndim - 1 - i - * strides[i], strides[j] = strides[j], strides[i] - * shape[i], shape[j] = shape[j], shape[i] # <<<<<<<<<<<<<< - * - * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: + /* "cornac/models/efm/recom_efm.pyx":285 + * i = A_uids[idx] + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ # <<<<<<<<<<<<<< + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] */ - __pyx_t_6 = (__pyx_v_shape[__pyx_v_j]); - __pyx_t_5 = (__pyx_v_shape[__pyx_v_i]); - (__pyx_v_shape[__pyx_v_i]) = __pyx_t_6; - (__pyx_v_shape[__pyx_v_j]) = __pyx_t_5; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = 0; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = 0; + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 285, __pyx_L16_error) - /* "View.MemoryView":956 - * shape[i], shape[j] = shape[j], shape[i] - * - * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< - * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") - * + /* "cornac/models/efm/recom_efm.pyx":286 + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) # <<<<<<<<<<<<<< + * score = A[idx] + * loss += (prediction - score) * (prediction - score) */ - __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_i]) >= 0) != 0); - if (!__pyx_t_8) { - } else { - __pyx_t_7 = __pyx_t_8; - goto __pyx_L6_bool_binop_done; - } - __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_j]) >= 0) != 0); - __pyx_t_7 = __pyx_t_8; - __pyx_L6_bool_binop_done:; - if (__pyx_t_7) { + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = 0; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = 0; + __pyx_t_28 = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_latent_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_27 * __pyx_v_H1.strides[0]) ) + __pyx_t_26 * __pyx_v_H1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_24 * __pyx_v_H2.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 286, __pyx_L16_error) + __pyx_v_prediction = (__pyx_t_5 + __pyx_t_28); - /* "View.MemoryView":957 - * - * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: - * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") # <<<<<<<<<<<<<< - * - * return 1 + /* "cornac/models/efm/recom_efm.pyx":287 + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): */ - __pyx_t_9 = __pyx_memoryview_err(__pyx_builtin_ValueError, ((char *)"Cannot transpose memoryview with indirect dimensions")); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 957, __pyx_L1_error) + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ))); - /* "View.MemoryView":956 - * shape[i], shape[j] = shape[j], shape[i] - * - * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< - * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") - * + /* "cornac/models/efm/recom_efm.pyx":288 + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] */ - } - } + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - /* "View.MemoryView":959 - * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") - * - * return 1 # <<<<<<<<<<<<<< - * - * + /* "cornac/models/efm/recom_efm.pyx":289 + * score = A[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] */ - __pyx_r = 1; - goto __pyx_L0; + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":943 - * - * @cname('__pyx_memslice_transpose') - * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< - * cdef int ndim = memslice.memview.view.ndim - * + /* "cornac/models/efm/recom_efm.pyx":290 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] # <<<<<<<<<<<<<< + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] */ + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_24 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))); - /* function exit code */ - __pyx_L1_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_AddTraceback("View.MemoryView.transpose_memslice", __pyx_clineno, __pyx_lineno, __pyx_filename); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_r = 0; - __pyx_L0:; - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":291 + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] # <<<<<<<<<<<<<< + * U2_numerator[j, k] += score * U1[i, k] + * U2_denominator[j, k] += prediction * U1[i, k] + */ + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_24 * __pyx_v_U2.strides[1]) )))); -/* "View.MemoryView":976 - * cdef int (*to_dtype_func)(char *, object) except 0 - * - * def __dealloc__(self): # <<<<<<<<<<<<<< - * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + /* "cornac/models/efm/recom_efm.pyx":292 + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] # <<<<<<<<<<<<<< + * U2_denominator[j, k] += prediction * U1[i, k] * */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))); -/* Python wrapper */ -static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); - __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__dealloc__", 0); - - /* "View.MemoryView":977 - * - * def __dealloc__(self): - * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":293 + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] + * U2_denominator[j, k] += prediction * U1[i, k] # <<<<<<<<<<<<<< * - * cdef convert_item_to_object(self, char *itemp): + * for k in range(num_latent_factors): */ - __PYX_XDEC_MEMVIEW((&__pyx_v_self->from_slice), 1); + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )))); + } - /* "View.MemoryView":976 - * cdef int (*to_dtype_func)(char *, object) except 0 - * - * def __dealloc__(self): # <<<<<<<<<<<<<< - * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + /* "cornac/models/efm/recom_efm.pyx":295 + * U2_denominator[j, k] += prediction * U1[i, k] * + * for k in range(num_latent_factors): # <<<<<<<<<<<<<< + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] */ + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "View.MemoryView":979 - * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + /* "cornac/models/efm/recom_efm.pyx":296 * - * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< - * if self.to_object_func != NULL: - * return self.to_object_func(itemp) + * for k in range(num_latent_factors): + * H1_numerator[i, k] += score * H2[j, k] # <<<<<<<<<<<<<< + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] */ + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_24 * __pyx_v_H2.strides[0]) ) + __pyx_t_25 * __pyx_v_H2.strides[1]) )))); -static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("convert_item_to_object", 0); - - /* "View.MemoryView":980 - * - * cdef convert_item_to_object(self, char *itemp): - * if self.to_object_func != NULL: # <<<<<<<<<<<<<< - * return self.to_object_func(itemp) - * else: + /* "cornac/models/efm/recom_efm.pyx":297 + * for k in range(num_latent_factors): + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] # <<<<<<<<<<<<<< + * H2_numerator[j, k] += score * H1[i, k] + * H2_denominator[j, k] += prediction * H1[i, k] */ - __pyx_t_1 = ((__pyx_v_self->to_object_func != NULL) != 0); - if (__pyx_t_1) { + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_24 * __pyx_v_H2.strides[1]) )))); - /* "View.MemoryView":981 - * cdef convert_item_to_object(self, char *itemp): - * if self.to_object_func != NULL: - * return self.to_object_func(itemp) # <<<<<<<<<<<<<< - * else: - * return memoryview.convert_item_to_object(self, itemp) + /* "cornac/models/efm/recom_efm.pyx":298 + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] # <<<<<<<<<<<<<< + * H2_denominator[j, k] += prediction * H1[i, k] + * */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __pyx_v_self->to_object_func(__pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 981, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_24 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))); - /* "View.MemoryView":980 + /* "cornac/models/efm/recom_efm.pyx":299 + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] + * H2_denominator[j, k] += prediction * H1[i, k] # <<<<<<<<<<<<<< * - * cdef convert_item_to_object(self, char *itemp): - * if self.to_object_func != NULL: # <<<<<<<<<<<<<< - * return self.to_object_func(itemp) - * else: + * for idx in prange(X.shape[0]): */ - } + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_25 * __pyx_v_H1.strides[0]) ) + __pyx_t_24 * __pyx_v_H1.strides[1]) )))); + } + goto __pyx_L23; + __pyx_L16_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L22; + __pyx_L22:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates24) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L23:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":983 - * return self.to_object_func(itemp) - * else: - * return memoryview.convert_item_to_object(self, itemp) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":301 + * H2_denominator[j, k] += prediction * H1[i, k] * - * cdef assign_item_from_object(self, char *itemp, object value): + * for idx in prange(X.shape[0]): # <<<<<<<<<<<<<< + * i = X_uids[idx] + * j = X_aids[idx] */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __pyx_memoryview_convert_item_to_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 983, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - } + if (unlikely(!__pyx_v_X.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("X"); __PYX_ERR(0, 301, __pyx_L12_error) } + __pyx_t_23 = (__pyx_v_X.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + double __pyx_parallel_temp4 = ((double)__PYX_NAN()); + double __pyx_parallel_temp5 = ((double)__PYX_NAN()); + double __pyx_parallel_temp6 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_21 = (__pyx_t_23 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_21 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((double)__PYX_NAN()); + __pyx_v_score = ((double)__PYX_NAN()); - /* "View.MemoryView":979 - * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + /* "cornac/models/efm/recom_efm.pyx":302 * - * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< - * if self.to_object_func != NULL: - * return self.to_object_func(itemp) + * for idx in prange(X.shape[0]): + * i = X_uids[idx] # <<<<<<<<<<<<<< + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i = (*((int *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_24 * __pyx_v_X_uids.strides[0]) ))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView._memoryviewslice.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":303 + * for idx in prange(X.shape[0]): + * i = X_uids[idx] + * j = X_aids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_j = (*((int *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_24 * __pyx_v_X_aids.strides[0]) ))); -/* "View.MemoryView":985 - * return memoryview.convert_item_to_object(self, itemp) - * - * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< - * if self.to_dtype_func != NULL: - * self.to_dtype_func(itemp, value) + /* "cornac/models/efm/recom_efm.pyx":304 + * i = X_uids[idx] + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< + * score = X[idx] + * loss += (prediction - score) * (prediction - score) */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = 0; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = 0; + __pyx_t_28 = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 304, __pyx_L26_error) + __pyx_v_prediction = __pyx_t_28; -static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("assign_item_from_object", 0); + /* "cornac/models/efm/recom_efm.pyx":305 + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + */ + __pyx_t_27 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_27 * __pyx_v_X.strides[0]) ))); - /* "View.MemoryView":986 - * - * cdef assign_item_from_object(self, char *itemp, object value): - * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< - * self.to_dtype_func(itemp, value) - * else: + /* "cornac/models/efm/recom_efm.pyx":306 + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] */ - __pyx_t_1 = ((__pyx_v_self->to_dtype_func != NULL) != 0); - if (__pyx_t_1) { + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - /* "View.MemoryView":987 - * cdef assign_item_from_object(self, char *itemp, object value): - * if self.to_dtype_func != NULL: - * self.to_dtype_func(itemp, value) # <<<<<<<<<<<<<< - * else: - * memoryview.assign_item_from_object(self, itemp, value) + /* "cornac/models/efm/recom_efm.pyx":307 + * score = X[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] */ - __pyx_t_2 = __pyx_v_self->to_dtype_func(__pyx_v_itemp, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(2, 987, __pyx_L1_error) + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":986 - * - * cdef assign_item_from_object(self, char *itemp, object value): - * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< - * self.to_dtype_func(itemp, value) - * else: + /* "cornac/models/efm/recom_efm.pyx":308 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] # <<<<<<<<<<<<<< + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] */ - goto __pyx_L3; - } + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_27 * __pyx_v_U1.strides[0]) ) + __pyx_t_26 * __pyx_v_U1.strides[1]) )))); - /* "View.MemoryView":989 - * self.to_dtype_func(itemp, value) - * else: - * memoryview.assign_item_from_object(self, itemp, value) # <<<<<<<<<<<<<< - * - * @property + /* "cornac/models/efm/recom_efm.pyx":309 + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] # <<<<<<<<<<<<<< + * U1_numerator[i, k] += lambda_x * score * V[j, k] + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] */ - /*else*/ { - __pyx_t_3 = __pyx_memoryview_assign_item_from_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 989, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - __pyx_L3:; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_26 * __pyx_v_U1.strides[0]) ) + __pyx_t_27 * __pyx_v_U1.strides[1]) )))); - /* "View.MemoryView":985 - * return memoryview.convert_item_to_object(self, itemp) + /* "cornac/models/efm/recom_efm.pyx":310 + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] # <<<<<<<<<<<<<< + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] * - * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< - * if self.to_dtype_func != NULL: - * self.to_dtype_func(itemp, value) */ + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_27 * __pyx_v_V.strides[0]) ) + __pyx_t_26 * __pyx_v_V.strides[1]) )))); - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView._memoryviewslice.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":992 - * - * @property - * def base(self): # <<<<<<<<<<<<<< - * return self.from_object + /* "cornac/models/efm/recom_efm.pyx":311 + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] # <<<<<<<<<<<<<< * + * for idx in prange(Y.shape[0]): */ + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) )))); + } + goto __pyx_L31; + __pyx_L26_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L30; + __pyx_L30:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates25) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L31:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } -/* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":993 - * @property - * def base(self): - * return self.from_object # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":313 + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] * - * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") + * for idx in prange(Y.shape[0]): # <<<<<<<<<<<<<< + * i = Y_iids[idx] + * j = Y_aids[idx] */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->from_object); - __pyx_r = __pyx_v_self->from_object; - goto __pyx_L0; + if (unlikely(!__pyx_v_Y.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("Y"); __PYX_ERR(0, 313, __pyx_L12_error) } + __pyx_t_21 = (__pyx_v_Y.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + double __pyx_parallel_temp4 = ((double)__PYX_NAN()); + double __pyx_parallel_temp5 = ((double)__PYX_NAN()); + double __pyx_parallel_temp6 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_23 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((double)__PYX_NAN()); + __pyx_v_score = ((double)__PYX_NAN()); - /* "View.MemoryView":992 - * - * @property - * def base(self): # <<<<<<<<<<<<<< - * return self.from_object + /* "cornac/models/efm/recom_efm.pyx":314 * + * for idx in prange(Y.shape[0]): + * i = Y_iids[idx] # <<<<<<<<<<<<<< + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) */ + __pyx_t_27 = __pyx_v_idx; + __pyx_v_i = (*((int *) ( /* dim=0 */ (__pyx_v_Y_iids.data + __pyx_t_27 * __pyx_v_Y_iids.strides[0]) ))); - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): + /* "cornac/models/efm/recom_efm.pyx":315 + * for idx in prange(Y.shape[0]): + * i = Y_iids[idx] + * j = Y_aids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] */ + __pyx_t_27 = __pyx_v_idx; + __pyx_v_j = (*((int *) ( /* dim=0 */ (__pyx_v_Y_aids.data + __pyx_t_27 * __pyx_v_Y_aids.strides[0]) ))); -/* Python wrapper */ -static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf___pyx_memoryviewslice___reduce_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + /* "cornac/models/efm/recom_efm.pyx":316 + * i = Y_iids[idx] + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) + */ + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = 0; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = 0; + __pyx_t_28 = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_27 * __pyx_v_U2.strides[0]) ) + __pyx_t_26 * __pyx_v_U2.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 316, __pyx_L34_error) + __pyx_v_prediction = __pyx_t_28; - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":317 + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + */ + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_Y.data + __pyx_t_24 * __pyx_v_Y.strides[0]) ))); -static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); + /* "cornac/models/efm/recom_efm.pyx":318 + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] + */ + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + /* "cornac/models/efm/recom_efm.pyx":319 + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(2, 2, __pyx_L1_error) + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): + /* "cornac/models/efm/recom_efm.pyx":320 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] # <<<<<<<<<<<<<< + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_24 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":321 + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] # <<<<<<<<<<<<<< + * U2_numerator[i, k] += lambda_y * score * V[j, k] + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] + */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_24 * __pyx_v_U2.strides[1]) )))); -/* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + /* "cornac/models/efm/recom_efm.pyx":322 + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] # <<<<<<<<<<<<<< + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] + * */ + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )))); -/* Python wrapper */ -static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf___pyx_memoryviewslice_2__setstate_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + /* "cornac/models/efm/recom_efm.pyx":323 + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] # <<<<<<<<<<<<<< + * + * # update V + */ + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))); + } + goto __pyx_L39; + __pyx_L34_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L38; + __pyx_L38:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates26) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L39:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":326 + * + * # update V + * for i in prange(num_aspects): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] + */ + __pyx_t_3 = __pyx_v_num_aspects; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + double __pyx_parallel_temp2 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_32 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_32 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_32; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); -static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); + /* "cornac/models/efm/recom_efm.pyx":327 + * # update V + * for i in prange(num_aspects): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + */ + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":328 + * for i in prange(num_aspects): + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] # <<<<<<<<<<<<<< + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(2, 4, __pyx_L1_error) + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_v * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) ))))); - /* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + /* "cornac/models/efm/recom_efm.pyx":329 + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps # <<<<<<<<<<<<<< + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) + * */ + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_33 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += (((((*((int *) ( /* dim=0 */ (__pyx_v_X_aspect_counts.data + __pyx_t_27 * __pyx_v_X_aspect_counts.strides[0]) ))) + (*((int *) ( /* dim=0 */ (__pyx_v_Y_aspect_counts.data + __pyx_t_26 * __pyx_v_Y_aspect_counts.strides[0]) )))) * __pyx_v_lambda_v) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))) + __pyx_v_eps); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":330 + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) # <<<<<<<<<<<<<< + * + * # update U1, H1 + */ + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_V_numerator.diminfo[1].strides)); + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_V_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 330, __pyx_L42_error) + } + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L47; + __pyx_L42_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L46; + __pyx_L46:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates27) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L47:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } -/* "View.MemoryView":999 + /* "cornac/models/efm/recom_efm.pyx":333 * - * @cname('__pyx_memoryview_fromslice') - * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< - * int ndim, - * object (*to_object_func)(char *), + * # update U1, H1 + * for i in prange(num_users): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] */ + __pyx_t_32 = __pyx_v_num_users; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + double __pyx_parallel_temp2 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_3 = (__pyx_t_32 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_3 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_3; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); -static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewslice, int __pyx_v_ndim, PyObject *(*__pyx_v_to_object_func)(char *), int (*__pyx_v_to_dtype_func)(char *, PyObject *), int __pyx_v_dtype_is_object) { - struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; - Py_ssize_t __pyx_v_suboffset; - PyObject *__pyx_v_length = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - __Pyx_TypeInfo *__pyx_t_4; - Py_buffer __pyx_t_5; - Py_ssize_t *__pyx_t_6; - Py_ssize_t *__pyx_t_7; - Py_ssize_t *__pyx_t_8; - Py_ssize_t __pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("memoryview_fromslice", 0); - - /* "View.MemoryView":1007 - * cdef _memoryviewslice result - * - * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< - * return None - * + /* "cornac/models/efm/recom_efm.pyx":334 + * # update U1, H1 + * for i in prange(num_users): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps */ - __pyx_t_1 = ((((PyObject *)__pyx_v_memviewslice.memview) == Py_None) != 0); - if (__pyx_t_1) { + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":1008 - * - * if memviewslice.memview == Py_None: - * return None # <<<<<<<<<<<<<< - * - * + /* "cornac/models/efm/recom_efm.pyx":335 + * for i in prange(num_users): + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] # <<<<<<<<<<<<<< + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) */ - __Pyx_XDECREF(__pyx_r); - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_26 * __pyx_v_U1.strides[0]) ) + __pyx_t_27 * __pyx_v_U1.strides[1]) ))))); - /* "View.MemoryView":1007 - * cdef _memoryviewslice result - * - * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< - * return None - * + /* "cornac/models/efm/recom_efm.pyx":336 + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps # <<<<<<<<<<<<<< + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): */ - } + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_34 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (((((*((int *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_27 * __pyx_v_A_user_counts.strides[0]) ))) + (*((int *) ( /* dim=0 */ (__pyx_v_X_user_counts.data + __pyx_t_26 * __pyx_v_X_user_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":1013 - * - * - * result = _memoryviewslice(None, 0, dtype_is_object) # <<<<<<<<<<<<<< - * - * result.from_slice = memviewslice + /* "cornac/models/efm/recom_efm.pyx":337 + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) # <<<<<<<<<<<<<< + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] */ - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1013, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1013, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None); - __Pyx_INCREF(__pyx_int_0); - __Pyx_GIVEREF(__pyx_int_0); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryviewslice_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1013, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_U1_numerator.diminfo[1].strides)); + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U1_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_35 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 337, __pyx_L50_error) + } + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_35)); + } - /* "View.MemoryView":1015 - * result = _memoryviewslice(None, 0, dtype_is_object) - * - * result.from_slice = memviewslice # <<<<<<<<<<<<<< - * __PYX_INC_MEMVIEW(&memviewslice, 1) - * + /* "cornac/models/efm/recom_efm.pyx":338 + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): # <<<<<<<<<<<<<< + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps */ - __pyx_v_result->from_slice = __pyx_v_memviewslice; + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":1016 - * - * result.from_slice = memviewslice - * __PYX_INC_MEMVIEW(&memviewslice, 1) # <<<<<<<<<<<<<< - * - * result.from_object = ( memviewslice.memview).base + /* "cornac/models/efm/recom_efm.pyx":339 + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] # <<<<<<<<<<<<<< + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) */ - __PYX_INC_MEMVIEW((&__pyx_v_memviewslice), 1); + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_24 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_26 * __pyx_v_H1.strides[0]) ) + __pyx_t_27 * __pyx_v_H1.strides[1]) ))))); - /* "View.MemoryView":1018 - * __PYX_INC_MEMVIEW(&memviewslice, 1) - * - * result.from_object = ( memviewslice.memview).base # <<<<<<<<<<<<<< - * result.typeinfo = memviewslice.memview.typeinfo + /* "cornac/models/efm/recom_efm.pyx":340 + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps # <<<<<<<<<<<<<< + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_memviewslice.memview), __pyx_n_s_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1018, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_v_result->from_object); - __Pyx_DECREF(__pyx_v_result->from_object); - __pyx_v_result->from_object = __pyx_t_2; - __pyx_t_2 = 0; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += ((((*((int *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_27 * __pyx_v_A_user_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_26 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":1019 - * - * result.from_object = ( memviewslice.memview).base - * result.typeinfo = memviewslice.memview.typeinfo # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":341 + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) # <<<<<<<<<<<<<< * - * result.view = memviewslice.memview.view + * # update U2, H2 */ - __pyx_t_4 = __pyx_v_memviewslice.memview->typeinfo; - __pyx_v_result->__pyx_base.typeinfo = __pyx_t_4; + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H1_numerator.diminfo[1].strides)); + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_H1_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 341, __pyx_L50_error) + } + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_25 * __pyx_v_H1.strides[0]) ) + __pyx_t_26 * __pyx_v_H1.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L57; + __pyx_L50_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L56; + __pyx_L56:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates28) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L57:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":1021 - * result.typeinfo = memviewslice.memview.typeinfo + /* "cornac/models/efm/recom_efm.pyx":344 * - * result.view = memviewslice.memview.view # <<<<<<<<<<<<<< - * result.view.buf = memviewslice.data - * result.view.ndim = ndim + * # update U2, H2 + * for i in prange(num_items): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] */ - __pyx_t_5 = __pyx_v_memviewslice.memview->view; - __pyx_v_result->__pyx_base.view = __pyx_t_5; + __pyx_t_3 = __pyx_v_num_items; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + double __pyx_parallel_temp2 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_32 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_32 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_32; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* "View.MemoryView":1022 - * - * result.view = memviewslice.memview.view - * result.view.buf = memviewslice.data # <<<<<<<<<<<<<< - * result.view.ndim = ndim - * (<__pyx_buffer *> &result.view).obj = Py_None + /* "cornac/models/efm/recom_efm.pyx":345 + * # update U2, H2 + * for i in prange(num_items): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps */ - __pyx_v_result->__pyx_base.view.buf = ((void *)__pyx_v_memviewslice.data); + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":1023 - * result.view = memviewslice.memview.view - * result.view.buf = memviewslice.data - * result.view.ndim = ndim # <<<<<<<<<<<<<< - * (<__pyx_buffer *> &result.view).obj = Py_None - * Py_INCREF(Py_None) + /* "cornac/models/efm/recom_efm.pyx":346 + * for i in prange(num_items): + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] # <<<<<<<<<<<<<< + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) */ - __pyx_v_result->__pyx_base.view.ndim = __pyx_v_ndim; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_27 * __pyx_v_U2.strides[0]) ) + __pyx_t_33 * __pyx_v_U2.strides[1]) ))))); - /* "View.MemoryView":1024 - * result.view.buf = memviewslice.data - * result.view.ndim = ndim - * (<__pyx_buffer *> &result.view).obj = Py_None # <<<<<<<<<<<<<< - * Py_INCREF(Py_None) - * + /* "cornac/models/efm/recom_efm.pyx":347 + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps # <<<<<<<<<<<<<< + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): */ - ((Py_buffer *)(&__pyx_v_result->__pyx_base.view))->obj = Py_None; + __pyx_t_33 = __pyx_v_i; + __pyx_t_27 = __pyx_v_i; + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (((((*((int *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_33 * __pyx_v_A_item_counts.strides[0]) ))) + (*((int *) ( /* dim=0 */ (__pyx_v_Y_item_counts.data + __pyx_t_27 * __pyx_v_Y_item_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_26 * __pyx_v_U2.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":1025 - * result.view.ndim = ndim - * (<__pyx_buffer *> &result.view).obj = Py_None - * Py_INCREF(Py_None) # <<<<<<<<<<<<<< - * - * if (memviewslice.memview).flags & PyBUF_WRITABLE: + /* "cornac/models/efm/recom_efm.pyx":348 + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) # <<<<<<<<<<<<<< + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] */ - Py_INCREF(Py_None); + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U2_numerator.diminfo[1].strides)); + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_35 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 348, __pyx_L60_error) + } + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_35)); + } - /* "View.MemoryView":1027 - * Py_INCREF(Py_None) - * - * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< - * result.flags = PyBUF_RECORDS - * else: + /* "cornac/models/efm/recom_efm.pyx":349 + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): # <<<<<<<<<<<<<< + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps */ - __pyx_t_1 = ((((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->flags & PyBUF_WRITABLE) != 0); - if (__pyx_t_1) { + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":1028 - * - * if (memviewslice.memview).flags & PyBUF_WRITABLE: - * result.flags = PyBUF_RECORDS # <<<<<<<<<<<<<< - * else: - * result.flags = PyBUF_RECORDS_RO + /* "cornac/models/efm/recom_efm.pyx":350 + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] # <<<<<<<<<<<<<< + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) */ - __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS; + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_26 * __pyx_v_H2.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_27 * __pyx_v_H2.strides[0]) ) + __pyx_t_33 * __pyx_v_H2.strides[1]) ))))); - /* "View.MemoryView":1027 - * Py_INCREF(Py_None) + /* "cornac/models/efm/recom_efm.pyx":351 + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps # <<<<<<<<<<<<<< + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) * - * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< - * result.flags = PyBUF_RECORDS - * else: */ - goto __pyx_L4; - } + __pyx_t_33 = __pyx_v_i; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += ((((*((int *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_33 * __pyx_v_A_item_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_27 * __pyx_v_H2.strides[0]) ) + __pyx_t_26 * __pyx_v_H2.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":1030 - * result.flags = PyBUF_RECORDS - * else: - * result.flags = PyBUF_RECORDS_RO # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":352 + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) # <<<<<<<<<<<<<< * - * result.view.shape = result.from_slice.shape + * if self.verbose: */ - /*else*/ { - __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS_RO; - } - __pyx_L4:; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H2_numerator.diminfo[1].strides)); + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 352, __pyx_L60_error) + } + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_26 * __pyx_v_H2.strides[0]) ) + __pyx_t_27 * __pyx_v_H2.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L67; + __pyx_L60_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L66; + __pyx_L66:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates29) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L67:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } + goto __pyx_L69; + __pyx_L12_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L69; + __pyx_L69:; + #ifdef _OPENMP + Py_END_ALLOW_THREADS + #else +{ +#ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #endif /* _OPENMP */ + /* Clean up any temporaries */ + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + #ifndef _OPENMP +} +#endif /* _OPENMP */ + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif + } - /* "View.MemoryView":1032 - * result.flags = PyBUF_RECORDS_RO - * - * result.view.shape = result.from_slice.shape # <<<<<<<<<<<<<< - * result.view.strides = result.from_slice.strides + /* "cornac/models/efm/recom_efm.pyx":280 + * H2_denominator.fill(0) * + * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): */ - __pyx_v_result->__pyx_base.view.shape = ((Py_ssize_t *)__pyx_v_result->from_slice.shape); + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L9; + } + __pyx_L8_error: { + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L1_error; + } + __pyx_L9:; + } + } - /* "View.MemoryView":1033 - * - * result.view.shape = result.from_slice.shape - * result.view.strides = result.from_slice.strides # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":354 + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) * + * if self.verbose: # <<<<<<<<<<<<<< + * print('iter: %d, loss: %f' % (t, loss)) * */ - __pyx_v_result->__pyx_base.view.strides = ((Py_ssize_t *)__pyx_v_result->from_slice.strides); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 354, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_37 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_37 < 0))) __PYX_ERR(0, 354, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_37) { - /* "View.MemoryView":1036 - * + /* "cornac/models/efm/recom_efm.pyx":355 * - * result.view.suboffsets = NULL # <<<<<<<<<<<<<< - * for suboffset in result.from_slice.suboffsets[:ndim]: - * if suboffset >= 0: - */ - __pyx_v_result->__pyx_base.view.suboffsets = NULL; - - /* "View.MemoryView":1037 + * if self.verbose: + * print('iter: %d, loss: %f' % (t, loss)) # <<<<<<<<<<<<<< * - * result.view.suboffsets = NULL - * for suboffset in result.from_slice.suboffsets[:ndim]: # <<<<<<<<<<<<<< - * if suboffset >= 0: - * result.view.suboffsets = result.from_slice.suboffsets - */ - __pyx_t_7 = (__pyx_v_result->from_slice.suboffsets + __pyx_v_ndim); - for (__pyx_t_8 = __pyx_v_result->from_slice.suboffsets; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { - __pyx_t_6 = __pyx_t_8; - __pyx_v_suboffset = (__pyx_t_6[0]); - - /* "View.MemoryView":1038 - * result.view.suboffsets = NULL - * for suboffset in result.from_slice.suboffsets[:ndim]: - * if suboffset >= 0: # <<<<<<<<<<<<<< - * result.view.suboffsets = result.from_slice.suboffsets - * break + * if self.verbose: */ - __pyx_t_1 = ((__pyx_v_suboffset >= 0) != 0); - if (__pyx_t_1) { + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_23 = 0; + __pyx_t_38 = 127; + __Pyx_INCREF(__pyx_kp_u_iter); + __pyx_t_23 += 6; + __Pyx_GIVEREF(__pyx_kp_u_iter); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_iter); + __pyx_t_6 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_t), __pyx_n_u_d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_38 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_38) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_38; + __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u_loss); + __pyx_t_23 += 8; + __Pyx_GIVEREF(__pyx_kp_u_loss); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_loss); + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_Format(__pyx_t_6, __pyx_n_u_f); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_38 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_38) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_38; + __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_23, __pyx_t_38); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":1039 - * for suboffset in result.from_slice.suboffsets[:ndim]: - * if suboffset >= 0: - * result.view.suboffsets = result.from_slice.suboffsets # <<<<<<<<<<<<<< - * break + /* "cornac/models/efm/recom_efm.pyx":354 + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) * - */ - __pyx_v_result->__pyx_base.view.suboffsets = ((Py_ssize_t *)__pyx_v_result->from_slice.suboffsets); - - /* "View.MemoryView":1040 - * if suboffset >= 0: - * result.view.suboffsets = result.from_slice.suboffsets - * break # <<<<<<<<<<<<<< + * if self.verbose: # <<<<<<<<<<<<<< + * print('iter: %d, loss: %f' % (t, loss)) * - * result.view.len = result.view.itemsize - */ - goto __pyx_L6_break; - - /* "View.MemoryView":1038 - * result.view.suboffsets = NULL - * for suboffset in result.from_slice.suboffsets[:ndim]: - * if suboffset >= 0: # <<<<<<<<<<<<<< - * result.view.suboffsets = result.from_slice.suboffsets - * break */ } - } - __pyx_L6_break:; - - /* "View.MemoryView":1042 - * break - * - * result.view.len = result.view.itemsize # <<<<<<<<<<<<<< - * for length in result.view.shape[:ndim]: - * result.view.len *= length - */ - __pyx_t_9 = __pyx_v_result->__pyx_base.view.itemsize; - __pyx_v_result->__pyx_base.view.len = __pyx_t_9; - - /* "View.MemoryView":1043 - * - * result.view.len = result.view.itemsize - * for length in result.view.shape[:ndim]: # <<<<<<<<<<<<<< - * result.view.len *= length - * - */ - __pyx_t_7 = (__pyx_v_result->__pyx_base.view.shape + __pyx_v_ndim); - for (__pyx_t_8 = __pyx_v_result->__pyx_base.view.shape; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { - __pyx_t_6 = __pyx_t_8; - __pyx_t_2 = PyInt_FromSsize_t((__pyx_t_6[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1043, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_2); - __pyx_t_2 = 0; - /* "View.MemoryView":1044 - * result.view.len = result.view.itemsize - * for length in result.view.shape[:ndim]: - * result.view.len *= length # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":267 + * floating eps = 1e-9 * - * result.to_object_func = to_object_func + * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< + * loss = 0. + * U1_numerator.fill(0) */ - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_result->__pyx_base.view.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1044, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_2, __pyx_v_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1044, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 1044, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_result->__pyx_base.view.len = __pyx_t_9; } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1046 - * result.view.len *= length + /* "cornac/models/efm/recom_efm.pyx":357 + * print('iter: %d, loss: %f' % (t, loss)) * - * result.to_object_func = to_object_func # <<<<<<<<<<<<<< - * result.to_dtype_func = to_dtype_func + * if self.verbose: # <<<<<<<<<<<<<< + * print('Optimization finished!') * */ - __pyx_v_result->to_object_func = __pyx_v_to_object_func; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_37 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_37 < 0))) __PYX_ERR(0, 357, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_37) { - /* "View.MemoryView":1047 + /* "cornac/models/efm/recom_efm.pyx":358 * - * result.to_object_func = to_object_func - * result.to_dtype_func = to_dtype_func # <<<<<<<<<<<<<< + * if self.verbose: + * print('Optimization finished!') # <<<<<<<<<<<<<< * - * return result + * def _build_matrices(self, data_set): */ - __pyx_v_result->to_dtype_func = __pyx_v_to_dtype_func; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1049 - * result.to_dtype_func = to_dtype_func + /* "cornac/models/efm/recom_efm.pyx":357 + * print('iter: %d, loss: %f' % (t, loss)) * - * return result # <<<<<<<<<<<<<< + * if self.verbose: # <<<<<<<<<<<<<< + * print('Optimization finished!') * - * @cname('__pyx_memoryview_get_slice_from_memoryview') */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_result)); - __pyx_r = ((PyObject *)__pyx_v_result); - goto __pyx_L0; + } - /* "View.MemoryView":999 + /* "cornac/models/efm/recom_efm.pyx":228 * - * @cname('__pyx_memoryview_fromslice') - * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< - * int ndim, - * object (*to_object_func)(char *), + * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def _fit_efm(self, int num_threads, */ /* 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_AddTraceback("View.MemoryView.memoryview_fromslice", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_result); - __Pyx_XDECREF(__pyx_v_length); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_U1_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_U1_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_U2_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_U2_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_V_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_V_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_H1_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_H1_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_H2_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_H2_denominator); + __Pyx_XDECREF(__pyx_v_t); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "View.MemoryView":1052 - * - * @cname('__pyx_memoryview_get_slice_from_memoryview') - * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *mslice) except NULL: - * cdef _memoryviewslice obj - */ - -static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_mslice) { - struct __pyx_memoryviewslice_obj *__pyx_v_obj = 0; - __Pyx_memviewslice *__pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; +/* Python wrapper */ +static PyObject *__pyx_fuse_1_2__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_29_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_fuse_1_2__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_29_fit_efm = {"__pyx_fuse_1_2_fit_efm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1_2__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_29_fit_efm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_6_fit_efm}; +static PyObject *__pyx_fuse_1_2__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_29_fit_efm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + int __pyx_v_num_threads; + __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_A_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_uids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_user_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_X_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_iids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_aids = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_item_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y_aspect_counts = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_U2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_V = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_H1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_H2 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_slice_from_memview", 0); - - /* "View.MemoryView":1055 - * __Pyx_memviewslice *mslice) except NULL: - * cdef _memoryviewslice obj - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * obj = memview - * return &obj.from_slice - */ - __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1056 - * cdef _memoryviewslice obj - * if isinstance(memview, _memoryviewslice): - * obj = memview # <<<<<<<<<<<<<< - * return &obj.from_slice - * else: - */ - if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(2, 1056, __pyx_L1_error) - __pyx_t_3 = ((PyObject *)__pyx_v_memview); - __Pyx_INCREF(__pyx_t_3); - __pyx_v_obj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); - __pyx_t_3 = 0; - - /* "View.MemoryView":1057 - * if isinstance(memview, _memoryviewslice): - * obj = memview - * return &obj.from_slice # <<<<<<<<<<<<<< - * else: - * slice_copy(memview, mslice) - */ - __pyx_r = (&__pyx_v_obj->from_slice); - goto __pyx_L0; - - /* "View.MemoryView":1055 - * __Pyx_memviewslice *mslice) except NULL: - * cdef _memoryviewslice obj - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * obj = memview - * return &obj.from_slice - */ - } - - /* "View.MemoryView":1059 - * return &obj.from_slice - * else: - * slice_copy(memview, mslice) # <<<<<<<<<<<<<< - * return mslice - * - */ - /*else*/ { - __pyx_memoryview_slice_copy(__pyx_v_memview, __pyx_v_mslice); - - /* "View.MemoryView":1060 - * else: - * slice_copy(memview, mslice) - * return mslice # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_slice_copy') - */ - __pyx_r = __pyx_v_mslice; - goto __pyx_L0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_fit_efm (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_num_threads,&__pyx_n_s_A,&__pyx_n_s_A_uids,&__pyx_n_s_A_iids,&__pyx_n_s_A_user_counts,&__pyx_n_s_A_item_counts,&__pyx_n_s_X,&__pyx_n_s_X_uids,&__pyx_n_s_X_aids,&__pyx_n_s_X_user_counts,&__pyx_n_s_X_aspect_counts,&__pyx_n_s_Y,&__pyx_n_s_Y_iids,&__pyx_n_s_Y_aids,&__pyx_n_s_Y_item_counts,&__pyx_n_s_Y_aspect_counts,&__pyx_n_s_U1,&__pyx_n_s_U2,&__pyx_n_s_V,&__pyx_n_s_H1,&__pyx_n_s_H2,0}; + PyObject* values[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 22: values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + CYTHON_FALLTHROUGH; + case 21: values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + CYTHON_FALLTHROUGH; + case 20: values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + CYTHON_FALLTHROUGH; + case 19: values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + CYTHON_FALLTHROUGH; + case 18: values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + CYTHON_FALLTHROUGH; + case 17: values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + CYTHON_FALLTHROUGH; + case 16: values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num_threads)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 1); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 2); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 3); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 4); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_user_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 5); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_A_item_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 6); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 7); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_uids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 8); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 9); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_user_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 10); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_X_aspect_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 11); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 12); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_iids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 13); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_aids)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 14); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 15: + if (likely((values[15] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_item_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 15); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 16: + if (likely((values[16] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_Y_aspect_counts)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 16); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 17: + if (likely((values[17] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 17); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 18: + if (likely((values[18] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_U2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 18); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 19: + if (likely((values[19] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_V)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 19); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 20: + if (likely((values[20] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_H1)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 20); __PYX_ERR(0, 228, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 21: + if (likely((values[21] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_H2)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, 21); __PYX_ERR(0, 228, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_fit_efm") < 0)) __PYX_ERR(0, 228, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 22)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); + values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5); + values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6); + values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7); + values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8); + values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9); + values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10); + values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11); + values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12); + values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13); + values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14); + values[15] = __Pyx_Arg_VARARGS(__pyx_args, 15); + values[16] = __Pyx_Arg_VARARGS(__pyx_args, 16); + values[17] = __Pyx_Arg_VARARGS(__pyx_args, 17); + values[18] = __Pyx_Arg_VARARGS(__pyx_args, 18); + values[19] = __Pyx_Arg_VARARGS(__pyx_args, 19); + values[20] = __Pyx_Arg_VARARGS(__pyx_args, 20); + values[21] = __Pyx_Arg_VARARGS(__pyx_args, 21); + } + __pyx_v_self = values[0]; + __pyx_v_num_threads = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L3_error) + __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_uids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_iids.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_user_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_A_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A_item_counts.memview)) __PYX_ERR(0, 231, __pyx_L3_error) + __pyx_v_X = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_uids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_uids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aids.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_user_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_user_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_X_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_X_aspect_counts.memview)) __PYX_ERR(0, 232, __pyx_L3_error) + __pyx_v_Y = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[12], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_iids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_iids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_aids = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[14], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aids.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_item_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[15], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_item_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_Y_aspect_counts = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[16], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Y_aspect_counts.memview)) __PYX_ERR(0, 233, __pyx_L3_error) + __pyx_v_U1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_U2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[18], PyBUF_WRITABLE); if (unlikely(!__pyx_v_U2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_V = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[19], PyBUF_WRITABLE); if (unlikely(!__pyx_v_V.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_H1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[20], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H1.memview)) __PYX_ERR(0, 234, __pyx_L3_error) + __pyx_v_H2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[21], PyBUF_WRITABLE); if (unlikely(!__pyx_v_H2.memview)) __PYX_ERR(0, 234, __pyx_L3_error) } - - /* "View.MemoryView":1052 - * - * @cname('__pyx_memoryview_get_slice_from_memoryview') - * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *mslice) except NULL: - * cdef _memoryviewslice obj - */ + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_fit_efm", 1, 22, 22, __pyx_nargs); __PYX_ERR(0, 228, __pyx_L3_error) + __pyx_L3_error:; + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_V, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H2, 1); + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_28_fit_efm(__pyx_self, __pyx_v_self, __pyx_v_num_threads, __pyx_v_A, __pyx_v_A_uids, __pyx_v_A_iids, __pyx_v_A_user_counts, __pyx_v_A_item_counts, __pyx_v_X, __pyx_v_X_uids, __pyx_v_X_aids, __pyx_v_X_user_counts, __pyx_v_X_aspect_counts, __pyx_v_Y, __pyx_v_Y_iids, __pyx_v_Y_aids, __pyx_v_Y_item_counts, __pyx_v_Y_aspect_counts, __pyx_v_U1, __pyx_v_U2, __pyx_v_V, __pyx_v_H1, __pyx_v_H2); /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_obj); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_uids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_user_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_X_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_iids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aids, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_item_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_Y_aspect_counts, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_U2, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_V, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H1, 1); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_H2, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "View.MemoryView":1063 - * - * @cname('__pyx_memoryview_slice_copy') - * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< - * cdef int dim - * cdef (Py_ssize_t*) shape, strides, suboffsets - */ - -static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_dst) { - int __pyx_v_dim; - Py_ssize_t *__pyx_v_shape; - Py_ssize_t *__pyx_v_strides; - Py_ssize_t *__pyx_v_suboffsets; +static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_28_fit_efm(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_A_uids, __Pyx_memviewslice __pyx_v_A_iids, __Pyx_memviewslice __pyx_v_A_user_counts, __Pyx_memviewslice __pyx_v_A_item_counts, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_X_uids, __Pyx_memviewslice __pyx_v_X_aids, __Pyx_memviewslice __pyx_v_X_user_counts, __Pyx_memviewslice __pyx_v_X_aspect_counts, __Pyx_memviewslice __pyx_v_Y, __Pyx_memviewslice __pyx_v_Y_iids, __Pyx_memviewslice __pyx_v_Y_aids, __Pyx_memviewslice __pyx_v_Y_item_counts, __Pyx_memviewslice __pyx_v_Y_aspect_counts, __Pyx_memviewslice __pyx_v_U1, __Pyx_memviewslice __pyx_v_U2, __Pyx_memviewslice __pyx_v_V, __Pyx_memviewslice __pyx_v_H1, __Pyx_memviewslice __pyx_v_H2) { + long __pyx_v_num_users; + long __pyx_v_num_items; + long __pyx_v_num_aspects; + int __pyx_v_num_explicit_factors; + int __pyx_v_num_latent_factors; + double __pyx_v_lambda_x; + double __pyx_v_lambda_y; + double __pyx_v_lambda_u; + double __pyx_v_lambda_h; + double __pyx_v_lambda_v; + double __pyx_v_prediction; + double __pyx_v_score; + double __pyx_v_loss; + PyArrayObject *__pyx_v_U1_numerator = 0; + PyArrayObject *__pyx_v_U1_denominator = 0; + PyArrayObject *__pyx_v_U2_numerator = 0; + PyArrayObject *__pyx_v_U2_denominator = 0; + PyArrayObject *__pyx_v_V_numerator = 0; + PyArrayObject *__pyx_v_V_denominator = 0; + PyArrayObject *__pyx_v_H1_numerator = 0; + PyArrayObject *__pyx_v_H1_denominator = 0; + PyArrayObject *__pyx_v_H2_numerator = 0; + PyArrayObject *__pyx_v_H2_denominator = 0; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_v_k; + int __pyx_v_idx; + double __pyx_v_eps; + PyObject *__pyx_v_t = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_denominator; + __Pyx_Buffer __pyx_pybuffer_H1_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H1_numerator; + __Pyx_Buffer __pyx_pybuffer_H1_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_denominator; + __Pyx_Buffer __pyx_pybuffer_H2_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_H2_numerator; + __Pyx_Buffer __pyx_pybuffer_H2_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_denominator; + __Pyx_Buffer __pyx_pybuffer_U1_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U1_numerator; + __Pyx_Buffer __pyx_pybuffer_U1_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_denominator; + __Pyx_Buffer __pyx_pybuffer_U2_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_U2_numerator; + __Pyx_Buffer __pyx_pybuffer_U2_numerator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_V_denominator; + __Pyx_Buffer __pyx_pybuffer_V_denominator; + __Pyx_LocalBuf_ND __pyx_pybuffernd_V_numerator; + __Pyx_Buffer __pyx_pybuffer_V_numerator; + PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - Py_ssize_t *__pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + long __pyx_t_3; int __pyx_t_4; - Py_ssize_t __pyx_t_5; - __Pyx_RefNannySetupContext("slice_copy", 0); - - /* "View.MemoryView":1067 - * cdef (Py_ssize_t*) shape, strides, suboffsets - * - * shape = memview.view.shape # <<<<<<<<<<<<<< - * strides = memview.view.strides - * suboffsets = memview.view.suboffsets - */ - __pyx_t_1 = __pyx_v_memview->view.shape; - __pyx_v_shape = __pyx_t_1; + double __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyArrayObject *__pyx_t_9 = NULL; + PyArrayObject *__pyx_t_10 = NULL; + PyArrayObject *__pyx_t_11 = NULL; + PyArrayObject *__pyx_t_12 = NULL; + PyArrayObject *__pyx_t_13 = NULL; + PyArrayObject *__pyx_t_14 = NULL; + PyArrayObject *__pyx_t_15 = NULL; + PyArrayObject *__pyx_t_16 = NULL; + PyArrayObject *__pyx_t_17 = NULL; + PyArrayObject *__pyx_t_18 = NULL; + Py_ssize_t __pyx_t_19; + PyObject *(*__pyx_t_20)(PyObject *); + Py_ssize_t __pyx_t_21; + Py_ssize_t __pyx_t_22; + Py_ssize_t __pyx_t_23; + Py_ssize_t __pyx_t_24; + Py_ssize_t __pyx_t_25; + Py_ssize_t __pyx_t_26; + Py_ssize_t __pyx_t_27; + double __pyx_t_28; + int __pyx_t_29; + int __pyx_t_30; + long __pyx_t_31; + long __pyx_t_32; + Py_ssize_t __pyx_t_33; + Py_ssize_t __pyx_t_34; + __pyx_t_5numpy_float32_t __pyx_t_35; + __pyx_t_5numpy_float32_t __pyx_t_36; + int __pyx_t_37; + Py_UCS4 __pyx_t_38; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_fuse_1_2_fit_efm", 0); + __pyx_pybuffer_U1_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_U1_numerator.refcount = 0; + __pyx_pybuffernd_U1_numerator.data = NULL; + __pyx_pybuffernd_U1_numerator.rcbuffer = &__pyx_pybuffer_U1_numerator; + __pyx_pybuffer_U1_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_U1_denominator.refcount = 0; + __pyx_pybuffernd_U1_denominator.data = NULL; + __pyx_pybuffernd_U1_denominator.rcbuffer = &__pyx_pybuffer_U1_denominator; + __pyx_pybuffer_U2_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_U2_numerator.refcount = 0; + __pyx_pybuffernd_U2_numerator.data = NULL; + __pyx_pybuffernd_U2_numerator.rcbuffer = &__pyx_pybuffer_U2_numerator; + __pyx_pybuffer_U2_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_U2_denominator.refcount = 0; + __pyx_pybuffernd_U2_denominator.data = NULL; + __pyx_pybuffernd_U2_denominator.rcbuffer = &__pyx_pybuffer_U2_denominator; + __pyx_pybuffer_V_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_V_numerator.refcount = 0; + __pyx_pybuffernd_V_numerator.data = NULL; + __pyx_pybuffernd_V_numerator.rcbuffer = &__pyx_pybuffer_V_numerator; + __pyx_pybuffer_V_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_V_denominator.refcount = 0; + __pyx_pybuffernd_V_denominator.data = NULL; + __pyx_pybuffernd_V_denominator.rcbuffer = &__pyx_pybuffer_V_denominator; + __pyx_pybuffer_H1_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_H1_numerator.refcount = 0; + __pyx_pybuffernd_H1_numerator.data = NULL; + __pyx_pybuffernd_H1_numerator.rcbuffer = &__pyx_pybuffer_H1_numerator; + __pyx_pybuffer_H1_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_H1_denominator.refcount = 0; + __pyx_pybuffernd_H1_denominator.data = NULL; + __pyx_pybuffernd_H1_denominator.rcbuffer = &__pyx_pybuffer_H1_denominator; + __pyx_pybuffer_H2_numerator.pybuffer.buf = NULL; + __pyx_pybuffer_H2_numerator.refcount = 0; + __pyx_pybuffernd_H2_numerator.data = NULL; + __pyx_pybuffernd_H2_numerator.rcbuffer = &__pyx_pybuffer_H2_numerator; + __pyx_pybuffer_H2_denominator.pybuffer.buf = NULL; + __pyx_pybuffer_H2_denominator.refcount = 0; + __pyx_pybuffernd_H2_denominator.data = NULL; + __pyx_pybuffernd_H2_denominator.rcbuffer = &__pyx_pybuffer_H2_denominator; - /* "View.MemoryView":1068 - * - * shape = memview.view.shape - * strides = memview.view.strides # <<<<<<<<<<<<<< - * suboffsets = memview.view.suboffsets - * + /* "cornac/models/efm/recom_efm.pyx":238 + * """ + * cdef: + * long num_users = self.train_set.num_users # <<<<<<<<<<<<<< + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects */ - __pyx_t_1 = __pyx_v_memview->view.strides; - __pyx_v_strides = __pyx_t_1; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_users); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_2); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_num_users = __pyx_t_3; - /* "View.MemoryView":1069 - * shape = memview.view.shape - * strides = memview.view.strides - * suboffsets = memview.view.suboffsets # <<<<<<<<<<<<<< - * - * dst.memview = <__pyx_memoryview *> memview + /* "cornac/models/efm/recom_efm.pyx":239 + * cdef: + * long num_users = self.train_set.num_users + * long num_items = self.train_set.num_items # <<<<<<<<<<<<<< + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors */ - __pyx_t_1 = __pyx_v_memview->view.suboffsets; - __pyx_v_suboffsets = __pyx_t_1; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_items = __pyx_t_3; - /* "View.MemoryView":1071 - * suboffsets = memview.view.suboffsets - * - * dst.memview = <__pyx_memoryview *> memview # <<<<<<<<<<<<<< - * dst.data = memview.view.buf - * + /* "cornac/models/efm/recom_efm.pyx":240 + * long num_users = self.train_set.num_users + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects # <<<<<<<<<<<<<< + * int num_explicit_factors = self.num_explicit_factors + * int num_latent_factors = self.num_latent_factors */ - __pyx_v_dst->memview = ((struct __pyx_memoryview_obj *)__pyx_v_memview); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_aspects = __pyx_t_3; - /* "View.MemoryView":1072 - * - * dst.memview = <__pyx_memoryview *> memview - * dst.data = memview.view.buf # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":241 + * long num_items = self.train_set.num_items + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors # <<<<<<<<<<<<<< + * int num_latent_factors = self.num_latent_factors * - * for dim in range(memview.view.ndim): */ - __pyx_v_dst->data = ((char *)__pyx_v_memview->view.buf); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_explicit_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_explicit_factors = __pyx_t_4; - /* "View.MemoryView":1074 - * dst.data = memview.view.buf + /* "cornac/models/efm/recom_efm.pyx":242 + * long num_aspects = self.train_set.sentiment.num_aspects + * int num_explicit_factors = self.num_explicit_factors + * int num_latent_factors = self.num_latent_factors # <<<<<<<<<<<<<< * - * for dim in range(memview.view.ndim): # <<<<<<<<<<<<<< - * dst.shape[dim] = shape[dim] - * dst.strides[dim] = strides[dim] + * floating lambda_x = self.lambda_x */ - __pyx_t_2 = __pyx_v_memview->view.ndim; - __pyx_t_3 = __pyx_t_2; - for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { - __pyx_v_dim = __pyx_t_4; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_latent_factors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 242, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_num_latent_factors = __pyx_t_4; - /* "View.MemoryView":1075 + /* "cornac/models/efm/recom_efm.pyx":244 + * int num_latent_factors = self.num_latent_factors * - * for dim in range(memview.view.ndim): - * dst.shape[dim] = shape[dim] # <<<<<<<<<<<<<< - * dst.strides[dim] = strides[dim] - * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 + * floating lambda_x = self.lambda_x # <<<<<<<<<<<<<< + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u */ - (__pyx_v_dst->shape[__pyx_v_dim]) = (__pyx_v_shape[__pyx_v_dim]); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 244, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_x = __pyx_t_5; - /* "View.MemoryView":1076 - * for dim in range(memview.view.ndim): - * dst.shape[dim] = shape[dim] - * dst.strides[dim] = strides[dim] # <<<<<<<<<<<<<< - * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 + /* "cornac/models/efm/recom_efm.pyx":245 * + * floating lambda_x = self.lambda_x + * floating lambda_y = self.lambda_y # <<<<<<<<<<<<<< + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h */ - (__pyx_v_dst->strides[__pyx_v_dim]) = (__pyx_v_strides[__pyx_v_dim]); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 245, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_y = __pyx_t_5; - /* "View.MemoryView":1077 - * dst.shape[dim] = shape[dim] - * dst.strides[dim] = strides[dim] - * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_copy_object') + /* "cornac/models/efm/recom_efm.pyx":246 + * floating lambda_x = self.lambda_x + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u # <<<<<<<<<<<<<< + * floating lambda_h = self.lambda_h + * floating lambda_v = self.lambda_v */ - if ((__pyx_v_suboffsets != 0)) { - __pyx_t_5 = (__pyx_v_suboffsets[__pyx_v_dim]); - } else { - __pyx_t_5 = -1L; - } - (__pyx_v_dst->suboffsets[__pyx_v_dim]) = __pyx_t_5; - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_u); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_u = __pyx_t_5; - /* "View.MemoryView":1063 + /* "cornac/models/efm/recom_efm.pyx":247 + * floating lambda_y = self.lambda_y + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h # <<<<<<<<<<<<<< + * floating lambda_v = self.lambda_v * - * @cname('__pyx_memoryview_slice_copy') - * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< - * cdef int dim - * cdef (Py_ssize_t*) shape, strides, suboffsets */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_h); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_h = __pyx_t_5; - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "View.MemoryView":1080 + /* "cornac/models/efm/recom_efm.pyx":248 + * floating lambda_u = self.lambda_u + * floating lambda_h = self.lambda_h + * floating lambda_v = self.lambda_v # <<<<<<<<<<<<<< * - * @cname('__pyx_memoryview_copy_object') - * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< - * "Create a new memoryview object" - * cdef __Pyx_memviewslice memviewslice + * floating prediction, score, loss */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lambda_v); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 248, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 248, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_lambda_v = __pyx_t_5; -static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *__pyx_v_memview) { - __Pyx_memviewslice __pyx_v_memviewslice; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("memoryview_copy", 0); - - /* "View.MemoryView":1083 - * "Create a new memoryview object" - * cdef __Pyx_memviewslice memviewslice - * slice_copy(memview, &memviewslice) # <<<<<<<<<<<<<< - * return memoryview_copy_from_slice(memview, &memviewslice) + /* "cornac/models/efm/recom_efm.pyx":252 + * floating prediction, score, loss * + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) */ - __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_memviewslice)); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 252, __pyx_L1_error) + __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 252, __pyx_L1_error) + } else {__pyx_pybuffernd_U1_numerator.diminfo[0].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_numerator.diminfo[0].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_numerator.diminfo[1].strides = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_numerator.diminfo[1].shape = __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_9 = 0; + __pyx_v_U1_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":1084 - * cdef __Pyx_memviewslice memviewslice - * slice_copy(memview, &memviewslice) - * return memoryview_copy_from_slice(memview, &memviewslice) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":253 * - * @cname('__pyx_memoryview_copy_object_from_slice') + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __pyx_memoryview_copy_object_from_slice(__pyx_v_memview, (&__pyx_v_memviewslice)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1084, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 253, __pyx_L1_error) + __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 253, __pyx_L1_error) + } else {__pyx_pybuffernd_U1_denominator.diminfo[0].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U1_denominator.diminfo[0].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U1_denominator.diminfo[1].strides = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U1_denominator.diminfo[1].shape = __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_10 = 0; + __pyx_v_U1_denominator = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L0; - /* "View.MemoryView":1080 - * - * @cname('__pyx_memoryview_copy_object') - * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< - * "Create a new memoryview object" - * cdef __Pyx_memviewslice memviewslice + /* "cornac/models/efm/recom_efm.pyx":254 + * np.ndarray[np.float32_t, ndim=2] U1_numerator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 254, __pyx_L1_error) + __pyx_t_11 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 254, __pyx_L1_error) + } else {__pyx_pybuffernd_U2_numerator.diminfo[0].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_numerator.diminfo[0].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_numerator.diminfo[1].strides = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_numerator.diminfo[1].shape = __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_11 = 0; + __pyx_v_U2_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview_copy", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":1087 - * - * @cname('__pyx_memoryview_copy_object_from_slice') - * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< - * """ - * Create a new memoryview object from a given memoryview object and slice. + /* "cornac/models/efm/recom_efm.pyx":255 + * np.ndarray[np.float32_t, ndim=2] U1_denominator = np.empty((num_users, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 255, __pyx_L1_error) + __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_U2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 255, __pyx_L1_error) + } else {__pyx_pybuffernd_U2_denominator.diminfo[0].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_U2_denominator.diminfo[0].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_U2_denominator.diminfo[1].strides = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_U2_denominator.diminfo[1].shape = __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_12 = 0; + __pyx_v_U2_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; -static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_memviewslice) { - PyObject *(*__pyx_v_to_object_func)(char *); - int (*__pyx_v_to_dtype_func)(char *, PyObject *); - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *(*__pyx_t_3)(char *); - int (*__pyx_t_4)(char *, PyObject *); - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("memoryview_copy_from_slice", 0); - - /* "View.MemoryView":1094 - * cdef int (*to_dtype_func)(char *, object) except 0 - * - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * to_object_func = (<_memoryviewslice> memview).to_object_func - * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + /* "cornac/models/efm/recom_efm.pyx":256 + * np.ndarray[np.float32_t, ndim=2] U2_numerator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) */ - __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 256, __pyx_L1_error) + __pyx_t_13 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_V_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 256, __pyx_L1_error) + } else {__pyx_pybuffernd_V_numerator.diminfo[0].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_numerator.diminfo[0].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_numerator.diminfo[1].strides = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_numerator.diminfo[1].shape = __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_13 = 0; + __pyx_v_V_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":1095 - * - * if isinstance(memview, _memoryviewslice): - * to_object_func = (<_memoryviewslice> memview).to_object_func # <<<<<<<<<<<<<< - * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func - * else: + /* "cornac/models/efm/recom_efm.pyx":257 + * np.ndarray[np.float32_t, ndim=2] U2_denominator = np.empty((num_items, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) */ - __pyx_t_3 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_object_func; - __pyx_v_to_object_func = __pyx_t_3; + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_aspects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_explicit_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 257, __pyx_L1_error) + __pyx_t_14 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_V_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 257, __pyx_L1_error) + } else {__pyx_pybuffernd_V_denominator.diminfo[0].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_V_denominator.diminfo[0].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_V_denominator.diminfo[1].strides = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_V_denominator.diminfo[1].shape = __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_14 = 0; + __pyx_v_V_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":1096 - * if isinstance(memview, _memoryviewslice): - * to_object_func = (<_memoryviewslice> memview).to_object_func - * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func # <<<<<<<<<<<<<< - * else: - * to_object_func = NULL + /* "cornac/models/efm/recom_efm.pyx":258 + * np.ndarray[np.float32_t, ndim=2] V_numerator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) */ - __pyx_t_4 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_dtype_func; - __pyx_v_to_dtype_func = __pyx_t_4; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 258, __pyx_L1_error) + __pyx_t_15 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H1_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 258, __pyx_L1_error) + } else {__pyx_pybuffernd_H1_numerator.diminfo[0].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_numerator.diminfo[0].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_numerator.diminfo[1].strides = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_numerator.diminfo[1].shape = __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_15 = 0; + __pyx_v_H1_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":1094 - * cdef int (*to_dtype_func)(char *, object) except 0 - * - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * to_object_func = (<_memoryviewslice> memview).to_object_func - * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + /* "cornac/models/efm/recom_efm.pyx":259 + * np.ndarray[np.float32_t, ndim=2] V_denominator = np.empty((num_aspects, num_explicit_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) */ - goto __pyx_L3; + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_users); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 259, __pyx_L1_error) + __pyx_t_16 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H1_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 259, __pyx_L1_error) + } else {__pyx_pybuffernd_H1_denominator.diminfo[0].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H1_denominator.diminfo[0].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H1_denominator.diminfo[1].strides = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H1_denominator.diminfo[1].shape = __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.shape[1]; + } } + __pyx_t_16 = 0; + __pyx_v_H1_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":1098 - * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func - * else: - * to_object_func = NULL # <<<<<<<<<<<<<< - * to_dtype_func = NULL - * + /* "cornac/models/efm/recom_efm.pyx":260 + * np.ndarray[np.float32_t, ndim=2] H1_numerator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * int i, j, k, idx */ - /*else*/ { - __pyx_v_to_object_func = NULL; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 260, __pyx_L1_error) + __pyx_t_17 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H2_numerator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 260, __pyx_L1_error) + } else {__pyx_pybuffernd_H2_numerator.diminfo[0].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_numerator.diminfo[0].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_numerator.diminfo[1].strides = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_numerator.diminfo[1].shape = __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_17 = 0; + __pyx_v_H2_numerator = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":1099 - * else: - * to_object_func = NULL - * to_dtype_func = NULL # <<<<<<<<<<<<<< - * - * return memoryview_fromslice(memviewslice[0], memview.view.ndim, + /* "cornac/models/efm/recom_efm.pyx":261 + * np.ndarray[np.float32_t, ndim=2] H1_denominator = np.empty((num_users, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_numerator = np.empty((num_items, num_latent_factors), dtype=np.float32) + * np.ndarray[np.float32_t, ndim=2] H2_denominator = np.empty((num_items, num_latent_factors), dtype=np.float32) # <<<<<<<<<<<<<< + * int i, j, k, idx + * long n_ratings */ - __pyx_v_to_dtype_func = NULL; + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_long(__pyx_v_num_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_num_latent_factors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_8 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 261, __pyx_L1_error) + __pyx_t_18 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_H2_denominator = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 261, __pyx_L1_error) + } else {__pyx_pybuffernd_H2_denominator.diminfo[0].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_H2_denominator.diminfo[0].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_H2_denominator.diminfo[1].strides = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_H2_denominator.diminfo[1].shape = __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.shape[1]; + } } - __pyx_L3:; - - /* "View.MemoryView":1101 - * to_dtype_func = NULL - * - * return memoryview_fromslice(memviewslice[0], memview.view.ndim, # <<<<<<<<<<<<<< - * to_object_func, to_dtype_func, - * memview.dtype_is_object) - */ - __Pyx_XDECREF(__pyx_r); + __pyx_t_18 = 0; + __pyx_v_H2_denominator = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":1103 - * return memoryview_fromslice(memviewslice[0], memview.view.ndim, - * to_object_func, to_dtype_func, - * memview.dtype_is_object) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":265 + * long n_ratings * + * floating eps = 1e-9 # <<<<<<<<<<<<<< * + * for t in range(1, self.max_iter + 1): */ - __pyx_t_5 = __pyx_memoryview_fromslice((__pyx_v_memviewslice[0]), __pyx_v_memview->view.ndim, __pyx_v_to_object_func, __pyx_v_to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1101, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; + __pyx_v_eps = 1e-9; - /* "View.MemoryView":1087 + /* "cornac/models/efm/recom_efm.pyx":267 + * floating eps = 1e-9 * - * @cname('__pyx_memoryview_copy_object_from_slice') - * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< - * """ - * Create a new memoryview object from a given memoryview object and slice. + * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< + * loss = 0. + * U1_numerator.fill(0) */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_max_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_int_1); + __Pyx_GIVEREF(__pyx_int_1); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { + __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_19 = 0; + __pyx_t_20 = NULL; + } else { + __pyx_t_19 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_20 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 267, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + for (;;) { + if (likely(!__pyx_t_20)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 267, __pyx_L1_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } else { + if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 267, __pyx_L1_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } + } else { + __pyx_t_2 = __pyx_t_20(__pyx_t_1); + if (unlikely(!__pyx_t_2)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 267, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_2); + } + __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2); + __pyx_t_2 = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.memoryview_copy_from_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":1109 - * + /* "cornac/models/efm/recom_efm.pyx":268 * - * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< - * if arg < 0: - * return -arg + * for t in range(1, self.max_iter + 1): + * loss = 0. # <<<<<<<<<<<<<< + * U1_numerator.fill(0) + * U1_denominator.fill(0) */ + __pyx_v_loss = 0.; -static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) { - Py_ssize_t __pyx_r; - int __pyx_t_1; - - /* "View.MemoryView":1110 - * - * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: - * if arg < 0: # <<<<<<<<<<<<<< - * return -arg - * else: + /* "cornac/models/efm/recom_efm.pyx":269 + * for t in range(1, self.max_iter + 1): + * loss = 0. + * U1_numerator.fill(0) # <<<<<<<<<<<<<< + * U1_denominator.fill(0) + * U2_numerator.fill(0) */ - __pyx_t_1 = ((__pyx_v_arg < 0) != 0); - if (__pyx_t_1) { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":1111 - * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: - * if arg < 0: - * return -arg # <<<<<<<<<<<<<< - * else: - * return arg + /* "cornac/models/efm/recom_efm.pyx":270 + * loss = 0. + * U1_numerator.fill(0) + * U1_denominator.fill(0) # <<<<<<<<<<<<<< + * U2_numerator.fill(0) + * U2_denominator.fill(0) */ - __pyx_r = (-__pyx_v_arg); - goto __pyx_L0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":1110 - * - * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: - * if arg < 0: # <<<<<<<<<<<<<< - * return -arg - * else: + /* "cornac/models/efm/recom_efm.pyx":271 + * U1_numerator.fill(0) + * U1_denominator.fill(0) + * U2_numerator.fill(0) # <<<<<<<<<<<<<< + * U2_denominator.fill(0) + * V_numerator.fill(0) */ - } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":1113 - * return -arg - * else: - * return arg # <<<<<<<<<<<<<< - * - * @cname('__pyx_get_best_slice_order') + /* "cornac/models/efm/recom_efm.pyx":272 + * U1_denominator.fill(0) + * U2_numerator.fill(0) + * U2_denominator.fill(0) # <<<<<<<<<<<<<< + * V_numerator.fill(0) + * V_denominator.fill(0) */ - /*else*/ { - __pyx_r = __pyx_v_arg; - goto __pyx_L0; - } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_U2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":1109 - * - * - * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< - * if arg < 0: - * return -arg + /* "cornac/models/efm/recom_efm.pyx":273 + * U2_numerator.fill(0) + * U2_denominator.fill(0) + * V_numerator.fill(0) # <<<<<<<<<<<<<< + * V_denominator.fill(0) + * H1_numerator.fill(0) */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":1116 - * - * @cname('__pyx_get_best_slice_order') - * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< - * """ - * Figure out the best memory access order for a given slice. + /* "cornac/models/efm/recom_efm.pyx":274 + * U2_denominator.fill(0) + * V_numerator.fill(0) + * V_denominator.fill(0) # <<<<<<<<<<<<<< + * H1_numerator.fill(0) + * H1_denominator.fill(0) */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_V_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 274, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; -static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim) { - int __pyx_v_i; - Py_ssize_t __pyx_v_c_stride; - Py_ssize_t __pyx_v_f_stride; - char __pyx_r; - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - - /* "View.MemoryView":1121 - * """ - * cdef int i - * cdef Py_ssize_t c_stride = 0 # <<<<<<<<<<<<<< - * cdef Py_ssize_t f_stride = 0 - * + /* "cornac/models/efm/recom_efm.pyx":275 + * V_numerator.fill(0) + * V_denominator.fill(0) + * H1_numerator.fill(0) # <<<<<<<<<<<<<< + * H1_denominator.fill(0) + * H2_numerator.fill(0) */ - __pyx_v_c_stride = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":1122 - * cdef int i - * cdef Py_ssize_t c_stride = 0 - * cdef Py_ssize_t f_stride = 0 # <<<<<<<<<<<<<< - * - * for i in range(ndim - 1, -1, -1): + /* "cornac/models/efm/recom_efm.pyx":276 + * V_denominator.fill(0) + * H1_numerator.fill(0) + * H1_denominator.fill(0) # <<<<<<<<<<<<<< + * H2_numerator.fill(0) + * H2_denominator.fill(0) */ - __pyx_v_f_stride = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H1_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":1124 - * cdef Py_ssize_t f_stride = 0 + /* "cornac/models/efm/recom_efm.pyx":277 + * H1_numerator.fill(0) + * H1_denominator.fill(0) + * H2_numerator.fill(0) # <<<<<<<<<<<<<< + * H2_denominator.fill(0) * - * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< - * if mslice.shape[i] > 1: - * c_stride = mslice.strides[i] */ - for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { - __pyx_v_i = __pyx_t_1; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_numerator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 277, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":1125 + /* "cornac/models/efm/recom_efm.pyx":278 + * H1_denominator.fill(0) + * H2_numerator.fill(0) + * H2_denominator.fill(0) # <<<<<<<<<<<<<< * - * for i in range(ndim - 1, -1, -1): - * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< - * c_stride = mslice.strides[i] - * break + * with nogil, parallel(num_threads=num_threads): */ - __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); - if (__pyx_t_2) { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_H2_denominator), __pyx_n_s_fill); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":1126 - * for i in range(ndim - 1, -1, -1): - * if mslice.shape[i] > 1: - * c_stride = mslice.strides[i] # <<<<<<<<<<<<<< - * break + /* "cornac/models/efm/recom_efm.pyx":280 + * H2_denominator.fill(0) * + * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): */ - __pyx_v_c_stride = (__pyx_v_mslice->strides[__pyx_v_i]); + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + { + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) (x) + #define unlikely(x) (x) + #endif + #ifdef _OPENMP + #pragma omp parallel reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) reduction(+:__pyx_v_loss) private(__pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_3, __pyx_t_30, __pyx_t_31, __pyx_t_32, __pyx_t_33, __pyx_t_34, __pyx_t_35, __pyx_t_36, __pyx_t_4, __pyx_t_5) private(__pyx_filename, __pyx_lineno, __pyx_clineno) shared(__pyx_parallel_why, __pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb) num_threads(__pyx_v_num_threads) + #endif /* _OPENMP */ + { + #ifdef _OPENMP + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + Py_BEGIN_ALLOW_THREADS + #endif /* _OPENMP */ - /* "View.MemoryView":1127 - * if mslice.shape[i] > 1: - * c_stride = mslice.strides[i] - * break # <<<<<<<<<<<<<< - * - * for i in range(ndim): + /* "cornac/models/efm/recom_efm.pyx":282 + * with nogil, parallel(num_threads=num_threads): + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): # <<<<<<<<<<<<<< + * i = A_uids[idx] + * j = A_iids[idx] */ - goto __pyx_L4_break; + if (unlikely(!__pyx_v_A.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("A"); __PYX_ERR(0, 282, __pyx_L12_error) } + __pyx_t_21 = (__pyx_v_A.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + double __pyx_parallel_temp4 = ((double)__PYX_NAN()); + double __pyx_parallel_temp5 = ((double)__PYX_NAN()); + double __pyx_parallel_temp6 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_23 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((double)__PYX_NAN()); + __pyx_v_score = ((double)__PYX_NAN()); - /* "View.MemoryView":1125 - * - * for i in range(ndim - 1, -1, -1): - * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< - * c_stride = mslice.strides[i] - * break + /* "cornac/models/efm/recom_efm.pyx":283 + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): + * i = A_uids[idx] # <<<<<<<<<<<<<< + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ */ - } - } - __pyx_L4_break:; + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i = (*((long *) ( /* dim=0 */ (__pyx_v_A_uids.data + __pyx_t_24 * __pyx_v_A_uids.strides[0]) ))); - /* "View.MemoryView":1129 - * break - * - * for i in range(ndim): # <<<<<<<<<<<<<< - * if mslice.shape[i] > 1: - * f_stride = mslice.strides[i] + /* "cornac/models/efm/recom_efm.pyx":284 + * for idx in prange(A.shape[0]): + * i = A_uids[idx] + * j = A_iids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) */ - __pyx_t_1 = __pyx_v_ndim; - __pyx_t_3 = __pyx_t_1; - for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { - __pyx_v_i = __pyx_t_4; + __pyx_t_24 = __pyx_v_idx; + __pyx_v_j = (*((long *) ( /* dim=0 */ (__pyx_v_A_iids.data + __pyx_t_24 * __pyx_v_A_iids.strides[0]) ))); - /* "View.MemoryView":1130 - * - * for i in range(ndim): - * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< - * f_stride = mslice.strides[i] - * break + /* "cornac/models/efm/recom_efm.pyx":285 + * i = A_uids[idx] + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ # <<<<<<<<<<<<<< + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] */ - __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); - if (__pyx_t_2) { + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = 0; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = 0; + __pyx_t_5 = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_27 * __pyx_v_U2.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 285, __pyx_L16_error) - /* "View.MemoryView":1131 - * for i in range(ndim): - * if mslice.shape[i] > 1: - * f_stride = mslice.strides[i] # <<<<<<<<<<<<<< - * break - * + /* "cornac/models/efm/recom_efm.pyx":286 + * j = A_iids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) # <<<<<<<<<<<<<< + * score = A[idx] + * loss += (prediction - score) * (prediction - score) */ - __pyx_v_f_stride = (__pyx_v_mslice->strides[__pyx_v_i]); + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = 0; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = 0; + __pyx_t_28 = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_latent_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_27 * __pyx_v_H1.strides[0]) ) + __pyx_t_26 * __pyx_v_H1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_24 * __pyx_v_H2.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 286, __pyx_L16_error) + __pyx_v_prediction = (__pyx_t_5 + __pyx_t_28); - /* "View.MemoryView":1132 - * if mslice.shape[i] > 1: - * f_stride = mslice.strides[i] - * break # <<<<<<<<<<<<<< - * - * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): + /* "cornac/models/efm/recom_efm.pyx":287 + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &U2[j, 0], 1) \ + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): */ - goto __pyx_L7_break; + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_A.data + __pyx_t_24 * __pyx_v_A.strides[0]) ))); - /* "View.MemoryView":1130 - * - * for i in range(ndim): - * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< - * f_stride = mslice.strides[i] - * break + /* "cornac/models/efm/recom_efm.pyx":288 + * + _dot(num_latent_factors, &H1[i, 0], 1, &H2[j, 0], 1) + * score = A[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] */ - } - } - __pyx_L7_break:; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - /* "View.MemoryView":1134 - * break - * - * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< - * return 'C' - * else: + /* "cornac/models/efm/recom_efm.pyx":289 + * score = A[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] */ - __pyx_t_2 = ((abs_py_ssize_t(__pyx_v_c_stride) <= abs_py_ssize_t(__pyx_v_f_stride)) != 0); - if (__pyx_t_2) { + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":1135 - * - * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): - * return 'C' # <<<<<<<<<<<<<< - * else: - * return 'F' + /* "cornac/models/efm/recom_efm.pyx":290 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] # <<<<<<<<<<<<<< + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] */ - __pyx_r = 'C'; - goto __pyx_L0; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_24 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":1134 - * break - * - * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< - * return 'C' - * else: + /* "cornac/models/efm/recom_efm.pyx":291 + * for k in range(num_explicit_factors): + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] # <<<<<<<<<<<<<< + * U2_numerator[j, k] += score * U1[i, k] + * U2_denominator[j, k] += prediction * U1[i, k] */ - } + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_24 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":1137 - * return 'C' - * else: - * return 'F' # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":292 + * U1_numerator[i, k] += score * U2[j, k] + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] # <<<<<<<<<<<<<< + * U2_denominator[j, k] += prediction * U1[i, k] * - * @cython.cdivision(True) */ - /*else*/ { - __pyx_r = 'F'; - goto __pyx_L0; - } + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))); - /* "View.MemoryView":1116 + /* "cornac/models/efm/recom_efm.pyx":293 + * U1_denominator[i, k] += prediction * U2[j, k] + * U2_numerator[j, k] += score * U1[i, k] + * U2_denominator[j, k] += prediction * U1[i, k] # <<<<<<<<<<<<<< * - * @cname('__pyx_get_best_slice_order') - * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< - * """ - * Figure out the best memory access order for a given slice. + * for k in range(num_latent_factors): */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )))); + } - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":1140 + /* "cornac/models/efm/recom_efm.pyx":295 + * U2_denominator[j, k] += prediction * U1[i, k] * - * @cython.cdivision(True) - * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< - * char *dst_data, Py_ssize_t *dst_strides, - * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, + * for k in range(num_latent_factors): # <<<<<<<<<<<<<< + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] */ + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; -static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t *__pyx_v_src_strides, char *__pyx_v_dst_data, Py_ssize_t *__pyx_v_dst_strides, Py_ssize_t *__pyx_v_src_shape, Py_ssize_t *__pyx_v_dst_shape, int __pyx_v_ndim, size_t __pyx_v_itemsize) { - CYTHON_UNUSED Py_ssize_t __pyx_v_i; - CYTHON_UNUSED Py_ssize_t __pyx_v_src_extent; - Py_ssize_t __pyx_v_dst_extent; - Py_ssize_t __pyx_v_src_stride; - Py_ssize_t __pyx_v_dst_stride; - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - Py_ssize_t __pyx_t_4; - Py_ssize_t __pyx_t_5; - Py_ssize_t __pyx_t_6; - - /* "View.MemoryView":1147 + /* "cornac/models/efm/recom_efm.pyx":296 * - * cdef Py_ssize_t i - * cdef Py_ssize_t src_extent = src_shape[0] # <<<<<<<<<<<<<< - * cdef Py_ssize_t dst_extent = dst_shape[0] - * cdef Py_ssize_t src_stride = src_strides[0] + * for k in range(num_latent_factors): + * H1_numerator[i, k] += score * H2[j, k] # <<<<<<<<<<<<<< + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] */ - __pyx_v_src_extent = (__pyx_v_src_shape[0]); + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H1_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_24 * __pyx_v_H2.strides[0]) ) + __pyx_t_25 * __pyx_v_H2.strides[1]) )))); - /* "View.MemoryView":1148 - * cdef Py_ssize_t i - * cdef Py_ssize_t src_extent = src_shape[0] - * cdef Py_ssize_t dst_extent = dst_shape[0] # <<<<<<<<<<<<<< - * cdef Py_ssize_t src_stride = src_strides[0] - * cdef Py_ssize_t dst_stride = dst_strides[0] + /* "cornac/models/efm/recom_efm.pyx":297 + * for k in range(num_latent_factors): + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] # <<<<<<<<<<<<<< + * H2_numerator[j, k] += score * H1[i, k] + * H2_denominator[j, k] += prediction * H1[i, k] */ - __pyx_v_dst_extent = (__pyx_v_dst_shape[0]); + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_24 * __pyx_v_H2.strides[1]) )))); - /* "View.MemoryView":1149 - * cdef Py_ssize_t src_extent = src_shape[0] - * cdef Py_ssize_t dst_extent = dst_shape[0] - * cdef Py_ssize_t src_stride = src_strides[0] # <<<<<<<<<<<<<< - * cdef Py_ssize_t dst_stride = dst_strides[0] + /* "cornac/models/efm/recom_efm.pyx":298 + * H1_numerator[i, k] += score * H2[j, k] + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] # <<<<<<<<<<<<<< + * H2_denominator[j, k] += prediction * H1[i, k] * */ - __pyx_v_src_stride = (__pyx_v_src_strides[0]); + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H2_numerator.diminfo[1].strides) += (__pyx_v_score * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_24 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))); - /* "View.MemoryView":1150 - * cdef Py_ssize_t dst_extent = dst_shape[0] - * cdef Py_ssize_t src_stride = src_strides[0] - * cdef Py_ssize_t dst_stride = dst_strides[0] # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":299 + * H1_denominator[i, k] += prediction * H2[j, k] + * H2_numerator[j, k] += score * H1[i, k] + * H2_denominator[j, k] += prediction * H1[i, k] # <<<<<<<<<<<<<< * - * if ndim == 1: + * for idx in prange(X.shape[0]): */ - __pyx_v_dst_stride = (__pyx_v_dst_strides[0]); + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += (__pyx_v_prediction * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_25 * __pyx_v_H1.strides[0]) ) + __pyx_t_24 * __pyx_v_H1.strides[1]) )))); + } + goto __pyx_L23; + __pyx_L16_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L22; + __pyx_L22:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates30) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L23:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":1152 - * cdef Py_ssize_t dst_stride = dst_strides[0] + /* "cornac/models/efm/recom_efm.pyx":301 + * H2_denominator[j, k] += prediction * H1[i, k] * - * if ndim == 1: # <<<<<<<<<<<<<< - * if (src_stride > 0 and dst_stride > 0 and - * src_stride == itemsize == dst_stride): + * for idx in prange(X.shape[0]): # <<<<<<<<<<<<<< + * i = X_uids[idx] + * j = X_aids[idx] */ - __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); - if (__pyx_t_1) { + if (unlikely(!__pyx_v_X.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("X"); __PYX_ERR(0, 301, __pyx_L12_error) } + __pyx_t_23 = (__pyx_v_X.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + double __pyx_parallel_temp4 = ((double)__PYX_NAN()); + double __pyx_parallel_temp5 = ((double)__PYX_NAN()); + double __pyx_parallel_temp6 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_21 = (__pyx_t_23 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_21 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((double)__PYX_NAN()); + __pyx_v_score = ((double)__PYX_NAN()); - /* "View.MemoryView":1153 + /* "cornac/models/efm/recom_efm.pyx":302 * - * if ndim == 1: - * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< - * src_stride == itemsize == dst_stride): - * memcpy(dst_data, src_data, itemsize * dst_extent) + * for idx in prange(X.shape[0]): + * i = X_uids[idx] # <<<<<<<<<<<<<< + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) */ - __pyx_t_2 = ((__pyx_v_src_stride > 0) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L5_bool_binop_done; - } - __pyx_t_2 = ((__pyx_v_dst_stride > 0) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L5_bool_binop_done; - } + __pyx_t_24 = __pyx_v_idx; + __pyx_v_i = (*((long *) ( /* dim=0 */ (__pyx_v_X_uids.data + __pyx_t_24 * __pyx_v_X_uids.strides[0]) ))); - /* "View.MemoryView":1154 - * if ndim == 1: - * if (src_stride > 0 and dst_stride > 0 and - * src_stride == itemsize == dst_stride): # <<<<<<<<<<<<<< - * memcpy(dst_data, src_data, itemsize * dst_extent) - * else: + /* "cornac/models/efm/recom_efm.pyx":303 + * for idx in prange(X.shape[0]): + * i = X_uids[idx] + * j = X_aids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] */ - __pyx_t_2 = (((size_t)__pyx_v_src_stride) == __pyx_v_itemsize); - if (__pyx_t_2) { - __pyx_t_2 = (__pyx_v_itemsize == ((size_t)__pyx_v_dst_stride)); - } - __pyx_t_3 = (__pyx_t_2 != 0); - __pyx_t_1 = __pyx_t_3; - __pyx_L5_bool_binop_done:; + __pyx_t_24 = __pyx_v_idx; + __pyx_v_j = (*((long *) ( /* dim=0 */ (__pyx_v_X_aids.data + __pyx_t_24 * __pyx_v_X_aids.strides[0]) ))); - /* "View.MemoryView":1153 - * - * if ndim == 1: - * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< - * src_stride == itemsize == dst_stride): - * memcpy(dst_data, src_data, itemsize * dst_extent) + /* "cornac/models/efm/recom_efm.pyx":304 + * i = X_uids[idx] + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< + * score = X[idx] + * loss += (prediction - score) * (prediction - score) */ - if (__pyx_t_1) { + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = 0; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = 0; + __pyx_t_28 = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 304, __pyx_L26_error) + __pyx_v_prediction = __pyx_t_28; - /* "View.MemoryView":1155 - * if (src_stride > 0 and dst_stride > 0 and - * src_stride == itemsize == dst_stride): - * memcpy(dst_data, src_data, itemsize * dst_extent) # <<<<<<<<<<<<<< - * else: - * for i in range(dst_extent): + /* "cornac/models/efm/recom_efm.pyx":305 + * j = X_aids[idx] + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): */ - (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, (__pyx_v_itemsize * __pyx_v_dst_extent))); + __pyx_t_27 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_X.data + __pyx_t_27 * __pyx_v_X.strides[0]) ))); - /* "View.MemoryView":1153 - * - * if ndim == 1: - * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< - * src_stride == itemsize == dst_stride): - * memcpy(dst_data, src_data, itemsize * dst_extent) + /* "cornac/models/efm/recom_efm.pyx":306 + * prediction = _dot(num_explicit_factors, &U1[i, 0], 1, &V[j, 0], 1) + * score = X[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] */ - goto __pyx_L4; - } + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - /* "View.MemoryView":1157 - * memcpy(dst_data, src_data, itemsize * dst_extent) - * else: - * for i in range(dst_extent): # <<<<<<<<<<<<<< - * memcpy(dst_data, src_data, itemsize) - * src_data += src_stride - */ - /*else*/ { - __pyx_t_4 = __pyx_v_dst_extent; - __pyx_t_5 = __pyx_t_4; - for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { - __pyx_v_i = __pyx_t_6; - - /* "View.MemoryView":1158 - * else: - * for i in range(dst_extent): - * memcpy(dst_data, src_data, itemsize) # <<<<<<<<<<<<<< - * src_data += src_stride - * dst_data += dst_stride + /* "cornac/models/efm/recom_efm.pyx":307 + * score = X[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] */ - (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, __pyx_v_itemsize)); + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; - /* "View.MemoryView":1159 - * for i in range(dst_extent): - * memcpy(dst_data, src_data, itemsize) - * src_data += src_stride # <<<<<<<<<<<<<< - * dst_data += dst_stride - * else: + /* "cornac/models/efm/recom_efm.pyx":308 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] # <<<<<<<<<<<<<< + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] */ - __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_27 * __pyx_v_U1.strides[0]) ) + __pyx_t_26 * __pyx_v_U1.strides[1]) )))); - /* "View.MemoryView":1160 - * memcpy(dst_data, src_data, itemsize) - * src_data += src_stride - * dst_data += dst_stride # <<<<<<<<<<<<<< - * else: - * for i in range(dst_extent): + /* "cornac/models/efm/recom_efm.pyx":309 + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] # <<<<<<<<<<<<<< + * U1_numerator[i, k] += lambda_x * score * V[j, k] + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] */ - __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); - } - } - __pyx_L4:; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_26 * __pyx_v_U1.strides[0]) ) + __pyx_t_27 * __pyx_v_U1.strides[1]) )))); - /* "View.MemoryView":1152 - * cdef Py_ssize_t dst_stride = dst_strides[0] + /* "cornac/models/efm/recom_efm.pyx":310 + * V_numerator[j, k] += lambda_x * score * U1[i, k] + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] # <<<<<<<<<<<<<< + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] * - * if ndim == 1: # <<<<<<<<<<<<<< - * if (src_stride > 0 and dst_stride > 0 and - * src_stride == itemsize == dst_stride): - */ - goto __pyx_L3; - } - - /* "View.MemoryView":1162 - * dst_data += dst_stride - * else: - * for i in range(dst_extent): # <<<<<<<<<<<<<< - * _copy_strided_to_strided(src_data, src_strides + 1, - * dst_data, dst_strides + 1, */ - /*else*/ { - __pyx_t_4 = __pyx_v_dst_extent; - __pyx_t_5 = __pyx_t_4; - for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { - __pyx_v_i = __pyx_t_6; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_U1_numerator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_27 * __pyx_v_V.strides[0]) ) + __pyx_t_26 * __pyx_v_V.strides[1]) )))); - /* "View.MemoryView":1163 - * else: - * for i in range(dst_extent): - * _copy_strided_to_strided(src_data, src_strides + 1, # <<<<<<<<<<<<<< - * dst_data, dst_strides + 1, - * src_shape + 1, dst_shape + 1, + /* "cornac/models/efm/recom_efm.pyx":311 + * V_denominator[j, k] += lambda_x * prediction * U1[i, k] + * U1_numerator[i, k] += lambda_x * score * V[j, k] + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] # <<<<<<<<<<<<<< + * + * for idx in prange(Y.shape[0]): */ - _copy_strided_to_strided(__pyx_v_src_data, (__pyx_v_src_strides + 1), __pyx_v_dst_data, (__pyx_v_dst_strides + 1), (__pyx_v_src_shape + 1), (__pyx_v_dst_shape + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize); + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += ((__pyx_v_lambda_x * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) )))); + } + goto __pyx_L31; + __pyx_L26_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L30; + __pyx_L30:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates31) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L31:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":1167 - * src_shape + 1, dst_shape + 1, - * ndim - 1, itemsize) - * src_data += src_stride # <<<<<<<<<<<<<< - * dst_data += dst_stride + /* "cornac/models/efm/recom_efm.pyx":313 + * U1_denominator[i, k] += lambda_x * prediction * V[j, k] * + * for idx in prange(Y.shape[0]): # <<<<<<<<<<<<<< + * i = Y_iids[idx] + * j = Y_aids[idx] */ - __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); + if (unlikely(!__pyx_v_Y.memview)) { __Pyx_RaiseUnboundMemoryviewSliceNogil("Y"); __PYX_ERR(0, 313, __pyx_L12_error) } + __pyx_t_21 = (__pyx_v_Y.shape[0]); + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + int __pyx_parallel_temp2 = ((int)0xbad0bad0); + int __pyx_parallel_temp3 = ((int)0xbad0bad0); + double __pyx_parallel_temp4 = ((double)__PYX_NAN()); + double __pyx_parallel_temp5 = ((double)__PYX_NAN()); + double __pyx_parallel_temp6 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_23 = (__pyx_t_21 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_23 > 0) + { + #ifdef _OPENMP + #pragma omp for lastprivate(__pyx_v_i) firstprivate(__pyx_v_idx) lastprivate(__pyx_v_idx) lastprivate(__pyx_v_j) lastprivate(__pyx_v_k) lastprivate(__pyx_v_prediction) lastprivate(__pyx_v_score) + #endif /* _OPENMP */ + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_23; __pyx_t_22++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_idx = (int)(0 + 1 * __pyx_t_22); + /* Initialize private variables to invalid values */ + __pyx_v_i = ((int)0xbad0bad0); + __pyx_v_j = ((int)0xbad0bad0); + __pyx_v_k = ((int)0xbad0bad0); + __pyx_v_prediction = ((double)__PYX_NAN()); + __pyx_v_score = ((double)__PYX_NAN()); - /* "View.MemoryView":1168 - * ndim - 1, itemsize) - * src_data += src_stride - * dst_data += dst_stride # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":314 * - * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, + * for idx in prange(Y.shape[0]): + * i = Y_iids[idx] # <<<<<<<<<<<<<< + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) */ - __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); - } - } - __pyx_L3:; + __pyx_t_27 = __pyx_v_idx; + __pyx_v_i = (*((long *) ( /* dim=0 */ (__pyx_v_Y_iids.data + __pyx_t_27 * __pyx_v_Y_iids.strides[0]) ))); - /* "View.MemoryView":1140 - * - * @cython.cdivision(True) - * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< - * char *dst_data, Py_ssize_t *dst_strides, - * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, + /* "cornac/models/efm/recom_efm.pyx":315 + * for idx in prange(Y.shape[0]): + * i = Y_iids[idx] + * j = Y_aids[idx] # <<<<<<<<<<<<<< + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] */ + __pyx_t_27 = __pyx_v_idx; + __pyx_v_j = (*((long *) ( /* dim=0 */ (__pyx_v_Y_aids.data + __pyx_t_27 * __pyx_v_Y_aids.strides[0]) ))); - /* function exit code */ -} - -/* "View.MemoryView":1170 - * dst_data += dst_stride - * - * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *dst, - * int ndim, size_t itemsize) nogil: + /* "cornac/models/efm/recom_efm.pyx":316 + * i = Y_iids[idx] + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) # <<<<<<<<<<<<<< + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) */ + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = 0; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = 0; + __pyx_t_28 = __pyx_fuse_1__pyx_f_6cornac_6models_3efm_9recom_efm__dot(__pyx_v_num_explicit_factors, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_27 * __pyx_v_U2.strides[0]) ) + __pyx_t_26 * __pyx_v_U2.strides[1]) )))), 1, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))), 1); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 316, __pyx_L34_error) + __pyx_v_prediction = __pyx_t_28; -static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize) { - - /* "View.MemoryView":1173 - * __Pyx_memviewslice *dst, - * int ndim, size_t itemsize) nogil: - * _copy_strided_to_strided(src.data, src.strides, dst.data, dst.strides, # <<<<<<<<<<<<<< - * src.shape, dst.shape, ndim, itemsize) - * + /* "cornac/models/efm/recom_efm.pyx":317 + * j = Y_aids[idx] + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] # <<<<<<<<<<<<<< + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): */ - _copy_strided_to_strided(__pyx_v_src->data, __pyx_v_src->strides, __pyx_v_dst->data, __pyx_v_dst->strides, __pyx_v_src->shape, __pyx_v_dst->shape, __pyx_v_ndim, __pyx_v_itemsize); + __pyx_t_24 = __pyx_v_idx; + __pyx_v_score = (*((double *) ( /* dim=0 */ (__pyx_v_Y.data + __pyx_t_24 * __pyx_v_Y.strides[0]) ))); - /* "View.MemoryView":1170 - * dst_data += dst_stride - * - * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *dst, - * int ndim, size_t itemsize) nogil: + /* "cornac/models/efm/recom_efm.pyx":318 + * prediction = _dot(num_explicit_factors, &U2[i, 0], 1, &V[j, 0], 1) + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) # <<<<<<<<<<<<<< + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] */ + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_prediction - __pyx_v_score) * (__pyx_v_prediction - __pyx_v_score))); - /* function exit code */ -} - -/* "View.MemoryView":1177 - * - * @cname('__pyx_memoryview_slice_get_size') - * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< - * "Return the size of the memory occupied by the slice in number of bytes" - * cdef Py_ssize_t shape, size = src.memview.view.itemsize + /* "cornac/models/efm/recom_efm.pyx":319 + * score = Y[idx] + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): # <<<<<<<<<<<<<< + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] */ + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_k = __pyx_t_30; -static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) { - Py_ssize_t __pyx_v_shape; - Py_ssize_t __pyx_v_size; - Py_ssize_t __pyx_r; - Py_ssize_t __pyx_t_1; - Py_ssize_t *__pyx_t_2; - Py_ssize_t *__pyx_t_3; - Py_ssize_t *__pyx_t_4; - - /* "View.MemoryView":1179 - * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: - * "Return the size of the memory occupied by the slice in number of bytes" - * cdef Py_ssize_t shape, size = src.memview.view.itemsize # <<<<<<<<<<<<<< - * - * for shape in src.shape[:ndim]: + /* "cornac/models/efm/recom_efm.pyx":320 + * loss += (prediction - score) * (prediction - score) + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] # <<<<<<<<<<<<<< + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] */ - __pyx_t_1 = __pyx_v_src->memview->view.itemsize; - __pyx_v_size = __pyx_t_1; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_V_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_24 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":1181 - * cdef Py_ssize_t shape, size = src.memview.view.itemsize - * - * for shape in src.shape[:ndim]: # <<<<<<<<<<<<<< - * size *= shape - * + /* "cornac/models/efm/recom_efm.pyx":321 + * for k in range(num_explicit_factors): + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] # <<<<<<<<<<<<<< + * U2_numerator[i, k] += lambda_y * score * V[j, k] + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] */ - __pyx_t_3 = (__pyx_v_src->shape + __pyx_v_ndim); - for (__pyx_t_4 = __pyx_v_src->shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { - __pyx_t_2 = __pyx_t_4; - __pyx_v_shape = (__pyx_t_2[0]); + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_j; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_24 * __pyx_v_U2.strides[1]) )))); - /* "View.MemoryView":1182 - * - * for shape in src.shape[:ndim]: - * size *= shape # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":322 + * V_numerator[j, k] += lambda_y * score * U2[i, k] + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] # <<<<<<<<<<<<<< + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] * - * return size */ - __pyx_v_size = (__pyx_v_size * __pyx_v_shape); - } + __pyx_t_24 = __pyx_v_j; + __pyx_t_25 = __pyx_v_k; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_U2_numerator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_score) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )))); - /* "View.MemoryView":1184 - * size *= shape - * - * return size # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":323 + * V_denominator[j, k] += lambda_y * prediction * U2[i, k] + * U2_numerator[i, k] += lambda_y * score * V[j, k] + * U2_denominator[i, k] += lambda_y * prediction * V[j, k] # <<<<<<<<<<<<<< * - * @cname('__pyx_fill_contig_strides_array') + * # update V */ - __pyx_r = __pyx_v_size; - goto __pyx_L0; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_k; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_k; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += ((__pyx_v_lambda_y * __pyx_v_prediction) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))); + } + goto __pyx_L39; + __pyx_L34_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L38; + __pyx_L38:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates32) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_idx; + __pyx_parallel_temp2 = __pyx_v_j; + __pyx_parallel_temp3 = __pyx_v_k; + __pyx_parallel_temp4 = __pyx_v_loss; + __pyx_parallel_temp5 = __pyx_v_prediction; + __pyx_parallel_temp6 = __pyx_v_score; + } + __pyx_L39:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_idx = __pyx_parallel_temp1; + __pyx_v_j = __pyx_parallel_temp2; + __pyx_v_k = __pyx_parallel_temp3; + __pyx_v_loss = __pyx_parallel_temp4; + __pyx_v_prediction = __pyx_parallel_temp5; + __pyx_v_score = __pyx_parallel_temp6; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":1177 + /* "cornac/models/efm/recom_efm.pyx":326 * - * @cname('__pyx_memoryview_slice_get_size') - * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< - * "Return the size of the memory occupied by the slice in number of bytes" - * cdef Py_ssize_t shape, size = src.memview.view.itemsize + * # update V + * for i in prange(num_aspects): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] */ + __pyx_t_3 = __pyx_v_num_aspects; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + double __pyx_parallel_temp2 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_32 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_32 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_32; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":1187 - * - * @cname('__pyx_fill_contig_strides_array') - * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< - * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, - * int ndim, char order) nogil: + /* "cornac/models/efm/recom_efm.pyx":327 + * # update V + * for i in prange(num_aspects): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps */ + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; -static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, Py_ssize_t __pyx_v_stride, int __pyx_v_ndim, char __pyx_v_order) { - int __pyx_v_idx; - Py_ssize_t __pyx_r; - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - - /* "View.MemoryView":1196 - * cdef int idx - * - * if order == 'F': # <<<<<<<<<<<<<< - * for idx in range(ndim): - * strides[idx] = stride + /* "cornac/models/efm/recom_efm.pyx":328 + * for i in prange(num_aspects): + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] # <<<<<<<<<<<<<< + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) */ - __pyx_t_1 = ((__pyx_v_order == 'F') != 0); - if (__pyx_t_1) { + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_v * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_26 * __pyx_v_V.strides[0]) ) + __pyx_t_27 * __pyx_v_V.strides[1]) ))))); - /* "View.MemoryView":1197 + /* "cornac/models/efm/recom_efm.pyx":329 + * for j in range(num_explicit_factors): + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps # <<<<<<<<<<<<<< + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) * - * if order == 'F': - * for idx in range(ndim): # <<<<<<<<<<<<<< - * strides[idx] = stride - * stride *= shape[idx] - */ - __pyx_t_2 = __pyx_v_ndim; - __pyx_t_3 = __pyx_t_2; - for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { - __pyx_v_idx = __pyx_t_4; - - /* "View.MemoryView":1198 - * if order == 'F': - * for idx in range(ndim): - * strides[idx] = stride # <<<<<<<<<<<<<< - * stride *= shape[idx] - * else: - */ - (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; - - /* "View.MemoryView":1199 - * for idx in range(ndim): - * strides[idx] = stride - * stride *= shape[idx] # <<<<<<<<<<<<<< - * else: - * for idx in range(ndim - 1, -1, -1): */ - __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); - } + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_33 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_V_denominator.diminfo[1].strides) += (((((*((long *) ( /* dim=0 */ (__pyx_v_X_aspect_counts.data + __pyx_t_27 * __pyx_v_X_aspect_counts.strides[0]) ))) + (*((long *) ( /* dim=0 */ (__pyx_v_Y_aspect_counts.data + __pyx_t_26 * __pyx_v_Y_aspect_counts.strides[0]) )))) * __pyx_v_lambda_v) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_25 * __pyx_v_V.strides[0]) ) + __pyx_t_24 * __pyx_v_V.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":1196 - * cdef int idx + /* "cornac/models/efm/recom_efm.pyx":330 + * loss += lambda_v * V[i, j] * V[i, j] + * V_denominator[i, j] += (X_aspect_counts[i] + Y_aspect_counts[i]) * lambda_v * V[i, j] + eps + * V[i, j] *= sqrt(V_numerator[i, j] / V_denominator[i, j]) # <<<<<<<<<<<<<< * - * if order == 'F': # <<<<<<<<<<<<<< - * for idx in range(ndim): - * strides[idx] = stride - */ - goto __pyx_L3; - } - - /* "View.MemoryView":1201 - * stride *= shape[idx] - * else: - * for idx in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< - * strides[idx] = stride - * stride *= shape[idx] + * # update U1, H1 */ - /*else*/ { - for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) { - __pyx_v_idx = __pyx_t_2; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_numerator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_V_numerator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_V_numerator.diminfo[1].strides)); + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_V_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_V_denominator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_V_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 330, __pyx_L42_error) + } + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_V.data + __pyx_t_24 * __pyx_v_V.strides[0]) ) + __pyx_t_25 * __pyx_v_V.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L47; + __pyx_L42_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L46; + __pyx_L46:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates33) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L47:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":1202 - * else: - * for idx in range(ndim - 1, -1, -1): - * strides[idx] = stride # <<<<<<<<<<<<<< - * stride *= shape[idx] + /* "cornac/models/efm/recom_efm.pyx":333 * + * # update U1, H1 + * for i in prange(num_users): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] */ - (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; + __pyx_t_32 = __pyx_v_num_users; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + double __pyx_parallel_temp2 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_3 = (__pyx_t_32 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_3 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_3; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* "View.MemoryView":1203 - * for idx in range(ndim - 1, -1, -1): - * strides[idx] = stride - * stride *= shape[idx] # <<<<<<<<<<<<<< - * - * return stride + /* "cornac/models/efm/recom_efm.pyx":334 + * # update U1, H1 + * for i in prange(num_users): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps */ - __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); - } - } - __pyx_L3:; + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":1205 - * stride *= shape[idx] - * - * return stride # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_copy_data_to_temp') + /* "cornac/models/efm/recom_efm.pyx":335 + * for i in prange(num_users): + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] # <<<<<<<<<<<<<< + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) */ - __pyx_r = __pyx_v_stride; - goto __pyx_L0; + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_26 * __pyx_v_U1.strides[0]) ) + __pyx_t_27 * __pyx_v_U1.strides[1]) ))))); - /* "View.MemoryView":1187 - * - * @cname('__pyx_fill_contig_strides_array') - * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< - * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, - * int ndim, char order) nogil: + /* "cornac/models/efm/recom_efm.pyx":336 + * for j in range(num_explicit_factors): + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps # <<<<<<<<<<<<<< + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): */ + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_34 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_U1_denominator.diminfo[1].strides) += (((((*((long *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_27 * __pyx_v_A_user_counts.strides[0]) ))) + (*((long *) ( /* dim=0 */ (__pyx_v_X_user_counts.data + __pyx_t_26 * __pyx_v_X_user_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_24 * __pyx_v_U1.strides[0]) ) + __pyx_t_25 * __pyx_v_U1.strides[1]) )))) + __pyx_v_eps); - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":337 + * loss += lambda_u * U1[i, j] * U1[i, j] + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) # <<<<<<<<<<<<<< + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] + */ + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U1_numerator.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_U1_numerator.diminfo[1].strides)); + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U1_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_35 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 337, __pyx_L50_error) + } + __pyx_t_25 = __pyx_v_i; + __pyx_t_24 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U1.data + __pyx_t_25 * __pyx_v_U1.strides[0]) ) + __pyx_t_24 * __pyx_v_U1.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_35)); + } -/* "View.MemoryView":1208 - * - * @cname('__pyx_memoryview_copy_data_to_temp') - * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *tmpslice, - * char order, + /* "cornac/models/efm/recom_efm.pyx":338 + * U1_denominator[i, j] += (A_user_counts[i] + X_user_counts[i])* lambda_u * U1[i, j] + eps + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): # <<<<<<<<<<<<<< + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps */ + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; -static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_tmpslice, char __pyx_v_order, int __pyx_v_ndim) { - int __pyx_v_i; - void *__pyx_v_result; - size_t __pyx_v_itemsize; - size_t __pyx_v_size; - void *__pyx_r; - Py_ssize_t __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - struct __pyx_memoryview_obj *__pyx_t_4; - int __pyx_t_5; - int __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - - /* "View.MemoryView":1219 - * cdef void *result - * - * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< - * cdef size_t size = slice_get_size(src, ndim) - * + /* "cornac/models/efm/recom_efm.pyx":339 + * U1[i, j] *= sqrt(U1_numerator[i, j] / U1_denominator[i, j]) + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] # <<<<<<<<<<<<<< + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) */ - __pyx_t_1 = __pyx_v_src->memview->view.itemsize; - __pyx_v_itemsize = __pyx_t_1; + __pyx_t_24 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_24 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_26 * __pyx_v_H1.strides[0]) ) + __pyx_t_27 * __pyx_v_H1.strides[1]) ))))); - /* "View.MemoryView":1220 - * - * cdef size_t itemsize = src.memview.view.itemsize - * cdef size_t size = slice_get_size(src, ndim) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":340 + * for j in range(num_latent_factors): + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps # <<<<<<<<<<<<<< + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) * - * result = malloc(size) */ - __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim); + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_H1_denominator.diminfo[1].strides) += ((((*((long *) ( /* dim=0 */ (__pyx_v_A_user_counts.data + __pyx_t_27 * __pyx_v_A_user_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_26 * __pyx_v_H1.strides[0]) ) + __pyx_t_25 * __pyx_v_H1.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":1222 - * cdef size_t size = slice_get_size(src, ndim) + /* "cornac/models/efm/recom_efm.pyx":341 + * loss += lambda_h * H1[i, j] * H1[i, j] + * H1_denominator[i, j] += A_user_counts[i] * lambda_h * H1[i, j] + eps + * H1[i, j] *= sqrt(H1_numerator[i, j] / H1_denominator[i, j]) # <<<<<<<<<<<<<< * - * result = malloc(size) # <<<<<<<<<<<<<< - * if not result: - * _err(MemoryError, NULL) + * # update U2, H2 */ - __pyx_v_result = malloc(__pyx_v_size); + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_H1_numerator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H1_numerator.diminfo[1].strides)); + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H1_denominator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_H1_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 341, __pyx_L50_error) + } + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H1.data + __pyx_t_25 * __pyx_v_H1.strides[0]) ) + __pyx_t_26 * __pyx_v_H1.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L57; + __pyx_L50_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L56; + __pyx_L56:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates34) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L57:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } - /* "View.MemoryView":1223 - * - * result = malloc(size) - * if not result: # <<<<<<<<<<<<<< - * _err(MemoryError, NULL) + /* "cornac/models/efm/recom_efm.pyx":344 * + * # update U2, H2 + * for i in prange(num_items): # <<<<<<<<<<<<<< + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] */ - __pyx_t_2 = ((!(__pyx_v_result != 0)) != 0); - if (__pyx_t_2) { + __pyx_t_3 = __pyx_v_num_items; + { + int __pyx_parallel_temp0 = ((int)0xbad0bad0); + int __pyx_parallel_temp1 = ((int)0xbad0bad0); + double __pyx_parallel_temp2 = ((double)__PYX_NAN()); + const char *__pyx_parallel_filename = NULL; int __pyx_parallel_lineno = 0, __pyx_parallel_clineno = 0; + PyObject *__pyx_parallel_exc_type = NULL, *__pyx_parallel_exc_value = NULL, *__pyx_parallel_exc_tb = NULL; + int __pyx_parallel_why; + __pyx_parallel_why = 0; + __pyx_t_32 = (__pyx_t_3 - 0 + 1 - 1/abs(1)) / 1; + if (__pyx_t_32 > 0) + { + #ifdef _OPENMP + #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i) lastprivate(__pyx_v_j) + #endif /* _OPENMP */ + for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_32; __pyx_t_31++){ + if (__pyx_parallel_why < 2) + { + __pyx_v_i = (int)(0 + 1 * __pyx_t_31); + /* Initialize private variables to invalid values */ + __pyx_v_j = ((int)0xbad0bad0); - /* "View.MemoryView":1224 - * result = malloc(size) - * if not result: - * _err(MemoryError, NULL) # <<<<<<<<<<<<<< - * - * + /* "cornac/models/efm/recom_efm.pyx":345 + * # update U2, H2 + * for i in prange(num_items): + * for j in range(num_explicit_factors): # <<<<<<<<<<<<<< + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps */ - __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 1224, __pyx_L1_error) + __pyx_t_4 = __pyx_v_num_explicit_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":1223 - * - * result = malloc(size) - * if not result: # <<<<<<<<<<<<<< - * _err(MemoryError, NULL) - * + /* "cornac/models/efm/recom_efm.pyx":346 + * for i in prange(num_items): + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] # <<<<<<<<<<<<<< + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) */ - } + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_27 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_u * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_27 * __pyx_v_U2.strides[0]) ) + __pyx_t_33 * __pyx_v_U2.strides[1]) ))))); - /* "View.MemoryView":1227 - * - * - * tmpslice.data = result # <<<<<<<<<<<<<< - * tmpslice.memview = src.memview - * for i in range(ndim): + /* "cornac/models/efm/recom_efm.pyx":347 + * for j in range(num_explicit_factors): + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps # <<<<<<<<<<<<<< + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): */ - __pyx_v_tmpslice->data = ((char *)__pyx_v_result); + __pyx_t_33 = __pyx_v_i; + __pyx_t_27 = __pyx_v_i; + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_24 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_U2_denominator.diminfo[1].strides) += (((((*((long *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_33 * __pyx_v_A_item_counts.strides[0]) ))) + (*((long *) ( /* dim=0 */ (__pyx_v_Y_item_counts.data + __pyx_t_27 * __pyx_v_Y_item_counts.strides[0]) )))) * __pyx_v_lambda_u) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_25 * __pyx_v_U2.strides[0]) ) + __pyx_t_26 * __pyx_v_U2.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":1228 - * - * tmpslice.data = result - * tmpslice.memview = src.memview # <<<<<<<<<<<<<< - * for i in range(ndim): - * tmpslice.shape[i] = src.shape[i] + /* "cornac/models/efm/recom_efm.pyx":348 + * loss += lambda_u * U2[i, j] * U2[i, j] + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) # <<<<<<<<<<<<<< + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] */ - __pyx_t_4 = __pyx_v_src->memview; - __pyx_v_tmpslice->memview = __pyx_t_4; + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_U2_numerator.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_U2_numerator.diminfo[1].strides)); + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_U2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_U2_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_35 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 348, __pyx_L60_error) + } + __pyx_t_26 = __pyx_v_i; + __pyx_t_25 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U2.data + __pyx_t_26 * __pyx_v_U2.strides[0]) ) + __pyx_t_25 * __pyx_v_U2.strides[1]) )) *= sqrt((__pyx_t_36 / __pyx_t_35)); + } - /* "View.MemoryView":1229 - * tmpslice.data = result - * tmpslice.memview = src.memview - * for i in range(ndim): # <<<<<<<<<<<<<< - * tmpslice.shape[i] = src.shape[i] - * tmpslice.suboffsets[i] = -1 + /* "cornac/models/efm/recom_efm.pyx":349 + * U2_denominator[i, j] += (A_item_counts[i] + Y_item_counts[i]) * lambda_u * U2[i, j] + eps + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): # <<<<<<<<<<<<<< + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps */ - __pyx_t_3 = __pyx_v_ndim; - __pyx_t_5 = __pyx_t_3; - for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { - __pyx_v_i = __pyx_t_6; + __pyx_t_4 = __pyx_v_num_latent_factors; + __pyx_t_29 = __pyx_t_4; + for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) { + __pyx_v_j = __pyx_t_30; - /* "View.MemoryView":1230 - * tmpslice.memview = src.memview - * for i in range(ndim): - * tmpslice.shape[i] = src.shape[i] # <<<<<<<<<<<<<< - * tmpslice.suboffsets[i] = -1 - * + /* "cornac/models/efm/recom_efm.pyx":350 + * U2[i, j] *= sqrt(U2_numerator[i, j] / U2_denominator[i, j]) + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] # <<<<<<<<<<<<<< + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) */ - (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]); + __pyx_t_25 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_27 = __pyx_v_i; + __pyx_t_33 = __pyx_v_j; + __pyx_v_loss = (__pyx_v_loss + ((__pyx_v_lambda_h * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_25 * __pyx_v_H2.strides[0]) ) + __pyx_t_26 * __pyx_v_H2.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_27 * __pyx_v_H2.strides[0]) ) + __pyx_t_33 * __pyx_v_H2.strides[1]) ))))); - /* "View.MemoryView":1231 - * for i in range(ndim): - * tmpslice.shape[i] = src.shape[i] - * tmpslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":351 + * for j in range(num_latent_factors): + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps # <<<<<<<<<<<<<< + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) * - * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, */ - (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L; - } + __pyx_t_33 = __pyx_v_i; + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_25 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_H2_denominator.diminfo[1].strides) += ((((*((long *) ( /* dim=0 */ (__pyx_v_A_item_counts.data + __pyx_t_33 * __pyx_v_A_item_counts.strides[0]) ))) * __pyx_v_lambda_h) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_27 * __pyx_v_H2.strides[0]) ) + __pyx_t_26 * __pyx_v_H2.strides[1]) )))) + __pyx_v_eps); - /* "View.MemoryView":1233 - * tmpslice.suboffsets[i] = -1 - * - * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, # <<<<<<<<<<<<<< - * ndim, order) + /* "cornac/models/efm/recom_efm.pyx":352 + * loss += lambda_h * H2[i, j] * H2[i, j] + * H2_denominator[i, j] += A_item_counts[i] * lambda_h * H2[i, j] + eps + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) # <<<<<<<<<<<<<< * + * if self.verbose: */ - (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order)); + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_t_35 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_H2_numerator.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_H2_numerator.diminfo[1].strides)); + __pyx_t_27 = __pyx_v_i; + __pyx_t_26 = __pyx_v_j; + __pyx_t_36 = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_H2_denominator.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_H2_denominator.diminfo[1].strides)); + if (unlikely(__pyx_t_36 == 0)) { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + __PYX_ERR(0, 352, __pyx_L60_error) + } + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_H2.data + __pyx_t_26 * __pyx_v_H2.strides[0]) ) + __pyx_t_27 * __pyx_v_H2.strides[1]) )) *= sqrt((__pyx_t_35 / __pyx_t_36)); + } + goto __pyx_L67; + __pyx_L60_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L66; + __pyx_L66:; + #ifdef _OPENMP + #pragma omp critical(__pyx_parallel_lastprivates35) + #endif /* _OPENMP */ + { + __pyx_parallel_temp0 = __pyx_v_i; + __pyx_parallel_temp1 = __pyx_v_j; + __pyx_parallel_temp2 = __pyx_v_loss; + } + __pyx_L67:; + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_why) + #endif /* _OPENMP */ + } + } + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + __pyx_v_i = __pyx_parallel_temp0; + __pyx_v_j = __pyx_parallel_temp1; + __pyx_v_loss = __pyx_parallel_temp2; + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L12_error; + } + } + } + goto __pyx_L69; + __pyx_L12_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #ifdef _OPENMP + #pragma omp flush(__pyx_parallel_exc_type) + #endif /* _OPENMP */ + if (!__pyx_parallel_exc_type) { + __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb); + __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno; + __Pyx_GOTREF(__pyx_parallel_exc_type); + } + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_parallel_why = 4; + goto __pyx_L69; + __pyx_L69:; + #ifdef _OPENMP + Py_END_ALLOW_THREADS + #else +{ +#ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + #endif /* _OPENMP */ + /* Clean up any temporaries */ + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + #ifndef _OPENMP +} +#endif /* _OPENMP */ + } + if (__pyx_parallel_exc_type) { + /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */ + __pyx_parallel_why = 4; + } + if (__pyx_parallel_why) { + switch (__pyx_parallel_why) { + case 4: + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_GIVEREF(__pyx_parallel_exc_type); + __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb); + __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno; + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + goto __pyx_L8_error; + } + } + } + #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))) + #undef likely + #undef unlikely + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #endif + } - /* "View.MemoryView":1237 - * + /* "cornac/models/efm/recom_efm.pyx":280 + * H2_denominator.fill(0) * - * for i in range(ndim): # <<<<<<<<<<<<<< - * if tmpslice.shape[i] == 1: - * tmpslice.strides[i] = 0 + * with nogil, parallel(num_threads=num_threads): # <<<<<<<<<<<<<< + * # compute numerators and denominators for all factors + * for idx in prange(A.shape[0]): */ - __pyx_t_3 = __pyx_v_ndim; - __pyx_t_5 = __pyx_t_3; - for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { - __pyx_v_i = __pyx_t_6; + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L9; + } + __pyx_L8_error: { + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L1_error; + } + __pyx_L9:; + } + } - /* "View.MemoryView":1238 + /* "cornac/models/efm/recom_efm.pyx":354 + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) * - * for i in range(ndim): - * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< - * tmpslice.strides[i] = 0 + * if self.verbose: # <<<<<<<<<<<<<< + * print('iter: %d, loss: %f' % (t, loss)) * */ - __pyx_t_2 = (((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1) != 0); - if (__pyx_t_2) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 354, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_37 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_37 < 0))) __PYX_ERR(0, 354, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_37) { - /* "View.MemoryView":1239 - * for i in range(ndim): - * if tmpslice.shape[i] == 1: - * tmpslice.strides[i] = 0 # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":355 * - * if slice_is_contig(src[0], order, ndim): + * if self.verbose: + * print('iter: %d, loss: %f' % (t, loss)) # <<<<<<<<<<<<<< + * + * if self.verbose: */ - (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0; + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_23 = 0; + __pyx_t_38 = 127; + __Pyx_INCREF(__pyx_kp_u_iter); + __pyx_t_23 += 6; + __Pyx_GIVEREF(__pyx_kp_u_iter); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_iter); + __pyx_t_6 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_t), __pyx_n_u_d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_38 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_38) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_38; + __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_kp_u_loss); + __pyx_t_23 += 8; + __Pyx_GIVEREF(__pyx_kp_u_loss); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_loss); + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_loss); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_Format(__pyx_t_6, __pyx_n_u_f); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_38 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_38) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_38; + __pyx_t_23 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_23, __pyx_t_38); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":1238 + /* "cornac/models/efm/recom_efm.pyx":354 + * H2[i, j] *= sqrt(H2_numerator[i, j] / H2_denominator[i, j]) * - * for i in range(ndim): - * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< - * tmpslice.strides[i] = 0 + * if self.verbose: # <<<<<<<<<<<<<< + * print('iter: %d, loss: %f' % (t, loss)) * */ } - } - /* "View.MemoryView":1241 - * tmpslice.strides[i] = 0 + /* "cornac/models/efm/recom_efm.pyx":267 + * floating eps = 1e-9 * - * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< - * memcpy(result, src.data, size) - * else: + * for t in range(1, self.max_iter + 1): # <<<<<<<<<<<<<< + * loss = 0. + * U1_numerator.fill(0) */ - __pyx_t_2 = (__pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim) != 0); - if (__pyx_t_2) { + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1242 + /* "cornac/models/efm/recom_efm.pyx":357 + * print('iter: %d, loss: %f' % (t, loss)) * - * if slice_is_contig(src[0], order, ndim): - * memcpy(result, src.data, size) # <<<<<<<<<<<<<< - * else: - * copy_strided_to_strided(src, tmpslice, ndim, itemsize) - */ - (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size)); - - /* "View.MemoryView":1241 - * tmpslice.strides[i] = 0 + * if self.verbose: # <<<<<<<<<<<<<< + * print('Optimization finished!') * - * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< - * memcpy(result, src.data, size) - * else: */ - goto __pyx_L9; - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_37 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_37 < 0))) __PYX_ERR(0, 357, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_37) { - /* "View.MemoryView":1244 - * memcpy(result, src.data, size) - * else: - * copy_strided_to_strided(src, tmpslice, ndim, itemsize) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":358 * - * return result + * if self.verbose: + * print('Optimization finished!') # <<<<<<<<<<<<<< + * + * def _build_matrices(self, data_set): */ - /*else*/ { - copy_strided_to_strided(__pyx_v_src, __pyx_v_tmpslice, __pyx_v_ndim, __pyx_v_itemsize); - } - __pyx_L9:; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1246 - * copy_strided_to_strided(src, tmpslice, ndim, itemsize) - * - * return result # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":357 + * print('iter: %d, loss: %f' % (t, loss)) * + * if self.verbose: # <<<<<<<<<<<<<< + * print('Optimization finished!') * */ - __pyx_r = __pyx_v_result; - goto __pyx_L0; + } - /* "View.MemoryView":1208 + /* "cornac/models/efm/recom_efm.pyx":228 * - * @cname('__pyx_memoryview_copy_data_to_temp') - * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *tmpslice, - * char order, + * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def _fit_efm(self, int num_threads, */ /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; __pyx_L1_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_AddTraceback("View.MemoryView.copy_data_to_temp", __pyx_clineno, __pyx_lineno, __pyx_filename); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - } + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._fit_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; + goto __pyx_L2; __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_H2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U1_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_U2_numerator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_denominator.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_V_numerator.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_U1_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_U1_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_U2_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_U2_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_V_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_V_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_H1_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_H1_denominator); + __Pyx_XDECREF((PyObject *)__pyx_v_H2_numerator); + __Pyx_XDECREF((PyObject *)__pyx_v_H2_denominator); + __Pyx_XDECREF(__pyx_v_t); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "View.MemoryView":1251 +/* "cornac/models/efm/recom_efm.pyx":360 + * print('Optimization finished!') * - * @cname('__pyx_memoryview_err_extents') - * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< - * Py_ssize_t extent2) except -1 with gil: - * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + * def _build_matrices(self, data_set): # <<<<<<<<<<<<<< + * sentiment = self.train_set.sentiment + * ratings = [] */ -static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent1, Py_ssize_t __pyx_v_extent2) { - int __pyx_r; +/* Python wrapper */ +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_9_build_matrices(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_9_build_matrices = {"_build_matrices", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_9_build_matrices, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_9_build_matrices(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_data_set = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_build_matrices (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_data_set,0}; + PyObject* values[2] = {0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 360, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data_set)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 360, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_build_matrices", 1, 2, 2, 1); __PYX_ERR(0, 360, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_build_matrices") < 0)) __PYX_ERR(0, 360, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_self = values[0]; + __pyx_v_data_set = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_build_matrices", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 360, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._build_matrices", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_8_build_matrices(__pyx_self, __pyx_v_self, __pyx_v_data_set); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_8_build_matrices(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_data_set) { + PyObject *__pyx_v_sentiment = NULL; + PyObject *__pyx_v_ratings = NULL; + PyObject *__pyx_v_map_uid = NULL; + PyObject *__pyx_v_map_iid = NULL; + PyObject *__pyx_v_uid = NULL; + PyObject *__pyx_v_iid = NULL; + PyObject *__pyx_v_rating = NULL; + PyObject *__pyx_v_A = NULL; + PyObject *__pyx_v_attention_scores = NULL; + PyObject *__pyx_v_map_aspect_id = NULL; + PyObject *__pyx_v_sentiment_tup_ids_by_item = NULL; + PyObject *__pyx_v_user_aspects = NULL; + PyObject *__pyx_v_user_aspect_count = NULL; + PyObject *__pyx_v_aid = NULL; + PyObject *__pyx_v_count = NULL; + PyObject *__pyx_v_X = NULL; + PyObject *__pyx_v_quality_scores = NULL; + PyObject *__pyx_v_sentiment_tup_ids_by_user = NULL; + PyObject *__pyx_v_item_aspects = NULL; + PyObject *__pyx_v_item_aspect_count = NULL; + PyObject *__pyx_v_total_sentiment_by_aspect = NULL; + PyObject *__pyx_v_tup_id = NULL; + CYTHON_UNUSED PyObject *__pyx_v__ = NULL; + PyObject *__pyx_v_sentiment_polarity = NULL; + PyObject *__pyx_v_total_sentiment = NULL; + PyObject *__pyx_v_avg_sentiment = NULL; + PyObject *__pyx_v_Y = NULL; + PyObject *__pyx_7genexpr__pyx_v_tup_id = NULL; + PyObject *__pyx_7genexpr__pyx_v_tup = NULL; + PyObject *__pyx_8genexpr1__pyx_v_tup_id = NULL; + PyObject *__pyx_8genexpr1__pyx_v_tup = NULL; + PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; + int __pyx_t_4; + Py_ssize_t __pyx_t_5; + PyObject *(*__pyx_t_6)(PyObject *); + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *(*__pyx_t_10)(PyObject *); + int __pyx_t_11; + int __pyx_t_12; + int __pyx_t_13; + Py_ssize_t __pyx_t_14; + int __pyx_t_15; + Py_ssize_t __pyx_t_16; + Py_ssize_t __pyx_t_17; + int __pyx_t_18; + Py_ssize_t __pyx_t_19; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_RefNannySetupContext("_err_extents", 0); + __Pyx_RefNannySetupContext("_build_matrices", 0); - /* "View.MemoryView":1254 - * Py_ssize_t extent2) except -1 with gil: - * raise ValueError("got differing extents in dimension %d (got %d and %d)" % - * (i, extent1, extent2)) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":361 * - * @cname('__pyx_memoryview_err_dim') + * def _build_matrices(self, data_set): + * sentiment = self.train_set.sentiment # <<<<<<<<<<<<<< + * ratings = [] + * map_uid = [] */ - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1254, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 361, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1254, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 361, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); - __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_sentiment = __pyx_t_2; __pyx_t_2 = 0; - __pyx_t_3 = 0; - /* "View.MemoryView":1253 - * cdef int _err_extents(int i, Py_ssize_t extent1, - * Py_ssize_t extent2) except -1 with gil: - * raise ValueError("got differing extents in dimension %d (got %d and %d)" % # <<<<<<<<<<<<<< - * (i, extent1, extent2)) - * + /* "cornac/models/efm/recom_efm.pyx":362 + * def _build_matrices(self, data_set): + * sentiment = self.train_set.sentiment + * ratings = [] # <<<<<<<<<<<<<< + * map_uid = [] + * map_iid = [] */ - __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __PYX_ERR(2, 1253, __pyx_L1_error) + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 362, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_ratings = __pyx_t_2; + __pyx_t_2 = 0; - /* "View.MemoryView":1251 + /* "cornac/models/efm/recom_efm.pyx":363 + * sentiment = self.train_set.sentiment + * ratings = [] + * map_uid = [] # <<<<<<<<<<<<<< + * map_iid = [] * - * @cname('__pyx_memoryview_err_extents') - * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< - * Py_ssize_t extent2) except -1 with gil: - * raise ValueError("got differing extents in dimension %d (got %d and %d)" % */ + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 363, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_map_uid = __pyx_t_2; + __pyx_t_2 = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("View.MemoryView._err_extents", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __Pyx_RefNannyFinishContext(); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - return __pyx_r; -} - -/* "View.MemoryView":1257 - * - * @cname('__pyx_memoryview_err_dim') - * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< - * raise error(msg.decode('ascii') % dim) + /* "cornac/models/efm/recom_efm.pyx":364 + * ratings = [] + * map_uid = [] + * map_iid = [] # <<<<<<<<<<<<<< * + * for uid, iid, rating in data_set.uir_iter(): */ + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 364, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_map_iid = __pyx_t_2; + __pyx_t_2 = 0; -static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg, int __pyx_v_dim) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_RefNannySetupContext("_err_dim", 0); - __Pyx_INCREF(__pyx_v_error); - - /* "View.MemoryView":1258 - * @cname('__pyx_memoryview_err_dim') - * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: - * raise error(msg.decode('ascii') % dim) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":366 + * map_iid = [] * - * @cname('__pyx_memoryview_err') + * for uid, iid, rating in data_set.uir_iter(): # <<<<<<<<<<<<<< + * if self.train_set.is_unk_user(uid) or self.train_set.is_unk_item(iid): + * continue */ - __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_INCREF(__pyx_v_error); - __pyx_t_3 = __pyx_v_error; __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_data_set, __pyx_n_s_uir_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; } } - __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(2, 1258, __pyx_L1_error) + { + PyObject *__pyx_callargs[1] = {__pyx_t_3, }; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { + __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0; + __pyx_t_6 = NULL; + } else { + __pyx_t_5 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 366, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 366, __pyx_L1_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } else { + if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 366, __pyx_L1_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } + } else { + __pyx_t_2 = __pyx_t_6(__pyx_t_1); + if (unlikely(!__pyx_t_2)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 366, __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; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 366, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_3 = PyList_GET_ITEM(sequence, 0); + __pyx_t_7 = PyList_GET_ITEM(sequence, 1); + __pyx_t_8 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + #endif + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_9 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); + index = 0; __pyx_t_3 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 1; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L5_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + index = 2; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L5_unpacking_failed; + __Pyx_GOTREF(__pyx_t_8); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 3) < 0) __PYX_ERR(0, 366, __pyx_L1_error) + __pyx_t_10 = NULL; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L6_unpacking_done; + __pyx_L5_unpacking_failed:; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_10 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 366, __pyx_L1_error) + __pyx_L6_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_uid, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_XDECREF_SET(__pyx_v_iid, __pyx_t_7); + __pyx_t_7 = 0; + __Pyx_XDECREF_SET(__pyx_v_rating, __pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":1257 - * - * @cname('__pyx_memoryview_err_dim') - * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< - * raise error(msg.decode('ascii') % dim) + /* "cornac/models/efm/recom_efm.pyx":367 * + * for uid, iid, rating in data_set.uir_iter(): + * if self.train_set.is_unk_user(uid) or self.train_set.is_unk_item(iid): # <<<<<<<<<<<<<< + * continue + * ratings.append(rating) */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 367, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_is_unk_user); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 367, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_uid}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 367, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 367, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!__pyx_t_12) { + } else { + __pyx_t_11 = __pyx_t_12; + goto __pyx_L8_bool_binop_done; + } + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 367, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_is_unk_item); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 367, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_iid}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 367, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 367, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_11 = __pyx_t_12; + __pyx_L8_bool_binop_done:; + if (__pyx_t_11) { - /* 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("View.MemoryView._err_dim", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __Pyx_XDECREF(__pyx_v_error); - __Pyx_RefNannyFinishContext(); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - return __pyx_r; -} + /* "cornac/models/efm/recom_efm.pyx":368 + * for uid, iid, rating in data_set.uir_iter(): + * if self.train_set.is_unk_user(uid) or self.train_set.is_unk_item(iid): + * continue # <<<<<<<<<<<<<< + * ratings.append(rating) + * map_uid.append(uid) + */ + goto __pyx_L3_continue; -/* "View.MemoryView":1261 + /* "cornac/models/efm/recom_efm.pyx":367 * - * @cname('__pyx_memoryview_err') - * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< - * if msg != NULL: - * raise error(msg.decode('ascii')) + * for uid, iid, rating in data_set.uir_iter(): + * if self.train_set.is_unk_user(uid) or self.train_set.is_unk_item(iid): # <<<<<<<<<<<<<< + * continue + * ratings.append(rating) */ + } -static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_RefNannySetupContext("_err", 0); - __Pyx_INCREF(__pyx_v_error); - - /* "View.MemoryView":1262 - * @cname('__pyx_memoryview_err') - * cdef int _err(object error, char *msg) except -1 with gil: - * if msg != NULL: # <<<<<<<<<<<<<< - * raise error(msg.decode('ascii')) - * else: + /* "cornac/models/efm/recom_efm.pyx":369 + * if self.train_set.is_unk_user(uid) or self.train_set.is_unk_item(iid): + * continue + * ratings.append(rating) # <<<<<<<<<<<<<< + * map_uid.append(uid) + * map_iid.append(iid) */ - __pyx_t_1 = ((__pyx_v_msg != NULL) != 0); - if (unlikely(__pyx_t_1)) { + __pyx_t_13 = __Pyx_PyObject_Append(__pyx_v_ratings, __pyx_v_rating); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 369, __pyx_L1_error) - /* "View.MemoryView":1263 - * cdef int _err(object error, char *msg) except -1 with gil: - * if msg != NULL: - * raise error(msg.decode('ascii')) # <<<<<<<<<<<<<< - * else: - * raise error + /* "cornac/models/efm/recom_efm.pyx":370 + * continue + * ratings.append(rating) + * map_uid.append(uid) # <<<<<<<<<<<<<< + * map_iid.append(iid) + * */ - __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1263, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_error); - __pyx_t_4 = __pyx_v_error; __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1263, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_2, 0, 0, 0); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __PYX_ERR(2, 1263, __pyx_L1_error) + __pyx_t_13 = __Pyx_PyObject_Append(__pyx_v_map_uid, __pyx_v_uid); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 370, __pyx_L1_error) - /* "View.MemoryView":1262 - * @cname('__pyx_memoryview_err') - * cdef int _err(object error, char *msg) except -1 with gil: - * if msg != NULL: # <<<<<<<<<<<<<< - * raise error(msg.decode('ascii')) - * else: + /* "cornac/models/efm/recom_efm.pyx":371 + * ratings.append(rating) + * map_uid.append(uid) + * map_iid.append(iid) # <<<<<<<<<<<<<< + * + * ratings = np.asarray(ratings, dtype=np.float32).flatten() */ - } + __pyx_t_13 = __Pyx_PyObject_Append(__pyx_v_map_iid, __pyx_v_iid); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 371, __pyx_L1_error) - /* "View.MemoryView":1265 - * raise error(msg.decode('ascii')) - * else: - * raise error # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":366 + * map_iid = [] * - * @cname('__pyx_memoryview_copy_contents') + * for uid, iid, rating in data_set.uir_iter(): # <<<<<<<<<<<<<< + * if self.train_set.is_unk_user(uid) or self.train_set.is_unk_item(iid): + * continue */ - /*else*/ { - __Pyx_Raise(__pyx_v_error, 0, 0, 0); - __PYX_ERR(2, 1265, __pyx_L1_error) + __pyx_L3_continue:; } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1261 + /* "cornac/models/efm/recom_efm.pyx":373 + * map_iid.append(iid) * - * @cname('__pyx_memoryview_err') - * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< - * if msg != NULL: - * raise error(msg.decode('ascii')) + * ratings = np.asarray(ratings, dtype=np.float32).flatten() # <<<<<<<<<<<<<< + * map_uid = np.asarray(map_uid, dtype=np.int32).flatten() + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_ratings); + __Pyx_GIVEREF(__pyx_v_ratings); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_ratings); + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_9) < 0) __PYX_ERR(0, 373, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_flatten); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_9, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF_SET(__pyx_v_ratings, __pyx_t_1); + __pyx_t_1 = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView._err", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __Pyx_XDECREF(__pyx_v_error); - __Pyx_RefNannyFinishContext(); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif - return __pyx_r; -} - -/* "View.MemoryView":1268 + /* "cornac/models/efm/recom_efm.pyx":374 * - * @cname('__pyx_memoryview_copy_contents') - * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice dst, - * int src_ndim, int dst_ndim, + * ratings = np.asarray(ratings, dtype=np.float32).flatten() + * map_uid = np.asarray(map_uid, dtype=np.int32).flatten() # <<<<<<<<<<<<<< + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() + * A = sp.csr_matrix((ratings, (map_uid, map_iid)), */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 374, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_asarray); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 374, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 374, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_v_map_uid); + __Pyx_GIVEREF(__pyx_v_map_uid); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_map_uid); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 374, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 374, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_int32); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 374, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 374, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 374, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_flatten); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 374, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_3, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 374, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF_SET(__pyx_v_map_uid, __pyx_t_1); + __pyx_t_1 = 0; -static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_memviewslice __pyx_v_dst, int __pyx_v_src_ndim, int __pyx_v_dst_ndim, int __pyx_v_dtype_is_object) { - void *__pyx_v_tmpdata; - size_t __pyx_v_itemsize; - int __pyx_v_i; - char __pyx_v_order; - int __pyx_v_broadcasting; - int __pyx_v_direct_copy; - __Pyx_memviewslice __pyx_v_tmp; - int __pyx_v_ndim; - int __pyx_r; - Py_ssize_t __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - int __pyx_t_5; - int __pyx_t_6; - void *__pyx_t_7; - int __pyx_t_8; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - - /* "View.MemoryView":1276 - * Check for overlapping memory and verify the shapes. - * """ - * cdef void *tmpdata = NULL # <<<<<<<<<<<<<< - * cdef size_t itemsize = src.memview.view.itemsize - * cdef int i + /* "cornac/models/efm/recom_efm.pyx":375 + * ratings = np.asarray(ratings, dtype=np.float32).flatten() + * map_uid = np.asarray(map_uid, dtype=np.int32).flatten() + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() # <<<<<<<<<<<<<< + * A = sp.csr_matrix((ratings, (map_uid, map_iid)), + * shape=(self.train_set.num_users, self.train_set.num_items)) */ - __pyx_v_tmpdata = NULL; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 375, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 375, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 375, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_map_iid); + __Pyx_GIVEREF(__pyx_v_map_iid); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_map_iid); + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 375, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 375, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_int32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 375, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 375, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 375, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_flatten); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 375, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_8, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 375, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF_SET(__pyx_v_map_iid, __pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":1277 - * """ - * cdef void *tmpdata = NULL - * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< - * cdef int i - * cdef char order = get_best_order(&src, src_ndim) + /* "cornac/models/efm/recom_efm.pyx":376 + * map_uid = np.asarray(map_uid, dtype=np.int32).flatten() + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() + * A = sp.csr_matrix((ratings, (map_uid, map_iid)), # <<<<<<<<<<<<<< + * shape=(self.train_set.num_users, self.train_set.num_items)) + * */ - __pyx_t_1 = __pyx_v_src.memview->view.itemsize; - __pyx_v_itemsize = __pyx_t_1; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_sp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 376, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_csr_matrix); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 376, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 376, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_map_uid); + __Pyx_GIVEREF(__pyx_v_map_uid); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_map_uid); + __Pyx_INCREF(__pyx_v_map_iid); + __Pyx_GIVEREF(__pyx_v_map_iid); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_map_iid); + __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 376, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_ratings); + __Pyx_GIVEREF(__pyx_v_ratings); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_ratings); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 376, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":1279 - * cdef size_t itemsize = src.memview.view.itemsize - * cdef int i - * cdef char order = get_best_order(&src, src_ndim) # <<<<<<<<<<<<<< - * cdef bint broadcasting = False - * cdef bint direct_copy = False + /* "cornac/models/efm/recom_efm.pyx":377 + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() + * A = sp.csr_matrix((ratings, (map_uid, map_iid)), + * shape=(self.train_set.num_users, self.train_set.num_items)) # <<<<<<<<<<<<<< + * + * attention_scores = [] */ - __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim); + __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 377, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 377, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_users); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 377, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 377, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_num_items); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 377, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 377, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_9); + __pyx_t_3 = 0; + __pyx_t_9 = 0; + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_shape, __pyx_t_2) < 0) __PYX_ERR(0, 377, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":1280 - * cdef int i - * cdef char order = get_best_order(&src, src_ndim) - * cdef bint broadcasting = False # <<<<<<<<<<<<<< - * cdef bint direct_copy = False - * cdef __Pyx_memviewslice tmp + /* "cornac/models/efm/recom_efm.pyx":376 + * map_uid = np.asarray(map_uid, dtype=np.int32).flatten() + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() + * A = sp.csr_matrix((ratings, (map_uid, map_iid)), # <<<<<<<<<<<<<< + * shape=(self.train_set.num_users, self.train_set.num_items)) + * */ - __pyx_v_broadcasting = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 376, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_A = __pyx_t_2; + __pyx_t_2 = 0; - /* "View.MemoryView":1281 - * cdef char order = get_best_order(&src, src_ndim) - * cdef bint broadcasting = False - * cdef bint direct_copy = False # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice tmp + /* "cornac/models/efm/recom_efm.pyx":379 + * shape=(self.train_set.num_users, self.train_set.num_items)) * + * attention_scores = [] # <<<<<<<<<<<<<< + * map_uid = [] + * map_aspect_id = [] */ - __pyx_v_direct_copy = 0; + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 379, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_attention_scores = __pyx_t_2; + __pyx_t_2 = 0; - /* "View.MemoryView":1284 - * cdef __Pyx_memviewslice tmp + /* "cornac/models/efm/recom_efm.pyx":380 * - * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< - * broadcast_leading(&src, src_ndim, dst_ndim) - * elif dst_ndim < src_ndim: + * attention_scores = [] + * map_uid = [] # <<<<<<<<<<<<<< + * map_aspect_id = [] + * for uid, sentiment_tup_ids_by_item in sentiment.user_sentiment.items(): */ - __pyx_t_2 = ((__pyx_v_src_ndim < __pyx_v_dst_ndim) != 0); - if (__pyx_t_2) { + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 380, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF_SET(__pyx_v_map_uid, __pyx_t_2); + __pyx_t_2 = 0; - /* "View.MemoryView":1285 - * - * if src_ndim < dst_ndim: - * broadcast_leading(&src, src_ndim, dst_ndim) # <<<<<<<<<<<<<< - * elif dst_ndim < src_ndim: - * broadcast_leading(&dst, dst_ndim, src_ndim) + /* "cornac/models/efm/recom_efm.pyx":381 + * attention_scores = [] + * map_uid = [] + * map_aspect_id = [] # <<<<<<<<<<<<<< + * for uid, sentiment_tup_ids_by_item in sentiment.user_sentiment.items(): + * if self.train_set.is_unk_user(uid): */ - __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim); + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 381, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_map_aspect_id = __pyx_t_2; + __pyx_t_2 = 0; - /* "View.MemoryView":1284 - * cdef __Pyx_memviewslice tmp - * - * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< - * broadcast_leading(&src, src_ndim, dst_ndim) - * elif dst_ndim < src_ndim: + /* "cornac/models/efm/recom_efm.pyx":382 + * map_uid = [] + * map_aspect_id = [] + * for uid, sentiment_tup_ids_by_item in sentiment.user_sentiment.items(): # <<<<<<<<<<<<<< + * if self.train_set.is_unk_user(uid): + * continue */ - goto __pyx_L3; + __pyx_t_5 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_user_sentiment); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (unlikely(__pyx_t_8 == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 382, __pyx_L1_error) } + __pyx_t_1 = __Pyx_dict_iterator(__pyx_t_8, 0, __pyx_n_s_items, (&__pyx_t_14), (&__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_2); + __pyx_t_2 = __pyx_t_1; + __pyx_t_1 = 0; + while (1) { + __pyx_t_15 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_14, &__pyx_t_5, &__pyx_t_1, &__pyx_t_8, NULL, __pyx_t_4); + if (unlikely(__pyx_t_15 == 0)) break; + if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_t_8); + __Pyx_XDECREF_SET(__pyx_v_uid, __pyx_t_1); + __pyx_t_1 = 0; + __Pyx_XDECREF_SET(__pyx_v_sentiment_tup_ids_by_item, __pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":1286 - * if src_ndim < dst_ndim: - * broadcast_leading(&src, src_ndim, dst_ndim) - * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< - * broadcast_leading(&dst, dst_ndim, src_ndim) - * + /* "cornac/models/efm/recom_efm.pyx":383 + * map_aspect_id = [] + * for uid, sentiment_tup_ids_by_item in sentiment.user_sentiment.items(): + * if self.train_set.is_unk_user(uid): # <<<<<<<<<<<<<< + * continue + * user_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_item.values() */ - __pyx_t_2 = ((__pyx_v_dst_ndim < __pyx_v_src_ndim) != 0); - if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 383, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_is_unk_user); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 383, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_15 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_15 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_uid}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_15, 1+__pyx_t_15); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 383, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 383, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_11) { - /* "View.MemoryView":1287 - * broadcast_leading(&src, src_ndim, dst_ndim) - * elif dst_ndim < src_ndim: - * broadcast_leading(&dst, dst_ndim, src_ndim) # <<<<<<<<<<<<<< - * - * cdef int ndim = max(src_ndim, dst_ndim) + /* "cornac/models/efm/recom_efm.pyx":384 + * for uid, sentiment_tup_ids_by_item in sentiment.user_sentiment.items(): + * if self.train_set.is_unk_user(uid): + * continue # <<<<<<<<<<<<<< + * user_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_item.values() + * for tup in sentiment.sentiment[tup_id]] */ - __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim); + goto __pyx_L11_continue; - /* "View.MemoryView":1286 - * if src_ndim < dst_ndim: - * broadcast_leading(&src, src_ndim, dst_ndim) - * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< - * broadcast_leading(&dst, dst_ndim, src_ndim) - * + /* "cornac/models/efm/recom_efm.pyx":383 + * map_aspect_id = [] + * for uid, sentiment_tup_ids_by_item in sentiment.user_sentiment.items(): + * if self.train_set.is_unk_user(uid): # <<<<<<<<<<<<<< + * continue + * user_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_item.values() */ - } - __pyx_L3:; + } - /* "View.MemoryView":1289 - * broadcast_leading(&dst, dst_ndim, src_ndim) - * - * cdef int ndim = max(src_ndim, dst_ndim) # <<<<<<<<<<<<<< - * - * for i in range(ndim): + /* "cornac/models/efm/recom_efm.pyx":385 + * if self.train_set.is_unk_user(uid): + * continue + * user_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_item.values() # <<<<<<<<<<<<<< + * for tup in sentiment.sentiment[tup_id]] + * user_aspect_count = Counter(user_aspects) */ - __pyx_t_3 = __pyx_v_dst_ndim; - __pyx_t_4 = __pyx_v_src_ndim; - if (((__pyx_t_3 > __pyx_t_4) != 0)) { - __pyx_t_5 = __pyx_t_3; - } else { - __pyx_t_5 = __pyx_t_4; - } - __pyx_v_ndim = __pyx_t_5; + { /* enter inner scope */ + __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 385, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_16 = 0; + if (unlikely(__pyx_v_sentiment_tup_ids_by_item == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); + __PYX_ERR(0, 385, __pyx_L16_error) + } + __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_sentiment_tup_ids_by_item, 0, __pyx_n_s_values, (&__pyx_t_17), (&__pyx_t_15)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_7); + __pyx_t_7 = __pyx_t_1; + __pyx_t_1 = 0; + while (1) { + __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_7, __pyx_t_17, &__pyx_t_16, NULL, &__pyx_t_1, NULL, __pyx_t_15); + if (unlikely(__pyx_t_18 == 0)) break; + if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 385, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_tup_id, __pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":1291 - * cdef int ndim = max(src_ndim, dst_ndim) - * - * for i in range(ndim): # <<<<<<<<<<<<<< - * if src.shape[i] != dst.shape[i]: - * if src.shape[i] == 1: + /* "cornac/models/efm/recom_efm.pyx":386 + * continue + * user_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_item.values() + * for tup in sentiment.sentiment[tup_id]] # <<<<<<<<<<<<<< + * user_aspect_count = Counter(user_aspects) + * for aid, count in user_aspect_count.items(): */ - __pyx_t_5 = __pyx_v_ndim; - __pyx_t_3 = __pyx_t_5; - for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { - __pyx_v_i = __pyx_t_4; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 386, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_7genexpr__pyx_v_tup_id); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 386, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_t_9)) || PyTuple_CheckExact(__pyx_t_9)) { + __pyx_t_1 = __pyx_t_9; __Pyx_INCREF(__pyx_t_1); __pyx_t_19 = 0; + __pyx_t_6 = NULL; + } else { + __pyx_t_19 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 386, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 386, __pyx_L16_error) + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_9); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 386, __pyx_L16_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 386, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } else { + if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_19); __Pyx_INCREF(__pyx_t_9); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 386, __pyx_L16_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_1, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 386, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } + } else { + __pyx_t_9 = __pyx_t_6(__pyx_t_1); + if (unlikely(!__pyx_t_9)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 386, __pyx_L16_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_9); + } + __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_tup, __pyx_t_9); + __pyx_t_9 = 0; - /* "View.MemoryView":1292 - * - * for i in range(ndim): - * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< - * if src.shape[i] == 1: - * broadcasting = True + /* "cornac/models/efm/recom_efm.pyx":385 + * if self.train_set.is_unk_user(uid): + * continue + * user_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_item.values() # <<<<<<<<<<<<<< + * for tup in sentiment.sentiment[tup_id]] + * user_aspect_count = Counter(user_aspects) */ - __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])) != 0); - if (__pyx_t_2) { + __pyx_t_9 = __Pyx_GetItemInt(__pyx_7genexpr__pyx_v_tup, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 385, __pyx_L16_error) + __Pyx_GOTREF(__pyx_t_9); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_8, (PyObject*)__pyx_t_9))) __PYX_ERR(0, 385, __pyx_L16_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "View.MemoryView":1293 - * for i in range(ndim): - * if src.shape[i] != dst.shape[i]: - * if src.shape[i] == 1: # <<<<<<<<<<<<<< - * broadcasting = True - * src.strides[i] = 0 + /* "cornac/models/efm/recom_efm.pyx":386 + * continue + * user_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_item.values() + * for tup in sentiment.sentiment[tup_id]] # <<<<<<<<<<<<<< + * user_aspect_count = Counter(user_aspects) + * for aid, count in user_aspect_count.items(): */ - __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) == 1) != 0); - if (__pyx_t_2) { + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup); __pyx_7genexpr__pyx_v_tup = 0; + __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup_id); __pyx_7genexpr__pyx_v_tup_id = 0; + goto __pyx_L22_exit_scope; + __pyx_L16_error:; + __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup); __pyx_7genexpr__pyx_v_tup = 0; + __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup_id); __pyx_7genexpr__pyx_v_tup_id = 0; + goto __pyx_L1_error; + __pyx_L22_exit_scope:; + } /* exit inner scope */ + __Pyx_XDECREF_SET(__pyx_v_user_aspects, ((PyObject*)__pyx_t_8)); + __pyx_t_8 = 0; - /* "View.MemoryView":1294 - * if src.shape[i] != dst.shape[i]: - * if src.shape[i] == 1: - * broadcasting = True # <<<<<<<<<<<<<< - * src.strides[i] = 0 - * else: + /* "cornac/models/efm/recom_efm.pyx":387 + * user_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_item.values() + * for tup in sentiment.sentiment[tup_id]] + * user_aspect_count = Counter(user_aspects) # <<<<<<<<<<<<<< + * for aid, count in user_aspect_count.items(): + * attention_scores.append(self._compute_attention_score(count)) */ - __pyx_v_broadcasting = 1; + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_Counter); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 387, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = NULL; + __pyx_t_15 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_15 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_user_aspects}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_15, 1+__pyx_t_15); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 387, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_user_aspect_count, __pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":1295 - * if src.shape[i] == 1: - * broadcasting = True - * src.strides[i] = 0 # <<<<<<<<<<<<<< - * else: - * _err_extents(i, dst.shape[i], src.shape[i]) + /* "cornac/models/efm/recom_efm.pyx":388 + * for tup in sentiment.sentiment[tup_id]] + * user_aspect_count = Counter(user_aspects) + * for aid, count in user_aspect_count.items(): # <<<<<<<<<<<<<< + * attention_scores.append(self._compute_attention_score(count)) + * map_uid.append(uid) */ - (__pyx_v_src.strides[__pyx_v_i]) = 0; + __pyx_t_17 = 0; + if (unlikely(__pyx_v_user_aspect_count == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 388, __pyx_L1_error) + } + __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_user_aspect_count, 0, __pyx_n_s_items, (&__pyx_t_16), (&__pyx_t_15)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 388, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __pyx_t_8 = __pyx_t_7; + __pyx_t_7 = 0; + while (1) { + __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_8, __pyx_t_16, &__pyx_t_17, &__pyx_t_7, &__pyx_t_1, NULL, __pyx_t_15); + if (unlikely(__pyx_t_18 == 0)) break; + if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 388, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_aid, __pyx_t_7); + __pyx_t_7 = 0; + __Pyx_XDECREF_SET(__pyx_v_count, __pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":1293 - * for i in range(ndim): - * if src.shape[i] != dst.shape[i]: - * if src.shape[i] == 1: # <<<<<<<<<<<<<< - * broadcasting = True - * src.strides[i] = 0 + /* "cornac/models/efm/recom_efm.pyx":389 + * user_aspect_count = Counter(user_aspects) + * for aid, count in user_aspect_count.items(): + * attention_scores.append(self._compute_attention_score(count)) # <<<<<<<<<<<<<< + * map_uid.append(uid) + * map_aspect_id.append(aid) */ - goto __pyx_L7; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_compute_attention_score); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 389, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_9 = NULL; + __pyx_t_18 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_18 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_v_count}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_18, 1+__pyx_t_18); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 389, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } + __pyx_t_13 = __Pyx_PyObject_Append(__pyx_v_attention_scores, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 389, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1297 - * src.strides[i] = 0 - * else: - * _err_extents(i, dst.shape[i], src.shape[i]) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":390 + * for aid, count in user_aspect_count.items(): + * attention_scores.append(self._compute_attention_score(count)) + * map_uid.append(uid) # <<<<<<<<<<<<<< + * map_aspect_id.append(aid) * - * if src.suboffsets[i] >= 0: */ - /*else*/ { - __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 1297, __pyx_L1_error) - } - __pyx_L7:; + __pyx_t_13 = __Pyx_PyObject_Append(__pyx_v_map_uid, __pyx_v_uid); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 390, __pyx_L1_error) - /* "View.MemoryView":1292 + /* "cornac/models/efm/recom_efm.pyx":391 + * attention_scores.append(self._compute_attention_score(count)) + * map_uid.append(uid) + * map_aspect_id.append(aid) # <<<<<<<<<<<<<< * - * for i in range(ndim): - * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< - * if src.shape[i] == 1: - * broadcasting = True + * attention_scores = np.asarray(attention_scores, dtype=np.float32).flatten() */ + __pyx_t_13 = __Pyx_PyObject_Append(__pyx_v_map_aspect_id, __pyx_v_aid); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 391, __pyx_L1_error) } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_L11_continue:; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "View.MemoryView":1299 - * _err_extents(i, dst.shape[i], src.shape[i]) - * - * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< - * _err_dim(ValueError, "Dimension %d is not direct", i) + /* "cornac/models/efm/recom_efm.pyx":393 + * map_aspect_id.append(aid) * + * attention_scores = np.asarray(attention_scores, dtype=np.float32).flatten() # <<<<<<<<<<<<<< + * map_uid = np.asarray(map_uid, dtype=np.int32).flatten() + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() */ - __pyx_t_2 = (((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0) != 0); - if (__pyx_t_2) { + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_attention_scores); + __Pyx_GIVEREF(__pyx_v_attention_scores); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_attention_scores); + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_float32); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_flatten); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_3, }; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF_SET(__pyx_v_attention_scores, __pyx_t_2); + __pyx_t_2 = 0; - /* "View.MemoryView":1300 - * - * if src.suboffsets[i] >= 0: - * _err_dim(ValueError, "Dimension %d is not direct", i) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":394 * - * if slices_overlap(&src, &dst, ndim, itemsize): + * attention_scores = np.asarray(attention_scores, dtype=np.float32).flatten() + * map_uid = np.asarray(map_uid, dtype=np.int32).flatten() # <<<<<<<<<<<<<< + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() + * X = sp.csr_matrix((attention_scores, (map_uid, map_aspect_id)), */ - __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 1300, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 394, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 394, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 394, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_v_map_uid); + __Pyx_GIVEREF(__pyx_v_map_uid); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_map_uid); + __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 394, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 394, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 394, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_9) < 0) __PYX_ERR(0, 394, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 394, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_flatten); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 394, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_9, }; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 394, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF_SET(__pyx_v_map_uid, __pyx_t_2); + __pyx_t_2 = 0; - /* "View.MemoryView":1299 - * _err_extents(i, dst.shape[i], src.shape[i]) - * - * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< - * _err_dim(ValueError, "Dimension %d is not direct", i) - * + /* "cornac/models/efm/recom_efm.pyx":395 + * attention_scores = np.asarray(attention_scores, dtype=np.float32).flatten() + * map_uid = np.asarray(map_uid, dtype=np.int32).flatten() + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() # <<<<<<<<<<<<<< + * X = sp.csr_matrix((attention_scores, (map_uid, map_aspect_id)), + * shape=(self.train_set.num_users, sentiment.num_aspects)) */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 395, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_asarray); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 395, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 395, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_map_aspect_id); + __Pyx_GIVEREF(__pyx_v_map_aspect_id); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_map_aspect_id); + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 395, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 395, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_int32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 395, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 395, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 395, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_flatten); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 395, __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_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_4 = 1; } } + { + PyObject *__pyx_callargs[1] = {__pyx_t_1, }; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 395, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF_SET(__pyx_v_map_aspect_id, __pyx_t_2); + __pyx_t_2 = 0; - /* "View.MemoryView":1302 - * _err_dim(ValueError, "Dimension %d is not direct", i) - * - * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":396 + * map_uid = np.asarray(map_uid, dtype=np.int32).flatten() + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() + * X = sp.csr_matrix((attention_scores, (map_uid, map_aspect_id)), # <<<<<<<<<<<<<< + * shape=(self.train_set.num_users, sentiment.num_aspects)) * - * if not slice_is_contig(src, order, ndim): */ - __pyx_t_2 = (__pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize) != 0); - if (__pyx_t_2) { + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_sp); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_csr_matrix); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_map_uid); + __Pyx_GIVEREF(__pyx_v_map_uid); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_map_uid); + __Pyx_INCREF(__pyx_v_map_aspect_id); + __Pyx_GIVEREF(__pyx_v_map_aspect_id); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_map_aspect_id); + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_attention_scores); + __Pyx_GIVEREF(__pyx_v_attention_scores); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_attention_scores); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 396, __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; - /* "View.MemoryView":1304 - * if slices_overlap(&src, &dst, ndim, itemsize): - * - * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< - * order = get_best_order(&dst, ndim) + /* "cornac/models/efm/recom_efm.pyx":397 + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() + * X = sp.csr_matrix((attention_scores, (map_uid, map_aspect_id)), + * shape=(self.train_set.num_users, sentiment.num_aspects)) # <<<<<<<<<<<<<< * + * quality_scores = [] */ - __pyx_t_2 = ((!(__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim) != 0)) != 0); - if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_num_users); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_8); + __pyx_t_9 = 0; + __pyx_t_8 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_shape, __pyx_t_3) < 0) __PYX_ERR(0, 397, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "View.MemoryView":1305 - * - * if not slice_is_contig(src, order, ndim): - * order = get_best_order(&dst, ndim) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":396 + * map_uid = np.asarray(map_uid, dtype=np.int32).flatten() + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() + * X = sp.csr_matrix((attention_scores, (map_uid, map_aspect_id)), # <<<<<<<<<<<<<< + * shape=(self.train_set.num_users, sentiment.num_aspects)) * - * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) */ - __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim); + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_X = __pyx_t_3; + __pyx_t_3 = 0; - /* "View.MemoryView":1304 - * if slices_overlap(&src, &dst, ndim, itemsize): - * - * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< - * order = get_best_order(&dst, ndim) + /* "cornac/models/efm/recom_efm.pyx":399 + * shape=(self.train_set.num_users, sentiment.num_aspects)) * + * quality_scores = [] # <<<<<<<<<<<<<< + * map_iid = [] + * map_aspect_id = [] */ - } + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 399, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_quality_scores = __pyx_t_3; + __pyx_t_3 = 0; - /* "View.MemoryView":1307 - * order = get_best_order(&dst, ndim) + /* "cornac/models/efm/recom_efm.pyx":400 * - * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) # <<<<<<<<<<<<<< - * src = tmp + * quality_scores = [] + * map_iid = [] # <<<<<<<<<<<<<< + * map_aspect_id = [] * */ - __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(2, 1307, __pyx_L1_error) - __pyx_v_tmpdata = __pyx_t_7; + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 400, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_map_iid, __pyx_t_3); + __pyx_t_3 = 0; - /* "View.MemoryView":1308 - * - * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) - * src = tmp # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":401 + * quality_scores = [] + * map_iid = [] + * map_aspect_id = [] # <<<<<<<<<<<<<< * - * if not broadcasting: + * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): */ - __pyx_v_src = __pyx_v_tmp; + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 401, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_map_aspect_id, __pyx_t_3); + __pyx_t_3 = 0; - /* "View.MemoryView":1302 - * _err_dim(ValueError, "Dimension %d is not direct", i) - * - * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":403 + * map_aspect_id = [] * - * if not slice_is_contig(src, order, ndim): + * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): # <<<<<<<<<<<<<< + * if self.train_set.is_unk_item(iid): + * continue */ + __pyx_t_14 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_item_sentiment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 403, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(__pyx_t_1 == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 403, __pyx_L1_error) } + __pyx_t_2 = __Pyx_dict_iterator(__pyx_t_1, 0, __pyx_n_s_items, (&__pyx_t_5), (&__pyx_t_4)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 403, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_3); + __pyx_t_3 = __pyx_t_2; + __pyx_t_2 = 0; + while (1) { + __pyx_t_15 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_5, &__pyx_t_14, &__pyx_t_2, &__pyx_t_1, NULL, __pyx_t_4); + if (unlikely(__pyx_t_15 == 0)) break; + if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 403, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_iid, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_XDECREF_SET(__pyx_v_sentiment_tup_ids_by_user, __pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":1310 - * src = tmp - * - * if not broadcasting: # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_2 = ((!(__pyx_v_broadcasting != 0)) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1313 - * + /* "cornac/models/efm/recom_efm.pyx":404 * - * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< - * direct_copy = slice_is_contig(dst, 'C', ndim) - * elif slice_is_contig(src, 'F', ndim): + * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): + * if self.train_set.is_unk_item(iid): # <<<<<<<<<<<<<< + * continue + * item_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_user.values() */ - __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim) != 0); - if (__pyx_t_2) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 404, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_is_unk_item); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 404, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_15 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_15 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_iid}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_15, 1+__pyx_t_15); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 404, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 404, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_11) { - /* "View.MemoryView":1314 - * - * if slice_is_contig(src, 'C', ndim): - * direct_copy = slice_is_contig(dst, 'C', ndim) # <<<<<<<<<<<<<< - * elif slice_is_contig(src, 'F', ndim): - * direct_copy = slice_is_contig(dst, 'F', ndim) + /* "cornac/models/efm/recom_efm.pyx":405 + * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): + * if self.train_set.is_unk_item(iid): + * continue # <<<<<<<<<<<<<< + * item_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_user.values() + * for tup in sentiment.sentiment[tup_id]] */ - __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim); + goto __pyx_L25_continue; - /* "View.MemoryView":1313 - * + /* "cornac/models/efm/recom_efm.pyx":404 * - * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< - * direct_copy = slice_is_contig(dst, 'C', ndim) - * elif slice_is_contig(src, 'F', ndim): + * for iid, sentiment_tup_ids_by_user in sentiment.item_sentiment.items(): + * if self.train_set.is_unk_item(iid): # <<<<<<<<<<<<<< + * continue + * item_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_user.values() */ - goto __pyx_L12; } - /* "View.MemoryView":1315 - * if slice_is_contig(src, 'C', ndim): - * direct_copy = slice_is_contig(dst, 'C', ndim) - * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< - * direct_copy = slice_is_contig(dst, 'F', ndim) - * + /* "cornac/models/efm/recom_efm.pyx":406 + * if self.train_set.is_unk_item(iid): + * continue + * item_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_user.values() # <<<<<<<<<<<<<< + * for tup in sentiment.sentiment[tup_id]] + * item_aspect_count = Counter(item_aspects) */ - __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim) != 0); - if (__pyx_t_2) { + { /* enter inner scope */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 406, __pyx_L30_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_16 = 0; + if (unlikely(__pyx_v_sentiment_tup_ids_by_user == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); + __PYX_ERR(0, 406, __pyx_L30_error) + } + __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_sentiment_tup_ids_by_user, 0, __pyx_n_s_values, (&__pyx_t_17), (&__pyx_t_15)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 406, __pyx_L30_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_7); + __pyx_t_7 = __pyx_t_2; + __pyx_t_2 = 0; + while (1) { + __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_7, __pyx_t_17, &__pyx_t_16, NULL, &__pyx_t_2, NULL, __pyx_t_15); + if (unlikely(__pyx_t_18 == 0)) break; + if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 406, __pyx_L30_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_tup_id, __pyx_t_2); + __pyx_t_2 = 0; - /* "View.MemoryView":1316 - * direct_copy = slice_is_contig(dst, 'C', ndim) - * elif slice_is_contig(src, 'F', ndim): - * direct_copy = slice_is_contig(dst, 'F', ndim) # <<<<<<<<<<<<<< - * - * if direct_copy: + /* "cornac/models/efm/recom_efm.pyx":407 + * continue + * item_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_user.values() + * for tup in sentiment.sentiment[tup_id]] # <<<<<<<<<<<<<< + * item_aspect_count = Counter(item_aspects) + * total_sentiment_by_aspect = OrderedDict() */ - __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 407, __pyx_L30_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_8genexpr1__pyx_v_tup_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 407, __pyx_L30_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (likely(PyList_CheckExact(__pyx_t_8)) || PyTuple_CheckExact(__pyx_t_8)) { + __pyx_t_2 = __pyx_t_8; __Pyx_INCREF(__pyx_t_2); __pyx_t_19 = 0; + __pyx_t_6 = NULL; + } else { + __pyx_t_19 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 407, __pyx_L30_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 407, __pyx_L30_error) + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_8 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_19); __Pyx_INCREF(__pyx_t_8); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 407, __pyx_L30_error) + #else + __pyx_t_8 = PySequence_ITEM(__pyx_t_2, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 407, __pyx_L30_error) + __Pyx_GOTREF(__pyx_t_8); + #endif + } else { + if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_19); __Pyx_INCREF(__pyx_t_8); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 407, __pyx_L30_error) + #else + __pyx_t_8 = PySequence_ITEM(__pyx_t_2, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 407, __pyx_L30_error) + __Pyx_GOTREF(__pyx_t_8); + #endif + } + } else { + __pyx_t_8 = __pyx_t_6(__pyx_t_2); + if (unlikely(!__pyx_t_8)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 407, __pyx_L30_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_8); + } + __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_tup, __pyx_t_8); + __pyx_t_8 = 0; - /* "View.MemoryView":1315 - * if slice_is_contig(src, 'C', ndim): - * direct_copy = slice_is_contig(dst, 'C', ndim) - * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< - * direct_copy = slice_is_contig(dst, 'F', ndim) - * + /* "cornac/models/efm/recom_efm.pyx":406 + * if self.train_set.is_unk_item(iid): + * continue + * item_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_user.values() # <<<<<<<<<<<<<< + * for tup in sentiment.sentiment[tup_id]] + * item_aspect_count = Counter(item_aspects) */ - } - __pyx_L12:; + __pyx_t_8 = __Pyx_GetItemInt(__pyx_8genexpr1__pyx_v_tup, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 406, __pyx_L30_error) + __Pyx_GOTREF(__pyx_t_8); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 406, __pyx_L30_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "View.MemoryView":1318 - * direct_copy = slice_is_contig(dst, 'F', ndim) - * - * if direct_copy: # <<<<<<<<<<<<<< - * - * refcount_copying(&dst, dtype_is_object, ndim, False) + /* "cornac/models/efm/recom_efm.pyx":407 + * continue + * item_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_user.values() + * for tup in sentiment.sentiment[tup_id]] # <<<<<<<<<<<<<< + * item_aspect_count = Counter(item_aspects) + * total_sentiment_by_aspect = OrderedDict() */ - __pyx_t_2 = (__pyx_v_direct_copy != 0); - if (__pyx_t_2) { + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_tup); __pyx_8genexpr1__pyx_v_tup = 0; + __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_tup_id); __pyx_8genexpr1__pyx_v_tup_id = 0; + goto __pyx_L36_exit_scope; + __pyx_L30_error:; + __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_tup); __pyx_8genexpr1__pyx_v_tup = 0; + __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_tup_id); __pyx_8genexpr1__pyx_v_tup_id = 0; + goto __pyx_L1_error; + __pyx_L36_exit_scope:; + } /* exit inner scope */ + __Pyx_XDECREF_SET(__pyx_v_item_aspects, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; - /* "View.MemoryView":1320 - * if direct_copy: - * - * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< - * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) - * refcount_copying(&dst, dtype_is_object, ndim, True) + /* "cornac/models/efm/recom_efm.pyx":408 + * item_aspects = [tup[0] for tup_id in sentiment_tup_ids_by_user.values() + * for tup in sentiment.sentiment[tup_id]] + * item_aspect_count = Counter(item_aspects) # <<<<<<<<<<<<<< + * total_sentiment_by_aspect = OrderedDict() + * for tup_id in sentiment_tup_ids_by_user.values(): */ - __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_Counter); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = NULL; + __pyx_t_15 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_15 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_item_aspects}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_15, 1+__pyx_t_15); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_item_aspect_count, __pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":1321 - * - * refcount_copying(&dst, dtype_is_object, ndim, False) - * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) # <<<<<<<<<<<<<< - * refcount_copying(&dst, dtype_is_object, ndim, True) - * free(tmpdata) + /* "cornac/models/efm/recom_efm.pyx":409 + * for tup in sentiment.sentiment[tup_id]] + * item_aspect_count = Counter(item_aspects) + * total_sentiment_by_aspect = OrderedDict() # <<<<<<<<<<<<<< + * for tup_id in sentiment_tup_ids_by_user.values(): + * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: */ - (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim))); + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_OrderedDict); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = NULL; + __pyx_t_15 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_15 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_2, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_15, 0+__pyx_t_15); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_total_sentiment_by_aspect, __pyx_t_1); + __pyx_t_1 = 0; - /* "View.MemoryView":1322 - * refcount_copying(&dst, dtype_is_object, ndim, False) - * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) - * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< - * free(tmpdata) - * return 0 + /* "cornac/models/efm/recom_efm.pyx":410 + * item_aspect_count = Counter(item_aspects) + * total_sentiment_by_aspect = OrderedDict() + * for tup_id in sentiment_tup_ids_by_user.values(): # <<<<<<<<<<<<<< + * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: + * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity */ - __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + __pyx_t_17 = 0; + if (unlikely(__pyx_v_sentiment_tup_ids_by_user == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); + __PYX_ERR(0, 410, __pyx_L1_error) + } + __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_sentiment_tup_ids_by_user, 0, __pyx_n_s_values, (&__pyx_t_16), (&__pyx_t_15)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_1); + __pyx_t_1 = __pyx_t_7; + __pyx_t_7 = 0; + while (1) { + __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_16, &__pyx_t_17, NULL, &__pyx_t_7, NULL, __pyx_t_15); + if (unlikely(__pyx_t_18 == 0)) break; + if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XDECREF_SET(__pyx_v_tup_id, __pyx_t_7); + __pyx_t_7 = 0; - /* "View.MemoryView":1323 - * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) - * refcount_copying(&dst, dtype_is_object, ndim, True) - * free(tmpdata) # <<<<<<<<<<<<<< - * return 0 - * + /* "cornac/models/efm/recom_efm.pyx":411 + * total_sentiment_by_aspect = OrderedDict() + * for tup_id in sentiment_tup_ids_by_user.values(): + * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: # <<<<<<<<<<<<<< + * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity + * for aid, total_sentiment in total_sentiment_by_aspect.items(): */ - free(__pyx_v_tmpdata); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_sentiment); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_v_tup_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { + __pyx_t_7 = __pyx_t_2; __Pyx_INCREF(__pyx_t_7); __pyx_t_19 = 0; + __pyx_t_6 = NULL; + } else { + __pyx_t_19 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 411, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_7))) { + if (__pyx_t_19 >= PyList_GET_SIZE(__pyx_t_7)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 411, __pyx_L1_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_7, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } else { + if (__pyx_t_19 >= PyTuple_GET_SIZE(__pyx_t_7)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_19); __Pyx_INCREF(__pyx_t_2); __pyx_t_19++; if (unlikely((0 < 0))) __PYX_ERR(0, 411, __pyx_L1_error) + #else + __pyx_t_2 = PySequence_ITEM(__pyx_t_7, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } + } else { + __pyx_t_2 = __pyx_t_6(__pyx_t_7); + if (unlikely(!__pyx_t_2)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 411, __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; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 411, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_20 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_8 = PyList_GET_ITEM(sequence, 0); + __pyx_t_9 = PyList_GET_ITEM(sequence, 1); + __pyx_t_20 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(__pyx_t_20); + #else + __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_20 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_20); + #endif + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_21 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_21); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_21); + index = 0; __pyx_t_8 = __pyx_t_10(__pyx_t_21); if (unlikely(!__pyx_t_8)) goto __pyx_L41_unpacking_failed; + __Pyx_GOTREF(__pyx_t_8); + index = 1; __pyx_t_9 = __pyx_t_10(__pyx_t_21); if (unlikely(!__pyx_t_9)) goto __pyx_L41_unpacking_failed; + __Pyx_GOTREF(__pyx_t_9); + index = 2; __pyx_t_20 = __pyx_t_10(__pyx_t_21); if (unlikely(!__pyx_t_20)) goto __pyx_L41_unpacking_failed; + __Pyx_GOTREF(__pyx_t_20); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_21), 3) < 0) __PYX_ERR(0, 411, __pyx_L1_error) + __pyx_t_10 = NULL; + __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; + goto __pyx_L42_unpacking_done; + __pyx_L41_unpacking_failed:; + __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; + __pyx_t_10 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 411, __pyx_L1_error) + __pyx_L42_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_aid, __pyx_t_8); + __pyx_t_8 = 0; + __Pyx_XDECREF_SET(__pyx_v__, __pyx_t_9); + __pyx_t_9 = 0; + __Pyx_XDECREF_SET(__pyx_v_sentiment_polarity, __pyx_t_20); + __pyx_t_20 = 0; - /* "View.MemoryView":1324 - * refcount_copying(&dst, dtype_is_object, ndim, True) - * free(tmpdata) - * return 0 # <<<<<<<<<<<<<< - * - * if order == 'F' == get_best_order(&dst, ndim): + /* "cornac/models/efm/recom_efm.pyx":412 + * for tup_id in sentiment_tup_ids_by_user.values(): + * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: + * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity # <<<<<<<<<<<<<< + * for aid, total_sentiment in total_sentiment_by_aspect.items(): + * map_iid.append(iid) */ - __pyx_r = 0; - goto __pyx_L0; + __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_v_total_sentiment_by_aspect, __pyx_n_s_get); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 412, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_20); + __pyx_t_9 = NULL; + __pyx_t_18 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_20))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_20); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_20, function); + __pyx_t_18 = 1; + } + } + { + PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_v_aid, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_20, __pyx_callargs+1-__pyx_t_18, 2+__pyx_t_18); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 412, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + } + __pyx_t_20 = PyNumber_Add(__pyx_t_2, __pyx_v_sentiment_polarity); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 412, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_20); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely((PyObject_SetItem(__pyx_v_total_sentiment_by_aspect, __pyx_v_aid, __pyx_t_20) < 0))) __PYX_ERR(0, 412, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - /* "View.MemoryView":1318 - * direct_copy = slice_is_contig(dst, 'F', ndim) - * - * if direct_copy: # <<<<<<<<<<<<<< - * - * refcount_copying(&dst, dtype_is_object, ndim, False) + /* "cornac/models/efm/recom_efm.pyx":411 + * total_sentiment_by_aspect = OrderedDict() + * for tup_id in sentiment_tup_ids_by_user.values(): + * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: # <<<<<<<<<<<<<< + * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity + * for aid, total_sentiment in total_sentiment_by_aspect.items(): */ + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "View.MemoryView":1310 - * src = tmp - * - * if not broadcasting: # <<<<<<<<<<<<<< - * - * + /* "cornac/models/efm/recom_efm.pyx":413 + * for aid, _, sentiment_polarity in sentiment.sentiment[tup_id]: + * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity + * for aid, total_sentiment in total_sentiment_by_aspect.items(): # <<<<<<<<<<<<<< + * map_iid.append(iid) + * map_aspect_id.append(aid) */ - } + __pyx_t_16 = 0; + if (unlikely(__pyx_v_total_sentiment_by_aspect == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 413, __pyx_L1_error) + } + __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_total_sentiment_by_aspect, 0, __pyx_n_s_items, (&__pyx_t_17), (&__pyx_t_15)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_1); + __pyx_t_1 = __pyx_t_7; + __pyx_t_7 = 0; + while (1) { + __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_17, &__pyx_t_16, &__pyx_t_7, &__pyx_t_20, NULL, __pyx_t_15); + if (unlikely(__pyx_t_18 == 0)) break; + if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GOTREF(__pyx_t_20); + __Pyx_XDECREF_SET(__pyx_v_aid, __pyx_t_7); + __pyx_t_7 = 0; + __Pyx_XDECREF_SET(__pyx_v_total_sentiment, __pyx_t_20); + __pyx_t_20 = 0; - /* "View.MemoryView":1326 - * return 0 - * - * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< - * - * + /* "cornac/models/efm/recom_efm.pyx":414 + * total_sentiment_by_aspect[aid] = total_sentiment_by_aspect.get(aid, 0) + sentiment_polarity + * for aid, total_sentiment in total_sentiment_by_aspect.items(): + * map_iid.append(iid) # <<<<<<<<<<<<<< + * map_aspect_id.append(aid) + * if self.use_item_aspect_popularity: */ - __pyx_t_2 = (__pyx_v_order == 'F'); - if (__pyx_t_2) { - __pyx_t_2 = ('F' == __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim)); - } - __pyx_t_8 = (__pyx_t_2 != 0); - if (__pyx_t_8) { + __pyx_t_13 = __Pyx_PyObject_Append(__pyx_v_map_iid, __pyx_v_iid); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 414, __pyx_L1_error) - /* "View.MemoryView":1329 - * - * - * transpose_memslice(&src) # <<<<<<<<<<<<<< - * transpose_memslice(&dst) - * + /* "cornac/models/efm/recom_efm.pyx":415 + * for aid, total_sentiment in total_sentiment_by_aspect.items(): + * map_iid.append(iid) + * map_aspect_id.append(aid) # <<<<<<<<<<<<<< + * if self.use_item_aspect_popularity: + * quality_scores.append(self._compute_quality_score(total_sentiment)) */ - __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(2, 1329, __pyx_L1_error) + __pyx_t_13 = __Pyx_PyObject_Append(__pyx_v_map_aspect_id, __pyx_v_aid); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 415, __pyx_L1_error) - /* "View.MemoryView":1330 - * - * transpose_memslice(&src) - * transpose_memslice(&dst) # <<<<<<<<<<<<<< - * - * refcount_copying(&dst, dtype_is_object, ndim, False) + /* "cornac/models/efm/recom_efm.pyx":416 + * map_iid.append(iid) + * map_aspect_id.append(aid) + * if self.use_item_aspect_popularity: # <<<<<<<<<<<<<< + * quality_scores.append(self._compute_quality_score(total_sentiment)) + * else: */ - __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(2, 1330, __pyx_L1_error) + __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_use_item_aspect_popularity); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_20); + __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_20); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + if (__pyx_t_11) { - /* "View.MemoryView":1326 - * return 0 - * - * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< - * - * + /* "cornac/models/efm/recom_efm.pyx":417 + * map_aspect_id.append(aid) + * if self.use_item_aspect_popularity: + * quality_scores.append(self._compute_quality_score(total_sentiment)) # <<<<<<<<<<<<<< + * else: + * avg_sentiment = total_sentiment / item_aspect_count[aid] */ - } + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_compute_quality_score); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = NULL; + __pyx_t_18 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_18 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_total_sentiment}; + __pyx_t_20 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_18, 1+__pyx_t_18); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_20); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_13 = __Pyx_PyObject_Append(__pyx_v_quality_scores, __pyx_t_20); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - /* "View.MemoryView":1332 - * transpose_memslice(&dst) - * - * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< - * copy_strided_to_strided(&src, &dst, ndim, itemsize) - * refcount_copying(&dst, dtype_is_object, ndim, True) + /* "cornac/models/efm/recom_efm.pyx":416 + * map_iid.append(iid) + * map_aspect_id.append(aid) + * if self.use_item_aspect_popularity: # <<<<<<<<<<<<<< + * quality_scores.append(self._compute_quality_score(total_sentiment)) + * else: */ - __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + goto __pyx_L46; + } - /* "View.MemoryView":1333 - * - * refcount_copying(&dst, dtype_is_object, ndim, False) - * copy_strided_to_strided(&src, &dst, ndim, itemsize) # <<<<<<<<<<<<<< - * refcount_copying(&dst, dtype_is_object, ndim, True) + /* "cornac/models/efm/recom_efm.pyx":419 + * quality_scores.append(self._compute_quality_score(total_sentiment)) + * else: + * avg_sentiment = total_sentiment / item_aspect_count[aid] # <<<<<<<<<<<<<< + * quality_scores.append(self._compute_quality_score(avg_sentiment)) * */ - copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize); + /*else*/ { + __pyx_t_20 = __Pyx_PyObject_GetItem(__pyx_v_item_aspect_count, __pyx_v_aid); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_20); + __pyx_t_7 = __Pyx_PyNumber_Divide(__pyx_v_total_sentiment, __pyx_t_20); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + __Pyx_XDECREF_SET(__pyx_v_avg_sentiment, __pyx_t_7); + __pyx_t_7 = 0; - /* "View.MemoryView":1334 - * refcount_copying(&dst, dtype_is_object, ndim, False) - * copy_strided_to_strided(&src, &dst, ndim, itemsize) - * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":420 + * else: + * avg_sentiment = total_sentiment / item_aspect_count[aid] + * quality_scores.append(self._compute_quality_score(avg_sentiment)) # <<<<<<<<<<<<<< * - * free(tmpdata) + * quality_scores = np.asarray(quality_scores, dtype=np.float32).flatten() */ - __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_compute_quality_score); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_20); + __pyx_t_2 = NULL; + __pyx_t_18 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_20))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_20); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_20, function); + __pyx_t_18 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_avg_sentiment}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_20, __pyx_callargs+1-__pyx_t_18, 1+__pyx_t_18); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + } + __pyx_t_13 = __Pyx_PyObject_Append(__pyx_v_quality_scores, __pyx_t_7); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 420, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_L46:; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_L25_continue:; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "View.MemoryView":1336 - * refcount_copying(&dst, dtype_is_object, ndim, True) - * - * free(tmpdata) # <<<<<<<<<<<<<< - * return 0 + /* "cornac/models/efm/recom_efm.pyx":422 + * quality_scores.append(self._compute_quality_score(avg_sentiment)) * + * quality_scores = np.asarray(quality_scores, dtype=np.float32).flatten() # <<<<<<<<<<<<<< + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() */ - free(__pyx_v_tmpdata); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_quality_scores); + __Pyx_GIVEREF(__pyx_v_quality_scores); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_quality_scores); + __pyx_t_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_20); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_20, __pyx_n_s_dtype, __pyx_t_9) < 0) __PYX_ERR(0, 422, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_20); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_flatten); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_20); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_9 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_20))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_20); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_20, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_9, }; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_20, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + } + __Pyx_DECREF_SET(__pyx_v_quality_scores, __pyx_t_3); + __pyx_t_3 = 0; - /* "View.MemoryView":1337 - * - * free(tmpdata) - * return 0 # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":423 * - * @cname('__pyx_memoryview_broadcast_leading') + * quality_scores = np.asarray(quality_scores, dtype=np.float32).flatten() + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() # <<<<<<<<<<<<<< + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() + * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), */ - __pyx_r = 0; - goto __pyx_L0; + __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_n_s_np); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_20); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_20, __pyx_n_s_asarray); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + __pyx_t_20 = PyTuple_New(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_20); + __Pyx_INCREF(__pyx_v_map_iid); + __Pyx_GIVEREF(__pyx_v_map_iid); + PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_v_map_iid); + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_20, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_flatten); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_2, }; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF_SET(__pyx_v_map_iid, __pyx_t_3); + __pyx_t_3 = 0; - /* "View.MemoryView":1268 - * - * @cname('__pyx_memoryview_copy_contents') - * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice dst, - * int src_ndim, int dst_ndim, + /* "cornac/models/efm/recom_efm.pyx":424 + * quality_scores = np.asarray(quality_scores, dtype=np.float32).flatten() + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() # <<<<<<<<<<<<<< + * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), + * shape=(self.train_set.num_items, sentiment.num_aspects)) */ - - /* function exit code */ - __pyx_L1_error:; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_map_aspect_id); + __Pyx_GIVEREF(__pyx_v_map_aspect_id); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_map_aspect_id); + __pyx_t_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_20); + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_int32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (PyDict_SetItem(__pyx_t_20, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_20); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_flatten); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_20); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_20))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_20); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_20, function); + __pyx_t_4 = 1; + } + } { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_AddTraceback("View.MemoryView.memoryview_copy_contents", __pyx_clineno, __pyx_lineno, __pyx_filename); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif + PyObject *__pyx_callargs[1] = {__pyx_t_7, }; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_20, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; } - __pyx_r = -1; - __pyx_L0:; - return __pyx_r; -} + __Pyx_DECREF_SET(__pyx_v_map_aspect_id, __pyx_t_3); + __pyx_t_3 = 0; -/* "View.MemoryView":1340 + /* "cornac/models/efm/recom_efm.pyx":425 + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() + * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), # <<<<<<<<<<<<<< + * shape=(self.train_set.num_items, sentiment.num_aspects)) * - * @cname('__pyx_memoryview_broadcast_leading') - * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< - * int ndim, - * int ndim_other) nogil: */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_sp); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_csr_matrix); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_20); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_map_iid); + __Pyx_GIVEREF(__pyx_v_map_iid); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_map_iid); + __Pyx_INCREF(__pyx_v_map_aspect_id); + __Pyx_GIVEREF(__pyx_v_map_aspect_id); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_map_aspect_id); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_v_quality_scores); + __Pyx_GIVEREF(__pyx_v_quality_scores); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_quality_scores); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_7); + __pyx_t_7 = 0; -static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim, int __pyx_v_ndim_other) { - int __pyx_v_i; - int __pyx_v_offset; - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - - /* "View.MemoryView":1344 - * int ndim_other) nogil: - * cdef int i - * cdef int offset = ndim_other - ndim # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":426 + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() + * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), + * shape=(self.train_set.num_items, sentiment.num_aspects)) # <<<<<<<<<<<<<< * - * for i in range(ndim - 1, -1, -1): + * if self.verbose: */ - __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim); + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_num_items); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sentiment, __pyx_n_s_num_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_1); + __pyx_t_2 = 0; + __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_shape, __pyx_t_9) < 0) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "View.MemoryView":1346 - * cdef int offset = ndim_other - ndim + /* "cornac/models/efm/recom_efm.pyx":425 + * map_iid = np.asarray(map_iid, dtype=np.int32).flatten() + * map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() + * Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), # <<<<<<<<<<<<<< + * shape=(self.train_set.num_items, sentiment.num_aspects)) * - * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< - * mslice.shape[i + offset] = mslice.shape[i] - * mslice.strides[i + offset] = mslice.strides[i] */ - for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { - __pyx_v_i = __pyx_t_1; + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_20, __pyx_t_3, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_Y = __pyx_t_9; + __pyx_t_9 = 0; - /* "View.MemoryView":1347 + /* "cornac/models/efm/recom_efm.pyx":428 + * shape=(self.train_set.num_items, sentiment.num_aspects)) * - * for i in range(ndim - 1, -1, -1): - * mslice.shape[i + offset] = mslice.shape[i] # <<<<<<<<<<<<<< - * mslice.strides[i + offset] = mslice.strides[i] - * mslice.suboffsets[i + offset] = mslice.suboffsets[i] - */ - (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]); - - /* "View.MemoryView":1348 - * for i in range(ndim - 1, -1, -1): - * mslice.shape[i + offset] = mslice.shape[i] - * mslice.strides[i + offset] = mslice.strides[i] # <<<<<<<<<<<<<< - * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + * if self.verbose: # <<<<<<<<<<<<<< + * print('Building matrices completed!') * */ - (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_verbose); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 428, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 428, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (__pyx_t_11) { - /* "View.MemoryView":1349 - * mslice.shape[i + offset] = mslice.shape[i] - * mslice.strides[i + offset] = mslice.strides[i] - * mslice.suboffsets[i + offset] = mslice.suboffsets[i] # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":429 * - * for i in range(offset): - */ - (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]); - } - - /* "View.MemoryView":1351 - * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + * if self.verbose: + * print('Building matrices completed!') # <<<<<<<<<<<<<< * - * for i in range(offset): # <<<<<<<<<<<<<< - * mslice.shape[i] = 1 - * mslice.strides[i] = mslice.strides[0] + * return A, X, Y */ - __pyx_t_1 = __pyx_v_offset; - __pyx_t_2 = __pyx_t_1; - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { - __pyx_v_i = __pyx_t_3; + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "View.MemoryView":1352 + /* "cornac/models/efm/recom_efm.pyx":428 + * shape=(self.train_set.num_items, sentiment.num_aspects)) * - * for i in range(offset): - * mslice.shape[i] = 1 # <<<<<<<<<<<<<< - * mslice.strides[i] = mslice.strides[0] - * mslice.suboffsets[i] = -1 - */ - (__pyx_v_mslice->shape[__pyx_v_i]) = 1; - - /* "View.MemoryView":1353 - * for i in range(offset): - * mslice.shape[i] = 1 - * mslice.strides[i] = mslice.strides[0] # <<<<<<<<<<<<<< - * mslice.suboffsets[i] = -1 + * if self.verbose: # <<<<<<<<<<<<<< + * print('Building matrices completed!') * */ - (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]); + } - /* "View.MemoryView":1354 - * mslice.shape[i] = 1 - * mslice.strides[i] = mslice.strides[0] - * mslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":431 + * print('Building matrices completed!') * + * return A, X, Y # <<<<<<<<<<<<<< * + * def _compute_attention_score(self, count): */ - (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L; - } + __Pyx_XDECREF(__pyx_r); + __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_INCREF(__pyx_v_A); + __Pyx_GIVEREF(__pyx_v_A); + PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_A); + __Pyx_INCREF(__pyx_v_X); + __Pyx_GIVEREF(__pyx_v_X); + PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_X); + __Pyx_INCREF(__pyx_v_Y); + __Pyx_GIVEREF(__pyx_v_Y); + PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_v_Y); + __pyx_r = __pyx_t_9; + __pyx_t_9 = 0; + goto __pyx_L0; - /* "View.MemoryView":1340 + /* "cornac/models/efm/recom_efm.pyx":360 + * print('Optimization finished!') * - * @cname('__pyx_memoryview_broadcast_leading') - * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< - * int ndim, - * int ndim_other) nogil: + * def _build_matrices(self, data_set): # <<<<<<<<<<<<<< + * sentiment = self.train_set.sentiment + * ratings = [] */ /* 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_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_20); + __Pyx_XDECREF(__pyx_t_21); + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._build_matrices", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_sentiment); + __Pyx_XDECREF(__pyx_v_ratings); + __Pyx_XDECREF(__pyx_v_map_uid); + __Pyx_XDECREF(__pyx_v_map_iid); + __Pyx_XDECREF(__pyx_v_uid); + __Pyx_XDECREF(__pyx_v_iid); + __Pyx_XDECREF(__pyx_v_rating); + __Pyx_XDECREF(__pyx_v_A); + __Pyx_XDECREF(__pyx_v_attention_scores); + __Pyx_XDECREF(__pyx_v_map_aspect_id); + __Pyx_XDECREF(__pyx_v_sentiment_tup_ids_by_item); + __Pyx_XDECREF(__pyx_v_user_aspects); + __Pyx_XDECREF(__pyx_v_user_aspect_count); + __Pyx_XDECREF(__pyx_v_aid); + __Pyx_XDECREF(__pyx_v_count); + __Pyx_XDECREF(__pyx_v_X); + __Pyx_XDECREF(__pyx_v_quality_scores); + __Pyx_XDECREF(__pyx_v_sentiment_tup_ids_by_user); + __Pyx_XDECREF(__pyx_v_item_aspects); + __Pyx_XDECREF(__pyx_v_item_aspect_count); + __Pyx_XDECREF(__pyx_v_total_sentiment_by_aspect); + __Pyx_XDECREF(__pyx_v_tup_id); + __Pyx_XDECREF(__pyx_v__); + __Pyx_XDECREF(__pyx_v_sentiment_polarity); + __Pyx_XDECREF(__pyx_v_total_sentiment); + __Pyx_XDECREF(__pyx_v_avg_sentiment); + __Pyx_XDECREF(__pyx_v_Y); + __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup_id); + __Pyx_XDECREF(__pyx_7genexpr__pyx_v_tup); + __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_tup_id); + __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_tup); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -/* "View.MemoryView":1362 - * - * @cname('__pyx_memoryview_refcount_copying') - * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< - * int ndim, bint inc) nogil: - * - */ - -static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) { - int __pyx_t_1; - - /* "View.MemoryView":1366 - * - * - * if dtype_is_object: # <<<<<<<<<<<<<< - * refcount_objects_in_slice_with_gil(dst.data, dst.shape, - * dst.strides, ndim, inc) - */ - __pyx_t_1 = (__pyx_v_dtype_is_object != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":1367 +/* "cornac/models/efm/recom_efm.pyx":433 + * return A, X, Y * - * if dtype_is_object: - * refcount_objects_in_slice_with_gil(dst.data, dst.shape, # <<<<<<<<<<<<<< - * dst.strides, ndim, inc) + * def _compute_attention_score(self, count): # <<<<<<<<<<<<<< + * return 1 + (self.rating_scale - 1) * (2 / (1 + np.exp(-count)) - 1) * */ - __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc); - /* "View.MemoryView":1366 - * - * - * if dtype_is_object: # <<<<<<<<<<<<<< - * refcount_objects_in_slice_with_gil(dst.data, dst.shape, - * dst.strides, ndim, inc) - */ +/* Python wrapper */ +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_11_compute_attention_score(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_11_compute_attention_score = {"_compute_attention_score", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_11_compute_attention_score, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_11_compute_attention_score(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_count = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_compute_attention_score (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_count,0}; + PyObject* values[2] = {0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 433, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_count)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 433, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_compute_attention_score", 1, 2, 2, 1); __PYX_ERR(0, 433, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_compute_attention_score") < 0)) __PYX_ERR(0, 433, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_self = values[0]; + __pyx_v_count = values[1]; } - - /* "View.MemoryView":1362 - * - * @cname('__pyx_memoryview_refcount_copying') - * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< - * int ndim, bint inc) nogil: - * - */ + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_compute_attention_score", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 433, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._compute_attention_score", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_10_compute_attention_score(__pyx_self, __pyx_v_self, __pyx_v_count); /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -/* "View.MemoryView":1371 - * - * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') - * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, - * bint inc) with gil: - */ - -static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { +static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_10_compute_attention_score(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_count) { + PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); - #endif - __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0); + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_compute_attention_score", 0); - /* "View.MemoryView":1374 - * Py_ssize_t *strides, int ndim, - * bint inc) with gil: - * refcount_objects_in_slice(data, shape, strides, ndim, inc) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":434 * - * @cname('__pyx_memoryview_refcount_objects_in_slice') + * def _compute_attention_score(self, count): + * return 1 + (self.rating_scale - 1) * (2 / (1 + np.exp(-count)) - 1) # <<<<<<<<<<<<<< + * + * def _compute_quality_score(self, sentiment): */ - __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rating_scale); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_SubtractObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_exp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_Negative(__pyx_v_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_6 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_4 = __Pyx_PyInt_AddCObj(__pyx_int_1, __pyx_t_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_int_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyInt_SubtractObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyInt_AddCObj(__pyx_int_1, __pyx_t_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "View.MemoryView":1371 + /* "cornac/models/efm/recom_efm.pyx":433 + * return A, X, Y + * + * def _compute_attention_score(self, count): # <<<<<<<<<<<<<< + * return 1 + (self.rating_scale - 1) * (2 / (1 + np.exp(-count)) - 1) * - * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') - * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, - * bint inc) with gil: */ /* 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("cornac.models.efm.recom_efm.EFM._compute_attention_score", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); - #ifdef WITH_THREAD - __Pyx_PyGILState_Release(__pyx_gilstate_save); - #endif + return __pyx_r; } -/* "View.MemoryView":1377 - * - * @cname('__pyx_memoryview_refcount_objects_in_slice') - * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, bint inc): - * cdef Py_ssize_t i - */ - -static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { - CYTHON_UNUSED Py_ssize_t __pyx_v_i; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - Py_ssize_t __pyx_t_2; - Py_ssize_t __pyx_t_3; - int __pyx_t_4; - __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0); - - /* "View.MemoryView":1381 - * cdef Py_ssize_t i +/* "cornac/models/efm/recom_efm.pyx":436 + * return 1 + (self.rating_scale - 1) * (2 / (1 + np.exp(-count)) - 1) * - * for i in range(shape[0]): # <<<<<<<<<<<<<< - * if ndim == 1: - * if inc: - */ - __pyx_t_1 = (__pyx_v_shape[0]); - __pyx_t_2 = __pyx_t_1; - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { - __pyx_v_i = __pyx_t_3; - - /* "View.MemoryView":1382 + * def _compute_quality_score(self, sentiment): # <<<<<<<<<<<<<< + * return 1 + (self.rating_scale - 1) / (1 + np.exp(-sentiment)) * - * for i in range(shape[0]): - * if ndim == 1: # <<<<<<<<<<<<<< - * if inc: - * Py_INCREF(( data)[0]) - */ - __pyx_t_4 = ((__pyx_v_ndim == 1) != 0); - if (__pyx_t_4) { - - /* "View.MemoryView":1383 - * for i in range(shape[0]): - * if ndim == 1: - * if inc: # <<<<<<<<<<<<<< - * Py_INCREF(( data)[0]) - * else: - */ - __pyx_t_4 = (__pyx_v_inc != 0); - if (__pyx_t_4) { - - /* "View.MemoryView":1384 - * if ndim == 1: - * if inc: - * Py_INCREF(( data)[0]) # <<<<<<<<<<<<<< - * else: - * Py_DECREF(( data)[0]) */ - Py_INCREF((((PyObject **)__pyx_v_data)[0])); - /* "View.MemoryView":1383 - * for i in range(shape[0]): - * if ndim == 1: - * if inc: # <<<<<<<<<<<<<< - * Py_INCREF(( data)[0]) - * else: - */ - goto __pyx_L6; +/* Python wrapper */ +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_13_compute_quality_score(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_13_compute_quality_score = {"_compute_quality_score", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_13_compute_quality_score, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_13_compute_quality_score(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_sentiment = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_compute_quality_score (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_sentiment,0}; + PyObject* values[2] = {0,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; } - - /* "View.MemoryView":1386 - * Py_INCREF(( data)[0]) - * else: - * Py_DECREF(( data)[0]) # <<<<<<<<<<<<<< - * else: - * refcount_objects_in_slice(data, shape + 1, strides + 1, - */ - /*else*/ { - Py_DECREF((((PyObject **)__pyx_v_data)[0])); + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 436, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sentiment)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 436, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_compute_quality_score", 1, 2, 2, 1); __PYX_ERR(0, 436, __pyx_L3_error) + } } - __pyx_L6:; - - /* "View.MemoryView":1382 - * - * for i in range(shape[0]): - * if ndim == 1: # <<<<<<<<<<<<<< - * if inc: - * Py_INCREF(( data)[0]) - */ - goto __pyx_L5; + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_compute_quality_score") < 0)) __PYX_ERR(0, 436, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); } + __pyx_v_self = values[0]; + __pyx_v_sentiment = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_compute_quality_score", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 436, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM._compute_quality_score", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_12_compute_quality_score(__pyx_self, __pyx_v_self, __pyx_v_sentiment); - /* "View.MemoryView":1388 - * Py_DECREF(( data)[0]) - * else: - * refcount_objects_in_slice(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< - * ndim - 1, inc) - * - */ - /*else*/ { + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "View.MemoryView":1389 - * else: - * refcount_objects_in_slice(data, shape + 1, strides + 1, - * ndim - 1, inc) # <<<<<<<<<<<<<< - * - * data += strides[0] - */ - __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_inc); - } - __pyx_L5:; +static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_12_compute_quality_score(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_sentiment) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_compute_quality_score", 0); - /* "View.MemoryView":1391 - * ndim - 1, inc) - * - * data += strides[0] # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":437 * + * def _compute_quality_score(self, sentiment): + * return 1 + (self.rating_scale - 1) / (1 + np.exp(-sentiment)) # <<<<<<<<<<<<<< * + * def score(self, user_idx, item_idx=None): */ - __pyx_v_data = (__pyx_v_data + (__pyx_v_strides[0])); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rating_scale); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_SubtractObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_exp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_Negative(__pyx_v_sentiment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_6 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } + __pyx_t_4 = __Pyx_PyInt_AddCObj(__pyx_int_1, __pyx_t_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyInt_AddCObj(__pyx_int_1, __pyx_t_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "View.MemoryView":1377 + /* "cornac/models/efm/recom_efm.pyx":436 + * return 1 + (self.rating_scale - 1) * (2 / (1 + np.exp(-count)) - 1) + * + * def _compute_quality_score(self, sentiment): # <<<<<<<<<<<<<< + * return 1 + (self.rating_scale - 1) / (1 + np.exp(-sentiment)) * - * @cname('__pyx_memoryview_refcount_objects_in_slice') - * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, bint inc): - * cdef Py_ssize_t i */ /* 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("cornac.models.efm.recom_efm.EFM._compute_quality_score", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); + return __pyx_r; } -/* "View.MemoryView":1397 - * - * @cname('__pyx_memoryview_slice_assign_scalar') - * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< - * size_t itemsize, void *item, - * bint dtype_is_object) nogil: - */ - -static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) { - - /* "View.MemoryView":1400 - * size_t itemsize, void *item, - * bint dtype_is_object) nogil: - * refcount_copying(dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< - * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, - * itemsize, item) - */ - __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0); - - /* "View.MemoryView":1401 - * bint dtype_is_object) nogil: - * refcount_copying(dst, dtype_is_object, ndim, False) - * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, # <<<<<<<<<<<<<< - * itemsize, item) - * refcount_copying(dst, dtype_is_object, ndim, True) - */ - __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item); - - /* "View.MemoryView":1403 - * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, - * itemsize, item) - * refcount_copying(dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< +/* "cornac/models/efm/recom_efm.pyx":439 + * return 1 + (self.rating_scale - 1) / (1 + np.exp(-sentiment)) * + * def score(self, user_idx, item_idx=None): # <<<<<<<<<<<<<< + * """Predict the scores/ratings of a user for an item. * */ - __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1); - /* "View.MemoryView":1397 - * - * @cname('__pyx_memoryview_slice_assign_scalar') - * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< - * size_t itemsize, void *item, - * bint dtype_is_object) nogil: - */ +/* Python wrapper */ +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_15score(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_14score, "Predict the scores/ratings of a user for an item.\n\n Parameters\n ----------\n user_idx: int, required\n The index of the user for whom to perform score prediction.\n\n item_idx: int, optional, default: None\n The index of the item for which to perform score prediction.\n If None, scores for all known items will be returned.\n\n Returns\n -------\n res : A scalar or a Numpy array\n Relative scores that the user gives to the item or to all known items\n\n "); +static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_15score = {"score", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_15score, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_14score}; +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_15score(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_user_idx = 0; + PyObject *__pyx_v_item_idx = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("score (wrapper)", 0); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_user_idx,&__pyx_n_s_item_idx,0}; + PyObject* values[3] = {0,0,0}; + values[2] = ((PyObject *)((PyObject *)Py_None)); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 439, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_user_idx)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 439, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("score", 0, 2, 3, 1); __PYX_ERR(0, 439, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_item_idx); + if (value) { values[2] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 439, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "score") < 0)) __PYX_ERR(0, 439, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_self = values[0]; + __pyx_v_user_idx = values[1]; + __pyx_v_item_idx = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("score", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 439, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.score", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_14score(__pyx_self, __pyx_v_self, __pyx_v_user_idx, __pyx_v_item_idx); /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -/* "View.MemoryView":1407 - * - * @cname('__pyx_memoryview__slice_assign_scalar') - * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, - * size_t itemsize, void *item) nogil: - */ - -static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item) { - CYTHON_UNUSED Py_ssize_t __pyx_v_i; - Py_ssize_t __pyx_v_stride; - Py_ssize_t __pyx_v_extent; +static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_14score(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_user_idx, PyObject *__pyx_v_item_idx) { + PyObject *__pyx_v_item_scores = NULL; + PyObject *__pyx_v_item_score = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations int __pyx_t_1; - Py_ssize_t __pyx_t_2; - Py_ssize_t __pyx_t_3; - Py_ssize_t __pyx_t_4; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + Py_ssize_t __pyx_t_10; + Py_UCS4 __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("score", 0); - /* "View.MemoryView":1411 - * size_t itemsize, void *item) nogil: - * cdef Py_ssize_t i - * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<< - * cdef Py_ssize_t extent = shape[0] + /* "cornac/models/efm/recom_efm.pyx":457 * + * """ + * if item_idx is None: # <<<<<<<<<<<<<< + * if self.train_set.is_unk_user(user_idx): + * raise ScoreException("Can't make score prediction for (user_id=%d" & user_idx) */ - __pyx_v_stride = (__pyx_v_strides[0]); + __pyx_t_1 = (__pyx_v_item_idx == Py_None); + if (__pyx_t_1) { - /* "View.MemoryView":1412 - * cdef Py_ssize_t i - * cdef Py_ssize_t stride = strides[0] - * cdef Py_ssize_t extent = shape[0] # <<<<<<<<<<<<<< - * - * if ndim == 1: + /* "cornac/models/efm/recom_efm.pyx":458 + * """ + * if item_idx is None: + * if self.train_set.is_unk_user(user_idx): # <<<<<<<<<<<<<< + * raise ScoreException("Can't make score prediction for (user_id=%d" & user_idx) + * item_scores = self.U2.dot(self.U1[user_idx, :]) + self.H2.dot(self.H1[user_idx, :]) */ - __pyx_v_extent = (__pyx_v_shape[0]); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 458, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_is_unk_user); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 458, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_user_idx}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 458, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 458, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(__pyx_t_1)) { - /* "View.MemoryView":1414 - * cdef Py_ssize_t extent = shape[0] - * - * if ndim == 1: # <<<<<<<<<<<<<< - * for i in range(extent): - * memcpy(data, item, itemsize) + /* "cornac/models/efm/recom_efm.pyx":459 + * if item_idx is None: + * if self.train_set.is_unk_user(user_idx): + * raise ScoreException("Can't make score prediction for (user_id=%d" & user_idx) # <<<<<<<<<<<<<< + * item_scores = self.U2.dot(self.U1[user_idx, :]) + self.H2.dot(self.H1[user_idx, :]) + * return item_scores */ - __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); - if (__pyx_t_1) { + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_ScoreException); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 459, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyNumber_And(__pyx_kp_u_Can_t_make_score_prediction_for, __pyx_v_user_idx); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 459, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_3}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 459, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(0, 459, __pyx_L1_error) - /* "View.MemoryView":1415 - * - * if ndim == 1: - * for i in range(extent): # <<<<<<<<<<<<<< - * memcpy(data, item, itemsize) - * data += stride + /* "cornac/models/efm/recom_efm.pyx":458 + * """ + * if item_idx is None: + * if self.train_set.is_unk_user(user_idx): # <<<<<<<<<<<<<< + * raise ScoreException("Can't make score prediction for (user_id=%d" & user_idx) + * item_scores = self.U2.dot(self.U1[user_idx, :]) + self.H2.dot(self.H1[user_idx, :]) */ - __pyx_t_2 = __pyx_v_extent; - __pyx_t_3 = __pyx_t_2; - for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { - __pyx_v_i = __pyx_t_4; + } - /* "View.MemoryView":1416 - * if ndim == 1: - * for i in range(extent): - * memcpy(data, item, itemsize) # <<<<<<<<<<<<<< - * data += stride - * else: + /* "cornac/models/efm/recom_efm.pyx":460 + * if self.train_set.is_unk_user(user_idx): + * raise ScoreException("Can't make score prediction for (user_id=%d" & user_idx) + * item_scores = self.U2.dot(self.U1[user_idx, :]) + self.H2.dot(self.H1[user_idx, :]) # <<<<<<<<<<<<<< + * return item_scores + * else: */ - (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize)); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_dot); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_INCREF(__pyx_v_user_idx); + __Pyx_GIVEREF(__pyx_v_user_idx); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_user_idx); + __Pyx_INCREF(__pyx_slice__5); + __Pyx_GIVEREF(__pyx_slice__5); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_slice__5); + __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(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_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_H2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_dot); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_H1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_v_user_idx); + __Pyx_GIVEREF(__pyx_v_user_idx); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_user_idx); + __Pyx_INCREF(__pyx_slice__5); + __Pyx_GIVEREF(__pyx_slice__5); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_slice__5); + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_8}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_6 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_item_scores = __pyx_t_6; + __pyx_t_6 = 0; - /* "View.MemoryView":1417 - * for i in range(extent): - * memcpy(data, item, itemsize) - * data += stride # <<<<<<<<<<<<<< - * else: - * for i in range(extent): + /* "cornac/models/efm/recom_efm.pyx":461 + * raise ScoreException("Can't make score prediction for (user_id=%d" & user_idx) + * item_scores = self.U2.dot(self.U1[user_idx, :]) + self.H2.dot(self.H1[user_idx, :]) + * return item_scores # <<<<<<<<<<<<<< + * else: + * if self.train_set.is_unk_user(user_idx) or self.train_set.is_unk_item(item_idx): */ - __pyx_v_data = (__pyx_v_data + __pyx_v_stride); - } + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_item_scores); + __pyx_r = __pyx_v_item_scores; + goto __pyx_L0; - /* "View.MemoryView":1414 - * cdef Py_ssize_t extent = shape[0] + /* "cornac/models/efm/recom_efm.pyx":457 * - * if ndim == 1: # <<<<<<<<<<<<<< - * for i in range(extent): - * memcpy(data, item, itemsize) + * """ + * if item_idx is None: # <<<<<<<<<<<<<< + * if self.train_set.is_unk_user(user_idx): + * raise ScoreException("Can't make score prediction for (user_id=%d" & user_idx) */ - goto __pyx_L3; } - /* "View.MemoryView":1419 - * data += stride - * else: - * for i in range(extent): # <<<<<<<<<<<<<< - * _slice_assign_scalar(data, shape + 1, strides + 1, - * ndim - 1, itemsize, item) + /* "cornac/models/efm/recom_efm.pyx":463 + * return item_scores + * else: + * if self.train_set.is_unk_user(user_idx) or self.train_set.is_unk_item(item_idx): # <<<<<<<<<<<<<< + * raise ScoreException("Can't make score prediction for (user_id=%d, item_id=%d)" % (user_idx, item_idx)) + * item_score = self.U2[item_idx, :].dot(self.U1[user_idx, :]) + self.H2[item_idx, :].dot(self.H1[user_idx, :]) */ /*else*/ { - __pyx_t_2 = __pyx_v_extent; - __pyx_t_3 = __pyx_t_2; - for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { - __pyx_v_i = __pyx_t_4; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 463, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_is_unk_user); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 463, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_user_idx}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 463, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 463, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!__pyx_t_9) { + } else { + __pyx_t_1 = __pyx_t_9; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 463, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_is_unk_item); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 463, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_item_idx}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 463, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 463, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_1 = __pyx_t_9; + __pyx_L6_bool_binop_done:; + if (unlikely(__pyx_t_1)) { - /* "View.MemoryView":1420 - * else: - * for i in range(extent): - * _slice_assign_scalar(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< - * ndim - 1, itemsize, item) - * data += stride + /* "cornac/models/efm/recom_efm.pyx":464 + * else: + * if self.train_set.is_unk_user(user_idx) or self.train_set.is_unk_item(item_idx): + * raise ScoreException("Can't make score prediction for (user_id=%d, item_id=%d)" % (user_idx, item_idx)) # <<<<<<<<<<<<<< + * item_score = self.U2[item_idx, :].dot(self.U1[user_idx, :]) + self.H2[item_idx, :].dot(self.H1[user_idx, :]) + * return item_score + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ScoreException); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 464, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyTuple_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 464, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_10 = 0; + __pyx_t_11 = 127; + __Pyx_INCREF(__pyx_kp_u_Can_t_make_score_prediction_for_2); + __pyx_t_10 += 41; + __Pyx_GIVEREF(__pyx_kp_u_Can_t_make_score_prediction_for_2); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_Can_t_make_score_prediction_for_2); + __pyx_t_8 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_user_idx), __pyx_n_u_d); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 464, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_11; + __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_8); + __pyx_t_8 = 0; + __Pyx_INCREF(__pyx_kp_u_item_id); + __pyx_t_10 += 10; + __Pyx_GIVEREF(__pyx_kp_u_item_id); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_item_id); + __pyx_t_8 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_item_idx), __pyx_n_u_d); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 464, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_11; + __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_8); + __pyx_t_8 = 0; + __Pyx_INCREF(__pyx_kp_u__7); + __pyx_t_10 += 1; + __Pyx_GIVEREF(__pyx_kp_u__7); + PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_kp_u__7); + __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_2, 5, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 464, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_8}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 464, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_Raise(__pyx_t_6, 0, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(0, 464, __pyx_L1_error) + + /* "cornac/models/efm/recom_efm.pyx":463 + * return item_scores + * else: + * if self.train_set.is_unk_user(user_idx) or self.train_set.is_unk_item(item_idx): # <<<<<<<<<<<<<< + * raise ScoreException("Can't make score prediction for (user_id=%d, item_id=%d)" % (user_idx, item_idx)) + * item_score = self.U2[item_idx, :].dot(self.U1[user_idx, :]) + self.H2[item_idx, :].dot(self.H1[user_idx, :]) */ - __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item); + } - /* "View.MemoryView":1422 - * _slice_assign_scalar(data, shape + 1, strides + 1, - * ndim - 1, itemsize, item) - * data += stride # <<<<<<<<<<<<<< - * + /* "cornac/models/efm/recom_efm.pyx":465 + * if self.train_set.is_unk_user(user_idx) or self.train_set.is_unk_item(item_idx): + * raise ScoreException("Can't make score prediction for (user_id=%d, item_id=%d)" % (user_idx, item_idx)) + * item_score = self.U2[item_idx, :].dot(self.U1[user_idx, :]) + self.H2[item_idx, :].dot(self.H1[user_idx, :]) # <<<<<<<<<<<<<< + * return item_score * */ - __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_item_idx); + __Pyx_GIVEREF(__pyx_v_item_idx); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_item_idx); + __Pyx_INCREF(__pyx_slice__5); + __Pyx_GIVEREF(__pyx_slice__5); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_slice__5); + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_dot); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_user_idx); + __Pyx_GIVEREF(__pyx_v_user_idx); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_user_idx); + __Pyx_INCREF(__pyx_slice__5); + __Pyx_GIVEREF(__pyx_slice__5); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_slice__5); + __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_H2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_item_idx); + __Pyx_GIVEREF(__pyx_v_item_idx); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_item_idx); + __Pyx_INCREF(__pyx_slice__5); + __Pyx_GIVEREF(__pyx_slice__5); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_slice__5); + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_dot); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_H1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_v_user_idx); + __Pyx_GIVEREF(__pyx_v_user_idx); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_user_idx); + __Pyx_INCREF(__pyx_slice__5); + __Pyx_GIVEREF(__pyx_slice__5); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_slice__5); + __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } + __pyx_t_3 = PyNumber_Add(__pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_item_score = __pyx_t_3; + __pyx_t_3 = 0; + + /* "cornac/models/efm/recom_efm.pyx":466 + * raise ScoreException("Can't make score prediction for (user_id=%d, item_id=%d)" % (user_idx, item_idx)) + * item_score = self.U2[item_idx, :].dot(self.U1[user_idx, :]) + self.H2[item_idx, :].dot(self.H1[user_idx, :]) + * return item_score # <<<<<<<<<<<<<< + * + * def rank(self, user_idx, item_indices=None): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_item_score); + __pyx_r = __pyx_v_item_score; + goto __pyx_L0; } - __pyx_L3:; - /* "View.MemoryView":1407 + /* "cornac/models/efm/recom_efm.pyx":439 + * return 1 + (self.rating_scale - 1) / (1 + np.exp(-sentiment)) + * + * def score(self, user_idx, item_idx=None): # <<<<<<<<<<<<<< + * """Predict the scores/ratings of a user for an item. * - * @cname('__pyx_memoryview__slice_assign_scalar') - * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, - * size_t itemsize, void *item) nogil: */ /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.score", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_item_scores); + __Pyx_XDECREF(__pyx_v_item_score); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -/* "(tree fragment)":1 - * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result +/* "cornac/models/efm/recom_efm.pyx":468 + * return item_score + * + * def rank(self, user_idx, item_indices=None): # <<<<<<<<<<<<<< + * """Rank all test items for a given user. + * */ /* Python wrapper */ -static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum = {"__pyx_unpickle_Enum", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v___pyx_type = 0; - long __pyx_v___pyx_checksum; - PyObject *__pyx_v___pyx_state = 0; +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_17rank(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_16rank, "Rank all test items for a given user.\n\n Parameters\n ----------\n user_idx: int, required\n The index of the user for whom to perform item raking.\n\n item_indices: 1d array, optional, default: None\n A list of candidate item indices to be ranked by the user.\n If `None`, list of ranked known item indices and their scores will be returned\n\n Returns\n -------\n Tuple of `item_rank`, and `item_scores`. The order of values\n in item_scores are corresponding to the order of their ids in item_ids\n\n "); +static PyMethodDef __pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_17rank = {"rank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_17rank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6cornac_6models_3efm_9recom_efm_3EFM_16rank}; +static PyObject *__pyx_pw_6cornac_6models_3efm_9recom_efm_3EFM_17rank(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_user_idx = 0; + PyObject *__pyx_v_item_indices = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__pyx_unpickle_Enum (wrapper)", 0); + __Pyx_RefNannySetupContext("rank (wrapper)", 0); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_user_idx,&__pyx_n_s_item_indices,0}; PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + values[2] = ((PyObject *)((PyObject *)Py_None)); + if (__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); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 468, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_user_idx)) != 0)) kw_args--; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 468, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rank", 0, 2, 3, 1); __PYX_ERR(0, 468, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error) + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_item_indices); + if (value) { values[2] = value; kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 468, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_Enum") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rank") < 0)) __PYX_ERR(0, 468, __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); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } } - __pyx_v___pyx_type = values[0]; - __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) - __pyx_v___pyx_state = values[2]; + __pyx_v_self = values[0]; + __pyx_v_user_idx = values[1]; + __pyx_v_item_indices = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rank", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 468, __pyx_L3_error) __pyx_L3_error:; - __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.rank", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + __pyx_r = __pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_16rank(__pyx_self, __pyx_v_self, __pyx_v_user_idx, __pyx_v_item_indices); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_v___pyx_PickleError = 0; - PyObject *__pyx_v___pyx_result = 0; +static PyObject *__pyx_pf_6cornac_6models_3efm_9recom_efm_3EFM_16rank(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_user_idx, PyObject *__pyx_v_item_indices) { + PyObject *__pyx_v_X_ = NULL; + PyObject *__pyx_v_most_cared_aspects_indices = NULL; + PyObject *__pyx_v_most_cared_X_ = NULL; + PyObject *__pyx_v_most_cared_Y_ = NULL; + PyObject *__pyx_v_explicit_scores = NULL; + PyObject *__pyx_v_known_item_scores = NULL; + PyObject *__pyx_v_all_item_scores = NULL; + PyObject *__pyx_v_item_scores = NULL; + PyObject *__pyx_v_item_rank = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - int __pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + Py_ssize_t __pyx_t_7; + int __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_Enum", 0); - - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum != 0xb068931: # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) - */ - __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xb068931) != 0); - if (__pyx_t_1) { - - /* "(tree fragment)":5 - * cdef object __pyx_result - * if __pyx_checksum != 0xb068931: - * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) - * __pyx_result = Enum.__new__(__pyx_type) - */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_PickleError); - __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); - __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_2); - __pyx_v___pyx_PickleError = __pyx_t_2; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_RefNannySetupContext("rank", 0); - /* "(tree fragment)":6 - * if __pyx_checksum != 0xb068931: - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) # <<<<<<<<<<<<<< - * __pyx_result = Enum.__new__(__pyx_type) - * if __pyx_state is not None: + /* "cornac/models/efm/recom_efm.pyx":486 + * + * """ + * X_ = self.U1[user_idx, :].dot(self.V.T) # <<<<<<<<<<<<<< + * most_cared_aspects_indices = (-X_).argsort()[:self.num_most_cared_aspects] + * most_cared_X_ = X_[most_cared_aspects_indices] */ - __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && 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); - } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 486, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 486, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_user_idx); + __Pyx_GIVEREF(__pyx_v_user_idx); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_user_idx); + __Pyx_INCREF(__pyx_slice__5); + __Pyx_GIVEREF(__pyx_slice__5); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_slice__5); + __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 486, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_dot); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 486, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_V); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 486, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_T); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 486, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 486, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(2, 6, __pyx_L1_error) - - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum != 0xb068931: # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) - */ } + __pyx_v_X_ = __pyx_t_1; + __pyx_t_1 = 0; - /* "(tree fragment)":7 - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) - * __pyx_result = Enum.__new__(__pyx_type) # <<<<<<<<<<<<<< - * if __pyx_state is not None: - * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + /* "cornac/models/efm/recom_efm.pyx":487 + * """ + * X_ = self.U1[user_idx, :].dot(self.V.T) + * most_cared_aspects_indices = (-X_).argsort()[:self.num_most_cared_aspects] # <<<<<<<<<<<<<< + * most_cared_X_ = X_[most_cared_aspects_indices] + * most_cared_Y_ = self.U2.dot(self.V[most_cared_aspects_indices, :].T) */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_MemviewEnum_type), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error) + __pyx_t_3 = PyNumber_Negative(__pyx_v_X_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_argsort); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 487, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = NULL; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_4)) { + __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_4); + __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; } } - __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error) + { + PyObject *__pyx_callargs[1] = {__pyx_t_3, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_most_cared_aspects); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_t_1, 0, 0, NULL, &__pyx_t_2, NULL, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 487, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v___pyx_result = __pyx_t_3; + __pyx_v_most_cared_aspects_indices = __pyx_t_3; __pyx_t_3 = 0; - /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) - * __pyx_result = Enum.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) - * return __pyx_result + /* "cornac/models/efm/recom_efm.pyx":488 + * X_ = self.U1[user_idx, :].dot(self.V.T) + * most_cared_aspects_indices = (-X_).argsort()[:self.num_most_cared_aspects] + * most_cared_X_ = X_[most_cared_aspects_indices] # <<<<<<<<<<<<<< + * most_cared_Y_ = self.U2.dot(self.V[most_cared_aspects_indices, :].T) + * explicit_scores = most_cared_X_.dot(most_cared_Y_.T) / (self.num_most_cared_aspects * self.rating_scale) */ - __pyx_t_1 = (__pyx_v___pyx_state != Py_None); - __pyx_t_6 = (__pyx_t_1 != 0); - if (__pyx_t_6) { + __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_X_, __pyx_v_most_cared_aspects_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 488, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_most_cared_X_ = __pyx_t_3; + __pyx_t_3 = 0; - /* "(tree fragment)":9 - * __pyx_result = Enum.__new__(__pyx_type) - * if __pyx_state is not None: - * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< - * return __pyx_result - * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + /* "cornac/models/efm/recom_efm.pyx":489 + * most_cared_aspects_indices = (-X_).argsort()[:self.num_most_cared_aspects] + * most_cared_X_ = X_[most_cared_aspects_indices] + * most_cared_Y_ = self.U2.dot(self.V[most_cared_aspects_indices, :].T) # <<<<<<<<<<<<<< + * explicit_scores = most_cared_X_.dot(most_cared_Y_.T) / (self.num_most_cared_aspects * self.rating_scale) + * known_item_scores = self.alpha * explicit_scores + (1 - self.alpha) * self.score(user_idx) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_U2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 489, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_dot); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 489, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_V); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 489, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 489, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_v_most_cared_aspects_indices); + __Pyx_GIVEREF(__pyx_v_most_cared_aspects_indices); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_most_cared_aspects_indices); + __Pyx_INCREF(__pyx_slice__5); + __Pyx_GIVEREF(__pyx_slice__5); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_slice__5); + __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 489, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_T); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 489, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 489, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_most_cared_Y_ = __pyx_t_3; + __pyx_t_3 = 0; + + /* "cornac/models/efm/recom_efm.pyx":490 + * most_cared_X_ = X_[most_cared_aspects_indices] + * most_cared_Y_ = self.U2.dot(self.V[most_cared_aspects_indices, :].T) + * explicit_scores = most_cared_X_.dot(most_cared_Y_.T) / (self.num_most_cared_aspects * self.rating_scale) # <<<<<<<<<<<<<< + * known_item_scores = self.alpha * explicit_scores + (1 - self.alpha) * self.score(user_idx) + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_most_cared_X_, __pyx_n_s_dot); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 490, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_most_cared_Y_, __pyx_n_s_T); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 490, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 490, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num_most_cared_aspects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 490, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rating_scale); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 490, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PyNumber_Multiply(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 490, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 490, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_explicit_scores = __pyx_t_4; + __pyx_t_4 = 0; + + /* "cornac/models/efm/recom_efm.pyx":491 + * most_cared_Y_ = self.U2.dot(self.V[most_cared_aspects_indices, :].T) + * explicit_scores = most_cared_X_.dot(most_cared_Y_.T) / (self.num_most_cared_aspects * self.rating_scale) + * known_item_scores = self.alpha * explicit_scores + (1 - self.alpha) * self.score(user_idx) # <<<<<<<<<<<<<< + * + * # check if the returned scores also cover unknown items + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_alpha); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PyNumber_Multiply(__pyx_t_4, __pyx_v_explicit_scores); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_alpha); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyInt_SubtractCObj(__pyx_int_1, __pyx_t_4, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_score); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_user_idx}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_known_item_scores = __pyx_t_4; + __pyx_t_4 = 0; + + /* "cornac/models/efm/recom_efm.pyx":495 + * # check if the returned scores also cover unknown items + * # if not, all unknown items will be given the MIN score + * if len(known_item_scores) == self.train_set.total_items: # <<<<<<<<<<<<<< + * all_item_scores = known_item_scores + * else: + */ + __pyx_t_7 = PyObject_Length(__pyx_v_known_item_scores); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 495, __pyx_L1_error) + __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_total_items); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyObject_RichCompare(__pyx_t_4, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 495, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 495, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_8) { + + /* "cornac/models/efm/recom_efm.pyx":496 + * # if not, all unknown items will be given the MIN score + * if len(known_item_scores) == self.train_set.total_items: + * all_item_scores = known_item_scores # <<<<<<<<<<<<<< + * else: + * all_item_scores = np.ones(self.train_set.total_items) * np.min( + */ + __Pyx_INCREF(__pyx_v_known_item_scores); + __pyx_v_all_item_scores = __pyx_v_known_item_scores; + + /* "cornac/models/efm/recom_efm.pyx":495 + * # check if the returned scores also cover unknown items + * # if not, all unknown items will be given the MIN score + * if len(known_item_scores) == self.train_set.total_items: # <<<<<<<<<<<<<< + * all_item_scores = known_item_scores + * else: + */ + goto __pyx_L3; + } + + /* "cornac/models/efm/recom_efm.pyx":498 + * all_item_scores = known_item_scores + * else: + * all_item_scores = np.ones(self.train_set.total_items) * np.min( # <<<<<<<<<<<<<< + * known_item_scores + * ) + */ + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 498, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_ones); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 498, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 498, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_total_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 498, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 498, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_min); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 498, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "cornac/models/efm/recom_efm.pyx":499 + * else: + * all_item_scores = np.ones(self.train_set.total_items) * np.min( + * known_item_scores # <<<<<<<<<<<<<< + * ) + * all_item_scores[: self.train_set.num_items] = known_item_scores + */ + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(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); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_known_item_scores}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 498, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + + /* "cornac/models/efm/recom_efm.pyx":498 + * all_item_scores = known_item_scores + * else: + * all_item_scores = np.ones(self.train_set.total_items) * np.min( # <<<<<<<<<<<<<< + * known_item_scores + * ) */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error) - __pyx_t_3 = __pyx_unpickle_Enum__set_state(((struct __pyx_MemviewEnum_obj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = PyNumber_Multiply(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 498, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_all_item_scores = __pyx_t_6; + __pyx_t_6 = 0; - /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) - * __pyx_result = Enum.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) - * return __pyx_result + /* "cornac/models/efm/recom_efm.pyx":501 + * known_item_scores + * ) + * all_item_scores[: self.train_set.num_items] = known_item_scores # <<<<<<<<<<<<<< + * + * # rank items based on their scores */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 501, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_num_items); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 501, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__Pyx_PyObject_SetSlice(__pyx_v_all_item_scores, __pyx_v_known_item_scores, 0, 0, NULL, &__pyx_t_4, NULL, 0, 0, 1) < 0) __PYX_ERR(0, 501, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } + __pyx_L3:; - /* "(tree fragment)":10 - * if __pyx_state is not None: - * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) - * return __pyx_result # <<<<<<<<<<<<<< - * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): - * __pyx_result.name = __pyx_state[0] + /* "cornac/models/efm/recom_efm.pyx":504 + * + * # rank items based on their scores + * if item_indices is None: # <<<<<<<<<<<<<< + * item_scores = all_item_scores[: self.train_set.num_items] + * item_rank = item_scores.argsort()[::-1] */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v___pyx_result); - __pyx_r = __pyx_v___pyx_result; - goto __pyx_L0; + __pyx_t_8 = (__pyx_v_item_indices == Py_None); + if (__pyx_t_8) { - /* "(tree fragment)":1 - * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result + /* "cornac/models/efm/recom_efm.pyx":505 + * # rank items based on their scores + * if item_indices is None: + * item_scores = all_item_scores[: self.train_set.num_items] # <<<<<<<<<<<<<< + * item_rank = item_scores.argsort()[::-1] + * else: */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_train_set); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 505, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_num_items); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 505, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_v_all_item_scores, 0, 0, NULL, &__pyx_t_6, NULL, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 505, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_item_scores = __pyx_t_4; + __pyx_t_4 = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v___pyx_PickleError); - __Pyx_XDECREF(__pyx_v___pyx_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":11 - * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.name = __pyx_state[0] - * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + /* "cornac/models/efm/recom_efm.pyx":506 + * if item_indices is None: + * item_scores = all_item_scores[: self.train_set.num_items] + * item_rank = item_scores.argsort()[::-1] # <<<<<<<<<<<<<< + * else: + * item_scores = all_item_scores[item_indices] */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_item_scores, __pyx_n_s_argsort); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 506, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; + } + } + { + PyObject *__pyx_callargs[1] = {__pyx_t_1, }; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 506, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_4, __pyx_slice__22); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 506, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_item_rank = __pyx_t_6; + __pyx_t_6 = 0; -static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - Py_ssize_t __pyx_t_3; - int __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_Enum__set_state", 0); - - /* "(tree fragment)":12 - * return __pyx_result - * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): - * __pyx_result.name = __pyx_state[0] # <<<<<<<<<<<<<< - * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[1]) + /* "cornac/models/efm/recom_efm.pyx":504 + * + * # rank items based on their scores + * if item_indices is None: # <<<<<<<<<<<<<< + * item_scores = all_item_scores[: self.train_set.num_items] + * item_rank = item_scores.argsort()[::-1] */ - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(2, 12, __pyx_L1_error) + goto __pyx_L4; } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->name); - __Pyx_DECREF(__pyx_v___pyx_result->name); - __pyx_v___pyx_result->name = __pyx_t_1; - __pyx_t_1 = 0; - /* "(tree fragment)":13 - * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): - * __pyx_result.name = __pyx_state[0] - * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[1]) + /* "cornac/models/efm/recom_efm.pyx":508 + * item_rank = item_scores.argsort()[::-1] + * else: + * item_scores = all_item_scores[item_indices] # <<<<<<<<<<<<<< + * item_rank = np.array(item_indices)[item_scores.argsort()[::-1]] + * */ - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(2, 13, __pyx_L1_error) - } - __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_4 = ((__pyx_t_3 > 1) != 0); - if (__pyx_t_4) { - } else { - __pyx_t_2 = __pyx_t_4; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_5 = (__pyx_t_4 != 0); - __pyx_t_2 = __pyx_t_5; - __pyx_L4_bool_binop_done:; - if (__pyx_t_2) { + /*else*/ { + __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_all_item_scores, __pyx_v_item_indices); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 508, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_item_scores = __pyx_t_6; + __pyx_t_6 = 0; - /* "(tree fragment)":14 - * __pyx_result.name = __pyx_state[0] - * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":509 + * else: + * item_scores = all_item_scores[item_indices] + * item_rank = np.array(item_indices)[item_scores.argsort()[::-1]] # <<<<<<<<<<<<<< + * + * return item_rank, item_scores */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 509, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 509, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } } - __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_item_indices}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 509, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_item_scores, __pyx_n_s_argsort); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 509, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; } } - __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + { + PyObject *__pyx_callargs[1] = {__pyx_t_3, }; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 509, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_slice__22); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 509, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 509, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_item_rank = __pyx_t_1; + __pyx_t_1 = 0; + } + __pyx_L4:; - /* "(tree fragment)":13 - * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): - * __pyx_result.name = __pyx_state[0] - * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[1]) + /* "cornac/models/efm/recom_efm.pyx":511 + * item_rank = np.array(item_indices)[item_scores.argsort()[::-1]] + * + * return item_rank, item_scores # <<<<<<<<<<<<<< */ - } + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 511, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_item_rank); + __Pyx_GIVEREF(__pyx_v_item_rank); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_item_rank); + __Pyx_INCREF(__pyx_v_item_scores); + __Pyx_GIVEREF(__pyx_v_item_scores); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_item_scores); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "(tree fragment)":11 - * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.name = __pyx_state[0] - * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + /* "cornac/models/efm/recom_efm.pyx":468 + * return item_score + * + * def rank(self, user_idx, item_indices=None): # <<<<<<<<<<<<<< + * """Rank all test items for a given user. + * */ /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; + __Pyx_AddTraceback("cornac.models.efm.recom_efm.EFM.rank", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; + __Pyx_XDECREF(__pyx_v_X_); + __Pyx_XDECREF(__pyx_v_most_cared_aspects_indices); + __Pyx_XDECREF(__pyx_v_most_cared_X_); + __Pyx_XDECREF(__pyx_v_most_cared_Y_); + __Pyx_XDECREF(__pyx_v_explicit_scores); + __Pyx_XDECREF(__pyx_v_known_item_scores); + __Pyx_XDECREF(__pyx_v_all_item_scores); + __Pyx_XDECREF(__pyx_v_item_scores); + __Pyx_XDECREF(__pyx_v_item_rank); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; @@ -42046,12 +47715,17 @@ static struct __pyx_vtabstruct_array __pyx_vtable_array; static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k) { struct __pyx_array_obj *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_array_obj *)o); p->__pyx_vtab = __pyx_vtabptr_array; p->mode = ((PyObject*)Py_None); Py_INCREF(Py_None); @@ -42066,8 +47740,10 @@ static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k) { static void __pyx_tp_dealloc_array(PyObject *o) { struct __pyx_array_obj *p = (struct __pyx_array_obj *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_array) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif { @@ -42095,8 +47771,11 @@ static int __pyx_mp_ass_subscript_array(PyObject *o, PyObject *i, PyObject *v) { return __pyx_array___setitem__(o, i, v); } else { + __Pyx_TypeName o_type_name; + o_type_name = __Pyx_PyType_GetName(Py_TYPE(o)); PyErr_Format(PyExc_NotImplementedError, - "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); + "Subscript deletion not supported by " __Pyx_FMT_TYPENAME, o_type_name); + __Pyx_DECREF_TypeName(o_type_name); return -1; } } @@ -42116,8 +47795,8 @@ static PyObject *__pyx_getprop___pyx_array_memview(PyObject *o, CYTHON_UNUSED vo static PyMethodDef __pyx_methods_array[] = { {"__getattr__", (PyCFunction)__pyx_array___getattr__, METH_O|METH_COEXIST, 0}, - {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_array_1__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_array_3__setstate_cython__, METH_O, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw___pyx_array_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw___pyx_array_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; @@ -42125,6 +47804,50 @@ static struct PyGetSetDef __pyx_getsets_array[] = { {(char *)"memview", __pyx_getprop___pyx_array_memview, 0, (char *)0, 0}, {0, 0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +#if !CYTHON_COMPILING_IN_LIMITED_API + +static PyBufferProcs __pyx_tp_as_buffer_array = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + __pyx_array_getbuffer, /*bf_getbuffer*/ + 0, /*bf_releasebuffer*/ +}; +#endif +static PyType_Slot __pyx_type___pyx_array_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_array}, + {Py_sq_length, (void *)__pyx_array___len__}, + {Py_sq_item, (void *)__pyx_sq_item_array}, + {Py_mp_length, (void *)__pyx_array___len__}, + {Py_mp_subscript, (void *)__pyx_array___getitem__}, + {Py_mp_ass_subscript, (void *)__pyx_mp_ass_subscript_array}, + {Py_tp_getattro, (void *)__pyx_tp_getattro_array}, + #if defined(Py_bf_getbuffer) + {Py_bf_getbuffer, (void *)__pyx_array_getbuffer}, + #endif + {Py_tp_methods, (void *)__pyx_methods_array}, + {Py_tp_getset, (void *)__pyx_getsets_array}, + {Py_tp_new, (void *)__pyx_tp_new_array}, + {0, 0}, +}; +static PyType_Spec __pyx_type___pyx_array_spec = { + "cornac.models.efm.recom_efm.array", + sizeof(struct __pyx_array_obj), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_SEQUENCE, + __pyx_type___pyx_array_slots, +}; +#else static PySequenceMethods __pyx_tp_as_sequence_array = { __pyx_array___len__, /*sq_length*/ @@ -42164,7 +47887,7 @@ static PyBufferProcs __pyx_tp_as_buffer_array = { static PyTypeObject __pyx_type___pyx_array = { PyVarObject_HEAD_INIT(0, 0) - "cornac.models.efm.recom_efm.array", /*tp_name*/ + "cornac.models.efm.recom_efm.""array", /*tp_name*/ sizeof(struct __pyx_array_obj), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_array, /*tp_dealloc*/ @@ -42192,7 +47915,7 @@ static PyTypeObject __pyx_type___pyx_array = { __pyx_tp_getattro_array, /*tp_getattro*/ 0, /*tp_setattro*/ &__pyx_tp_as_buffer_array, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_SEQUENCE, /*tp_flags*/ 0, /*tp_doc*/ 0, /*tp_traverse*/ 0, /*tp_clear*/ @@ -42207,7 +47930,9 @@ static PyTypeObject __pyx_type___pyx_array = { 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif 0, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_array, /*tp_new*/ @@ -42221,25 +47946,41 @@ static PyTypeObject __pyx_type___pyx_array = { 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif #endif - #if PY_VERSION_HEX >= 0x030800b1 + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif }; +#endif static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { struct __pyx_MemviewEnum_obj *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_MemviewEnum_obj *)o); p->name = Py_None; Py_INCREF(Py_None); return o; @@ -42248,8 +47989,10 @@ static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, C static void __pyx_tp_dealloc_Enum(PyObject *o) { struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_Enum) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); @@ -42275,15 +48018,39 @@ static int __pyx_tp_clear_Enum(PyObject *o) { return 0; } +static PyObject *__pyx_specialmethod___pyx_MemviewEnum___repr__(PyObject *self, CYTHON_UNUSED PyObject *arg) { + return __pyx_MemviewEnum___repr__(self); +} + static PyMethodDef __pyx_methods_Enum[] = { - {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_1__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_3__setstate_cython__, METH_O, 0}, + {"__repr__", (PyCFunction)__pyx_specialmethod___pyx_MemviewEnum___repr__, METH_NOARGS|METH_COEXIST, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw___pyx_MemviewEnum_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw___pyx_MemviewEnum_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type___pyx_MemviewEnum_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_Enum}, + {Py_tp_repr, (void *)__pyx_MemviewEnum___repr__}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_Enum}, + {Py_tp_clear, (void *)__pyx_tp_clear_Enum}, + {Py_tp_methods, (void *)__pyx_methods_Enum}, + {Py_tp_init, (void *)__pyx_MemviewEnum___init__}, + {Py_tp_new, (void *)__pyx_tp_new_Enum}, + {0, 0}, +}; +static PyType_Spec __pyx_type___pyx_MemviewEnum_spec = { + "cornac.models.efm.recom_efm.Enum", + sizeof(struct __pyx_MemviewEnum_obj), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type___pyx_MemviewEnum_slots, +}; +#else static PyTypeObject __pyx_type___pyx_MemviewEnum = { PyVarObject_HEAD_INIT(0, 0) - "cornac.models.efm.recom_efm.Enum", /*tp_name*/ + "cornac.models.efm.recom_efm.""Enum", /*tp_name*/ sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_Enum, /*tp_dealloc*/ @@ -42326,7 +48093,9 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = { 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif __pyx_MemviewEnum___init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_Enum, /*tp_new*/ @@ -42340,26 +48109,42 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = { 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ #endif - #if PY_VERSION_HEX >= 0x030800b1 + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif }; +#endif static struct __pyx_vtabstruct_memoryview __pyx_vtable_memoryview; static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k) { struct __pyx_memoryview_obj *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_memoryview_obj *)o); p->__pyx_vtab = __pyx_vtabptr_memoryview; p->obj = Py_None; Py_INCREF(Py_None); @@ -42376,8 +48161,10 @@ static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject static void __pyx_tp_dealloc_memoryview(PyObject *o) { struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_memoryview) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); @@ -42441,8 +48228,11 @@ static int __pyx_mp_ass_subscript_memoryview(PyObject *o, PyObject *i, PyObject return __pyx_memoryview___setitem__(o, i, v); } else { + __Pyx_TypeName o_type_name; + o_type_name = __Pyx_PyType_GetName(Py_TYPE(o)); PyErr_Format(PyExc_NotImplementedError, - "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); + "Subscript deletion not supported by " __Pyx_FMT_TYPENAME, o_type_name); + __Pyx_DECREF_TypeName(o_type_name); return -1; } } @@ -42483,13 +48273,18 @@ static PyObject *__pyx_getprop___pyx_memoryview_size(PyObject *o, CYTHON_UNUSED return __pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(o); } +static PyObject *__pyx_specialmethod___pyx_memoryview___repr__(PyObject *self, CYTHON_UNUSED PyObject *arg) { + return __pyx_memoryview___repr__(self); +} + static PyMethodDef __pyx_methods_memoryview[] = { - {"is_c_contig", (PyCFunction)__pyx_memoryview_is_c_contig, METH_NOARGS, 0}, - {"is_f_contig", (PyCFunction)__pyx_memoryview_is_f_contig, METH_NOARGS, 0}, - {"copy", (PyCFunction)__pyx_memoryview_copy, METH_NOARGS, 0}, - {"copy_fortran", (PyCFunction)__pyx_memoryview_copy_fortran, METH_NOARGS, 0}, - {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_1__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_3__setstate_cython__, METH_O, 0}, + {"__repr__", (PyCFunction)__pyx_specialmethod___pyx_memoryview___repr__, METH_NOARGS|METH_COEXIST, 0}, + {"is_c_contig", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_memoryview_is_c_contig, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"is_f_contig", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_memoryview_is_f_contig, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"copy", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_memoryview_copy, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"copy_fortran", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_memoryview_copy_fortran, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw___pyx_memoryview_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw___pyx_memoryview_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; @@ -42505,6 +48300,53 @@ static struct PyGetSetDef __pyx_getsets_memoryview[] = { {(char *)"size", __pyx_getprop___pyx_memoryview_size, 0, (char *)0, 0}, {0, 0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +#if !CYTHON_COMPILING_IN_LIMITED_API + +static PyBufferProcs __pyx_tp_as_buffer_memoryview = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + __pyx_memoryview_getbuffer, /*bf_getbuffer*/ + 0, /*bf_releasebuffer*/ +}; +#endif +static PyType_Slot __pyx_type___pyx_memoryview_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_memoryview}, + {Py_tp_repr, (void *)__pyx_memoryview___repr__}, + {Py_sq_length, (void *)__pyx_memoryview___len__}, + {Py_sq_item, (void *)__pyx_sq_item_memoryview}, + {Py_mp_length, (void *)__pyx_memoryview___len__}, + {Py_mp_subscript, (void *)__pyx_memoryview___getitem__}, + {Py_mp_ass_subscript, (void *)__pyx_mp_ass_subscript_memoryview}, + {Py_tp_str, (void *)__pyx_memoryview___str__}, + #if defined(Py_bf_getbuffer) + {Py_bf_getbuffer, (void *)__pyx_memoryview_getbuffer}, + #endif + {Py_tp_traverse, (void *)__pyx_tp_traverse_memoryview}, + {Py_tp_clear, (void *)__pyx_tp_clear_memoryview}, + {Py_tp_methods, (void *)__pyx_methods_memoryview}, + {Py_tp_getset, (void *)__pyx_getsets_memoryview}, + {Py_tp_new, (void *)__pyx_tp_new_memoryview}, + {0, 0}, +}; +static PyType_Spec __pyx_type___pyx_memoryview_spec = { + "cornac.models.efm.recom_efm.memoryview", + sizeof(struct __pyx_memoryview_obj), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type___pyx_memoryview_slots, +}; +#else static PySequenceMethods __pyx_tp_as_sequence_memoryview = { __pyx_memoryview___len__, /*sq_length*/ @@ -42544,7 +48386,7 @@ static PyBufferProcs __pyx_tp_as_buffer_memoryview = { static PyTypeObject __pyx_type___pyx_memoryview = { PyVarObject_HEAD_INIT(0, 0) - "cornac.models.efm.recom_efm.memoryview", /*tp_name*/ + "cornac.models.efm.recom_efm.""memoryview", /*tp_name*/ sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_memoryview, /*tp_dealloc*/ @@ -42587,7 +48429,9 @@ static PyTypeObject __pyx_type___pyx_memoryview = { 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif 0, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_memoryview, /*tp_new*/ @@ -42601,15 +48445,26 @@ static PyTypeObject __pyx_type___pyx_memoryview = { 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ #endif - #if PY_VERSION_HEX >= 0x030800b1 + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif }; +#endif static struct __pyx_vtabstruct__memoryviewslice __pyx_vtable__memoryviewslice; static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k) { @@ -42618,6 +48473,7 @@ static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyO if (unlikely(!o)) return 0; p = ((struct __pyx_memoryviewslice_obj *)o); p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_memoryview*)__pyx_vtabptr__memoryviewslice; + new((void*)&(p->from_slice)) __Pyx_memviewslice(); p->from_object = Py_None; Py_INCREF(Py_None); p->from_slice.memview = NULL; return o; @@ -42626,8 +48482,10 @@ static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyO static void __pyx_tp_dealloc__memoryviewslice(PyObject *o) { struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc__memoryviewslice) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); @@ -42639,6 +48497,7 @@ static void __pyx_tp_dealloc__memoryviewslice(PyObject *o) { __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); PyErr_Restore(etype, eval, etb); } + __Pyx_call_destructor(p->from_slice); Py_CLEAR(p->from_object); PyObject_GC_Track(o); __pyx_tp_dealloc_memoryview(o); @@ -42661,28 +48520,37 @@ static int __pyx_tp_clear__memoryviewslice(PyObject *o) { tmp = ((PyObject*)p->from_object); p->from_object = Py_None; Py_INCREF(Py_None); Py_XDECREF(tmp); - __PYX_XDEC_MEMVIEW(&p->from_slice, 1); + __PYX_XCLEAR_MEMVIEW(&p->from_slice, 1); return 0; } -static PyObject *__pyx_getprop___pyx_memoryviewslice_base(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(o); -} - static PyMethodDef __pyx_methods__memoryviewslice[] = { - {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_1__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_3__setstate_cython__, METH_O, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw___pyx_memoryviewslice_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw___pyx_memoryviewslice_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; - -static struct PyGetSetDef __pyx_getsets__memoryviewslice[] = { - {(char *)"base", __pyx_getprop___pyx_memoryviewslice_base, 0, (char *)0, 0}, - {0, 0, 0, 0, 0} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type___pyx_memoryviewslice_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc__memoryviewslice}, + {Py_tp_doc, (void *)PyDoc_STR("Internal class for passing memoryview slices to Python")}, + {Py_tp_traverse, (void *)__pyx_tp_traverse__memoryviewslice}, + {Py_tp_clear, (void *)__pyx_tp_clear__memoryviewslice}, + {Py_tp_methods, (void *)__pyx_methods__memoryviewslice}, + {Py_tp_new, (void *)__pyx_tp_new__memoryviewslice}, + {0, 0}, +}; +static PyType_Spec __pyx_type___pyx_memoryviewslice_spec = { + "cornac.models.efm.recom_efm._memoryviewslice", + sizeof(struct __pyx_memoryviewslice_obj), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_SEQUENCE, + __pyx_type___pyx_memoryviewslice_slots, }; +#else static PyTypeObject __pyx_type___pyx_memoryviewslice = { PyVarObject_HEAD_INIT(0, 0) - "cornac.models.efm.recom_efm._memoryviewslice", /*tp_name*/ + "cornac.models.efm.recom_efm.""_memoryviewslice", /*tp_name*/ sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc__memoryviewslice, /*tp_dealloc*/ @@ -42700,7 +48568,7 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = { #if PY_MAJOR_VERSION >= 3 0, /*tp_as_async*/ #endif - #if CYTHON_COMPILING_IN_PYPY + #if CYTHON_COMPILING_IN_PYPY || 0 __pyx_memoryview___repr__, /*tp_repr*/ #else 0, /*tp_repr*/ @@ -42710,7 +48578,7 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = { 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ - #if CYTHON_COMPILING_IN_PYPY + #if CYTHON_COMPILING_IN_PYPY || 0 __pyx_memoryview___str__, /*tp_str*/ #else 0, /*tp_str*/ @@ -42718,8 +48586,8 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = { 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - "Internal class for passing memoryview slices to Python", /*tp_doc*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_SEQUENCE, /*tp_flags*/ + PyDoc_STR("Internal class for passing memoryview slices to Python"), /*tp_doc*/ __pyx_tp_traverse__memoryviewslice, /*tp_traverse*/ __pyx_tp_clear__memoryviewslice, /*tp_clear*/ 0, /*tp_richcompare*/ @@ -42728,12 +48596,14 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = { 0, /*tp_iternext*/ __pyx_methods__memoryviewslice, /*tp_methods*/ 0, /*tp_members*/ - __pyx_getsets__memoryviewslice, /*tp_getset*/ + 0, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif 0, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new__memoryviewslice, /*tp_new*/ @@ -42747,51 +48617,30 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = { 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ #endif - #if PY_VERSION_HEX >= 0x030800b1 + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif }; +#endif static PyMethodDef __pyx_methods[] = { {0, 0, 0, 0} }; - -#if PY_MAJOR_VERSION >= 3 -#if CYTHON_PEP489_MULTI_PHASE_INIT -static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ -static int __pyx_pymod_exec_recom_efm(PyObject* module); /*proto*/ -static PyModuleDef_Slot __pyx_moduledef_slots[] = { - {Py_mod_create, (void*)__pyx_pymod_create}, - {Py_mod_exec, (void*)__pyx_pymod_exec_recom_efm}, - {0, NULL} -}; -#endif - -static struct PyModuleDef __pyx_moduledef = { - PyModuleDef_HEAD_INIT, - "recom_efm", - 0, /* m_doc */ - #if CYTHON_PEP489_MULTI_PHASE_INIT - 0, /* m_size */ - #else - -1, /* m_size */ - #endif - __pyx_methods /* m_methods */, - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_moduledef_slots, /* m_slots */ - #else - NULL, /* m_reload */ - #endif - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif #ifndef CYTHON_SMALL_CODE #if defined(__clang__) #define CYTHON_SMALL_CODE @@ -42801,349 +48650,452 @@ static struct PyModuleDef __pyx_moduledef = { #define CYTHON_SMALL_CODE #endif #endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_n_s_A, __pyx_k_A, sizeof(__pyx_k_A), 0, 0, 1, 1}, - {&__pyx_n_s_ASCII, __pyx_k_ASCII, sizeof(__pyx_k_ASCII), 0, 0, 1, 1}, - {&__pyx_n_s_A_iids, __pyx_k_A_iids, sizeof(__pyx_k_A_iids), 0, 0, 1, 1}, - {&__pyx_n_s_A_item_counts, __pyx_k_A_item_counts, sizeof(__pyx_k_A_item_counts), 0, 0, 1, 1}, - {&__pyx_n_s_A_uids, __pyx_k_A_uids, sizeof(__pyx_k_A_uids), 0, 0, 1, 1}, - {&__pyx_n_s_A_user_counts, __pyx_k_A_user_counts, sizeof(__pyx_k_A_user_counts), 0, 0, 1, 1}, - {&__pyx_kp_s_Buffer_view_does_not_expose_stri, __pyx_k_Buffer_view_does_not_expose_stri, sizeof(__pyx_k_Buffer_view_does_not_expose_stri), 0, 0, 1, 0}, - {&__pyx_kp_u_Building_matrices_completed, __pyx_k_Building_matrices_completed, sizeof(__pyx_k_Building_matrices_completed), 0, 1, 0, 0}, - {&__pyx_kp_s_Can_only_create_a_buffer_that_is, __pyx_k_Can_only_create_a_buffer_that_is, sizeof(__pyx_k_Can_only_create_a_buffer_that_is), 0, 0, 1, 0}, - {&__pyx_kp_u_Can_t_make_score_prediction_for, __pyx_k_Can_t_make_score_prediction_for, sizeof(__pyx_k_Can_t_make_score_prediction_for), 0, 1, 0, 0}, - {&__pyx_kp_u_Can_t_make_score_prediction_for_2, __pyx_k_Can_t_make_score_prediction_for_2, sizeof(__pyx_k_Can_t_make_score_prediction_for_2), 0, 1, 0, 0}, - {&__pyx_kp_s_Cannot_assign_to_read_only_memor, __pyx_k_Cannot_assign_to_read_only_memor, sizeof(__pyx_k_Cannot_assign_to_read_only_memor), 0, 0, 1, 0}, - {&__pyx_kp_s_Cannot_create_writable_memory_vi, __pyx_k_Cannot_create_writable_memory_vi, sizeof(__pyx_k_Cannot_create_writable_memory_vi), 0, 0, 1, 0}, - {&__pyx_kp_s_Cannot_index_with_type_s, __pyx_k_Cannot_index_with_type_s, sizeof(__pyx_k_Cannot_index_with_type_s), 0, 0, 1, 0}, - {&__pyx_n_s_Counter, __pyx_k_Counter, sizeof(__pyx_k_Counter), 0, 0, 1, 1}, - {&__pyx_n_s_EFM, __pyx_k_EFM, sizeof(__pyx_k_EFM), 0, 0, 1, 1}, - {&__pyx_n_u_EFM, __pyx_k_EFM, sizeof(__pyx_k_EFM), 0, 1, 0, 1}, - {&__pyx_n_s_EFM___init, __pyx_k_EFM___init, sizeof(__pyx_k_EFM___init), 0, 0, 1, 1}, - {&__pyx_n_s_EFM__build_matrices, __pyx_k_EFM__build_matrices, sizeof(__pyx_k_EFM__build_matrices), 0, 0, 1, 1}, - {&__pyx_n_s_EFM__compute_attention_score, __pyx_k_EFM__compute_attention_score, sizeof(__pyx_k_EFM__compute_attention_score), 0, 0, 1, 1}, - {&__pyx_n_s_EFM__compute_quality_score, __pyx_k_EFM__compute_quality_score, sizeof(__pyx_k_EFM__compute_quality_score), 0, 0, 1, 1}, - {&__pyx_n_s_EFM__fit_efm, __pyx_k_EFM__fit_efm, sizeof(__pyx_k_EFM__fit_efm), 0, 0, 1, 1}, - {&__pyx_n_s_EFM__init, __pyx_k_EFM__init, sizeof(__pyx_k_EFM__init), 0, 0, 1, 1}, - {&__pyx_n_s_EFM_fit, __pyx_k_EFM_fit, sizeof(__pyx_k_EFM_fit), 0, 0, 1, 1}, - {&__pyx_n_s_EFM_rank, __pyx_k_EFM_rank, sizeof(__pyx_k_EFM_rank), 0, 0, 1, 1}, - {&__pyx_n_s_EFM_score, __pyx_k_EFM_score, sizeof(__pyx_k_EFM_score), 0, 0, 1, 1}, - {&__pyx_n_s_Ellipsis, __pyx_k_Ellipsis, sizeof(__pyx_k_Ellipsis), 0, 0, 1, 1}, - {&__pyx_kp_s_Empty_shape_tuple_for_cython_arr, __pyx_k_Empty_shape_tuple_for_cython_arr, sizeof(__pyx_k_Empty_shape_tuple_for_cython_arr), 0, 0, 1, 0}, - {&__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_k_Expected_at_least_d_argument_s_g, sizeof(__pyx_k_Expected_at_least_d_argument_s_g), 0, 0, 1, 0}, - {&__pyx_kp_s_Explict_Factor_Models_Parameters, __pyx_k_Explict_Factor_Models_Parameters, sizeof(__pyx_k_Explict_Factor_Models_Parameters), 0, 0, 1, 0}, - {&__pyx_kp_s_Function_call_with_ambiguous_arg, __pyx_k_Function_call_with_ambiguous_arg, sizeof(__pyx_k_Function_call_with_ambiguous_arg), 0, 0, 1, 0}, - {&__pyx_n_s_H1, __pyx_k_H1, sizeof(__pyx_k_H1), 0, 0, 1, 1}, - {&__pyx_n_u_H1, __pyx_k_H1, sizeof(__pyx_k_H1), 0, 1, 0, 1}, - {&__pyx_n_s_H1_denominator, __pyx_k_H1_denominator, sizeof(__pyx_k_H1_denominator), 0, 0, 1, 1}, - {&__pyx_n_s_H1_numerator, __pyx_k_H1_numerator, sizeof(__pyx_k_H1_numerator), 0, 0, 1, 1}, - {&__pyx_n_s_H2, __pyx_k_H2, sizeof(__pyx_k_H2), 0, 0, 1, 1}, - {&__pyx_n_u_H2, __pyx_k_H2, sizeof(__pyx_k_H2), 0, 1, 0, 1}, - {&__pyx_n_s_H2_denominator, __pyx_k_H2_denominator, sizeof(__pyx_k_H2_denominator), 0, 0, 1, 1}, - {&__pyx_n_s_H2_numerator, __pyx_k_H2_numerator, sizeof(__pyx_k_H2_numerator), 0, 0, 1, 1}, - {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, - {&__pyx_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_k_Incompatible_checksums_s_vs_0xb0, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xb0), 0, 0, 1, 0}, - {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1}, - {&__pyx_kp_s_Indirect_dimensions_not_supporte, __pyx_k_Indirect_dimensions_not_supporte, sizeof(__pyx_k_Indirect_dimensions_not_supporte), 0, 0, 1, 0}, - {&__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_k_Invalid_mode_expected_c_or_fortr, sizeof(__pyx_k_Invalid_mode_expected_c_or_fortr), 0, 0, 1, 0}, - {&__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_k_Invalid_shape_in_axis_d_d, sizeof(__pyx_k_Invalid_shape_in_axis_d_d), 0, 0, 1, 0}, - {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1}, - {&__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_k_MemoryView_of_r_at_0x_x, sizeof(__pyx_k_MemoryView_of_r_at_0x_x), 0, 0, 1, 0}, - {&__pyx_kp_s_MemoryView_of_r_object, __pyx_k_MemoryView_of_r_object, sizeof(__pyx_k_MemoryView_of_r_object), 0, 0, 1, 0}, - {&__pyx_kp_s_No_matching_signature_found, __pyx_k_No_matching_signature_found, sizeof(__pyx_k_No_matching_signature_found), 0, 0, 1, 0}, - {&__pyx_n_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1}, - {&__pyx_kp_u_Optimization_finished, __pyx_k_Optimization_finished, sizeof(__pyx_k_Optimization_finished), 0, 1, 0, 0}, - {&__pyx_n_s_OrderedDict, __pyx_k_OrderedDict, sizeof(__pyx_k_OrderedDict), 0, 0, 1, 1}, - {&__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_k_Out_of_bounds_on_buffer_access_a, sizeof(__pyx_k_Out_of_bounds_on_buffer_access_a), 0, 0, 1, 0}, - {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, - {&__pyx_n_s_Recommender, __pyx_k_Recommender, sizeof(__pyx_k_Recommender), 0, 0, 1, 1}, - {&__pyx_n_s_ScoreException, __pyx_k_ScoreException, sizeof(__pyx_k_ScoreException), 0, 0, 1, 1}, - {&__pyx_n_s_T, __pyx_k_T, sizeof(__pyx_k_T), 0, 0, 1, 1}, - {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, - {&__pyx_n_s_U1, __pyx_k_U1, sizeof(__pyx_k_U1), 0, 0, 1, 1}, - {&__pyx_n_u_U1, __pyx_k_U1, sizeof(__pyx_k_U1), 0, 1, 0, 1}, - {&__pyx_n_s_U1_denominator, __pyx_k_U1_denominator, sizeof(__pyx_k_U1_denominator), 0, 0, 1, 1}, - {&__pyx_n_s_U1_numerator, __pyx_k_U1_numerator, sizeof(__pyx_k_U1_numerator), 0, 0, 1, 1}, - {&__pyx_n_s_U2, __pyx_k_U2, sizeof(__pyx_k_U2), 0, 0, 1, 1}, - {&__pyx_n_u_U2, __pyx_k_U2, sizeof(__pyx_k_U2), 0, 1, 0, 1}, - {&__pyx_n_s_U2_denominator, __pyx_k_U2_denominator, sizeof(__pyx_k_U2_denominator), 0, 0, 1, 1}, - {&__pyx_n_s_U2_numerator, __pyx_k_U2_numerator, sizeof(__pyx_k_U2_numerator), 0, 0, 1, 1}, - {&__pyx_kp_s_Unable_to_convert_item_to_object, __pyx_k_Unable_to_convert_item_to_object, sizeof(__pyx_k_Unable_to_convert_item_to_object), 0, 0, 1, 0}, - {&__pyx_n_s_V, __pyx_k_V, sizeof(__pyx_k_V), 0, 0, 1, 1}, - {&__pyx_n_u_V, __pyx_k_V, sizeof(__pyx_k_V), 0, 1, 0, 1}, - {&__pyx_n_s_V_denominator, __pyx_k_V_denominator, sizeof(__pyx_k_V_denominator), 0, 0, 1, 1}, - {&__pyx_n_s_V_numerator, __pyx_k_V_numerator, sizeof(__pyx_k_V_numerator), 0, 0, 1, 1}, - {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, - {&__pyx_n_s_View_MemoryView, __pyx_k_View_MemoryView, sizeof(__pyx_k_View_MemoryView), 0, 0, 1, 1}, - {&__pyx_n_s_X, __pyx_k_X, sizeof(__pyx_k_X), 0, 0, 1, 1}, - {&__pyx_n_s_X_2, __pyx_k_X_2, sizeof(__pyx_k_X_2), 0, 0, 1, 1}, - {&__pyx_n_s_X_aids, __pyx_k_X_aids, sizeof(__pyx_k_X_aids), 0, 0, 1, 1}, - {&__pyx_n_s_X_aspect_counts, __pyx_k_X_aspect_counts, sizeof(__pyx_k_X_aspect_counts), 0, 0, 1, 1}, - {&__pyx_n_s_X_uids, __pyx_k_X_uids, sizeof(__pyx_k_X_uids), 0, 0, 1, 1}, - {&__pyx_n_s_X_user_counts, __pyx_k_X_user_counts, sizeof(__pyx_k_X_user_counts), 0, 0, 1, 1}, - {&__pyx_n_s_Y, __pyx_k_Y, sizeof(__pyx_k_Y), 0, 0, 1, 1}, - {&__pyx_n_s_Y_aids, __pyx_k_Y_aids, sizeof(__pyx_k_Y_aids), 0, 0, 1, 1}, - {&__pyx_n_s_Y_aspect_counts, __pyx_k_Y_aspect_counts, sizeof(__pyx_k_Y_aspect_counts), 0, 0, 1, 1}, - {&__pyx_n_s_Y_iids, __pyx_k_Y_iids, sizeof(__pyx_k_Y_iids), 0, 0, 1, 1}, - {&__pyx_n_s_Y_item_counts, __pyx_k_Y_item_counts, sizeof(__pyx_k_Y_item_counts), 0, 0, 1, 1}, - {&__pyx_kp_u__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 1, 0, 0}, - {&__pyx_n_s__34, __pyx_k__34, sizeof(__pyx_k__34), 0, 0, 1, 1}, - {&__pyx_n_s__45, __pyx_k__45, sizeof(__pyx_k__45), 0, 0, 1, 1}, - {&__pyx_kp_s__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 0, 1, 0}, - {&__pyx_kp_s__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 0, 1, 0}, - {&__pyx_n_s_aid, __pyx_k_aid, sizeof(__pyx_k_aid), 0, 0, 1, 1}, - {&__pyx_n_s_allocate_buffer, __pyx_k_allocate_buffer, sizeof(__pyx_k_allocate_buffer), 0, 0, 1, 1}, - {&__pyx_n_s_alpha, __pyx_k_alpha, sizeof(__pyx_k_alpha), 0, 0, 1, 1}, - {&__pyx_n_s_append, __pyx_k_append, sizeof(__pyx_k_append), 0, 0, 1, 1}, - {&__pyx_n_s_arange, __pyx_k_arange, sizeof(__pyx_k_arange), 0, 0, 1, 1}, - {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, - {&__pyx_n_s_argsort, __pyx_k_argsort, sizeof(__pyx_k_argsort), 0, 0, 1, 1}, - {&__pyx_n_s_asarray, __pyx_k_asarray, sizeof(__pyx_k_asarray), 0, 0, 1, 1}, - {&__pyx_n_s_assume_unique, __pyx_k_assume_unique, sizeof(__pyx_k_assume_unique), 0, 0, 1, 1}, - {&__pyx_n_s_astype, __pyx_k_astype, sizeof(__pyx_k_astype), 0, 0, 1, 1}, - {&__pyx_n_s_attention_scores, __pyx_k_attention_scores, sizeof(__pyx_k_attention_scores), 0, 0, 1, 1}, - {&__pyx_n_s_avg_sentiment, __pyx_k_avg_sentiment, sizeof(__pyx_k_avg_sentiment), 0, 0, 1, 1}, - {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1}, - {&__pyx_n_s_build_matrices, __pyx_k_build_matrices, sizeof(__pyx_k_build_matrices), 0, 0, 1, 1}, - {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1}, - {&__pyx_n_u_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 1, 0, 1}, - {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1}, - {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, - {&__pyx_n_s_collections, __pyx_k_collections, sizeof(__pyx_k_collections), 0, 0, 1, 1}, - {&__pyx_n_s_compute_attention_score, __pyx_k_compute_attention_score, sizeof(__pyx_k_compute_attention_score), 0, 0, 1, 1}, - {&__pyx_n_s_compute_quality_score, __pyx_k_compute_quality_score, sizeof(__pyx_k_compute_quality_score), 0, 0, 1, 1}, - {&__pyx_kp_s_contiguous_and_direct, __pyx_k_contiguous_and_direct, sizeof(__pyx_k_contiguous_and_direct), 0, 0, 1, 0}, - {&__pyx_kp_s_contiguous_and_indirect, __pyx_k_contiguous_and_indirect, sizeof(__pyx_k_contiguous_and_indirect), 0, 0, 1, 0}, - {&__pyx_n_s_cornac_models_efm_recom_efm, __pyx_k_cornac_models_efm_recom_efm, sizeof(__pyx_k_cornac_models_efm_recom_efm), 0, 0, 1, 1}, - {&__pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_k_cornac_models_efm_recom_efm_pyx, sizeof(__pyx_k_cornac_models_efm_recom_efm_pyx), 0, 0, 1, 0}, - {&__pyx_n_s_count, __pyx_k_count, sizeof(__pyx_k_count), 0, 0, 1, 1}, - {&__pyx_n_s_cpu_count, __pyx_k_cpu_count, sizeof(__pyx_k_cpu_count), 0, 0, 1, 1}, - {&__pyx_n_s_csr_matrix, __pyx_k_csr_matrix, sizeof(__pyx_k_csr_matrix), 0, 0, 1, 1}, - {&__pyx_n_u_d, __pyx_k_d, sizeof(__pyx_k_d), 0, 1, 0, 1}, - {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1}, - {&__pyx_n_s_data_set, __pyx_k_data_set, sizeof(__pyx_k_data_set), 0, 0, 1, 1}, - {&__pyx_n_s_defaults, __pyx_k_defaults, sizeof(__pyx_k_defaults), 0, 0, 1, 1}, - {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, - {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, - {&__pyx_n_s_dot, __pyx_k_dot, sizeof(__pyx_k_dot), 0, 0, 1, 1}, - {&__pyx_n_s_double, __pyx_k_double, sizeof(__pyx_k_double), 0, 0, 1, 1}, - {&__pyx_kp_s_double_int, __pyx_k_double_int, sizeof(__pyx_k_double_int), 0, 0, 1, 0}, - {&__pyx_kp_s_double_long, __pyx_k_double_long, sizeof(__pyx_k_double_long), 0, 0, 1, 0}, - {&__pyx_kp_s_double_short, __pyx_k_double_short, sizeof(__pyx_k_double_short), 0, 0, 1, 0}, - {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, - {&__pyx_n_s_dtype_is_object, __pyx_k_dtype_is_object, sizeof(__pyx_k_dtype_is_object), 0, 0, 1, 1}, - {&__pyx_n_s_ediff1d, __pyx_k_ediff1d, sizeof(__pyx_k_ediff1d), 0, 0, 1, 1}, - {&__pyx_n_s_empty, __pyx_k_empty, sizeof(__pyx_k_empty), 0, 0, 1, 1}, - {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1}, - {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1}, - {&__pyx_n_s_eps, __pyx_k_eps, sizeof(__pyx_k_eps), 0, 0, 1, 1}, - {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, - {&__pyx_n_s_exception, __pyx_k_exception, sizeof(__pyx_k_exception), 0, 0, 1, 1}, - {&__pyx_n_s_exp, __pyx_k_exp, sizeof(__pyx_k_exp), 0, 0, 1, 1}, - {&__pyx_n_s_explicit_scores, __pyx_k_explicit_scores, sizeof(__pyx_k_explicit_scores), 0, 0, 1, 1}, - {&__pyx_n_u_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 1, 0, 1}, - {&__pyx_n_s_fill, __pyx_k_fill, sizeof(__pyx_k_fill), 0, 0, 1, 1}, - {&__pyx_n_s_fit, __pyx_k_fit, sizeof(__pyx_k_fit), 0, 0, 1, 1}, - {&__pyx_n_s_fit_efm, __pyx_k_fit_efm, sizeof(__pyx_k_fit_efm), 0, 0, 1, 1}, - {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1}, - {&__pyx_n_s_flatten, __pyx_k_flatten, sizeof(__pyx_k_flatten), 0, 0, 1, 1}, - {&__pyx_n_s_float, __pyx_k_float, sizeof(__pyx_k_float), 0, 0, 1, 1}, - {&__pyx_n_s_float32, __pyx_k_float32, sizeof(__pyx_k_float32), 0, 0, 1, 1}, - {&__pyx_kp_s_float_int, __pyx_k_float_int, sizeof(__pyx_k_float_int), 0, 0, 1, 0}, - {&__pyx_kp_s_float_long, __pyx_k_float_long, sizeof(__pyx_k_float_long), 0, 0, 1, 0}, - {&__pyx_kp_s_float_short, __pyx_k_float_short, sizeof(__pyx_k_float_short), 0, 0, 1, 0}, - {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, - {&__pyx_n_s_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 0, 1, 1}, - {&__pyx_n_u_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 1, 0, 1}, - {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, - {&__pyx_n_s_get_rng, __pyx_k_get_rng, sizeof(__pyx_k_get_rng), 0, 0, 1, 1}, - {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, - {&__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 0, 1, 0}, - {&__pyx_n_s_high, __pyx_k_high, sizeof(__pyx_k_high), 0, 0, 1, 1}, - {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, - {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, - {&__pyx_n_s_idx, __pyx_k_idx, sizeof(__pyx_k_idx), 0, 0, 1, 1}, - {&__pyx_n_s_iid, __pyx_k_iid, sizeof(__pyx_k_iid), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_indices, __pyx_k_indices, sizeof(__pyx_k_indices), 0, 0, 1, 1}, - {&__pyx_n_s_indptr, __pyx_k_indptr, sizeof(__pyx_k_indptr), 0, 0, 1, 1}, - {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1}, - {&__pyx_n_s_init_2, __pyx_k_init_2, sizeof(__pyx_k_init_2), 0, 0, 1, 1}, - {&__pyx_n_s_init_params, __pyx_k_init_params, sizeof(__pyx_k_init_params), 0, 0, 1, 1}, - {&__pyx_n_s_int, __pyx_k_int, sizeof(__pyx_k_int), 0, 0, 1, 1}, - {&__pyx_n_s_intersects, __pyx_k_intersects, sizeof(__pyx_k_intersects), 0, 0, 1, 1}, - {&__pyx_n_s_is_unk_item, __pyx_k_is_unk_item, sizeof(__pyx_k_is_unk_item), 0, 0, 1, 1}, - {&__pyx_n_s_is_unk_user, __pyx_k_is_unk_user, sizeof(__pyx_k_is_unk_user), 0, 0, 1, 1}, - {&__pyx_n_s_item_aspect_count, __pyx_k_item_aspect_count, sizeof(__pyx_k_item_aspect_count), 0, 0, 1, 1}, - {&__pyx_n_s_item_aspects, __pyx_k_item_aspects, sizeof(__pyx_k_item_aspects), 0, 0, 1, 1}, - {&__pyx_kp_u_item_id, __pyx_k_item_id, sizeof(__pyx_k_item_id), 0, 1, 0, 0}, - {&__pyx_n_s_item_idx, __pyx_k_item_idx, sizeof(__pyx_k_item_idx), 0, 0, 1, 1}, - {&__pyx_n_s_item_indices, __pyx_k_item_indices, sizeof(__pyx_k_item_indices), 0, 0, 1, 1}, - {&__pyx_n_s_item_rank, __pyx_k_item_rank, sizeof(__pyx_k_item_rank), 0, 0, 1, 1}, - {&__pyx_n_s_item_score, __pyx_k_item_score, sizeof(__pyx_k_item_score), 0, 0, 1, 1}, - {&__pyx_n_s_item_scores, __pyx_k_item_scores, sizeof(__pyx_k_item_scores), 0, 0, 1, 1}, - {&__pyx_n_s_item_sentiment, __pyx_k_item_sentiment, sizeof(__pyx_k_item_sentiment), 0, 0, 1, 1}, - {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1}, - {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1}, - {&__pyx_kp_s_itemsize_0_for_cython_array, __pyx_k_itemsize_0_for_cython_array, sizeof(__pyx_k_itemsize_0_for_cython_array), 0, 0, 1, 0}, - {&__pyx_kp_u_iter, __pyx_k_iter, sizeof(__pyx_k_iter), 0, 1, 0, 0}, - {&__pyx_n_s_j, __pyx_k_j, sizeof(__pyx_k_j), 0, 0, 1, 1}, - {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1}, - {&__pyx_n_s_kind, __pyx_k_kind, sizeof(__pyx_k_kind), 0, 0, 1, 1}, - {&__pyx_n_s_kwargs, __pyx_k_kwargs, sizeof(__pyx_k_kwargs), 0, 0, 1, 1}, - {&__pyx_n_s_lambda_h, __pyx_k_lambda_h, sizeof(__pyx_k_lambda_h), 0, 0, 1, 1}, - {&__pyx_n_s_lambda_u, __pyx_k_lambda_u, sizeof(__pyx_k_lambda_u), 0, 0, 1, 1}, - {&__pyx_n_s_lambda_v, __pyx_k_lambda_v, sizeof(__pyx_k_lambda_v), 0, 0, 1, 1}, - {&__pyx_n_s_lambda_x, __pyx_k_lambda_x, sizeof(__pyx_k_lambda_x), 0, 0, 1, 1}, - {&__pyx_n_s_lambda_y, __pyx_k_lambda_y, sizeof(__pyx_k_lambda_y), 0, 0, 1, 1}, - {&__pyx_n_s_long, __pyx_k_long, sizeof(__pyx_k_long), 0, 0, 1, 1}, - {&__pyx_kp_u_loss, __pyx_k_loss, sizeof(__pyx_k_loss), 0, 1, 0, 0}, - {&__pyx_n_s_loss_2, __pyx_k_loss_2, sizeof(__pyx_k_loss_2), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_map_aspect_id, __pyx_k_map_aspect_id, sizeof(__pyx_k_map_aspect_id), 0, 0, 1, 1}, - {&__pyx_n_s_map_iid, __pyx_k_map_iid, sizeof(__pyx_k_map_iid), 0, 0, 1, 1}, - {&__pyx_n_s_map_uid, __pyx_k_map_uid, sizeof(__pyx_k_map_uid), 0, 0, 1, 1}, - {&__pyx_n_s_max, __pyx_k_max, sizeof(__pyx_k_max), 0, 0, 1, 1}, - {&__pyx_n_s_max_iter, __pyx_k_max_iter, sizeof(__pyx_k_max_iter), 0, 0, 1, 1}, - {&__pyx_n_s_memview, __pyx_k_memview, sizeof(__pyx_k_memview), 0, 0, 1, 1}, - {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, - {&__pyx_n_s_min, __pyx_k_min, sizeof(__pyx_k_min), 0, 0, 1, 1}, - {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, - {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, - {&__pyx_n_s_most_cared_X, __pyx_k_most_cared_X, sizeof(__pyx_k_most_cared_X), 0, 0, 1, 1}, - {&__pyx_n_s_most_cared_Y, __pyx_k_most_cared_Y, sizeof(__pyx_k_most_cared_Y), 0, 0, 1, 1}, - {&__pyx_n_s_most_cared_aspects_indices, __pyx_k_most_cared_aspects_indices, sizeof(__pyx_k_most_cared_aspects_indices), 0, 0, 1, 1}, - {&__pyx_n_s_multiprocessing, __pyx_k_multiprocessing, sizeof(__pyx_k_multiprocessing), 0, 0, 1, 1}, - {&__pyx_n_s_n_aspects, __pyx_k_n_aspects, sizeof(__pyx_k_n_aspects), 0, 0, 1, 1}, - {&__pyx_n_s_n_efactors, __pyx_k_n_efactors, sizeof(__pyx_k_n_efactors), 0, 0, 1, 1}, - {&__pyx_n_s_n_factors, __pyx_k_n_factors, sizeof(__pyx_k_n_factors), 0, 0, 1, 1}, - {&__pyx_n_s_n_items, __pyx_k_n_items, sizeof(__pyx_k_n_items), 0, 0, 1, 1}, - {&__pyx_n_s_n_lfactors, __pyx_k_n_lfactors, sizeof(__pyx_k_n_lfactors), 0, 0, 1, 1}, - {&__pyx_n_s_n_ratings, __pyx_k_n_ratings, sizeof(__pyx_k_n_ratings), 0, 0, 1, 1}, - {&__pyx_n_s_n_users, __pyx_k_n_users, sizeof(__pyx_k_n_users), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1}, - {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 1}, - {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, - {&__pyx_kp_s_no_default___reduce___due_to_non, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0}, - {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, - {&__pyx_n_s_num_aspects, __pyx_k_num_aspects, sizeof(__pyx_k_num_aspects), 0, 0, 1, 1}, - {&__pyx_n_s_num_explicit_factors, __pyx_k_num_explicit_factors, sizeof(__pyx_k_num_explicit_factors), 0, 0, 1, 1}, - {&__pyx_n_s_num_items, __pyx_k_num_items, sizeof(__pyx_k_num_items), 0, 0, 1, 1}, - {&__pyx_n_s_num_latent_factors, __pyx_k_num_latent_factors, sizeof(__pyx_k_num_latent_factors), 0, 0, 1, 1}, - {&__pyx_n_s_num_most_cared_aspects, __pyx_k_num_most_cared_aspects, sizeof(__pyx_k_num_most_cared_aspects), 0, 0, 1, 1}, - {&__pyx_n_s_num_threads, __pyx_k_num_threads, sizeof(__pyx_k_num_threads), 0, 0, 1, 1}, - {&__pyx_n_s_num_users, __pyx_k_num_users, sizeof(__pyx_k_num_users), 0, 0, 1, 1}, - {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, - {&__pyx_kp_u_numpy_core_multiarray_failed_to, __pyx_k_numpy_core_multiarray_failed_to, sizeof(__pyx_k_numpy_core_multiarray_failed_to), 0, 1, 0, 0}, - {&__pyx_kp_u_numpy_core_umath_failed_to_impor, __pyx_k_numpy_core_umath_failed_to_impor, sizeof(__pyx_k_numpy_core_umath_failed_to_impor), 0, 1, 0, 0}, - {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1}, - {&__pyx_n_s_ones, __pyx_k_ones, sizeof(__pyx_k_ones), 0, 0, 1, 1}, - {&__pyx_n_s_pack, __pyx_k_pack, sizeof(__pyx_k_pack), 0, 0, 1, 1}, - {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, - {&__pyx_n_s_prediction, __pyx_k_prediction, sizeof(__pyx_k_prediction), 0, 0, 1, 1}, - {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, - {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_getbuffer, __pyx_k_pyx_getbuffer, sizeof(__pyx_k_pyx_getbuffer), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle_Enum, __pyx_k_pyx_unpickle_Enum, sizeof(__pyx_k_pyx_unpickle_Enum), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, - {&__pyx_n_s_quality_scores, __pyx_k_quality_scores, sizeof(__pyx_k_quality_scores), 0, 0, 1, 1}, - {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, - {&__pyx_n_s_random_state, __pyx_k_random_state, sizeof(__pyx_k_random_state), 0, 0, 1, 1}, - {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, - {&__pyx_n_s_rank, __pyx_k_rank, sizeof(__pyx_k_rank), 0, 0, 1, 1}, - {&__pyx_n_s_rating, __pyx_k_rating, sizeof(__pyx_k_rating), 0, 0, 1, 1}, - {&__pyx_n_s_rating_scale, __pyx_k_rating_scale, sizeof(__pyx_k_rating_scale), 0, 0, 1, 1}, - {&__pyx_n_s_ratings, __pyx_k_ratings, sizeof(__pyx_k_ratings), 0, 0, 1, 1}, - {&__pyx_n_s_recommender, __pyx_k_recommender, sizeof(__pyx_k_recommender), 0, 0, 1, 1}, - {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, - {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, - {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, - {&__pyx_n_s_repeat, __pyx_k_repeat, sizeof(__pyx_k_repeat), 0, 0, 1, 1}, - {&__pyx_n_s_rng, __pyx_k_rng, sizeof(__pyx_k_rng), 0, 0, 1, 1}, - {&__pyx_n_s_s, __pyx_k_s, sizeof(__pyx_k_s), 0, 0, 1, 1}, - {&__pyx_n_s_scipy_sparse, __pyx_k_scipy_sparse, sizeof(__pyx_k_scipy_sparse), 0, 0, 1, 1}, - {&__pyx_n_s_score, __pyx_k_score, sizeof(__pyx_k_score), 0, 0, 1, 1}, - {&__pyx_n_s_seed, __pyx_k_seed, sizeof(__pyx_k_seed), 0, 0, 1, 1}, - {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, - {&__pyx_n_s_sentiment, __pyx_k_sentiment, sizeof(__pyx_k_sentiment), 0, 0, 1, 1}, - {&__pyx_n_s_sentiment_polarity, __pyx_k_sentiment_polarity, sizeof(__pyx_k_sentiment_polarity), 0, 0, 1, 1}, - {&__pyx_n_s_sentiment_tup_ids_by_item, __pyx_k_sentiment_tup_ids_by_item, sizeof(__pyx_k_sentiment_tup_ids_by_item), 0, 0, 1, 1}, - {&__pyx_n_s_sentiment_tup_ids_by_user, __pyx_k_sentiment_tup_ids_by_user, sizeof(__pyx_k_sentiment_tup_ids_by_user), 0, 0, 1, 1}, - {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, - {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, - {&__pyx_n_s_shape, __pyx_k_shape, sizeof(__pyx_k_shape), 0, 0, 1, 1}, - {&__pyx_n_s_short, __pyx_k_short, sizeof(__pyx_k_short), 0, 0, 1, 1}, - {&__pyx_n_s_signatures, __pyx_k_signatures, sizeof(__pyx_k_signatures), 0, 0, 1, 1}, - {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1}, - {&__pyx_n_s_sp, __pyx_k_sp, sizeof(__pyx_k_sp), 0, 0, 1, 1}, - {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1}, - {&__pyx_n_s_sqrt, __pyx_k_sqrt, sizeof(__pyx_k_sqrt), 0, 0, 1, 1}, - {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1}, - {&__pyx_n_s_step, __pyx_k_step, sizeof(__pyx_k_step), 0, 0, 1, 1}, - {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1}, - {&__pyx_kp_s_strided_and_direct, __pyx_k_strided_and_direct, sizeof(__pyx_k_strided_and_direct), 0, 0, 1, 0}, - {&__pyx_kp_s_strided_and_direct_or_indirect, __pyx_k_strided_and_direct_or_indirect, sizeof(__pyx_k_strided_and_direct_or_indirect), 0, 0, 1, 0}, - {&__pyx_kp_s_strided_and_indirect, __pyx_k_strided_and_indirect, sizeof(__pyx_k_strided_and_indirect), 0, 0, 1, 0}, - {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, - {&__pyx_n_s_strip, __pyx_k_strip, sizeof(__pyx_k_strip), 0, 0, 1, 1}, - {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1}, - {&__pyx_n_s_t, __pyx_k_t, sizeof(__pyx_k_t), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_tocsc, __pyx_k_tocsc, sizeof(__pyx_k_tocsc), 0, 0, 1, 1}, - {&__pyx_n_s_total_sentiment, __pyx_k_total_sentiment, sizeof(__pyx_k_total_sentiment), 0, 0, 1, 1}, - {&__pyx_n_s_total_sentiment_by_aspect, __pyx_k_total_sentiment_by_aspect, sizeof(__pyx_k_total_sentiment_by_aspect), 0, 0, 1, 1}, - {&__pyx_n_s_train_set, __pyx_k_train_set, sizeof(__pyx_k_train_set), 0, 0, 1, 1}, - {&__pyx_n_s_trainable, __pyx_k_trainable, sizeof(__pyx_k_trainable), 0, 0, 1, 1}, - {&__pyx_n_s_tup, __pyx_k_tup, sizeof(__pyx_k_tup), 0, 0, 1, 1}, - {&__pyx_n_s_tup_id, __pyx_k_tup_id, sizeof(__pyx_k_tup_id), 0, 0, 1, 1}, - {&__pyx_n_s_uid, __pyx_k_uid, sizeof(__pyx_k_uid), 0, 0, 1, 1}, - {&__pyx_n_s_uir_iter, __pyx_k_uir_iter, sizeof(__pyx_k_uir_iter), 0, 0, 1, 1}, - {&__pyx_kp_s_unable_to_allocate_array_data, __pyx_k_unable_to_allocate_array_data, sizeof(__pyx_k_unable_to_allocate_array_data), 0, 0, 1, 0}, - {&__pyx_kp_s_unable_to_allocate_shape_and_str, __pyx_k_unable_to_allocate_shape_and_str, sizeof(__pyx_k_unable_to_allocate_shape_and_str), 0, 0, 1, 0}, - {&__pyx_n_s_uniform, __pyx_k_uniform, sizeof(__pyx_k_uniform), 0, 0, 1, 1}, - {&__pyx_n_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1}, - {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, - {&__pyx_n_s_use_item_aspect_popularity, __pyx_k_use_item_aspect_popularity, sizeof(__pyx_k_use_item_aspect_popularity), 0, 0, 1, 1}, - {&__pyx_n_s_user_aspect_count, __pyx_k_user_aspect_count, sizeof(__pyx_k_user_aspect_count), 0, 0, 1, 1}, - {&__pyx_n_s_user_aspects, __pyx_k_user_aspects, sizeof(__pyx_k_user_aspects), 0, 0, 1, 1}, - {&__pyx_n_s_user_idx, __pyx_k_user_idx, sizeof(__pyx_k_user_idx), 0, 0, 1, 1}, - {&__pyx_n_s_user_sentiment, __pyx_k_user_sentiment, sizeof(__pyx_k_user_sentiment), 0, 0, 1, 1}, - {&__pyx_n_s_utils, __pyx_k_utils, sizeof(__pyx_k_utils), 0, 0, 1, 1}, - {&__pyx_n_s_utils_common, __pyx_k_utils_common, sizeof(__pyx_k_utils_common), 0, 0, 1, 1}, - {&__pyx_n_s_utils_init_utils, __pyx_k_utils_init_utils, sizeof(__pyx_k_utils_init_utils), 0, 0, 1, 1}, - {&__pyx_n_s_val_set, __pyx_k_val_set, sizeof(__pyx_k_val_set), 0, 0, 1, 1}, - {&__pyx_n_s_values, __pyx_k_values, sizeof(__pyx_k_values), 0, 0, 1, 1}, - {&__pyx_n_s_verbose, __pyx_k_verbose, sizeof(__pyx_k_verbose), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_, __pyx_k_, sizeof(__pyx_k_), 0, 1, 0, 0}, + {&__pyx_n_s_A, __pyx_k_A, sizeof(__pyx_k_A), 0, 0, 1, 1}, + {&__pyx_n_s_ASCII, __pyx_k_ASCII, sizeof(__pyx_k_ASCII), 0, 0, 1, 1}, + {&__pyx_n_s_A_iids, __pyx_k_A_iids, sizeof(__pyx_k_A_iids), 0, 0, 1, 1}, + {&__pyx_n_s_A_item_counts, __pyx_k_A_item_counts, sizeof(__pyx_k_A_item_counts), 0, 0, 1, 1}, + {&__pyx_n_s_A_uids, __pyx_k_A_uids, sizeof(__pyx_k_A_uids), 0, 0, 1, 1}, + {&__pyx_n_s_A_user_counts, __pyx_k_A_user_counts, sizeof(__pyx_k_A_user_counts), 0, 0, 1, 1}, + {&__pyx_kp_s_All_dimensions_preceding_dimensi, __pyx_k_All_dimensions_preceding_dimensi, sizeof(__pyx_k_All_dimensions_preceding_dimensi), 0, 0, 1, 0}, + {&__pyx_n_s_AssertionError, __pyx_k_AssertionError, sizeof(__pyx_k_AssertionError), 0, 0, 1, 1}, + {&__pyx_kp_s_Buffer_view_does_not_expose_stri, __pyx_k_Buffer_view_does_not_expose_stri, sizeof(__pyx_k_Buffer_view_does_not_expose_stri), 0, 0, 1, 0}, + {&__pyx_kp_u_Building_matrices_completed, __pyx_k_Building_matrices_completed, sizeof(__pyx_k_Building_matrices_completed), 0, 1, 0, 0}, + {&__pyx_kp_s_Can_only_create_a_buffer_that_is, __pyx_k_Can_only_create_a_buffer_that_is, sizeof(__pyx_k_Can_only_create_a_buffer_that_is), 0, 0, 1, 0}, + {&__pyx_kp_u_Can_t_make_score_prediction_for, __pyx_k_Can_t_make_score_prediction_for, sizeof(__pyx_k_Can_t_make_score_prediction_for), 0, 1, 0, 0}, + {&__pyx_kp_u_Can_t_make_score_prediction_for_2, __pyx_k_Can_t_make_score_prediction_for_2, sizeof(__pyx_k_Can_t_make_score_prediction_for_2), 0, 1, 0, 0}, + {&__pyx_kp_s_Cannot_assign_to_read_only_memor, __pyx_k_Cannot_assign_to_read_only_memor, sizeof(__pyx_k_Cannot_assign_to_read_only_memor), 0, 0, 1, 0}, + {&__pyx_kp_s_Cannot_create_writable_memory_vi, __pyx_k_Cannot_create_writable_memory_vi, sizeof(__pyx_k_Cannot_create_writable_memory_vi), 0, 0, 1, 0}, + {&__pyx_kp_u_Cannot_index_with_type, __pyx_k_Cannot_index_with_type, sizeof(__pyx_k_Cannot_index_with_type), 0, 1, 0, 0}, + {&__pyx_kp_s_Cannot_transpose_memoryview_with, __pyx_k_Cannot_transpose_memoryview_with, sizeof(__pyx_k_Cannot_transpose_memoryview_with), 0, 0, 1, 0}, + {&__pyx_n_s_Counter, __pyx_k_Counter, sizeof(__pyx_k_Counter), 0, 0, 1, 1}, + {&__pyx_kp_s_Dimension_d_is_not_direct, __pyx_k_Dimension_d_is_not_direct, sizeof(__pyx_k_Dimension_d_is_not_direct), 0, 0, 1, 0}, + {&__pyx_n_s_EFM, __pyx_k_EFM, sizeof(__pyx_k_EFM), 0, 0, 1, 1}, + {&__pyx_n_u_EFM, __pyx_k_EFM, sizeof(__pyx_k_EFM), 0, 1, 0, 1}, + {&__pyx_n_s_EFM___init, __pyx_k_EFM___init, sizeof(__pyx_k_EFM___init), 0, 0, 1, 1}, + {&__pyx_n_s_EFM__build_matrices, __pyx_k_EFM__build_matrices, sizeof(__pyx_k_EFM__build_matrices), 0, 0, 1, 1}, + {&__pyx_n_s_EFM__compute_attention_score, __pyx_k_EFM__compute_attention_score, sizeof(__pyx_k_EFM__compute_attention_score), 0, 0, 1, 1}, + {&__pyx_n_s_EFM__compute_quality_score, __pyx_k_EFM__compute_quality_score, sizeof(__pyx_k_EFM__compute_quality_score), 0, 0, 1, 1}, + {&__pyx_n_s_EFM__fit_efm, __pyx_k_EFM__fit_efm, sizeof(__pyx_k_EFM__fit_efm), 0, 0, 1, 1}, + {&__pyx_n_s_EFM__init, __pyx_k_EFM__init, sizeof(__pyx_k_EFM__init), 0, 0, 1, 1}, + {&__pyx_n_s_EFM_fit, __pyx_k_EFM_fit, sizeof(__pyx_k_EFM_fit), 0, 0, 1, 1}, + {&__pyx_n_s_EFM_rank, __pyx_k_EFM_rank, sizeof(__pyx_k_EFM_rank), 0, 0, 1, 1}, + {&__pyx_n_s_EFM_score, __pyx_k_EFM_score, sizeof(__pyx_k_EFM_score), 0, 0, 1, 1}, + {&__pyx_n_s_Ellipsis, __pyx_k_Ellipsis, sizeof(__pyx_k_Ellipsis), 0, 0, 1, 1}, + {&__pyx_kp_s_Empty_shape_tuple_for_cython_arr, __pyx_k_Empty_shape_tuple_for_cython_arr, sizeof(__pyx_k_Empty_shape_tuple_for_cython_arr), 0, 0, 1, 0}, + {&__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_k_Expected_at_least_d_argument_s_g, sizeof(__pyx_k_Expected_at_least_d_argument_s_g), 0, 0, 1, 0}, + {&__pyx_kp_s_Explict_Factor_Models_Parameters, __pyx_k_Explict_Factor_Models_Parameters, sizeof(__pyx_k_Explict_Factor_Models_Parameters), 0, 0, 1, 0}, + {&__pyx_kp_s_Function_call_with_ambiguous_arg, __pyx_k_Function_call_with_ambiguous_arg, sizeof(__pyx_k_Function_call_with_ambiguous_arg), 0, 0, 1, 0}, + {&__pyx_n_s_H1, __pyx_k_H1, sizeof(__pyx_k_H1), 0, 0, 1, 1}, + {&__pyx_n_u_H1, __pyx_k_H1, sizeof(__pyx_k_H1), 0, 1, 0, 1}, + {&__pyx_n_s_H1_denominator, __pyx_k_H1_denominator, sizeof(__pyx_k_H1_denominator), 0, 0, 1, 1}, + {&__pyx_n_s_H1_numerator, __pyx_k_H1_numerator, sizeof(__pyx_k_H1_numerator), 0, 0, 1, 1}, + {&__pyx_n_s_H2, __pyx_k_H2, sizeof(__pyx_k_H2), 0, 0, 1, 1}, + {&__pyx_n_u_H2, __pyx_k_H2, sizeof(__pyx_k_H2), 0, 1, 0, 1}, + {&__pyx_n_s_H2_denominator, __pyx_k_H2_denominator, sizeof(__pyx_k_H2_denominator), 0, 0, 1, 1}, + {&__pyx_n_s_H2_numerator, __pyx_k_H2_numerator, sizeof(__pyx_k_H2_numerator), 0, 0, 1, 1}, + {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, + {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_k_Incompatible_checksums_0x_x_vs_0, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0), 0, 0, 1, 0}, + {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1}, + {&__pyx_kp_s_Index_out_of_bounds_axis_d, __pyx_k_Index_out_of_bounds_axis_d, sizeof(__pyx_k_Index_out_of_bounds_axis_d), 0, 0, 1, 0}, + {&__pyx_kp_s_Indirect_dimensions_not_supporte, __pyx_k_Indirect_dimensions_not_supporte, sizeof(__pyx_k_Indirect_dimensions_not_supporte), 0, 0, 1, 0}, + {&__pyx_kp_u_Invalid_mode_expected_c_or_fortr, __pyx_k_Invalid_mode_expected_c_or_fortr, sizeof(__pyx_k_Invalid_mode_expected_c_or_fortr), 0, 1, 0, 0}, + {&__pyx_kp_u_Invalid_shape_in_axis, __pyx_k_Invalid_shape_in_axis, sizeof(__pyx_k_Invalid_shape_in_axis), 0, 1, 0, 0}, + {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1}, + {&__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_k_MemoryView_of_r_at_0x_x, sizeof(__pyx_k_MemoryView_of_r_at_0x_x), 0, 0, 1, 0}, + {&__pyx_kp_s_MemoryView_of_r_object, __pyx_k_MemoryView_of_r_object, sizeof(__pyx_k_MemoryView_of_r_object), 0, 0, 1, 0}, + {&__pyx_kp_s_No_matching_signature_found, __pyx_k_No_matching_signature_found, sizeof(__pyx_k_No_matching_signature_found), 0, 0, 1, 0}, + {&__pyx_n_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1}, + {&__pyx_kp_u_Optimization_finished, __pyx_k_Optimization_finished, sizeof(__pyx_k_Optimization_finished), 0, 1, 0, 0}, + {&__pyx_n_s_OrderedDict, __pyx_k_OrderedDict, sizeof(__pyx_k_OrderedDict), 0, 0, 1, 1}, + {&__pyx_kp_u_Out_of_bounds_on_buffer_access_a, __pyx_k_Out_of_bounds_on_buffer_access_a, sizeof(__pyx_k_Out_of_bounds_on_buffer_access_a), 0, 1, 0, 0}, + {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_Recommender, __pyx_k_Recommender, sizeof(__pyx_k_Recommender), 0, 0, 1, 1}, + {&__pyx_n_s_ScoreException, __pyx_k_ScoreException, sizeof(__pyx_k_ScoreException), 0, 0, 1, 1}, + {&__pyx_n_s_Sequence, __pyx_k_Sequence, sizeof(__pyx_k_Sequence), 0, 0, 1, 1}, + {&__pyx_kp_s_Step_may_not_be_zero_axis_d, __pyx_k_Step_may_not_be_zero_axis_d, sizeof(__pyx_k_Step_may_not_be_zero_axis_d), 0, 0, 1, 0}, + {&__pyx_n_s_T, __pyx_k_T, sizeof(__pyx_k_T), 0, 0, 1, 1}, + {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, + {&__pyx_n_s_U1, __pyx_k_U1, sizeof(__pyx_k_U1), 0, 0, 1, 1}, + {&__pyx_n_u_U1, __pyx_k_U1, sizeof(__pyx_k_U1), 0, 1, 0, 1}, + {&__pyx_n_s_U1_denominator, __pyx_k_U1_denominator, sizeof(__pyx_k_U1_denominator), 0, 0, 1, 1}, + {&__pyx_n_s_U1_numerator, __pyx_k_U1_numerator, sizeof(__pyx_k_U1_numerator), 0, 0, 1, 1}, + {&__pyx_n_s_U2, __pyx_k_U2, sizeof(__pyx_k_U2), 0, 0, 1, 1}, + {&__pyx_n_u_U2, __pyx_k_U2, sizeof(__pyx_k_U2), 0, 1, 0, 1}, + {&__pyx_n_s_U2_denominator, __pyx_k_U2_denominator, sizeof(__pyx_k_U2_denominator), 0, 0, 1, 1}, + {&__pyx_n_s_U2_numerator, __pyx_k_U2_numerator, sizeof(__pyx_k_U2_numerator), 0, 0, 1, 1}, + {&__pyx_kp_s_Unable_to_convert_item_to_object, __pyx_k_Unable_to_convert_item_to_object, sizeof(__pyx_k_Unable_to_convert_item_to_object), 0, 0, 1, 0}, + {&__pyx_n_s_V, __pyx_k_V, sizeof(__pyx_k_V), 0, 0, 1, 1}, + {&__pyx_n_u_V, __pyx_k_V, sizeof(__pyx_k_V), 0, 1, 0, 1}, + {&__pyx_n_s_V_denominator, __pyx_k_V_denominator, sizeof(__pyx_k_V_denominator), 0, 0, 1, 1}, + {&__pyx_n_s_V_numerator, __pyx_k_V_numerator, sizeof(__pyx_k_V_numerator), 0, 0, 1, 1}, + {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, + {&__pyx_n_s_View_MemoryView, __pyx_k_View_MemoryView, sizeof(__pyx_k_View_MemoryView), 0, 0, 1, 1}, + {&__pyx_n_s_X, __pyx_k_X, sizeof(__pyx_k_X), 0, 0, 1, 1}, + {&__pyx_n_s_X_2, __pyx_k_X_2, sizeof(__pyx_k_X_2), 0, 0, 1, 1}, + {&__pyx_n_s_X_aids, __pyx_k_X_aids, sizeof(__pyx_k_X_aids), 0, 0, 1, 1}, + {&__pyx_n_s_X_aspect_counts, __pyx_k_X_aspect_counts, sizeof(__pyx_k_X_aspect_counts), 0, 0, 1, 1}, + {&__pyx_n_s_X_uids, __pyx_k_X_uids, sizeof(__pyx_k_X_uids), 0, 0, 1, 1}, + {&__pyx_n_s_X_user_counts, __pyx_k_X_user_counts, sizeof(__pyx_k_X_user_counts), 0, 0, 1, 1}, + {&__pyx_n_s_Y, __pyx_k_Y, sizeof(__pyx_k_Y), 0, 0, 1, 1}, + {&__pyx_n_s_Y_aids, __pyx_k_Y_aids, sizeof(__pyx_k_Y_aids), 0, 0, 1, 1}, + {&__pyx_n_s_Y_aspect_counts, __pyx_k_Y_aspect_counts, sizeof(__pyx_k_Y_aspect_counts), 0, 0, 1, 1}, + {&__pyx_n_s_Y_iids, __pyx_k_Y_iids, sizeof(__pyx_k_Y_iids), 0, 0, 1, 1}, + {&__pyx_n_s_Y_item_counts, __pyx_k_Y_item_counts, sizeof(__pyx_k_Y_item_counts), 0, 0, 1, 1}, + {&__pyx_kp_s__16, __pyx_k__16, sizeof(__pyx_k__16), 0, 0, 1, 0}, + {&__pyx_kp_s__17, __pyx_k__17, sizeof(__pyx_k__17), 0, 0, 1, 0}, + {&__pyx_kp_u__17, __pyx_k__17, sizeof(__pyx_k__17), 0, 1, 0, 0}, + {&__pyx_kp_u__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 1, 0, 0}, + {&__pyx_n_s__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 0, 1, 1}, + {&__pyx_n_s__45, __pyx_k__45, sizeof(__pyx_k__45), 0, 0, 1, 1}, + {&__pyx_n_s__58, __pyx_k__58, sizeof(__pyx_k__58), 0, 0, 1, 1}, + {&__pyx_kp_u__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 1, 0, 0}, + {&__pyx_kp_u__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 1, 0, 0}, + {&__pyx_n_s_abc, __pyx_k_abc, sizeof(__pyx_k_abc), 0, 0, 1, 1}, + {&__pyx_n_s_aid, __pyx_k_aid, sizeof(__pyx_k_aid), 0, 0, 1, 1}, + {&__pyx_n_s_all_item_scores, __pyx_k_all_item_scores, sizeof(__pyx_k_all_item_scores), 0, 0, 1, 1}, + {&__pyx_n_s_allocate_buffer, __pyx_k_allocate_buffer, sizeof(__pyx_k_allocate_buffer), 0, 0, 1, 1}, + {&__pyx_n_s_alpha, __pyx_k_alpha, sizeof(__pyx_k_alpha), 0, 0, 1, 1}, + {&__pyx_kp_u_and, __pyx_k_and, sizeof(__pyx_k_and), 0, 1, 0, 0}, + {&__pyx_n_s_append, __pyx_k_append, sizeof(__pyx_k_append), 0, 0, 1, 1}, + {&__pyx_n_s_arange, __pyx_k_arange, sizeof(__pyx_k_arange), 0, 0, 1, 1}, + {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, + {&__pyx_n_s_argsort, __pyx_k_argsort, sizeof(__pyx_k_argsort), 0, 0, 1, 1}, + {&__pyx_n_s_array, __pyx_k_array, sizeof(__pyx_k_array), 0, 0, 1, 1}, + {&__pyx_n_s_asarray, __pyx_k_asarray, sizeof(__pyx_k_asarray), 0, 0, 1, 1}, + {&__pyx_n_s_astype, __pyx_k_astype, sizeof(__pyx_k_astype), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_attention_scores, __pyx_k_attention_scores, sizeof(__pyx_k_attention_scores), 0, 0, 1, 1}, + {&__pyx_n_s_avg_sentiment, __pyx_k_avg_sentiment, sizeof(__pyx_k_avg_sentiment), 0, 0, 1, 1}, + {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1}, + {&__pyx_n_s_build_matrices, __pyx_k_build_matrices, sizeof(__pyx_k_build_matrices), 0, 0, 1, 1}, + {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1}, + {&__pyx_n_u_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 1, 0, 1}, + {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1}, + {&__pyx_n_s_class_getitem, __pyx_k_class_getitem, sizeof(__pyx_k_class_getitem), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_collections, __pyx_k_collections, sizeof(__pyx_k_collections), 0, 0, 1, 1}, + {&__pyx_kp_s_collections_abc, __pyx_k_collections_abc, sizeof(__pyx_k_collections_abc), 0, 0, 1, 0}, + {&__pyx_n_s_compute_attention_score, __pyx_k_compute_attention_score, sizeof(__pyx_k_compute_attention_score), 0, 0, 1, 1}, + {&__pyx_n_s_compute_quality_score, __pyx_k_compute_quality_score, sizeof(__pyx_k_compute_quality_score), 0, 0, 1, 1}, + {&__pyx_kp_s_contiguous_and_direct, __pyx_k_contiguous_and_direct, sizeof(__pyx_k_contiguous_and_direct), 0, 0, 1, 0}, + {&__pyx_kp_s_contiguous_and_indirect, __pyx_k_contiguous_and_indirect, sizeof(__pyx_k_contiguous_and_indirect), 0, 0, 1, 0}, + {&__pyx_n_s_cornac_models_efm_recom_efm, __pyx_k_cornac_models_efm_recom_efm, sizeof(__pyx_k_cornac_models_efm_recom_efm), 0, 0, 1, 1}, + {&__pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_k_cornac_models_efm_recom_efm_pyx, sizeof(__pyx_k_cornac_models_efm_recom_efm_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_count, __pyx_k_count, sizeof(__pyx_k_count), 0, 0, 1, 1}, + {&__pyx_n_s_cpu_count, __pyx_k_cpu_count, sizeof(__pyx_k_cpu_count), 0, 0, 1, 1}, + {&__pyx_n_s_csr_matrix, __pyx_k_csr_matrix, sizeof(__pyx_k_csr_matrix), 0, 0, 1, 1}, + {&__pyx_n_u_d, __pyx_k_d, sizeof(__pyx_k_d), 0, 1, 0, 1}, + {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1}, + {&__pyx_n_s_data_set, __pyx_k_data_set, sizeof(__pyx_k_data_set), 0, 0, 1, 1}, + {&__pyx_n_s_defaults, __pyx_k_defaults, sizeof(__pyx_k_defaults), 0, 0, 1, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0}, + {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, + {&__pyx_n_s_dot, __pyx_k_dot, sizeof(__pyx_k_dot), 0, 0, 1, 1}, + {&__pyx_n_s_double, __pyx_k_double, sizeof(__pyx_k_double), 0, 0, 1, 1}, + {&__pyx_kp_s_double_int, __pyx_k_double_int, sizeof(__pyx_k_double_int), 0, 0, 1, 0}, + {&__pyx_kp_s_double_long, __pyx_k_double_long, sizeof(__pyx_k_double_long), 0, 0, 1, 0}, + {&__pyx_kp_s_double_short, __pyx_k_double_short, sizeof(__pyx_k_double_short), 0, 0, 1, 0}, + {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, + {&__pyx_n_s_dtype_is_object, __pyx_k_dtype_is_object, sizeof(__pyx_k_dtype_is_object), 0, 0, 1, 1}, + {&__pyx_n_s_ediff1d, __pyx_k_ediff1d, sizeof(__pyx_k_ediff1d), 0, 0, 1, 1}, + {&__pyx_n_s_empty, __pyx_k_empty, sizeof(__pyx_k_empty), 0, 0, 1, 1}, + {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0}, + {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1}, + {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1}, + {&__pyx_n_s_eps, __pyx_k_eps, sizeof(__pyx_k_eps), 0, 0, 1, 1}, + {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, + {&__pyx_n_s_exception, __pyx_k_exception, sizeof(__pyx_k_exception), 0, 0, 1, 1}, + {&__pyx_n_s_exp, __pyx_k_exp, sizeof(__pyx_k_exp), 0, 0, 1, 1}, + {&__pyx_n_s_explicit_scores, __pyx_k_explicit_scores, sizeof(__pyx_k_explicit_scores), 0, 0, 1, 1}, + {&__pyx_n_u_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 1, 0, 1}, + {&__pyx_n_s_fill, __pyx_k_fill, sizeof(__pyx_k_fill), 0, 0, 1, 1}, + {&__pyx_n_s_fit, __pyx_k_fit, sizeof(__pyx_k_fit), 0, 0, 1, 1}, + {&__pyx_n_s_fit_efm, __pyx_k_fit_efm, sizeof(__pyx_k_fit_efm), 0, 0, 1, 1}, + {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1}, + {&__pyx_n_s_flatten, __pyx_k_flatten, sizeof(__pyx_k_flatten), 0, 0, 1, 1}, + {&__pyx_n_s_float, __pyx_k_float, sizeof(__pyx_k_float), 0, 0, 1, 1}, + {&__pyx_n_s_float32, __pyx_k_float32, sizeof(__pyx_k_float32), 0, 0, 1, 1}, + {&__pyx_kp_s_float_int, __pyx_k_float_int, sizeof(__pyx_k_float_int), 0, 0, 1, 0}, + {&__pyx_kp_s_float_long, __pyx_k_float_long, sizeof(__pyx_k_float_long), 0, 0, 1, 0}, + {&__pyx_kp_s_float_short, __pyx_k_float_short, sizeof(__pyx_k_float_short), 0, 0, 1, 0}, + {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, + {&__pyx_n_s_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 0, 1, 1}, + {&__pyx_n_u_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 1, 0, 1}, + {&__pyx_n_s_fused_sigindex, __pyx_k_fused_sigindex, sizeof(__pyx_k_fused_sigindex), 0, 0, 1, 1}, + {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0}, + {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, + {&__pyx_n_s_get_rng, __pyx_k_get_rng, sizeof(__pyx_k_get_rng), 0, 0, 1, 1}, + {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, + {&__pyx_kp_u_got, __pyx_k_got, sizeof(__pyx_k_got), 0, 1, 0, 0}, + {&__pyx_kp_u_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 1, 0, 0}, + {&__pyx_n_s_high, __pyx_k_high, sizeof(__pyx_k_high), 0, 0, 1, 1}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, + {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, + {&__pyx_n_s_idx, __pyx_k_idx, sizeof(__pyx_k_idx), 0, 0, 1, 1}, + {&__pyx_n_s_iid, __pyx_k_iid, sizeof(__pyx_k_iid), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_index, __pyx_k_index, sizeof(__pyx_k_index), 0, 0, 1, 1}, + {&__pyx_n_s_indices, __pyx_k_indices, sizeof(__pyx_k_indices), 0, 0, 1, 1}, + {&__pyx_n_s_indptr, __pyx_k_indptr, sizeof(__pyx_k_indptr), 0, 0, 1, 1}, + {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1}, + {&__pyx_n_s_init_2, __pyx_k_init_2, sizeof(__pyx_k_init_2), 0, 0, 1, 1}, + {&__pyx_n_s_init_params, __pyx_k_init_params, sizeof(__pyx_k_init_params), 0, 0, 1, 1}, + {&__pyx_n_s_init_subclass, __pyx_k_init_subclass, sizeof(__pyx_k_init_subclass), 0, 0, 1, 1}, + {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1}, + {&__pyx_n_s_int, __pyx_k_int, sizeof(__pyx_k_int), 0, 0, 1, 1}, + {&__pyx_n_s_int32, __pyx_k_int32, sizeof(__pyx_k_int32), 0, 0, 1, 1}, + {&__pyx_n_s_intersects, __pyx_k_intersects, sizeof(__pyx_k_intersects), 0, 0, 1, 1}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_n_s_is_unk_item, __pyx_k_is_unk_item, sizeof(__pyx_k_is_unk_item), 0, 0, 1, 1}, + {&__pyx_n_s_is_unk_user, __pyx_k_is_unk_user, sizeof(__pyx_k_is_unk_user), 0, 0, 1, 1}, + {&__pyx_kp_u_isenabled, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0}, + {&__pyx_n_s_item_aspect_count, __pyx_k_item_aspect_count, sizeof(__pyx_k_item_aspect_count), 0, 0, 1, 1}, + {&__pyx_n_s_item_aspects, __pyx_k_item_aspects, sizeof(__pyx_k_item_aspects), 0, 0, 1, 1}, + {&__pyx_kp_u_item_id, __pyx_k_item_id, sizeof(__pyx_k_item_id), 0, 1, 0, 0}, + {&__pyx_n_s_item_idx, __pyx_k_item_idx, sizeof(__pyx_k_item_idx), 0, 0, 1, 1}, + {&__pyx_n_s_item_indices, __pyx_k_item_indices, sizeof(__pyx_k_item_indices), 0, 0, 1, 1}, + {&__pyx_n_s_item_rank, __pyx_k_item_rank, sizeof(__pyx_k_item_rank), 0, 0, 1, 1}, + {&__pyx_n_s_item_score, __pyx_k_item_score, sizeof(__pyx_k_item_score), 0, 0, 1, 1}, + {&__pyx_n_s_item_scores, __pyx_k_item_scores, sizeof(__pyx_k_item_scores), 0, 0, 1, 1}, + {&__pyx_n_s_item_sentiment, __pyx_k_item_sentiment, sizeof(__pyx_k_item_sentiment), 0, 0, 1, 1}, + {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1}, + {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1}, + {&__pyx_kp_s_itemsize_0_for_cython_array, __pyx_k_itemsize_0_for_cython_array, sizeof(__pyx_k_itemsize_0_for_cython_array), 0, 0, 1, 0}, + {&__pyx_kp_u_iter, __pyx_k_iter, sizeof(__pyx_k_iter), 0, 1, 0, 0}, + {&__pyx_n_s_j, __pyx_k_j, sizeof(__pyx_k_j), 0, 0, 1, 1}, + {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1}, + {&__pyx_n_s_kind, __pyx_k_kind, sizeof(__pyx_k_kind), 0, 0, 1, 1}, + {&__pyx_n_s_known_item_scores, __pyx_k_known_item_scores, sizeof(__pyx_k_known_item_scores), 0, 0, 1, 1}, + {&__pyx_n_s_kwargs, __pyx_k_kwargs, sizeof(__pyx_k_kwargs), 0, 0, 1, 1}, + {&__pyx_n_s_lambda_h, __pyx_k_lambda_h, sizeof(__pyx_k_lambda_h), 0, 0, 1, 1}, + {&__pyx_n_s_lambda_u, __pyx_k_lambda_u, sizeof(__pyx_k_lambda_u), 0, 0, 1, 1}, + {&__pyx_n_s_lambda_v, __pyx_k_lambda_v, sizeof(__pyx_k_lambda_v), 0, 0, 1, 1}, + {&__pyx_n_s_lambda_x, __pyx_k_lambda_x, sizeof(__pyx_k_lambda_x), 0, 0, 1, 1}, + {&__pyx_n_s_lambda_y, __pyx_k_lambda_y, sizeof(__pyx_k_lambda_y), 0, 0, 1, 1}, + {&__pyx_n_s_long, __pyx_k_long, sizeof(__pyx_k_long), 0, 0, 1, 1}, + {&__pyx_kp_u_loss, __pyx_k_loss, sizeof(__pyx_k_loss), 0, 1, 0, 0}, + {&__pyx_n_s_loss_2, __pyx_k_loss_2, sizeof(__pyx_k_loss_2), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_map_aspect_id, __pyx_k_map_aspect_id, sizeof(__pyx_k_map_aspect_id), 0, 0, 1, 1}, + {&__pyx_n_s_map_iid, __pyx_k_map_iid, sizeof(__pyx_k_map_iid), 0, 0, 1, 1}, + {&__pyx_n_s_map_uid, __pyx_k_map_uid, sizeof(__pyx_k_map_uid), 0, 0, 1, 1}, + {&__pyx_n_s_max_iter, __pyx_k_max_iter, sizeof(__pyx_k_max_iter), 0, 0, 1, 1}, + {&__pyx_n_s_memview, __pyx_k_memview, sizeof(__pyx_k_memview), 0, 0, 1, 1}, + {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, + {&__pyx_n_s_min, __pyx_k_min, sizeof(__pyx_k_min), 0, 0, 1, 1}, + {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, + {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, + {&__pyx_n_s_most_cared_X, __pyx_k_most_cared_X, sizeof(__pyx_k_most_cared_X), 0, 0, 1, 1}, + {&__pyx_n_s_most_cared_Y, __pyx_k_most_cared_Y, sizeof(__pyx_k_most_cared_Y), 0, 0, 1, 1}, + {&__pyx_n_s_most_cared_aspects_indices, __pyx_k_most_cared_aspects_indices, sizeof(__pyx_k_most_cared_aspects_indices), 0, 0, 1, 1}, + {&__pyx_n_s_mro_entries, __pyx_k_mro_entries, sizeof(__pyx_k_mro_entries), 0, 0, 1, 1}, + {&__pyx_n_s_multiprocessing, __pyx_k_multiprocessing, sizeof(__pyx_k_multiprocessing), 0, 0, 1, 1}, + {&__pyx_n_s_n_aspects, __pyx_k_n_aspects, sizeof(__pyx_k_n_aspects), 0, 0, 1, 1}, + {&__pyx_n_s_n_efactors, __pyx_k_n_efactors, sizeof(__pyx_k_n_efactors), 0, 0, 1, 1}, + {&__pyx_n_s_n_factors, __pyx_k_n_factors, sizeof(__pyx_k_n_factors), 0, 0, 1, 1}, + {&__pyx_n_s_n_items, __pyx_k_n_items, sizeof(__pyx_k_n_items), 0, 0, 1, 1}, + {&__pyx_n_s_n_lfactors, __pyx_k_n_lfactors, sizeof(__pyx_k_n_lfactors), 0, 0, 1, 1}, + {&__pyx_n_s_n_ratings, __pyx_k_n_ratings, sizeof(__pyx_k_n_ratings), 0, 0, 1, 1}, + {&__pyx_n_s_n_users, __pyx_k_n_users, sizeof(__pyx_k_n_users), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1}, + {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 1}, + {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, + {&__pyx_kp_s_no_default___reduce___due_to_non, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0}, + {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, + {&__pyx_n_s_num_aspects, __pyx_k_num_aspects, sizeof(__pyx_k_num_aspects), 0, 0, 1, 1}, + {&__pyx_n_s_num_explicit_factors, __pyx_k_num_explicit_factors, sizeof(__pyx_k_num_explicit_factors), 0, 0, 1, 1}, + {&__pyx_n_s_num_items, __pyx_k_num_items, sizeof(__pyx_k_num_items), 0, 0, 1, 1}, + {&__pyx_n_s_num_latent_factors, __pyx_k_num_latent_factors, sizeof(__pyx_k_num_latent_factors), 0, 0, 1, 1}, + {&__pyx_n_s_num_most_cared_aspects, __pyx_k_num_most_cared_aspects, sizeof(__pyx_k_num_most_cared_aspects), 0, 0, 1, 1}, + {&__pyx_n_s_num_threads, __pyx_k_num_threads, sizeof(__pyx_k_num_threads), 0, 0, 1, 1}, + {&__pyx_n_s_num_users, __pyx_k_num_users, sizeof(__pyx_k_num_users), 0, 0, 1, 1}, + {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, + {&__pyx_kp_u_numpy_core_multiarray_failed_to, __pyx_k_numpy_core_multiarray_failed_to, sizeof(__pyx_k_numpy_core_multiarray_failed_to), 0, 1, 0, 0}, + {&__pyx_kp_u_numpy_core_umath_failed_to_impor, __pyx_k_numpy_core_umath_failed_to_impor, sizeof(__pyx_k_numpy_core_umath_failed_to_impor), 0, 1, 0, 0}, + {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1}, + {&__pyx_n_s_ones, __pyx_k_ones, sizeof(__pyx_k_ones), 0, 0, 1, 1}, + {&__pyx_n_s_pack, __pyx_k_pack, sizeof(__pyx_k_pack), 0, 0, 1, 1}, + {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, + {&__pyx_n_s_prediction, __pyx_k_prediction, sizeof(__pyx_k_prediction), 0, 0, 1, 1}, + {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, + {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_Enum, __pyx_k_pyx_unpickle_Enum, sizeof(__pyx_k_pyx_unpickle_Enum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, + {&__pyx_n_s_quality_scores, __pyx_k_quality_scores, sizeof(__pyx_k_quality_scores), 0, 0, 1, 1}, + {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, + {&__pyx_n_s_random_state, __pyx_k_random_state, sizeof(__pyx_k_random_state), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_rank, __pyx_k_rank, sizeof(__pyx_k_rank), 0, 0, 1, 1}, + {&__pyx_n_s_rating, __pyx_k_rating, sizeof(__pyx_k_rating), 0, 0, 1, 1}, + {&__pyx_n_s_rating_scale, __pyx_k_rating_scale, sizeof(__pyx_k_rating_scale), 0, 0, 1, 1}, + {&__pyx_n_s_ratings, __pyx_k_ratings, sizeof(__pyx_k_ratings), 0, 0, 1, 1}, + {&__pyx_n_s_recommender, __pyx_k_recommender, sizeof(__pyx_k_recommender), 0, 0, 1, 1}, + {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, + {&__pyx_n_s_register, __pyx_k_register, sizeof(__pyx_k_register), 0, 0, 1, 1}, + {&__pyx_n_s_repeat, __pyx_k_repeat, sizeof(__pyx_k_repeat), 0, 0, 1, 1}, + {&__pyx_n_s_rng, __pyx_k_rng, sizeof(__pyx_k_rng), 0, 0, 1, 1}, + {&__pyx_n_s_s, __pyx_k_s, sizeof(__pyx_k_s), 0, 0, 1, 1}, + {&__pyx_n_s_scipy, __pyx_k_scipy, sizeof(__pyx_k_scipy), 0, 0, 1, 1}, + {&__pyx_n_s_scipy_sparse, __pyx_k_scipy_sparse, sizeof(__pyx_k_scipy_sparse), 0, 0, 1, 1}, + {&__pyx_n_s_score, __pyx_k_score, sizeof(__pyx_k_score), 0, 0, 1, 1}, + {&__pyx_n_s_seed, __pyx_k_seed, sizeof(__pyx_k_seed), 0, 0, 1, 1}, + {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, + {&__pyx_n_s_sentiment, __pyx_k_sentiment, sizeof(__pyx_k_sentiment), 0, 0, 1, 1}, + {&__pyx_n_s_sentiment_polarity, __pyx_k_sentiment_polarity, sizeof(__pyx_k_sentiment_polarity), 0, 0, 1, 1}, + {&__pyx_n_s_sentiment_tup_ids_by_item, __pyx_k_sentiment_tup_ids_by_item, sizeof(__pyx_k_sentiment_tup_ids_by_item), 0, 0, 1, 1}, + {&__pyx_n_s_sentiment_tup_ids_by_user, __pyx_k_sentiment_tup_ids_by_user, sizeof(__pyx_k_sentiment_tup_ids_by_user), 0, 0, 1, 1}, + {&__pyx_n_s_set_name, __pyx_k_set_name, sizeof(__pyx_k_set_name), 0, 0, 1, 1}, + {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, + {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_shape, __pyx_k_shape, sizeof(__pyx_k_shape), 0, 0, 1, 1}, + {&__pyx_n_s_short, __pyx_k_short, sizeof(__pyx_k_short), 0, 0, 1, 1}, + {&__pyx_n_s_signatures, __pyx_k_signatures, sizeof(__pyx_k_signatures), 0, 0, 1, 1}, + {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1}, + {&__pyx_n_s_sp, __pyx_k_sp, sizeof(__pyx_k_sp), 0, 0, 1, 1}, + {&__pyx_n_s_sparse, __pyx_k_sparse, sizeof(__pyx_k_sparse), 0, 0, 1, 1}, + {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, + {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1}, + {&__pyx_n_s_sqrt, __pyx_k_sqrt, sizeof(__pyx_k_sqrt), 0, 0, 1, 1}, + {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1}, + {&__pyx_n_s_step, __pyx_k_step, sizeof(__pyx_k_step), 0, 0, 1, 1}, + {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1}, + {&__pyx_kp_s_strided_and_direct, __pyx_k_strided_and_direct, sizeof(__pyx_k_strided_and_direct), 0, 0, 1, 0}, + {&__pyx_kp_s_strided_and_direct_or_indirect, __pyx_k_strided_and_direct_or_indirect, sizeof(__pyx_k_strided_and_direct_or_indirect), 0, 0, 1, 0}, + {&__pyx_kp_s_strided_and_indirect, __pyx_k_strided_and_indirect, sizeof(__pyx_k_strided_and_indirect), 0, 0, 1, 0}, + {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, + {&__pyx_n_s_strip, __pyx_k_strip, sizeof(__pyx_k_strip), 0, 0, 1, 1}, + {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1}, + {&__pyx_n_s_super, __pyx_k_super, sizeof(__pyx_k_super), 0, 0, 1, 1}, + {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, + {&__pyx_n_s_t, __pyx_k_t, sizeof(__pyx_k_t), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_tocsc, __pyx_k_tocsc, sizeof(__pyx_k_tocsc), 0, 0, 1, 1}, + {&__pyx_n_s_total_items, __pyx_k_total_items, sizeof(__pyx_k_total_items), 0, 0, 1, 1}, + {&__pyx_n_s_total_sentiment, __pyx_k_total_sentiment, sizeof(__pyx_k_total_sentiment), 0, 0, 1, 1}, + {&__pyx_n_s_total_sentiment_by_aspect, __pyx_k_total_sentiment_by_aspect, sizeof(__pyx_k_total_sentiment_by_aspect), 0, 0, 1, 1}, + {&__pyx_n_s_train_set, __pyx_k_train_set, sizeof(__pyx_k_train_set), 0, 0, 1, 1}, + {&__pyx_n_s_trainable, __pyx_k_trainable, sizeof(__pyx_k_trainable), 0, 0, 1, 1}, + {&__pyx_n_s_tup, __pyx_k_tup, sizeof(__pyx_k_tup), 0, 0, 1, 1}, + {&__pyx_n_s_tup_id, __pyx_k_tup_id, sizeof(__pyx_k_tup_id), 0, 0, 1, 1}, + {&__pyx_n_s_uid, __pyx_k_uid, sizeof(__pyx_k_uid), 0, 0, 1, 1}, + {&__pyx_n_s_uir_iter, __pyx_k_uir_iter, sizeof(__pyx_k_uir_iter), 0, 0, 1, 1}, + {&__pyx_kp_s_unable_to_allocate_array_data, __pyx_k_unable_to_allocate_array_data, sizeof(__pyx_k_unable_to_allocate_array_data), 0, 0, 1, 0}, + {&__pyx_kp_s_unable_to_allocate_shape_and_str, __pyx_k_unable_to_allocate_shape_and_str, sizeof(__pyx_k_unable_to_allocate_shape_and_str), 0, 0, 1, 0}, + {&__pyx_n_s_uniform, __pyx_k_uniform, sizeof(__pyx_k_uniform), 0, 0, 1, 1}, + {&__pyx_n_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {&__pyx_n_s_use_item_aspect_popularity, __pyx_k_use_item_aspect_popularity, sizeof(__pyx_k_use_item_aspect_popularity), 0, 0, 1, 1}, + {&__pyx_n_s_user_aspect_count, __pyx_k_user_aspect_count, sizeof(__pyx_k_user_aspect_count), 0, 0, 1, 1}, + {&__pyx_n_s_user_aspects, __pyx_k_user_aspects, sizeof(__pyx_k_user_aspects), 0, 0, 1, 1}, + {&__pyx_n_s_user_idx, __pyx_k_user_idx, sizeof(__pyx_k_user_idx), 0, 0, 1, 1}, + {&__pyx_n_s_user_sentiment, __pyx_k_user_sentiment, sizeof(__pyx_k_user_sentiment), 0, 0, 1, 1}, + {&__pyx_n_s_utils, __pyx_k_utils, sizeof(__pyx_k_utils), 0, 0, 1, 1}, + {&__pyx_n_s_utils_common, __pyx_k_utils_common, sizeof(__pyx_k_utils_common), 0, 0, 1, 1}, + {&__pyx_n_s_utils_init_utils, __pyx_k_utils_init_utils, sizeof(__pyx_k_utils_init_utils), 0, 0, 1, 1}, + {&__pyx_n_s_val_set, __pyx_k_val_set, sizeof(__pyx_k_val_set), 0, 0, 1, 1}, + {&__pyx_n_s_values, __pyx_k_values, sizeof(__pyx_k_values), 0, 0, 1, 1}, + {&__pyx_n_s_verbose, __pyx_k_verbose, sizeof(__pyx_k_verbose), 0, 0, 1, 1}, + {&__pyx_n_s_version_info, __pyx_k_version_info, sizeof(__pyx_k_version_info), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 230, __pyx_L1_error) - __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 230, __pyx_L1_error) + __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 267, __pyx_L1_error) __pyx_builtin_print = __Pyx_GetBuiltinName(__pyx_n_s_print); if (!__pyx_builtin_print) __PYX_ERR(0, 355, __pyx_L1_error) - __pyx_builtin_max = __Pyx_GetBuiltinName(__pyx_n_s_max); if (!__pyx_builtin_max) __PYX_ERR(0, 497, __pyx_L1_error) - __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(1, 947, __pyx_L1_error) - __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(2, 133, __pyx_L1_error) - __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(2, 148, __pyx_L1_error) - __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(2, 151, __pyx_L1_error) - __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(2, 404, __pyx_L1_error) - __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(2, 613, __pyx_L1_error) - __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(2, 832, __pyx_L1_error) + __pyx_builtin___import__ = __Pyx_GetBuiltinName(__pyx_n_s_import); if (!__pyx_builtin___import__) __PYX_ERR(1, 100, __pyx_L1_error) + __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(1, 156, __pyx_L1_error) + __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(1, 159, __pyx_L1_error) + __pyx_builtin_AssertionError = __Pyx_GetBuiltinName(__pyx_n_s_AssertionError); if (!__pyx_builtin_AssertionError) __PYX_ERR(1, 373, __pyx_L1_error) + __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(1, 408, __pyx_L1_error) + __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(1, 618, __pyx_L1_error) + __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(1, 914, __pyx_L1_error) + __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(2, 983, __pyx_L1_error) return 0; __pyx_L1_error:; return -1; } +/* #### Code section: cached_constants ### */ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + /* "View.MemoryView":582 + * def suboffsets(self): + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + */ + __pyx_tuple__4 = PyTuple_New(1); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(1, 582, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__4); + __Pyx_INCREF(__pyx_int_neg_1); + __Pyx_GIVEREF(__pyx_int_neg_1); + PyTuple_SET_ITEM(__pyx_tuple__4, 0, __pyx_int_neg_1); + __Pyx_GIVEREF(__pyx_tuple__4); + + /* "View.MemoryView":679 + * tup = index if isinstance(index, tuple) else (index,) + * + * result = [slice(None)] * ndim # <<<<<<<<<<<<<< + * have_slices = False + * seen_ellipsis = False + */ + __pyx_slice__5 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__5)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__5); + __Pyx_GIVEREF(__pyx_slice__5); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0x82a3537, 0x6ae9995, 0xb068931): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum + */ + __pyx_tuple__8 = PyTuple_Pack(3, __pyx_int_136983863, __pyx_int_112105877, __pyx_int_184977713); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__8); + __Pyx_GIVEREF(__pyx_tuple__8); + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":983 + * __pyx_import_array() + * except Exception: + * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_umath() except -1: + */ + __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(2, 983, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__9); + __Pyx_GIVEREF(__pyx_tuple__9); + + /* "../../anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":989 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_ufunc() except -1: + */ + __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(2, 989, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__10); + __Pyx_GIVEREF(__pyx_tuple__10); + /* "cornac/models/efm/recom_efm.pyx":160 * # Init params if provided * self.init_params = {} if init_params is None else init_params @@ -43151,9 +49103,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * self.U2 = self.init_params.get('U2', None) * self.V = self.init_params.get('V', None) */ - __pyx_tuple_ = PyTuple_Pack(2, __pyx_n_u_U1, Py_None); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 160, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); + __pyx_tuple__11 = PyTuple_Pack(2, __pyx_n_u_U1, Py_None); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__11); + __Pyx_GIVEREF(__pyx_tuple__11); /* "cornac/models/efm/recom_efm.pyx":161 * self.init_params = {} if init_params is None else init_params @@ -43162,9 +49114,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * self.V = self.init_params.get('V', None) * self.H1 = self.init_params.get('H1', None) */ - __pyx_tuple__2 = PyTuple_Pack(2, __pyx_n_u_U2, Py_None); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 161, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__2); - __Pyx_GIVEREF(__pyx_tuple__2); + __pyx_tuple__12 = PyTuple_Pack(2, __pyx_n_u_U2, Py_None); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__12); + __Pyx_GIVEREF(__pyx_tuple__12); /* "cornac/models/efm/recom_efm.pyx":162 * self.U1 = self.init_params.get('U1', None) @@ -43173,9 +49125,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * self.H1 = self.init_params.get('H1', None) * self.H2 = self.init_params.get('H2', None) */ - __pyx_tuple__3 = PyTuple_Pack(2, __pyx_n_u_V, Py_None); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 162, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__3); - __Pyx_GIVEREF(__pyx_tuple__3); + __pyx_tuple__13 = PyTuple_Pack(2, __pyx_n_u_V, Py_None); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__13); + __Pyx_GIVEREF(__pyx_tuple__13); /* "cornac/models/efm/recom_efm.pyx":163 * self.U2 = self.init_params.get('U2', None) @@ -43184,9 +49136,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * self.H2 = self.init_params.get('H2', None) * */ - __pyx_tuple__4 = PyTuple_Pack(2, __pyx_n_u_H1, Py_None); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 163, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__4); - __Pyx_GIVEREF(__pyx_tuple__4); + __pyx_tuple__14 = PyTuple_Pack(2, __pyx_n_u_H1, Py_None); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 163, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__14); + __Pyx_GIVEREF(__pyx_tuple__14); /* "cornac/models/efm/recom_efm.pyx":164 * self.V = self.init_params.get('V', None) @@ -43195,270 +49147,168 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * * def _init(self): */ - __pyx_tuple__5 = PyTuple_Pack(2, __pyx_n_u_H2, Py_None); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 164, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__5); - __Pyx_GIVEREF(__pyx_tuple__5); - - /* "cornac/models/efm/recom_efm.pyx":230 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def _fit_efm(self, int num_threads, # <<<<<<<<<<<<<< - * floating[:] A, integral[:] A_uids, integral[:] A_iids, integral[:] A_user_counts, integral[:] A_item_counts, - * floating[:] X, integral[:] X_uids, integral[:] X_aids, integral[:] X_user_counts, integral[:] X_aspect_counts, - */ - __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_No_matching_signature_found); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__8); - __Pyx_GIVEREF(__pyx_tuple__8); - __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_Function_call_with_ambiguous_arg); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__9); - __Pyx_GIVEREF(__pyx_tuple__9); - - /* "cornac/models/efm/recom_efm.pyx":358 - * - * if self.verbose: - * print('Optimization finished!') # <<<<<<<<<<<<<< - * - * def _build_matrices(self, data_set): - */ - __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_u_Optimization_finished); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 358, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__10); - __Pyx_GIVEREF(__pyx_tuple__10); - - /* "cornac/models/efm/recom_efm.pyx":429 - * - * if self.verbose: - * print('Building matrices completed!') # <<<<<<<<<<<<<< - * - * return A, X, Y - */ - __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_u_Building_matrices_completed); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__11); - __Pyx_GIVEREF(__pyx_tuple__11); - - /* "cornac/models/efm/recom_efm.pyx":460 - * if self.train_set.is_unk_user(user_idx): - * raise ScoreException("Can't make score prediction for (user_id=%d" & user_idx) - * item_scores = self.U2.dot(self.U1[user_idx, :]) + self.H2.dot(self.H1[user_idx, :]) # <<<<<<<<<<<<<< - * return item_scores - * else: - */ - __pyx_slice__12 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__12)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_slice__12); - __Pyx_GIVEREF(__pyx_slice__12); - - /* "cornac/models/efm/recom_efm.pyx":495 - * if item_indices is None: - * item_scores = item_scores - * item_rank = item_scores.argsort()[::-1] # <<<<<<<<<<<<<< - * else: - * num_items = max(self.train_set.num_items, max(item_indices) + 1) - */ - __pyx_slice__14 = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_slice__14)) __PYX_ERR(0, 495, __pyx_L1_error) - __Pyx_GOTREF(__pyx_slice__14); - __Pyx_GIVEREF(__pyx_slice__14); - - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":947 - * __pyx_import_array() - * except Exception: - * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< - * - * cdef inline int import_umath() except -1: - */ - __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(1, 947, __pyx_L1_error) + __pyx_tuple__15 = PyTuple_Pack(2, __pyx_n_u_H2, Py_None); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 164, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__15); __Pyx_GIVEREF(__pyx_tuple__15); - /* "../../anaconda3/lib/python3.9/site-packages/numpy/__init__.pxd":953 - * _import_umath() - * except Exception: - * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< - * - * cdef inline int import_ufunc() except -1: - */ - __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(1, 953, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__16); - __Pyx_GIVEREF(__pyx_tuple__16); - - /* "View.MemoryView":133 - * - * if not self.ndim: - * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< - * - * if itemsize <= 0: - */ - __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_Empty_shape_tuple_for_cython_arr); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(2, 133, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__17); - __Pyx_GIVEREF(__pyx_tuple__17); - - /* "View.MemoryView":136 + /* "cornac/models/efm/recom_efm.pyx":228 * - * if itemsize <= 0: - * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< * - * if not isinstance(format, bytes): + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def _fit_efm(self, int num_threads, */ - __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_itemsize_0_for_cython_array); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(2, 136, __pyx_L1_error) + __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_No_matching_signature_found); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__18); __Pyx_GIVEREF(__pyx_tuple__18); - - /* "View.MemoryView":148 - * - * if not self._shape: - * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< - * - * - */ - __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_shape_and_str); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(2, 148, __pyx_L1_error) + __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_Function_call_with_ambiguous_arg); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__19); __Pyx_GIVEREF(__pyx_tuple__19); - /* "View.MemoryView":176 - * self.data = malloc(self.len) - * if not self.data: - * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":358 * - * if self.dtype_is_object: + * if self.verbose: + * print('Optimization finished!') # <<<<<<<<<<<<<< + * + * def _build_matrices(self, data_set): */ - __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_array_data); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(2, 176, __pyx_L1_error) + __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_u_Optimization_finished); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 358, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__20); __Pyx_GIVEREF(__pyx_tuple__20); - /* "View.MemoryView":192 - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * if not (flags & bufmode): - * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< - * info.buf = self.data - * info.len = self.len + /* "cornac/models/efm/recom_efm.pyx":429 + * + * if self.verbose: + * print('Building matrices completed!') # <<<<<<<<<<<<<< + * + * return A, X, Y */ - __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_Can_only_create_a_buffer_that_is); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(2, 192, __pyx_L1_error) + __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_u_Building_matrices_completed); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 429, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__21); __Pyx_GIVEREF(__pyx_tuple__21); - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + /* "cornac/models/efm/recom_efm.pyx":506 + * if item_indices is None: + * item_scores = all_item_scores[: self.train_set.num_items] + * item_rank = item_scores.argsort()[::-1] # <<<<<<<<<<<<<< + * else: + * item_scores = all_item_scores[item_indices] */ - __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(2, 2, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__22); - __Pyx_GIVEREF(__pyx_tuple__22); + __pyx_slice__22 = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_slice__22)) __PYX_ERR(0, 506, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__22); + __Pyx_GIVEREF(__pyx_slice__22); - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + /* "View.MemoryView":100 + * cdef object __pyx_collections_abc_Sequence "__pyx_collections_abc_Sequence" + * try: + * if __import__("sys").version_info >= (3, 3): # <<<<<<<<<<<<<< + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence + * else: */ - __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(2, 4, __pyx_L1_error) + __pyx_tuple__23 = PyTuple_Pack(1, __pyx_n_s_sys); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(1, 100, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__23); __Pyx_GIVEREF(__pyx_tuple__23); - - /* "View.MemoryView":418 - * def __setitem__(memoryview self, object index, object value): - * if self.view.readonly: - * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< - * - * have_slices, index = _unellipsify(index, self.view.ndim) - */ - __pyx_tuple__24 = PyTuple_Pack(1, __pyx_kp_s_Cannot_assign_to_read_only_memor); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(2, 418, __pyx_L1_error) + __pyx_tuple__24 = PyTuple_Pack(2, __pyx_int_3, __pyx_int_3); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(1, 100, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__24); __Pyx_GIVEREF(__pyx_tuple__24); - /* "View.MemoryView":495 - * result = struct.unpack(self.view.format, bytesitem) - * except struct.error: - * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< - * else: - * if len(self.view.format) == 1: + /* "View.MemoryView":101 + * try: + * if __import__("sys").version_info >= (3, 3): + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence # <<<<<<<<<<<<<< + * else: + * __pyx_collections_abc_Sequence = __import__("collections").Sequence */ - __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_Unable_to_convert_item_to_object); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(2, 495, __pyx_L1_error) + __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_collections_abc); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(1, 101, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__25); __Pyx_GIVEREF(__pyx_tuple__25); - /* "View.MemoryView":520 - * def __getbuffer__(self, Py_buffer *info, int flags): - * if flags & PyBUF_WRITABLE and self.view.readonly: - * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< + /* "View.MemoryView":103 + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence + * else: + * __pyx_collections_abc_Sequence = __import__("collections").Sequence # <<<<<<<<<<<<<< + * except: * - * if flags & PyBUF_ND: */ - __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_s_Cannot_create_writable_memory_vi); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(2, 520, __pyx_L1_error) + __pyx_tuple__26 = PyTuple_Pack(1, __pyx_n_s_collections); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(1, 103, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__26); __Pyx_GIVEREF(__pyx_tuple__26); - /* "View.MemoryView":570 - * if self.view.strides == NULL: - * - * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< + /* "View.MemoryView":309 + * return self.name * - * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + * cdef generic = Enum("") # <<<<<<<<<<<<<< + * cdef strided = Enum("") # default + * cdef indirect = Enum("") */ - __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_s_Buffer_view_does_not_expose_stri); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(2, 570, __pyx_L1_error) + __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(1, 309, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__27); __Pyx_GIVEREF(__pyx_tuple__27); - /* "View.MemoryView":577 - * def suboffsets(self): - * if self.view.suboffsets == NULL: - * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + /* "View.MemoryView":310 + * + * cdef generic = Enum("") + * cdef strided = Enum("") # default # <<<<<<<<<<<<<< + * cdef indirect = Enum("") * - * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) */ - __pyx_tuple__28 = PyTuple_New(1); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(2, 577, __pyx_L1_error) + __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(1, 310, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__28); - __Pyx_INCREF(__pyx_int_neg_1); - __Pyx_GIVEREF(__pyx_int_neg_1); - PyTuple_SET_ITEM(__pyx_tuple__28, 0, __pyx_int_neg_1); __Pyx_GIVEREF(__pyx_tuple__28); - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + /* "View.MemoryView":311 + * cdef generic = Enum("") + * cdef strided = Enum("") # default + * cdef indirect = Enum("") # <<<<<<<<<<<<<< + * + * */ - __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(2, 2, __pyx_L1_error) + __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(1, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__29); __Pyx_GIVEREF(__pyx_tuple__29); - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + /* "View.MemoryView":314 + * + * + * cdef contiguous = Enum("") # <<<<<<<<<<<<<< + * cdef indirect_contiguous = Enum("") + * */ - __pyx_tuple__30 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(2, 4, __pyx_L1_error) + __pyx_tuple__30 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(1, 314, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__30); __Pyx_GIVEREF(__pyx_tuple__30); - /* "View.MemoryView":703 - * for suboffset in suboffsets[:ndim]: - * if suboffset >= 0: - * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< + /* "View.MemoryView":315 + * + * cdef contiguous = Enum("") + * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< * * */ - __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_Indirect_dimensions_not_supporte); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(2, 703, __pyx_L1_error) + __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(1, 315, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__31); __Pyx_GIVEREF(__pyx_tuple__31); - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result */ - __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(2, 2, __pyx_L1_error) + __pyx_tuple__32 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(1, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__32); __Pyx_GIVEREF(__pyx_tuple__32); + __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) __PYX_ERR(1, 1, __pyx_L1_error) - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + /* "cornac/models/efm/recom_efm.pyx":28 + * import numpy as np + * cimport numpy as np + * import scipy.sparse as sp # <<<<<<<<<<<<<< + * from scipy.linalg.cython_blas cimport sdot, ddot + * */ - __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__33); - __Pyx_GIVEREF(__pyx_tuple__33); + __pyx_tuple__34 = PyTuple_Pack(2, __pyx_n_s_scipy, __pyx_n_s_sparse); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__34); + __Pyx_GIVEREF(__pyx_tuple__34); /* "cornac/models/efm/recom_efm.pyx":129 * """ @@ -43470,7 +49320,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __pyx_tuple__35 = PyTuple_Pack(19, __pyx_n_s_self, __pyx_n_s_name, __pyx_n_s_num_explicit_factors, __pyx_n_s_num_latent_factors, __pyx_n_s_num_most_cared_aspects, __pyx_n_s_rating_scale, __pyx_n_s_alpha, __pyx_n_s_lambda_x, __pyx_n_s_lambda_y, __pyx_n_s_lambda_u, __pyx_n_s_lambda_h, __pyx_n_s_lambda_v, __pyx_n_s_use_item_aspect_popularity, __pyx_n_s_max_iter, __pyx_n_s_num_threads, __pyx_n_s_trainable, __pyx_n_s_verbose, __pyx_n_s_init_params, __pyx_n_s_seed); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 129, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__35); __Pyx_GIVEREF(__pyx_tuple__35); - __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(19, 0, 19, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_init, 129, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 129, __pyx_L1_error) + __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(19, 0, 0, 19, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_init, 129, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 129, __pyx_L1_error) __pyx_tuple__37 = PyTuple_Pack(18, ((PyObject*)__pyx_n_u_EFM), ((PyObject *)__pyx_int_40), ((PyObject *)__pyx_int_60), ((PyObject *)__pyx_int_15), ((PyObject*)__pyx_float_5_0), ((PyObject*)__pyx_float_0_85), ((PyObject *)__pyx_int_1), ((PyObject *)__pyx_int_1), ((PyObject*)__pyx_float_0_01), ((PyObject*)__pyx_float_0_01), ((PyObject*)__pyx_float_0_01), ((PyObject *)Py_True), ((PyObject *)__pyx_int_100), ((PyObject *)__pyx_int_0), ((PyObject *)Py_True), ((PyObject *)Py_False), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 129, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__37); __Pyx_GIVEREF(__pyx_tuple__37); @@ -43485,7 +49335,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __pyx_tuple__38 = PyTuple_Pack(9, __pyx_n_s_self, __pyx_n_s_rng, __pyx_n_s_n_users, __pyx_n_s_n_items, __pyx_n_s_n_aspects, __pyx_n_s_n_efactors, __pyx_n_s_n_lfactors, __pyx_n_s_n_factors, __pyx_n_s_high); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 166, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__38); __Pyx_GIVEREF(__pyx_tuple__38); - __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_init_2, 166, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(0, 166, __pyx_L1_error) + __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_init_2, 166, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(0, 166, __pyx_L1_error) /* "cornac/models/efm/recom_efm.pyx":186 * self.H2 = uniform((n_items, n_lfactors), high=high, random_state=rng) @@ -43497,22 +49347,22 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __pyx_tuple__40 = PyTuple_Pack(15, __pyx_n_s_self, __pyx_n_s_train_set, __pyx_n_s_val_set, __pyx_n_s_A, __pyx_n_s_X, __pyx_n_s_Y, __pyx_n_s_A_user_counts, __pyx_n_s_A_item_counts, __pyx_n_s_A_uids, __pyx_n_s_X_user_counts, __pyx_n_s_X_aspect_counts, __pyx_n_s_X_uids, __pyx_n_s_Y_item_counts, __pyx_n_s_Y_aspect_counts, __pyx_n_s_Y_iids); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__40); __Pyx_GIVEREF(__pyx_tuple__40); - __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(3, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_fit, 186, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(0, 186, __pyx_L1_error) + __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_fit, 186, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(0, 186, __pyx_L1_error) __pyx_tuple__42 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__42); __Pyx_GIVEREF(__pyx_tuple__42); - /* "cornac/models/efm/recom_efm.pyx":230 - * @cython.boundscheck(False) + /* "cornac/models/efm/recom_efm.pyx":228 + * + * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< * @cython.wraparound(False) - * def _fit_efm(self, int num_threads, # <<<<<<<<<<<<<< - * floating[:] A, integral[:] A_uids, integral[:] A_iids, integral[:] A_user_counts, integral[:] A_item_counts, - * floating[:] X, integral[:] X_uids, integral[:] X_aids, integral[:] X_user_counts, integral[:] X_aspect_counts, + * def _fit_efm(self, int num_threads, */ - __pyx_tuple__43 = PyTuple_Pack(52, __pyx_n_s_self, __pyx_n_s_num_threads, __pyx_n_s_A, __pyx_n_s_A_uids, __pyx_n_s_A_iids, __pyx_n_s_A_user_counts, __pyx_n_s_A_item_counts, __pyx_n_s_X, __pyx_n_s_X_uids, __pyx_n_s_X_aids, __pyx_n_s_X_user_counts, __pyx_n_s_X_aspect_counts, __pyx_n_s_Y, __pyx_n_s_Y_iids, __pyx_n_s_Y_aids, __pyx_n_s_Y_item_counts, __pyx_n_s_Y_aspect_counts, __pyx_n_s_U1, __pyx_n_s_U2, __pyx_n_s_V, __pyx_n_s_H1, __pyx_n_s_H2, __pyx_n_s_num_users, __pyx_n_s_num_items, __pyx_n_s_num_aspects, __pyx_n_s_num_explicit_factors, __pyx_n_s_num_latent_factors, __pyx_n_s_lambda_x, __pyx_n_s_lambda_y, __pyx_n_s_lambda_u, __pyx_n_s_lambda_h, __pyx_n_s_lambda_v, __pyx_n_s_prediction, __pyx_n_s_score, __pyx_n_s_loss_2, __pyx_n_s_U1_numerator, __pyx_n_s_U1_denominator, __pyx_n_s_U2_numerator, __pyx_n_s_U2_denominator, __pyx_n_s_V_numerator, __pyx_n_s_V_denominator, __pyx_n_s_H1_numerator, __pyx_n_s_H1_denominator, __pyx_n_s_H2_numerator, __pyx_n_s_H2_denominator, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_idx, __pyx_n_s_n_ratings, __pyx_n_s_eps, __pyx_n_s_t); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 230, __pyx_L1_error) + __pyx_tuple__43 = PyTuple_Pack(52, __pyx_n_s_self, __pyx_n_s_num_threads, __pyx_n_s_A, __pyx_n_s_A_uids, __pyx_n_s_A_iids, __pyx_n_s_A_user_counts, __pyx_n_s_A_item_counts, __pyx_n_s_X, __pyx_n_s_X_uids, __pyx_n_s_X_aids, __pyx_n_s_X_user_counts, __pyx_n_s_X_aspect_counts, __pyx_n_s_Y, __pyx_n_s_Y_iids, __pyx_n_s_Y_aids, __pyx_n_s_Y_item_counts, __pyx_n_s_Y_aspect_counts, __pyx_n_s_U1, __pyx_n_s_U2, __pyx_n_s_V, __pyx_n_s_H1, __pyx_n_s_H2, __pyx_n_s_num_users, __pyx_n_s_num_items, __pyx_n_s_num_aspects, __pyx_n_s_num_explicit_factors, __pyx_n_s_num_latent_factors, __pyx_n_s_lambda_x, __pyx_n_s_lambda_y, __pyx_n_s_lambda_u, __pyx_n_s_lambda_h, __pyx_n_s_lambda_v, __pyx_n_s_prediction, __pyx_n_s_score, __pyx_n_s_loss_2, __pyx_n_s_U1_numerator, __pyx_n_s_U1_denominator, __pyx_n_s_U2_numerator, __pyx_n_s_U2_denominator, __pyx_n_s_V_numerator, __pyx_n_s_V_denominator, __pyx_n_s_H1_numerator, __pyx_n_s_H1_denominator, __pyx_n_s_H2_numerator, __pyx_n_s_H2_denominator, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_idx, __pyx_n_s_n_ratings, __pyx_n_s_eps, __pyx_n_s_t); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__43); __Pyx_GIVEREF(__pyx_tuple__43); - __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(22, 0, 52, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_fit_efm, 230, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(0, 230, __pyx_L1_error) + __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(22, 0, 0, 52, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_fit_efm, 228, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(0, 228, __pyx_L1_error) /* "cornac/models/efm/recom_efm.pyx":360 * print('Optimization finished!') @@ -43524,7 +49374,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __pyx_tuple__46 = PyTuple_Pack(33, __pyx_n_s_self, __pyx_n_s_data_set, __pyx_n_s_sentiment, __pyx_n_s_ratings, __pyx_n_s_map_uid, __pyx_n_s_map_iid, __pyx_n_s_uid, __pyx_n_s_iid, __pyx_n_s_rating, __pyx_n_s_A, __pyx_n_s_attention_scores, __pyx_n_s_map_aspect_id, __pyx_n_s_sentiment_tup_ids_by_item, __pyx_n_s_user_aspects, __pyx_n_s_user_aspect_count, __pyx_n_s_aid, __pyx_n_s_count, __pyx_n_s_X, __pyx_n_s_quality_scores, __pyx_n_s_sentiment_tup_ids_by_user, __pyx_n_s_item_aspects, __pyx_n_s_item_aspect_count, __pyx_n_s_total_sentiment_by_aspect, __pyx_n_s_tup_id, __pyx_n_s__45, __pyx_n_s_sentiment_polarity, __pyx_n_s_total_sentiment, __pyx_n_s_avg_sentiment, __pyx_n_s_Y, __pyx_n_s_tup_id, __pyx_n_s_tup, __pyx_n_s_tup_id, __pyx_n_s_tup); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 360, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__46); __Pyx_GIVEREF(__pyx_tuple__46); - __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(2, 0, 33, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_build_matrices, 360, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 360, __pyx_L1_error) + __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 33, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_build_matrices, 360, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 360, __pyx_L1_error) /* "cornac/models/efm/recom_efm.pyx":433 * return A, X, Y @@ -43536,7 +49386,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __pyx_tuple__48 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_count); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 433, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__48); __Pyx_GIVEREF(__pyx_tuple__48); - __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_compute_attention_score, 433, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 433, __pyx_L1_error) + __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_compute_attention_score, 433, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 433, __pyx_L1_error) /* "cornac/models/efm/recom_efm.pyx":436 * return 1 + (self.rating_scale - 1) * (2 / (1 + np.exp(-count)) - 1) @@ -43548,7 +49398,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __pyx_tuple__50 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_sentiment); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 436, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__50); __Pyx_GIVEREF(__pyx_tuple__50); - __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_compute_quality_score, 436, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(0, 436, __pyx_L1_error) + __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_compute_quality_score, 436, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(0, 436, __pyx_L1_error) /* "cornac/models/efm/recom_efm.pyx":439 * return 1 + (self.rating_scale - 1) / (1 + np.exp(-sentiment)) @@ -43560,7 +49410,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __pyx_tuple__52 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_user_idx, __pyx_n_s_item_idx, __pyx_n_s_item_scores, __pyx_n_s_item_score); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 439, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__52); __Pyx_GIVEREF(__pyx_tuple__52); - __pyx_codeobj__53 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_score, 439, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__53)) __PYX_ERR(0, 439, __pyx_L1_error) + __pyx_codeobj__53 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_score, 439, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__53)) __PYX_ERR(0, 439, __pyx_L1_error) __pyx_tuple__54 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(0, 439, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__54); __Pyx_GIVEREF(__pyx_tuple__54); @@ -43572,111 +49422,77 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * """Rank all test items for a given user. * */ - __pyx_tuple__55 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_user_idx, __pyx_n_s_item_indices, __pyx_n_s_X_2, __pyx_n_s_most_cared_aspects_indices, __pyx_n_s_most_cared_X, __pyx_n_s_most_cared_Y, __pyx_n_s_explicit_scores, __pyx_n_s_item_scores, __pyx_n_s_item_rank, __pyx_n_s_num_items); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(0, 468, __pyx_L1_error) + __pyx_tuple__55 = PyTuple_Pack(12, __pyx_n_s_self, __pyx_n_s_user_idx, __pyx_n_s_item_indices, __pyx_n_s_X_2, __pyx_n_s_most_cared_aspects_indices, __pyx_n_s_most_cared_X, __pyx_n_s_most_cared_Y, __pyx_n_s_explicit_scores, __pyx_n_s_known_item_scores, __pyx_n_s_all_item_scores, __pyx_n_s_item_scores, __pyx_n_s_item_rank); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(0, 468, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__55); __Pyx_GIVEREF(__pyx_tuple__55); - __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_rank, 468, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) __PYX_ERR(0, 468, __pyx_L1_error) + __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cornac_models_efm_recom_efm_pyx, __pyx_n_s_rank, 468, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) __PYX_ERR(0, 468, __pyx_L1_error) __pyx_tuple__57 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(0, 468, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__57); __Pyx_GIVEREF(__pyx_tuple__57); - - /* "View.MemoryView":286 - * return self.name - * - * cdef generic = Enum("") # <<<<<<<<<<<<<< - * cdef strided = Enum("") # default - * cdef indirect = Enum("") - */ - __pyx_tuple__58 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(2, 286, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__58); - __Pyx_GIVEREF(__pyx_tuple__58); - - /* "View.MemoryView":287 - * - * cdef generic = Enum("") - * cdef strided = Enum("") # default # <<<<<<<<<<<<<< - * cdef indirect = Enum("") - * - */ - __pyx_tuple__59 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(2, 287, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__59); - __Pyx_GIVEREF(__pyx_tuple__59); - - /* "View.MemoryView":288 - * cdef generic = Enum("") - * cdef strided = Enum("") # default - * cdef indirect = Enum("") # <<<<<<<<<<<<<< - * - * - */ - __pyx_tuple__60 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__60)) __PYX_ERR(2, 288, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__60); - __Pyx_GIVEREF(__pyx_tuple__60); - - /* "View.MemoryView":291 - * - * - * cdef contiguous = Enum("") # <<<<<<<<<<<<<< - * cdef indirect_contiguous = Enum("") - * - */ - __pyx_tuple__61 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(2, 291, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__61); - __Pyx_GIVEREF(__pyx_tuple__61); - - /* "View.MemoryView":292 - * - * cdef contiguous = Enum("") - * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< - * - * - */ - __pyx_tuple__62 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__62)) __PYX_ERR(2, 292, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__62); - __Pyx_GIVEREF(__pyx_tuple__62); - - /* "(tree fragment)":1 - * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - __pyx_tuple__63 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__63)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__63); - __Pyx_GIVEREF(__pyx_tuple__63); - __pyx_codeobj__64 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__63, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__64)) __PYX_ERR(2, 1, __pyx_L1_error) __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; __Pyx_RefNannyFinishContext(); return -1; } +/* #### Code section: init_constants ### */ -static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { - /* InitThreads.init */ - #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 -PyEval_InitThreads(); -#endif - -if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error) - - if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { + __pyx_umethod_PyDict_Type_values.type = (PyObject*)&PyDict_Type; + __pyx_umethod_PyDict_Type_values.method_name = &__pyx_n_s_values; + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); __pyx_float_5_0 = PyFloat_FromDouble(5.0); if (unlikely(!__pyx_float_5_0)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_float_0_01 = PyFloat_FromDouble(0.01); if (unlikely(!__pyx_float_0_01)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_float_0_85 = PyFloat_FromDouble(0.85); if (unlikely(!__pyx_float_0_85)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_22 = PyInt_FromLong(22); if (unlikely(!__pyx_int_22)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_40 = PyInt_FromLong(40); if (unlikely(!__pyx_int_40)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_60 = PyInt_FromLong(60); if (unlikely(!__pyx_int_60)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_100 = PyInt_FromLong(100); if (unlikely(!__pyx_int_100)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_112105877 = PyInt_FromLong(112105877L); if (unlikely(!__pyx_int_112105877)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_136983863 = PyInt_FromLong(136983863L); if (unlikely(!__pyx_int_136983863)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_184977713 = PyInt_FromLong(184977713L); if (unlikely(!__pyx_int_184977713)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(0, 1, __pyx_L1_error) return 0; __pyx_L1_error:; return -1; } +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + /* AssertionsEnabled.init */ + __Pyx_init_assertions_enabled(); + +if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error) + + /* NumpyImportArray.init */ + /* + * Cython has automatically inserted a call to _import_array since + * you didn't include one when you cimported numpy. To disable this + * add the line + * numpy._import_array + */ +#ifdef NPY_FEATURE_VERSION +#if !NO_IMPORT_ARRAY +if (unlikely(_import_array() == -1)) { + PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import " + "(auto-generated because you didn't call 'numpy.import_array()' after cimporting numpy; " + "use 'numpy._import_array' to disable if you are certain you don't need it)."); +} +#endif +#endif + +if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error) + + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_module ### */ static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ @@ -43690,6 +49506,7 @@ static int __Pyx_modinit_global_init_code(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); /*--- Global init code ---*/ + __pyx_collections_abc_Sequence = Py_None; Py_INCREF(Py_None); generic = Py_None; Py_INCREF(Py_None); strided = Py_None; Py_INCREF(Py_None); indirect = Py_None; Py_INCREF(Py_None); @@ -43717,6 +49534,7 @@ static int __Pyx_modinit_function_export_code(void) { static int __Pyx_modinit_type_init_code(void) { __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -43724,22 +49542,61 @@ static int __Pyx_modinit_type_init_code(void) { /*--- Type init code ---*/ __pyx_vtabptr_array = &__pyx_vtable_array; __pyx_vtable_array.get_memview = (PyObject *(*)(struct __pyx_array_obj *))__pyx_array_get_memview; - if (PyType_Ready(&__pyx_type___pyx_array) < 0) __PYX_ERR(2, 105, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type___pyx_array.tp_print = 0; + #if CYTHON_USE_TYPE_SPECS + __pyx_array_type = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type___pyx_array_spec, NULL); if (unlikely(!__pyx_array_type)) __PYX_ERR(1, 114, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + __pyx_array_type->tp_as_buffer = &__pyx_tp_as_buffer_array; + if (!__pyx_array_type->tp_as_buffer->bf_releasebuffer && __pyx_array_type->tp_base->tp_as_buffer && __pyx_array_type->tp_base->tp_as_buffer->bf_releasebuffer) { + __pyx_array_type->tp_as_buffer->bf_releasebuffer = __pyx_array_type->tp_base->tp_as_buffer->bf_releasebuffer; + } + #elif defined(Py_bf_getbuffer) && defined(Py_bf_releasebuffer) + /* PY_VERSION_HEX >= 0x03090000 || Py_LIMITED_API >= 0x030B0000 */ + #elif defined(_MSC_VER) + #pragma message ("The buffer protocol is not supported in the Limited C-API < 3.11.") + #else + #warning "The buffer protocol is not supported in the Limited C-API < 3.11." #endif - if (__Pyx_SetVtable(__pyx_type___pyx_array.tp_dict, __pyx_vtabptr_array) < 0) __PYX_ERR(2, 105, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_array) < 0) __PYX_ERR(2, 105, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type___pyx_array_spec, __pyx_array_type) < 0) __PYX_ERR(1, 114, __pyx_L1_error) + #else __pyx_array_type = &__pyx_type___pyx_array; - if (PyType_Ready(&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(2, 279, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type___pyx_MemviewEnum.tp_print = 0; #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_MemviewEnum.tp_dictoffset && __pyx_type___pyx_MemviewEnum.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type___pyx_MemviewEnum.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(2, 279, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_array_type) < 0) __PYX_ERR(1, 114, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_array_type->tp_print = 0; + #endif + if (__Pyx_SetVtable(__pyx_array_type, __pyx_vtabptr_array) < 0) __PYX_ERR(1, 114, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_MergeVtables(__pyx_array_type) < 0) __PYX_ERR(1, 114, __pyx_L1_error) + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_array_type) < 0) __PYX_ERR(1, 114, __pyx_L1_error) + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_MemviewEnum_type = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type___pyx_MemviewEnum_spec, NULL); if (unlikely(!__pyx_MemviewEnum_type)) __PYX_ERR(1, 302, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type___pyx_MemviewEnum_spec, __pyx_MemviewEnum_type) < 0) __PYX_ERR(1, 302, __pyx_L1_error) + #else __pyx_MemviewEnum_type = &__pyx_type___pyx_MemviewEnum; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_MemviewEnum_type) < 0) __PYX_ERR(1, 302, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_MemviewEnum_type->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_MemviewEnum_type->tp_dictoffset && __pyx_MemviewEnum_type->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_MemviewEnum_type->tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_MemviewEnum_type) < 0) __PYX_ERR(1, 302, __pyx_L1_error) + #endif __pyx_vtabptr_memoryview = &__pyx_vtable_memoryview; __pyx_vtable_memoryview.get_item_pointer = (char *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_get_item_pointer; __pyx_vtable_memoryview.is_slice = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_is_slice; @@ -43748,34 +49605,85 @@ static int __Pyx_modinit_type_init_code(void) { __pyx_vtable_memoryview.setitem_indexed = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_indexed; __pyx_vtable_memoryview.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryview_convert_item_to_object; __pyx_vtable_memoryview.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryview_assign_item_from_object; - if (PyType_Ready(&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(2, 330, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type___pyx_memoryview.tp_print = 0; + __pyx_vtable_memoryview._get_base = (PyObject *(*)(struct __pyx_memoryview_obj *))__pyx_memoryview__get_base; + #if CYTHON_USE_TYPE_SPECS + __pyx_memoryview_type = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type___pyx_memoryview_spec, NULL); if (unlikely(!__pyx_memoryview_type)) __PYX_ERR(1, 337, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + __pyx_memoryview_type->tp_as_buffer = &__pyx_tp_as_buffer_memoryview; + if (!__pyx_memoryview_type->tp_as_buffer->bf_releasebuffer && __pyx_memoryview_type->tp_base->tp_as_buffer && __pyx_memoryview_type->tp_base->tp_as_buffer->bf_releasebuffer) { + __pyx_memoryview_type->tp_as_buffer->bf_releasebuffer = __pyx_memoryview_type->tp_base->tp_as_buffer->bf_releasebuffer; + } + #elif defined(Py_bf_getbuffer) && defined(Py_bf_releasebuffer) + /* PY_VERSION_HEX >= 0x03090000 || Py_LIMITED_API >= 0x030B0000 */ + #elif defined(_MSC_VER) + #pragma message ("The buffer protocol is not supported in the Limited C-API < 3.11.") + #else + #warning "The buffer protocol is not supported in the Limited C-API < 3.11." #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryview.tp_dictoffset && __pyx_type___pyx_memoryview.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type___pyx_memoryview.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (__Pyx_SetVtable(__pyx_type___pyx_memoryview.tp_dict, __pyx_vtabptr_memoryview) < 0) __PYX_ERR(2, 330, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(2, 330, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type___pyx_memoryview_spec, __pyx_memoryview_type) < 0) __PYX_ERR(1, 337, __pyx_L1_error) + #else __pyx_memoryview_type = &__pyx_type___pyx_memoryview; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_memoryview_type) < 0) __PYX_ERR(1, 337, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_memoryview_type->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_memoryview_type->tp_dictoffset && __pyx_memoryview_type->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_memoryview_type->tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + #endif + if (__Pyx_SetVtable(__pyx_memoryview_type, __pyx_vtabptr_memoryview) < 0) __PYX_ERR(1, 337, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_MergeVtables(__pyx_memoryview_type) < 0) __PYX_ERR(1, 337, __pyx_L1_error) + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_memoryview_type) < 0) __PYX_ERR(1, 337, __pyx_L1_error) + #endif __pyx_vtabptr__memoryviewslice = &__pyx_vtable__memoryviewslice; __pyx_vtable__memoryviewslice.__pyx_base = *__pyx_vtabptr_memoryview; __pyx_vtable__memoryviewslice.__pyx_base.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryviewslice_convert_item_to_object; __pyx_vtable__memoryviewslice.__pyx_base.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryviewslice_assign_item_from_object; - __pyx_type___pyx_memoryviewslice.tp_base = __pyx_memoryview_type; - if (PyType_Ready(&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(2, 965, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type___pyx_memoryviewslice.tp_print = 0; + __pyx_vtable__memoryviewslice.__pyx_base._get_base = (PyObject *(*)(struct __pyx_memoryview_obj *))__pyx_memoryviewslice__get_base; + #if CYTHON_USE_TYPE_SPECS + __pyx_t_1 = PyTuple_Pack(1, (PyObject *)__pyx_memoryview_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 952, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_memoryviewslice_type = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type___pyx_memoryviewslice_spec, __pyx_t_1); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_memoryviewslice_type)) __PYX_ERR(1, 952, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type___pyx_memoryviewslice_spec, __pyx_memoryviewslice_type) < 0) __PYX_ERR(1, 952, __pyx_L1_error) + #else + __pyx_memoryviewslice_type = &__pyx_type___pyx_memoryviewslice; #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryviewslice.tp_dictoffset && __pyx_type___pyx_memoryviewslice.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type___pyx_memoryviewslice.tp_getattro = __Pyx_PyObject_GenericGetAttr; + #if !CYTHON_COMPILING_IN_LIMITED_API + __pyx_memoryviewslice_type->tp_base = __pyx_memoryview_type; + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_memoryviewslice_type) < 0) __PYX_ERR(1, 952, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_memoryviewslice_type->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_memoryviewslice_type->tp_dictoffset && __pyx_memoryviewslice_type->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_memoryviewslice_type->tp_getattro = __Pyx_PyObject_GenericGetAttr; } - if (__Pyx_SetVtable(__pyx_type___pyx_memoryviewslice.tp_dict, __pyx_vtabptr__memoryviewslice) < 0) __PYX_ERR(2, 965, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(2, 965, __pyx_L1_error) - __pyx_memoryviewslice_type = &__pyx_type___pyx_memoryviewslice; + #endif + if (__Pyx_SetVtable(__pyx_memoryviewslice_type, __pyx_vtabptr__memoryviewslice) < 0) __PYX_ERR(1, 952, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_MergeVtables(__pyx_memoryviewslice_type) < 0) __PYX_ERR(1, 952, __pyx_L1_error) + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_memoryviewslice_type) < 0) __PYX_ERR(1, 952, __pyx_L1_error) + #endif __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); __Pyx_RefNannyFinishContext(); return -1; } @@ -43790,47 +49698,33 @@ static int __Pyx_modinit_type_import_code(void) { /*--- Type import code ---*/ __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 9, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", + __pyx_ptype_7cpython_4type_type = __Pyx_ImportType_3_0_0(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 - sizeof(PyTypeObject), + sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyTypeObject), + #elif CYTHON_COMPILING_IN_LIMITED_API + sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyTypeObject), #else - sizeof(PyHeapTypeObject), + sizeof(PyHeapTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyHeapTypeObject), #endif - __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(3, 9, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyImport_ImportModule("numpy"); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 200, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_5numpy_dtype = __Pyx_ImportType(__pyx_t_1, "numpy", "dtype", sizeof(PyArray_Descr), __Pyx_ImportType_CheckSize_Ignore); - if (!__pyx_ptype_5numpy_dtype) __PYX_ERR(1, 200, __pyx_L1_error) - __pyx_ptype_5numpy_flatiter = __Pyx_ImportType(__pyx_t_1, "numpy", "flatiter", sizeof(PyArrayIterObject), __Pyx_ImportType_CheckSize_Ignore); - if (!__pyx_ptype_5numpy_flatiter) __PYX_ERR(1, 223, __pyx_L1_error) - __pyx_ptype_5numpy_broadcast = __Pyx_ImportType(__pyx_t_1, "numpy", "broadcast", sizeof(PyArrayMultiIterObject), __Pyx_ImportType_CheckSize_Ignore); - if (!__pyx_ptype_5numpy_broadcast) __PYX_ERR(1, 227, __pyx_L1_error) - __pyx_ptype_5numpy_ndarray = __Pyx_ImportType(__pyx_t_1, "numpy", "ndarray", sizeof(PyArrayObject), __Pyx_ImportType_CheckSize_Ignore); - if (!__pyx_ptype_5numpy_ndarray) __PYX_ERR(1, 239, __pyx_L1_error) - __pyx_ptype_5numpy_generic = __Pyx_ImportType(__pyx_t_1, "numpy", "generic", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_5numpy_generic) __PYX_ERR(1, 771, __pyx_L1_error) - __pyx_ptype_5numpy_number = __Pyx_ImportType(__pyx_t_1, "numpy", "number", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_5numpy_number) __PYX_ERR(1, 773, __pyx_L1_error) - __pyx_ptype_5numpy_integer = __Pyx_ImportType(__pyx_t_1, "numpy", "integer", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_5numpy_integer) __PYX_ERR(1, 775, __pyx_L1_error) - __pyx_ptype_5numpy_signedinteger = __Pyx_ImportType(__pyx_t_1, "numpy", "signedinteger", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_5numpy_signedinteger) __PYX_ERR(1, 777, __pyx_L1_error) - __pyx_ptype_5numpy_unsignedinteger = __Pyx_ImportType(__pyx_t_1, "numpy", "unsignedinteger", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_5numpy_unsignedinteger) __PYX_ERR(1, 779, __pyx_L1_error) - __pyx_ptype_5numpy_inexact = __Pyx_ImportType(__pyx_t_1, "numpy", "inexact", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_5numpy_inexact) __PYX_ERR(1, 781, __pyx_L1_error) - __pyx_ptype_5numpy_floating = __Pyx_ImportType(__pyx_t_1, "numpy", "floating", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_5numpy_floating) __PYX_ERR(1, 783, __pyx_L1_error) - __pyx_ptype_5numpy_complexfloating = __Pyx_ImportType(__pyx_t_1, "numpy", "complexfloating", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_5numpy_complexfloating) __PYX_ERR(1, 785, __pyx_L1_error) - __pyx_ptype_5numpy_flexible = __Pyx_ImportType(__pyx_t_1, "numpy", "flexible", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_5numpy_flexible) __PYX_ERR(1, 787, __pyx_L1_error) - __pyx_ptype_5numpy_character = __Pyx_ImportType(__pyx_t_1, "numpy", "character", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_5numpy_character) __PYX_ERR(1, 789, __pyx_L1_error) - __pyx_ptype_5numpy_ufunc = __Pyx_ImportType(__pyx_t_1, "numpy", "ufunc", sizeof(PyUFuncObject), __Pyx_ImportType_CheckSize_Ignore); - if (!__pyx_ptype_5numpy_ufunc) __PYX_ERR(1, 827, __pyx_L1_error) + __Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(3, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyImport_ImportModule("numpy"); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_5numpy_dtype = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "dtype", sizeof(PyArray_Descr), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyArray_Descr),__Pyx_ImportType_CheckSize_Ignore_3_0_0); if (!__pyx_ptype_5numpy_dtype) __PYX_ERR(2, 202, __pyx_L1_error) + __pyx_ptype_5numpy_flatiter = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "flatiter", sizeof(PyArrayIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyArrayIterObject),__Pyx_ImportType_CheckSize_Ignore_3_0_0); if (!__pyx_ptype_5numpy_flatiter) __PYX_ERR(2, 225, __pyx_L1_error) + __pyx_ptype_5numpy_broadcast = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "broadcast", sizeof(PyArrayMultiIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyArrayMultiIterObject),__Pyx_ImportType_CheckSize_Ignore_3_0_0); if (!__pyx_ptype_5numpy_broadcast) __PYX_ERR(2, 229, __pyx_L1_error) + __pyx_ptype_5numpy_ndarray = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "ndarray", sizeof(PyArrayObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyArrayObject),__Pyx_ImportType_CheckSize_Ignore_3_0_0); if (!__pyx_ptype_5numpy_ndarray) __PYX_ERR(2, 238, __pyx_L1_error) + __pyx_ptype_5numpy_generic = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "generic", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_generic) __PYX_ERR(2, 809, __pyx_L1_error) + __pyx_ptype_5numpy_number = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "number", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_number) __PYX_ERR(2, 811, __pyx_L1_error) + __pyx_ptype_5numpy_integer = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "integer", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_integer) __PYX_ERR(2, 813, __pyx_L1_error) + __pyx_ptype_5numpy_signedinteger = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "signedinteger", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_signedinteger) __PYX_ERR(2, 815, __pyx_L1_error) + __pyx_ptype_5numpy_unsignedinteger = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "unsignedinteger", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_unsignedinteger) __PYX_ERR(2, 817, __pyx_L1_error) + __pyx_ptype_5numpy_inexact = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "inexact", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_inexact) __PYX_ERR(2, 819, __pyx_L1_error) + __pyx_ptype_5numpy_floating = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "floating", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_floating) __PYX_ERR(2, 821, __pyx_L1_error) + __pyx_ptype_5numpy_complexfloating = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "complexfloating", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_complexfloating) __PYX_ERR(2, 823, __pyx_L1_error) + __pyx_ptype_5numpy_flexible = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "flexible", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_flexible) __PYX_ERR(2, 825, __pyx_L1_error) + __pyx_ptype_5numpy_character = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "character", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_0); if (!__pyx_ptype_5numpy_character) __PYX_ERR(2, 827, __pyx_L1_error) + __pyx_ptype_5numpy_ufunc = __Pyx_ImportType_3_0_0(__pyx_t_1, "numpy", "ufunc", sizeof(PyUFuncObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_0(PyUFuncObject),__Pyx_ImportType_CheckSize_Ignore_3_0_0); if (!__pyx_ptype_5numpy_ufunc) __PYX_ERR(2, 865, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_RefNannyFinishContext(); return 0; @@ -43858,8 +49752,8 @@ static int __Pyx_modinit_function_import_code(void) { /*--- Function import code ---*/ __pyx_t_1 = PyImport_ImportModule("scipy.linalg.cython_blas"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_ImportFunction(__pyx_t_1, "ddot", (void (**)(void))&__pyx_f_5scipy_6linalg_11cython_blas_ddot, "__pyx_t_5scipy_6linalg_11cython_blas_d (int *, __pyx_t_5scipy_6linalg_11cython_blas_d *, int *, __pyx_t_5scipy_6linalg_11cython_blas_d *, int *)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) - if (__Pyx_ImportFunction(__pyx_t_1, "sdot", (void (**)(void))&__pyx_f_5scipy_6linalg_11cython_blas_sdot, "__pyx_t_5scipy_6linalg_11cython_blas_s (int *, __pyx_t_5scipy_6linalg_11cython_blas_s *, int *, __pyx_t_5scipy_6linalg_11cython_blas_s *, int *)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_ImportFunction_3_0_0(__pyx_t_1, "ddot", (void (**)(void))&__pyx_f_5scipy_6linalg_11cython_blas_ddot, "__pyx_t_5scipy_6linalg_11cython_blas_d (int *, __pyx_t_5scipy_6linalg_11cython_blas_d *, int *, __pyx_t_5scipy_6linalg_11cython_blas_d *, int *)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_ImportFunction_3_0_0(__pyx_t_1, "sdot", (void (**)(void))&__pyx_f_5scipy_6linalg_11cython_blas_sdot, "__pyx_t_5scipy_6linalg_11cython_blas_s (int *, __pyx_t_5scipy_6linalg_11cython_blas_s *, int *, __pyx_t_5scipy_6linalg_11cython_blas_s *, int *)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_RefNannyFinishContext(); return 0; @@ -43870,6 +49764,55 @@ static int __Pyx_modinit_function_import_code(void) { } +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_recom_efm(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_recom_efm}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "recom_efm", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + #ifndef CYTHON_NO_PYINIT_EXPORT #define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC #elif PY_MAJOR_VERSION < 3 @@ -43920,12 +49863,21 @@ static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { } return 0; } -static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ PyObject *value = PyObject_GetAttrString(spec, from_name); int result = 0; if (likely(value)) { if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else result = PyDict_SetItemString(moddict, to_name, value); +#endif } Py_DECREF(value); } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { @@ -43935,8 +49887,9 @@ static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject } return result; } -static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); if (__Pyx_check_single_interpreter()) return NULL; if (__pyx_m) @@ -43946,8 +49899,12 @@ static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNU module = PyModule_NewObject(modname); Py_DECREF(modname); if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else moddict = PyModule_GetDict(module); if (unlikely(!moddict)) goto bad; +#endif if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; @@ -43963,12 +49920,21 @@ static CYTHON_SMALL_CODE int __pyx_pymod_exec_recom_efm(PyObject *__pyx_pyinit_m #endif #endif { + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; - static PyThread_type_lock __pyx_t_6[8]; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + static PyThread_type_lock __pyx_t_8[8]; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -43982,6 +49948,35 @@ static CYTHON_SMALL_CODE int __pyx_pymod_exec_recom_efm(PyObject *__pyx_pyinit_m #elif PY_MAJOR_VERSION >= 3 if (__pyx_m) return __Pyx_NewRef(__pyx_m); #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("recom_efm", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to recom_efm pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_b); + __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_cython_runtime); + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #if CYTHON_REFNANNY __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); if (!__Pyx_RefNanny) { @@ -44000,48 +49995,31 @@ if (!__Pyx_RefNanny) { __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) #ifdef __Pyx_CyFunction_USED - if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_Coroutine_USED - if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_AsyncGen_USED - if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_StopAsyncIteration_USED - if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif /*--- Library function declarations ---*/ /*--- Threads initialization code ---*/ #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS PyEval_InitThreads(); #endif - /*--- Module creation code ---*/ - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_m = __pyx_pyinit_module; - Py_INCREF(__pyx_m); - #else - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4("recom_efm", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_b); - __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_cython_runtime); - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) @@ -44049,30 +50027,543 @@ if (!__Pyx_RefNanny) { if (__pyx_module_is_main_cornac__models__efm__recom_efm) { if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) } - #if PY_MAJOR_VERSION >= 3 + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "cornac.models.efm.recom_efm")) { + if (unlikely((PyDict_SetItemString(modules, "cornac.models.efm.recom_efm", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely((__Pyx_modinit_type_init_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + if (unlikely((__Pyx_modinit_type_import_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_variable_import_code(); + if (unlikely((__Pyx_modinit_function_import_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "View.MemoryView":99 + * + * cdef object __pyx_collections_abc_Sequence "__pyx_collections_abc_Sequence" + * try: # <<<<<<<<<<<<<< + * if __import__("sys").version_info >= (3, 3): + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "View.MemoryView":100 + * cdef object __pyx_collections_abc_Sequence "__pyx_collections_abc_Sequence" + * try: + * if __import__("sys").version_info >= (3, 3): # <<<<<<<<<<<<<< + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence + * else: + */ + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin___import__, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 100, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_version_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 100, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_tuple__24, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 100, __pyx_L2_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(1, 100, __pyx_L2_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + + /* "View.MemoryView":101 + * try: + * if __import__("sys").version_info >= (3, 3): + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence # <<<<<<<<<<<<<< + * else: + * __pyx_collections_abc_Sequence = __import__("collections").Sequence + */ + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin___import__, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 101, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_abc); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 101, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_Sequence); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 101, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XGOTREF(__pyx_collections_abc_Sequence); + __Pyx_DECREF_SET(__pyx_collections_abc_Sequence, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":100 + * cdef object __pyx_collections_abc_Sequence "__pyx_collections_abc_Sequence" + * try: + * if __import__("sys").version_info >= (3, 3): # <<<<<<<<<<<<<< + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence + * else: + */ + goto __pyx_L8; + } + + /* "View.MemoryView":103 + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence + * else: + * __pyx_collections_abc_Sequence = __import__("collections").Sequence # <<<<<<<<<<<<<< + * except: + * + */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin___import__, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 103, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_Sequence); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 103, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XGOTREF(__pyx_collections_abc_Sequence); + __Pyx_DECREF_SET(__pyx_collections_abc_Sequence, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + __pyx_t_5 = 0; + } + __pyx_L8:; + + /* "View.MemoryView":99 + * + * cdef object __pyx_collections_abc_Sequence "__pyx_collections_abc_Sequence" + * try: # <<<<<<<<<<<<<< + * if __import__("sys").version_info >= (3, 3): + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L7_try_end; + __pyx_L2_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "View.MemoryView":104 + * else: + * __pyx_collections_abc_Sequence = __import__("collections").Sequence + * except: # <<<<<<<<<<<<<< + * + * __pyx_collections_abc_Sequence = None + */ + /*except:*/ { + __Pyx_AddTraceback("View.MemoryView", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_7) < 0) __PYX_ERR(1, 104, __pyx_L4_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_7); + + /* "View.MemoryView":106 + * except: + * + * __pyx_collections_abc_Sequence = None # <<<<<<<<<<<<<< + * + * + */ + __Pyx_INCREF(Py_None); + __Pyx_XGOTREF(__pyx_collections_abc_Sequence); + __Pyx_DECREF_SET(__pyx_collections_abc_Sequence, Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L3_exception_handled; + } + + /* "View.MemoryView":99 + * + * cdef object __pyx_collections_abc_Sequence "__pyx_collections_abc_Sequence" + * try: # <<<<<<<<<<<<<< + * if __import__("sys").version_info >= (3, 3): + * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence + */ + __pyx_L4_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L3_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L7_try_end:; + } + + /* "View.MemoryView":241 + * + * + * try: # <<<<<<<<<<<<<< + * count = __pyx_collections_abc_Sequence.count + * index = __pyx_collections_abc_Sequence.index + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_1); + /*try:*/ { + + /* "View.MemoryView":242 + * + * try: + * count = __pyx_collections_abc_Sequence.count # <<<<<<<<<<<<<< + * index = __pyx_collections_abc_Sequence.index + * except: + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_collections_abc_Sequence, __pyx_n_s_count); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 242, __pyx_L11_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_array_type->tp_dict, __pyx_n_s_count, __pyx_t_7) < 0) __PYX_ERR(1, 242, __pyx_L11_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + PyType_Modified(__pyx_array_type); + + /* "View.MemoryView":243 + * try: + * count = __pyx_collections_abc_Sequence.count + * index = __pyx_collections_abc_Sequence.index # <<<<<<<<<<<<<< + * except: + * pass + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_collections_abc_Sequence, __pyx_n_s_index); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 243, __pyx_L11_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_array_type->tp_dict, __pyx_n_s_index, __pyx_t_7) < 0) __PYX_ERR(1, 243, __pyx_L11_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + PyType_Modified(__pyx_array_type); + + /* "View.MemoryView":241 + * + * + * try: # <<<<<<<<<<<<<< + * count = __pyx_collections_abc_Sequence.count + * index = __pyx_collections_abc_Sequence.index + */ + } + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L16_try_end; + __pyx_L11_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "View.MemoryView":244 + * count = __pyx_collections_abc_Sequence.count + * index = __pyx_collections_abc_Sequence.index + * except: # <<<<<<<<<<<<<< + * pass + * + */ + /*except:*/ { + __Pyx_ErrRestore(0,0,0); + goto __pyx_L12_exception_handled; + } + __pyx_L12_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1); + __pyx_L16_try_end:; + } + + /* "View.MemoryView":309 + * return self.name + * + * cdef generic = Enum("") # <<<<<<<<<<<<<< + * cdef strided = Enum("") # default + * cdef indirect = Enum("") + */ + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 309, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XGOTREF(generic); + __Pyx_DECREF_SET(generic, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":310 + * + * cdef generic = Enum("") + * cdef strided = Enum("") # default # <<<<<<<<<<<<<< + * cdef indirect = Enum("") + * + */ + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 310, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XGOTREF(strided); + __Pyx_DECREF_SET(strided, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":311 + * cdef generic = Enum("") + * cdef strided = Enum("") # default + * cdef indirect = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 311, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XGOTREF(indirect); + __Pyx_DECREF_SET(indirect, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":314 + * + * + * cdef contiguous = Enum("") # <<<<<<<<<<<<<< + * cdef indirect_contiguous = Enum("") + * + */ + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 314, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XGOTREF(contiguous); + __Pyx_DECREF_SET(contiguous, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":315 + * + * cdef contiguous = Enum("") + * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 315, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XGOTREF(indirect_contiguous); + __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":323 + * + * + * cdef int __pyx_memoryview_thread_locks_used = 0 # <<<<<<<<<<<<<< + * cdef PyThread_type_lock[8] __pyx_memoryview_thread_locks = [ + * PyThread_allocate_lock(), + */ + __pyx_memoryview_thread_locks_used = 0; + + /* "View.MemoryView":324 + * + * cdef int __pyx_memoryview_thread_locks_used = 0 + * cdef PyThread_type_lock[8] __pyx_memoryview_thread_locks = [ # <<<<<<<<<<<<<< + * PyThread_allocate_lock(), + * PyThread_allocate_lock(), + */ + __pyx_t_8[0] = PyThread_allocate_lock(); + __pyx_t_8[1] = PyThread_allocate_lock(); + __pyx_t_8[2] = PyThread_allocate_lock(); + __pyx_t_8[3] = PyThread_allocate_lock(); + __pyx_t_8[4] = PyThread_allocate_lock(); + __pyx_t_8[5] = PyThread_allocate_lock(); + __pyx_t_8[6] = PyThread_allocate_lock(); + __pyx_t_8[7] = PyThread_allocate_lock(); + memcpy(&(__pyx_memoryview_thread_locks[0]), __pyx_t_8, sizeof(__pyx_memoryview_thread_locks[0]) * (8)); + + /* "View.MemoryView":982 + * + * + * try: # <<<<<<<<<<<<<< + * count = __pyx_collections_abc_Sequence.count + * index = __pyx_collections_abc_Sequence.index + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "View.MemoryView":983 + * + * try: + * count = __pyx_collections_abc_Sequence.count # <<<<<<<<<<<<<< + * index = __pyx_collections_abc_Sequence.index + * except: + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_collections_abc_Sequence, __pyx_n_s_count); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 983, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_count, __pyx_t_7) < 0) __PYX_ERR(1, 983, __pyx_L17_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + PyType_Modified(__pyx_memoryviewslice_type); + + /* "View.MemoryView":984 + * try: + * count = __pyx_collections_abc_Sequence.count + * index = __pyx_collections_abc_Sequence.index # <<<<<<<<<<<<<< + * except: + * pass + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_collections_abc_Sequence, __pyx_n_s_index); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 984, __pyx_L17_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_index, __pyx_t_7) < 0) __PYX_ERR(1, 984, __pyx_L17_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + PyType_Modified(__pyx_memoryviewslice_type); + + /* "View.MemoryView":982 + * + * + * try: # <<<<<<<<<<<<<< + * count = __pyx_collections_abc_Sequence.count + * index = __pyx_collections_abc_Sequence.index + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L22_try_end; + __pyx_L17_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "View.MemoryView":985 + * count = __pyx_collections_abc_Sequence.count + * index = __pyx_collections_abc_Sequence.index + * except: # <<<<<<<<<<<<<< + * pass + * + */ + /*except:*/ { + __Pyx_ErrRestore(0,0,0); + goto __pyx_L18_exception_handled; + } + __pyx_L18_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L22_try_end:; + } + + /* "View.MemoryView":988 + * pass + * + * try: # <<<<<<<<<<<<<< + * if __pyx_collections_abc_Sequence: + * + */ { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) - if (!PyDict_GetItemString(modules, "cornac.models.efm.recom_efm")) { - if (unlikely(PyDict_SetItemString(modules, "cornac.models.efm.recom_efm", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_1); + /*try:*/ { + + /* "View.MemoryView":989 + * + * try: + * if __pyx_collections_abc_Sequence: # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_collections_abc_Sequence); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(1, 989, __pyx_L23_error) + if (__pyx_t_6) { + + /* "View.MemoryView":993 + * + * + * __pyx_collections_abc_Sequence.register(_memoryviewslice) # <<<<<<<<<<<<<< + * __pyx_collections_abc_Sequence.register(array) + * except: + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_collections_abc_Sequence, __pyx_n_s_register); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 993, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_7, ((PyObject *)__pyx_memoryviewslice_type)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 993, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "View.MemoryView":994 + * + * __pyx_collections_abc_Sequence.register(_memoryviewslice) + * __pyx_collections_abc_Sequence.register(array) # <<<<<<<<<<<<<< + * except: + * pass # ignore failure, it's a minor issue + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_collections_abc_Sequence, __pyx_n_s_register); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 994, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_array_type)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 994, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "View.MemoryView":989 + * + * try: + * if __pyx_collections_abc_Sequence: # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":988 + * pass + * + * try: # <<<<<<<<<<<<<< + * if __pyx_collections_abc_Sequence: + * + */ } + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L28_try_end; + __pyx_L23_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "View.MemoryView":995 + * __pyx_collections_abc_Sequence.register(_memoryviewslice) + * __pyx_collections_abc_Sequence.register(array) + * except: # <<<<<<<<<<<<<< + * pass # ignore failure, it's a minor issue + * + */ + /*except:*/ { + __Pyx_ErrRestore(0,0,0); + goto __pyx_L24_exception_handled; + } + __pyx_L24_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1); + __pyx_L28_try_end:; } - #endif - /*--- Builtin init code ---*/ - if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - /*--- Constants init code ---*/ - if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - /*--- Global type/function init code ---*/ - (void)__Pyx_modinit_global_init_code(); - (void)__Pyx_modinit_variable_export_code(); - (void)__Pyx_modinit_function_export_code(); - if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - if (unlikely(__Pyx_modinit_type_import_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - (void)__Pyx_modinit_variable_import_code(); - if (unlikely(__Pyx_modinit_function_import_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - /*--- Execution code ---*/ - #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) - if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif + + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_7 = PyCFunction_NewEx(&__pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum, NULL, __pyx_n_s_View_MemoryView); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Enum, __pyx_t_7) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "cornac/models/efm/recom_efm.pyx":18 * # cython: language_level=3 @@ -44081,10 +50572,10 @@ if (!__Pyx_RefNanny) { * from collections import Counter, OrderedDict * */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_multiprocessing, 0, 0); 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_multiprocessing, __pyx_t_1) < 0) __PYX_ERR(0, 18, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_multiprocessing, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_multiprocessing, __pyx_t_7) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "cornac/models/efm/recom_efm.pyx":19 * @@ -44093,26 +50584,26 @@ if (!__Pyx_RefNanny) { * * cimport cython */ - __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_n_s_Counter); __Pyx_GIVEREF(__pyx_n_s_Counter); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_Counter); + PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_Counter); __Pyx_INCREF(__pyx_n_s_OrderedDict); __Pyx_GIVEREF(__pyx_n_s_OrderedDict); - PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_OrderedDict); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_collections, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __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_Counter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_Counter, __pyx_t_1) < 0) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_OrderedDict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_OrderedDict, __pyx_t_1) < 0) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyList_SET_ITEM(__pyx_t_7, 1, __pyx_n_s_OrderedDict); + __pyx_t_4 = __Pyx_Import(__pyx_n_s_collections, __pyx_t_7, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_Counter); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Counter, __pyx_t_7) < 0) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_OrderedDict); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_OrderedDict, __pyx_t_7) < 0) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "cornac/models/efm/recom_efm.pyx":26 * from libc.math cimport sqrt @@ -44121,10 +50612,10 @@ if (!__Pyx_RefNanny) { * cimport numpy as np * import scipy.sparse as sp */ - __pyx_t_2 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_2) < 0) __PYX_ERR(0, 26, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_4) < 0) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "cornac/models/efm/recom_efm.pyx":28 * import numpy as np @@ -44133,16 +50624,10 @@ if (!__Pyx_RefNanny) { * from scipy.linalg.cython_blas cimport sdot, ddot * */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 28, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s__34); - __Pyx_GIVEREF(__pyx_n_s__34); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s__34); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_scipy_sparse, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sp, __pyx_t_1) < 0) __PYX_ERR(0, 28, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = __Pyx_ImportDottedModule(__pyx_n_s_scipy_sparse, __pyx_tuple__34); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_sp, __pyx_t_4) < 0) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "cornac/models/efm/recom_efm.pyx":31 * from scipy.linalg.cython_blas cimport sdot, ddot @@ -44151,19 +50636,19 @@ if (!__Pyx_RefNanny) { * from ...exception import ScoreException * from ...utils.common import intersects */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_Recommender); __Pyx_GIVEREF(__pyx_n_s_Recommender); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_Recommender); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_recommender, __pyx_t_1, 2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __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_Recommender); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_Recommender, __pyx_t_1) < 0) __PYX_ERR(0, 31, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_Recommender); + __pyx_t_7 = __Pyx_Import(__pyx_n_s_recommender, __pyx_t_4, 2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_Recommender); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Recommender, __pyx_t_4) < 0) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "cornac/models/efm/recom_efm.pyx":32 * @@ -44172,19 +50657,19 @@ if (!__Pyx_RefNanny) { * from ...utils.common import intersects * from ...utils import get_rng */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_n_s_ScoreException); __Pyx_GIVEREF(__pyx_n_s_ScoreException); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_ScoreException); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_exception, __pyx_t_2, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __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_ScoreException); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_ScoreException, __pyx_t_2) < 0) __PYX_ERR(0, 32, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_ScoreException); + __pyx_t_4 = __Pyx_Import(__pyx_n_s_exception, __pyx_t_7, 3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_ScoreException); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ScoreException, __pyx_t_7) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "cornac/models/efm/recom_efm.pyx":33 * from ..recommender import Recommender @@ -44193,19 +50678,19 @@ if (!__Pyx_RefNanny) { * from ...utils import get_rng * from ...utils.init_utils import uniform */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 33, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_intersects); __Pyx_GIVEREF(__pyx_n_s_intersects); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_intersects); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_utils_common, __pyx_t_1, 3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __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_intersects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 33, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_intersects, __pyx_t_1) < 0) __PYX_ERR(0, 33, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_intersects); + __pyx_t_7 = __Pyx_Import(__pyx_n_s_utils_common, __pyx_t_4, 3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_intersects); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_intersects, __pyx_t_4) < 0) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "cornac/models/efm/recom_efm.pyx":34 * from ...exception import ScoreException @@ -44214,19 +50699,19 @@ if (!__Pyx_RefNanny) { * from ...utils.init_utils import uniform * */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_n_s_get_rng); __Pyx_GIVEREF(__pyx_n_s_get_rng); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_get_rng); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_utils, __pyx_t_2, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __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_rng); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_rng, __pyx_t_2) < 0) __PYX_ERR(0, 34, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_get_rng); + __pyx_t_4 = __Pyx_Import(__pyx_n_s_utils, __pyx_t_7, 3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_get_rng); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_rng, __pyx_t_7) < 0) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "cornac/models/efm/recom_efm.pyx":35 * from ...utils.common import intersects @@ -44235,19 +50720,19 @@ if (!__Pyx_RefNanny) { * * */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_uniform); __Pyx_GIVEREF(__pyx_n_s_uniform); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_uniform); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_utils_init_utils, __pyx_t_1, 3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __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_uniform); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_uniform, __pyx_t_1) < 0) __PYX_ERR(0, 35, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_uniform); + __pyx_t_7 = __Pyx_Import(__pyx_n_s_utils_init_utils, __pyx_t_4, 3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_uniform); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_uniform, __pyx_t_4) < 0) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "cornac/models/efm/recom_efm.pyx":46 * @@ -44256,17 +50741,23 @@ if (!__Pyx_RefNanny) { * """Explict Factor Models * */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Recommender); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 46, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __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_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 46, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_1, __pyx_n_s_EFM, __pyx_n_s_EFM, (PyObject *) NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_kp_s_Explict_Factor_Models_Parameters); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 46, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_Recommender); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_5 = __Pyx_CalculateMetaclass(NULL, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_9 = __Pyx_Py3MetaclassPrepare(__pyx_t_5, __pyx_t_7, __pyx_n_s_EFM, __pyx_n_s_EFM, (PyObject *) NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_kp_s_Explict_Factor_Models_Parameters); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + if (__pyx_t_7 != __pyx_t_4) { + if (unlikely((PyDict_SetItemString(__pyx_t_9, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(0, 46, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "cornac/models/efm/recom_efm.pyx":129 * """ @@ -44278,7 +50769,7 @@ if (!__Pyx_RefNanny) { __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_1__init__, 0, __pyx_n_s_EFM___init, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 129, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__37); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_init, __pyx_t_4) < 0) __PYX_ERR(0, 129, __pyx_L1_error) + if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_n_s_init, __pyx_t_4) < 0) __PYX_ERR(0, 129, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "cornac/models/efm/recom_efm.pyx":166 @@ -44290,7 +50781,7 @@ if (!__Pyx_RefNanny) { */ __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_3_init, 0, __pyx_n_s_EFM__init, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__39)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 166, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_init_2, __pyx_t_4) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_n_s_init_2, __pyx_t_4) < 0) __PYX_ERR(0, 166, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "cornac/models/efm/recom_efm.pyx":186 @@ -44303,56 +50794,62 @@ if (!__Pyx_RefNanny) { __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_5fit, 0, __pyx_n_s_EFM_fit, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__41)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__42); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_fit, __pyx_t_4) < 0) __PYX_ERR(0, 186, __pyx_L1_error) + if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_n_s_fit, __pyx_t_4) < 0) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "cornac/models/efm/recom_efm.pyx":230 - * @cython.boundscheck(False) + /* "cornac/models/efm/recom_efm.pyx":228 + * + * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< * @cython.wraparound(False) - * def _fit_efm(self, int num_threads, # <<<<<<<<<<<<<< - * floating[:] A, integral[:] A_uids, integral[:] A_iids, integral[:] A_user_counts, integral[:] A_item_counts, - * floating[:] X, integral[:] X_uids, integral[:] X_aids, integral[:] X_user_counts, integral[:] X_aspect_counts, + * def _fit_efm(self, int num_threads, */ - __pyx_t_4 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 230, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __pyx_FusedFunction_New(&__pyx_fuse_0_0__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_19_fit_efm, 0, __pyx_n_s_EFM__fit_efm, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_empty_tuple); - if (PyDict_SetItem(__pyx_t_4, __pyx_kp_s_float_short, __pyx_t_5) < 0) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __pyx_FusedFunction_New(&__pyx_fuse_0_1__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_21_fit_efm, 0, __pyx_n_s_EFM__fit_efm, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_empty_tuple); - if (PyDict_SetItem(__pyx_t_4, __pyx_kp_s_float_int, __pyx_t_5) < 0) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __pyx_FusedFunction_New(&__pyx_fuse_0_2__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_23_fit_efm, 0, __pyx_n_s_EFM__fit_efm, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_empty_tuple); - if (PyDict_SetItem(__pyx_t_4, __pyx_kp_s_float_long, __pyx_t_5) < 0) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __pyx_FusedFunction_New(&__pyx_fuse_1_0__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_25_fit_efm, 0, __pyx_n_s_EFM__fit_efm, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_empty_tuple); - if (PyDict_SetItem(__pyx_t_4, __pyx_kp_s_double_short, __pyx_t_5) < 0) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __pyx_FusedFunction_New(&__pyx_fuse_1_1__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_27_fit_efm, 0, __pyx_n_s_EFM__fit_efm, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_empty_tuple); - if (PyDict_SetItem(__pyx_t_4, __pyx_kp_s_double_int, __pyx_t_5) < 0) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __pyx_FusedFunction_New(&__pyx_fuse_1_2__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_29_fit_efm, 0, __pyx_n_s_EFM__fit_efm, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_empty_tuple); - if (PyDict_SetItem(__pyx_t_4, __pyx_kp_s_double_long, __pyx_t_5) < 0) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __pyx_FusedFunction_New(&__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_7_fit_efm, 0, __pyx_n_s_EFM__fit_efm, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_empty_tuple); - ((__pyx_FusedFunctionObject *) __pyx_t_5)->__signatures__ = __pyx_t_4; + __pyx_t_10 = __pyx_FusedFunction_New(&__pyx_fuse_0_0__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_19_fit_efm, 0, __pyx_n_s_EFM__fit_efm, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_10, __pyx_empty_tuple); + if (PyDict_SetItem(__pyx_t_4, __pyx_kp_s_float_short, __pyx_t_10) < 0) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __pyx_FusedFunction_New(&__pyx_fuse_0_1__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_21_fit_efm, 0, __pyx_n_s_EFM__fit_efm, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_10, __pyx_empty_tuple); + if (PyDict_SetItem(__pyx_t_4, __pyx_kp_s_float_int, __pyx_t_10) < 0) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __pyx_FusedFunction_New(&__pyx_fuse_0_2__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_23_fit_efm, 0, __pyx_n_s_EFM__fit_efm, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_10, __pyx_empty_tuple); + if (PyDict_SetItem(__pyx_t_4, __pyx_kp_s_float_long, __pyx_t_10) < 0) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __pyx_FusedFunction_New(&__pyx_fuse_1_0__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_25_fit_efm, 0, __pyx_n_s_EFM__fit_efm, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_10, __pyx_empty_tuple); + if (PyDict_SetItem(__pyx_t_4, __pyx_kp_s_double_short, __pyx_t_10) < 0) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __pyx_FusedFunction_New(&__pyx_fuse_1_1__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_27_fit_efm, 0, __pyx_n_s_EFM__fit_efm, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_10, __pyx_empty_tuple); + if (PyDict_SetItem(__pyx_t_4, __pyx_kp_s_double_int, __pyx_t_10) < 0) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __pyx_FusedFunction_New(&__pyx_fuse_1_2__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_29_fit_efm, 0, __pyx_n_s_EFM__fit_efm, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_10, __pyx_empty_tuple); + if (PyDict_SetItem(__pyx_t_4, __pyx_kp_s_double_long, __pyx_t_10) < 0) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __pyx_FusedFunction_New(&__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_7_fit_efm, 0, __pyx_n_s_EFM__fit_efm, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + if (!__Pyx_CyFunction_InitDefaults(__pyx_t_10, sizeof(__pyx_defaults), 1)) __PYX_ERR(0, 228, __pyx_L1_error) + __pyx_t_11 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_10)->__pyx_arg__fused_sigindex = __pyx_t_11; + __Pyx_GIVEREF(__pyx_t_11); + __pyx_t_11 = 0; + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_10, __pyx_empty_tuple); + ((__pyx_FusedFunctionObject *) __pyx_t_10)->__signatures__ = __pyx_t_4; __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_fit_efm, __pyx_t_5) < 0) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_n_s_fit_efm, __pyx_t_10) < 0) __PYX_ERR(0, 228, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; /* "cornac/models/efm/recom_efm.pyx":360 * print('Optimization finished!') @@ -44361,10 +50858,10 @@ if (!__Pyx_RefNanny) { * sentiment = self.train_set.sentiment * ratings = [] */ - __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_9_build_matrices, 0, __pyx_n_s_EFM__build_matrices, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 360, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_build_matrices, __pyx_t_5) < 0) __PYX_ERR(0, 360, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_10 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_9_build_matrices, 0, __pyx_n_s_EFM__build_matrices, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 360, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_n_s_build_matrices, __pyx_t_10) < 0) __PYX_ERR(0, 360, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; /* "cornac/models/efm/recom_efm.pyx":433 * return A, X, Y @@ -44373,10 +50870,10 @@ if (!__Pyx_RefNanny) { * return 1 + (self.rating_scale - 1) * (2 / (1 + np.exp(-count)) - 1) * */ - __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_11_compute_attention_score, 0, __pyx_n_s_EFM__compute_attention_score, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 433, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_compute_attention_score, __pyx_t_5) < 0) __PYX_ERR(0, 433, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_10 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_11_compute_attention_score, 0, __pyx_n_s_EFM__compute_attention_score, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_n_s_compute_attention_score, __pyx_t_10) < 0) __PYX_ERR(0, 433, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; /* "cornac/models/efm/recom_efm.pyx":436 * return 1 + (self.rating_scale - 1) * (2 / (1 + np.exp(-count)) - 1) @@ -44385,10 +50882,10 @@ if (!__Pyx_RefNanny) { * return 1 + (self.rating_scale - 1) / (1 + np.exp(-sentiment)) * */ - __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_13_compute_quality_score, 0, __pyx_n_s_EFM__compute_quality_score, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 436, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_compute_quality_score, __pyx_t_5) < 0) __PYX_ERR(0, 436, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_10 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_13_compute_quality_score, 0, __pyx_n_s_EFM__compute_quality_score, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 436, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_n_s_compute_quality_score, __pyx_t_10) < 0) __PYX_ERR(0, 436, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; /* "cornac/models/efm/recom_efm.pyx":439 * return 1 + (self.rating_scale - 1) / (1 + np.exp(-sentiment)) @@ -44397,11 +50894,11 @@ if (!__Pyx_RefNanny) { * """Predict the scores/ratings of a user for an item. * */ - __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_15score, 0, __pyx_n_s_EFM_score, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__53)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 439, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_tuple__54); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_score, __pyx_t_5) < 0) __PYX_ERR(0, 439, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_10 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_15score, 0, __pyx_n_s_EFM_score, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__53)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_10, __pyx_tuple__54); + if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_n_s_score, __pyx_t_10) < 0) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; /* "cornac/models/efm/recom_efm.pyx":468 * return item_score @@ -44410,11 +50907,11 @@ if (!__Pyx_RefNanny) { * """Rank all test items for a given user. * */ - __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_17rank, 0, __pyx_n_s_EFM_rank, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__56)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 468, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_tuple__57); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_rank, __pyx_t_5) < 0) __PYX_ERR(0, 468, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_10 = __Pyx_CyFunction_New(&__pyx_mdef_6cornac_6models_3efm_9recom_efm_3EFM_17rank, 0, __pyx_n_s_EFM_rank, NULL, __pyx_n_s_cornac_models_efm_recom_efm, __pyx_d, ((PyObject *)__pyx_codeobj__56)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 468, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_10, __pyx_tuple__57); + if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_n_s_rank, __pyx_t_10) < 0) __PYX_ERR(0, 468, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; /* "cornac/models/efm/recom_efm.pyx":46 * @@ -44423,191 +50920,49 @@ if (!__Pyx_RefNanny) { * """Explict Factor Models * */ - __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_EFM, __pyx_t_1, __pyx_t_3, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 46, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_EFM, __pyx_t_5) < 0) __PYX_ERR(0, 46, __pyx_L1_error) + __pyx_t_10 = __Pyx_Py3ClassCreate(__pyx_t_5, __pyx_n_s_EFM, __pyx_t_7, __pyx_t_9, NULL, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_EFM, __pyx_t_10) < 0) __PYX_ERR(0, 46, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "cornac/models/efm/recom_efm.pyx":1 * # Copyright 2018 The Cornac Authors. All Rights Reserved. # <<<<<<<<<<<<<< * # * # Licensed under the Apache License, Version 2.0 (the "License"); */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "View.MemoryView":209 - * info.obj = self - * - * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< - * - * def __dealloc__(array self): - */ - __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_array_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 209, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem((PyObject *)__pyx_array_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(2, 209, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - PyType_Modified(__pyx_array_type); - - /* "View.MemoryView":286 - * return self.name - * - * cdef generic = Enum("") # <<<<<<<<<<<<<< - * cdef strided = Enum("") # default - * cdef indirect = Enum("") - */ - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__58, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 286, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(generic); - __Pyx_DECREF_SET(generic, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "View.MemoryView":287 - * - * cdef generic = Enum("") - * cdef strided = Enum("") # default # <<<<<<<<<<<<<< - * cdef indirect = Enum("") - * - */ - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__59, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 287, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(strided); - __Pyx_DECREF_SET(strided, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "View.MemoryView":288 - * cdef generic = Enum("") - * cdef strided = Enum("") # default - * cdef indirect = Enum("") # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__60, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 288, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(indirect); - __Pyx_DECREF_SET(indirect, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "View.MemoryView":291 - * - * - * cdef contiguous = Enum("") # <<<<<<<<<<<<<< - * cdef indirect_contiguous = Enum("") - * - */ - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__61, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 291, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(contiguous); - __Pyx_DECREF_SET(contiguous, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "View.MemoryView":292 - * - * cdef contiguous = Enum("") - * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__62, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 292, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(indirect_contiguous); - __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "View.MemoryView":316 - * - * DEF THREAD_LOCKS_PREALLOCATED = 8 - * cdef int __pyx_memoryview_thread_locks_used = 0 # <<<<<<<<<<<<<< - * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ - * PyThread_allocate_lock(), - */ - __pyx_memoryview_thread_locks_used = 0; - - /* "View.MemoryView":317 - * DEF THREAD_LOCKS_PREALLOCATED = 8 - * cdef int __pyx_memoryview_thread_locks_used = 0 - * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ # <<<<<<<<<<<<<< - * PyThread_allocate_lock(), - * PyThread_allocate_lock(), - */ - __pyx_t_6[0] = PyThread_allocate_lock(); - __pyx_t_6[1] = PyThread_allocate_lock(); - __pyx_t_6[2] = PyThread_allocate_lock(); - __pyx_t_6[3] = PyThread_allocate_lock(); - __pyx_t_6[4] = PyThread_allocate_lock(); - __pyx_t_6[5] = PyThread_allocate_lock(); - __pyx_t_6[6] = PyThread_allocate_lock(); - __pyx_t_6[7] = PyThread_allocate_lock(); - memcpy(&(__pyx_memoryview_thread_locks[0]), __pyx_t_6, sizeof(__pyx_memoryview_thread_locks[0]) * (8)); - - /* "View.MemoryView":549 - * info.obj = self - * - * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 549, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem((PyObject *)__pyx_memoryview_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(2, 549, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - PyType_Modified(__pyx_memoryview_type); - - /* "View.MemoryView":995 - * return self.from_object - * - * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 995, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem((PyObject *)__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(2, 995, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - PyType_Modified(__pyx_memoryviewslice_type); - - /* "(tree fragment)":1 - * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum, NULL, __pyx_n_s_View_MemoryView); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Enum, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "(tree fragment)":11 - * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.name = __pyx_state[0] - * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): - */ + __pyx_t_7 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_7) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /*--- Wrapped vars 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_4); __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); if (__pyx_m) { - if (__pyx_d) { + if (__pyx_d && stringtab_initialized) { __Pyx_AddTraceback("init cornac.models.efm.recom_efm", __pyx_clineno, __pyx_lineno, __pyx_filename); } + #if !CYTHON_USE_MODULE_STATE Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_ImportError, "init cornac.models.efm.recom_efm"); } @@ -44621,656 +50976,586 @@ if (!__Pyx_RefNanny) { return; #endif } - -/* --- Runtime support code --- */ -/* Refnanny */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule(modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, "RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif - -/* PyObjectGetAttrStr */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#endif - -/* GetBuiltinName */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -/* RaiseDoubleKeywords */ -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -/* ParseKeywords */ -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful + */ +#pragma warning( disable : 4127 ) +#endif + + + +/* #### Code section: utility_code_def ### */ + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; } +#endif -/* RaiseArgTupleInvalid */ -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; itp_dict; - return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; + return 0; } -static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { - PyObject **dictptr = NULL; - Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; - if (offset) { -#if CYTHON_COMPILING_IN_CPYTHON - dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err) { + int result; + PyObject *exc_type; +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; #else - dictptr = _PyObject_GetDictPtr(obj); + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; #endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); } - return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; -} -static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) - return 0; - return obj_dict_version == __Pyx_get_object_dict_version(obj); + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; } #endif -/* GetModuleGlobalName */ -#if CYTHON_USE_DICT_VERSIONS -static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) -#else -static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) -#endif -{ - PyObject *result; -#if !CYTHON_AVOID_BORROWED_REFS -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 - result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } else if (unlikely(PyErr_Occurred())) { - return NULL; - } -#else - result = PyDict_GetItem(__pyx_d, name); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); } -#endif + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); #else - result = PyObject_GetItem(__pyx_d, name); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } - PyErr_Clear(); + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); #endif - return __Pyx_GetBuiltinName(name); } - -/* PyObjectCall */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = Py_TYPE(func)->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = (*call)(func, arg, kw); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif } - return result; +#else + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#endif } #endif -/* PyObjectSetAttrStr */ +/* PyObjectGetAttrStr */ #if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_setattro)) - return tp->tp_setattro(obj, attr_name, value); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); #if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_setattr)) - return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); #endif - return PyObject_SetAttr(obj, attr_name, value); + return PyObject_GetAttr(obj, attr_name); } #endif -/* PyFunctionFastCall */ -#if CYTHON_FAST_PYCALL -static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, - PyObject *globals) { - PyFrameObject *f; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject **fastlocals; - Py_ssize_t i; - PyObject *result; - assert(globals != NULL); - /* XXX Perhaps we should create a specialized - PyFrame_New() that doesn't take locals, but does - take builtins without sanity checking them. - */ - assert(tstate != NULL); - f = PyFrame_New(tstate, co, globals, NULL); - if (f == NULL) { - return NULL; - } - fastlocals = __Pyx_PyFrame_GetLocalsplus(f); - for (i = 0; i < na; i++) { - Py_INCREF(*args); - fastlocals[i] = *args++; - } - result = PyEval_EvalFrameEx(f,0); - ++tstate->recursion_depth; - Py_DECREF(f); - --tstate->recursion_depth; - return result; +/* PyObjectGetAttrStrNoError */ +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); } -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { - PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); - PyObject *globals = PyFunction_GET_GLOBALS(func); - PyObject *argdefs = PyFunction_GET_DEFAULTS(func); - PyObject *closure; -#if PY_MAJOR_VERSION >= 3 - PyObject *kwdefs; -#endif - PyObject *kwtuple, **k; - PyObject **d; - Py_ssize_t nd; - Py_ssize_t nk; +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { PyObject *result; - assert(kwargs == NULL || PyDict_Check(kwargs)); - nk = kwargs ? PyDict_Size(kwargs) : 0; - if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { - return NULL; - } - if ( -#if PY_MAJOR_VERSION >= 3 - co->co_kwonlyargcount == 0 && -#endif - likely(kwargs == NULL || nk == 0) && - co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { - if (argdefs == NULL && co->co_argcount == nargs) { - result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); - goto done; - } - else if (nargs == 0 && argdefs != NULL - && co->co_argcount == Py_SIZE(argdefs)) { - /* function called with no arguments, but all parameters have - a default value: use default values as arguments .*/ - args = &PyTuple_GET_ITEM(argdefs, 0); - result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); - goto done; - } - } - if (kwargs != NULL) { - Py_ssize_t pos, i; - kwtuple = PyTuple_New(2 * nk); - if (kwtuple == NULL) { - result = NULL; - goto done; - } - k = &PyTuple_GET_ITEM(kwtuple, 0); - pos = i = 0; - while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { - Py_INCREF(k[i]); - Py_INCREF(k[i+1]); - i += 2; - } - nk = i / 2; - } - else { - kwtuple = NULL; - k = NULL; +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); } - closure = PyFunction_GET_CLOSURE(func); -#if PY_MAJOR_VERSION >= 3 - kwdefs = PyFunction_GET_KW_DEFAULTS(func); #endif - if (argdefs != NULL) { - d = &PyTuple_GET_ITEM(argdefs, 0); - nd = Py_SIZE(argdefs); - } - else { - d = NULL; - nd = 0; + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); } + return result; +} + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { + PyErr_Format(PyExc_NameError, #if PY_MAJOR_VERSION >= 3 - result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, kwdefs, closure); + "name '%U' is not defined", name); #else - result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, closure); + "name '%.200s' is not defined", PyString_AS_STRING(name)); #endif - Py_XDECREF(kwtuple); -done: - Py_LeaveRecursiveCall(); + } return result; } -#endif -#endif -/* PyObjectCallMethO */ +/* TupleAndListFromArray */ #if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { - PyObject *self, *result; - PyCFunction cfunc; - cfunc = PyCFunction_GET_FUNCTION(func); - self = PyCFunction_GET_SELF(func); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = cfunc(self, arg); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); } - return result; } -#endif - -/* PyObjectCallNoArg */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { -#if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, NULL, 0); +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; + } + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; +} +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + return PyList_New(0); } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; +} #endif -#ifdef __Pyx_CyFunction_USED - if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func))) + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); #else - if (likely(PyCFunction_Check(func))) + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } #endif - { - if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) { - return __Pyx_PyObject_CallMethO(func, NULL); - } - } - return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL); -} -#endif - -/* PyCFunctionFastCall */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { - PyCFunctionObject *func = (PyCFunctionObject*)func_obj; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - int flags = PyCFunction_GET_FLAGS(func); - assert(PyCFunction_Check(func)); - assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); - assert(nargs >= 0); - assert(nargs == 0 || args != NULL); - /* _PyCFunction_FastCallDict() must not be called with an exception set, - because it may clear it (directly or indirectly) and so the - caller loses its exception */ - assert(!PyErr_Occurred()); - if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { - return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); } else { - return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; } -} #endif - -/* PyObjectCallOneArg */ -#if CYTHON_COMPILING_IN_CPYTHON -static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_New(1); - if (unlikely(!args)) return NULL; - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 0, arg); - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; } -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { -#if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, &arg, 1); - } + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; #endif - if (likely(PyCFunction_Check(func))) { - if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { - return __Pyx_PyObject_CallMethO(func, arg); -#if CYTHON_FAST_PYCCALL - } else if (__Pyx_PyFastCFunction_Check(func)) { - return __Pyx_PyCFunction_FastCall(func, &arg, 1); + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } #endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } } - } - return __Pyx__PyObject_CallOneArg(func, arg); -} -#else -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_Pack(1, arg); - if (unlikely(!args)) return NULL; - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; -} #endif - -/* PyObjectCall2Args */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { - PyObject *args, *result = NULL; - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyFunction_FastCall(function, args, 2); + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyCFunction_FastCall(function, args, 2); - } + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); #endif - args = PyTuple_New(2); - if (unlikely(!args)) goto done; - Py_INCREF(arg1); - PyTuple_SET_ITEM(args, 0, arg1); - Py_INCREF(arg2); - PyTuple_SET_ITEM(args, 1, arg2); - Py_INCREF(function); - result = __Pyx_PyObject_Call(function, args, NULL); - Py_DECREF(args); - Py_DECREF(function); -done: - return result; -} - -/* RaiseTooManyValuesToUnpack */ -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { - PyErr_Format(PyExc_ValueError, - "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); -} - -/* RaiseNeedMoreValuesToUnpack */ -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { - PyErr_Format(PyExc_ValueError, - "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", - index, (index == 1) ? "" : "s"); -} - -/* IterFinish */ -static CYTHON_INLINE int __Pyx_IterFinish(void) { -#if CYTHON_FAST_THREAD_STATE - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject* exc_type = tstate->curexc_type; - if (unlikely(exc_type)) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) { - PyObject *exc_value, *exc_tb; - exc_value = tstate->curexc_value; - exc_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; - Py_DECREF(exc_type); - Py_XDECREF(exc_value); - Py_XDECREF(exc_tb); - return 0; - } else { - return -1; - } + return (equals == Py_NE); +#endif +} + +/* fastcall */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; } - return 0; -#else - if (unlikely(PyErr_Occurred())) { - if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { - PyErr_Clear(); - return 0; - } else { - return -1; + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; // error + return kwvalues[i]; } } - return 0; -#endif + return NULL; // not found (no exception set) } +#endif -/* UnpackItemEndCheck */ -static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { - if (unlikely(retval)) { - Py_DECREF(retval); - __Pyx_RaiseTooManyValuesError(expected); - return -1; +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; } else { - return __Pyx_IterFinish(); + num_expected = num_max; + more_or_less = "at most"; } - return 0; + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); } -/* DictGetItem */ -#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY -static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { - PyObject *value; - value = PyDict_GetItemWithError(d, key); - if (unlikely(!value)) { - if (!PyErr_Occurred()) { - if (unlikely(PyTuple_Check(key))) { - PyObject* args = PyTuple_Pack(1, key); - if (likely(args)) { - PyErr_SetObject(PyExc_KeyError, args); - Py_DECREF(args); +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); + while (1) { + if (kwds_is_tuple) { + if (pos >= PyTuple_GET_SIZE(kwds)) break; + key = PyTuple_GET_ITEM(kwds, pos); + value = kwvalues[pos]; + pos++; + } + else + { + if (!PyDict_Next(kwds, &pos, &key, &value)) break; + } + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = ( + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; } - } else { - PyErr_SetObject(PyExc_KeyError, key); } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; } - return NULL; } - Py_INCREF(value); - return value; + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; } -#endif -/* PyErrFetchRestore */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; +/* ArgTypeTest */ +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + __Pyx_TypeName type_name; + __Pyx_TypeName obj_type_name; + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + type_name = __Pyx_PyType_GetName(type); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected " __Pyx_FMT_TYPENAME + ", got " __Pyx_FMT_TYPENAME ")", name, type_name, obj_type_name); + __Pyx_DECREF_TypeName(type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return 0; } -#endif /* RaiseException */ #if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { __Pyx_PyThreadState_declare + CYTHON_UNUSED_VAR(cause); Py_XINCREF(type); if (!value || value == Py_None) value = NULL; @@ -45403,13 +51688,9 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject } PyErr_SetObject(type, value); if (tb) { -#if CYTHON_COMPILING_IN_PYPY - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); - Py_INCREF(tb); - PyErr_Restore(tmp_type, tmp_value, tb); - Py_XDECREF(tmp_tb); -#else + #if PY_VERSION_HEX >= 0x030C00A6 + PyException_SetTraceback(value, tb); + #elif CYTHON_FAST_THREAD_STATE PyThreadState *tstate = __Pyx_PyThreadState_Current; PyObject* tmp_tb = tstate->curexc_traceback; if (tb != tmp_tb) { @@ -45417,6 +51698,12 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject tstate->curexc_traceback = tb; Py_XDECREF(tmp_tb); } +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); #endif } bad: @@ -45425,412 +51712,583 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject } #endif -/* UnicodeAsUCS4 */ -static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject* x) { - Py_ssize_t length; - #if CYTHON_PEP393_ENABLED - length = PyUnicode_GET_LENGTH(x); - if (likely(length == 1)) { - return PyUnicode_READ_CHAR(x, 0); - } - #else - length = PyUnicode_GET_SIZE(x); - if (likely(length == 1)) { - return PyUnicode_AS_UNICODE(x)[0]; - } - #if Py_UNICODE_SIZE == 2 - else if (PyUnicode_GET_SIZE(x) == 2) { - Py_UCS4 high_val = PyUnicode_AS_UNICODE(x)[0]; - if (high_val >= 0xD800 && high_val <= 0xDBFF) { - Py_UCS4 low_val = PyUnicode_AS_UNICODE(x)[1]; - if (low_val >= 0xDC00 && low_val <= 0xDFFF) { - return 0x10000 + (((high_val & ((1<<10)-1)) << 10) | (low_val & ((1<<10)-1))); - } - } - } - #endif - #endif - PyErr_Format(PyExc_ValueError, - "only single character unicode strings can be converted to Py_UCS4, " - "got length %" CYTHON_FORMAT_SSIZE_T "d", length); - return (Py_UCS4)-1; -} - -/* object_ord */ -static long __Pyx__PyObject_Ord(PyObject* c) { - Py_ssize_t size; - if (PyBytes_Check(c)) { - size = PyBytes_GET_SIZE(c); - if (likely(size == 1)) { - return (unsigned char) PyBytes_AS_STRING(c)[0]; - } -#if PY_MAJOR_VERSION < 3 - } else if (PyUnicode_Check(c)) { - return (long)__Pyx_PyUnicode_AsPy_UCS4(c); -#endif -#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) - } else if (PyByteArray_Check(c)) { - size = PyByteArray_GET_SIZE(c); - if (likely(size == 1)) { - return (unsigned char) PyByteArray_AS_STRING(c)[0]; - } -#endif - } else { - PyErr_Format(PyExc_TypeError, - "ord() expected string of length 1, but %.200s found", Py_TYPE(c)->tp_name); - return (long)(Py_UCS4)-1; - } - PyErr_Format(PyExc_TypeError, - "ord() expected a character, but string of length %zd found", size); - return (long)(Py_UCS4)-1; -} - -/* SetItemInt */ -static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) { - int r; - if (!j) return -1; - r = PyObject_SetItem(o, j, v); - Py_DECREF(j); - return r; -} -static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list, - CYTHON_NCP_UNUSED int wraparound, CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o)); - if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o)))) { - PyObject* old = PyList_GET_ITEM(o, n); - Py_INCREF(v); - PyList_SET_ITEM(o, n, v); - Py_DECREF(old); - return 1; - } - } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_ass_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (!PyErr_ExceptionMatches(PyExc_OverflowError)) - return -1; - PyErr_Clear(); - } - } - return m->sq_ass_item(o, i, v); - } +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; } -#else -#if CYTHON_COMPILING_IN_PYPY - if (is_list || (PySequence_Check(o) && !PyDict_Check(o))) -#else - if (is_list || PySequence_Check(o)) -#endif - { - return PySequence_SetItem(o, i, v); + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; } -#endif - return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v); + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; } - -/* PyObjectGetMethod */ -static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { - PyObject *attr; -#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP - PyTypeObject *tp = Py_TYPE(obj); - PyObject *descr; - descrgetfunc f = NULL; - PyObject **dictptr, *dict; - int meth_found = 0; - assert (*method == NULL); - if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { - attr = __Pyx_PyObject_GetAttrStr(obj, name); - goto try_unpack; - } - if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { - return 0; +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { + return NULL; } - descr = _PyType_Lookup(tp, name); - if (likely(descr != NULL)) { - Py_INCREF(descr); + if ( #if PY_MAJOR_VERSION >= 3 - #ifdef __Pyx_CyFunction_USED - if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) - #else - if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type))) - #endif -#else - #ifdef __Pyx_CyFunction_USED - if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) - #else - if (likely(PyFunction_Check(descr))) - #endif + co->co_kwonlyargcount == 0 && #endif - { - meth_found = 1; - } else { - f = Py_TYPE(descr)->tp_descr_get; - if (f != NULL && PyDescr_IsData(descr)) { - attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); - Py_DECREF(descr); - goto try_unpack; - } + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; } } - dictptr = _PyObject_GetDictPtr(obj); - if (dictptr != NULL && (dict = *dictptr) != NULL) { - Py_INCREF(dict); - attr = __Pyx_PyDict_GetItemStr(dict, name); - if (attr != NULL) { - Py_INCREF(attr); - Py_DECREF(dict); - Py_XDECREF(descr); - goto try_unpack; + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; } - Py_DECREF(dict); + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; } - if (meth_found) { - *method = descr; - return 1; + else { + kwtuple = NULL; + k = NULL; } - if (f != NULL) { - attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); - Py_DECREF(descr); - goto try_unpack; + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); } - if (descr != NULL) { - *method = descr; - return 0; + else { + d = NULL; + nd = 0; } - PyErr_Format(PyExc_AttributeError, #if PY_MAJOR_VERSION >= 3 - "'%.50s' object has no attribute '%U'", - tp->tp_name, name); -#else - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, PyString_AS_STRING(name)); -#endif - return 0; + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); #else - attr = __Pyx_PyObject_GetAttrStr(obj, name); - goto try_unpack; -#endif -try_unpack: -#if CYTHON_UNPACK_METHODS - if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { - PyObject *function = PyMethod_GET_FUNCTION(attr); - Py_INCREF(function); - Py_DECREF(attr); - *method = function; - return 1; - } + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); #endif - *method = attr; - return 0; + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; } +#endif -/* PyObjectCallMethod0 */ -static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { - PyObject *method = NULL, *result = NULL; - int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); - if (likely(is_method)) { - result = __Pyx_PyObject_CallOneArg(method, obj); - Py_DECREF(method); - return result; +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); } - if (unlikely(!method)) goto bad; - result = __Pyx_PyObject_CallNoArg(method); - Py_DECREF(method); -bad: return result; } +#endif -/* RaiseNoneIterError */ -static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); -} - -/* UnpackTupleError */ -static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { - if (t == Py_None) { - __Pyx_RaiseNoneNotIterableError(); - } else if (PyTuple_GET_SIZE(t) < index) { - __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t)); - } else { - __Pyx_RaiseTooManyValuesError(index); +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); } + return result; } +#endif -/* UnpackTuple2 */ -static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( - PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) { - PyObject *value1 = NULL, *value2 = NULL; -#if CYTHON_COMPILING_IN_PYPY - value1 = PySequence_ITEM(tuple, 0); if (unlikely(!value1)) goto bad; - value2 = PySequence_ITEM(tuple, 1); if (unlikely(!value2)) goto bad; +/* PyObjectFastCall */ +static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { + PyObject *argstuple; + PyObject *result; + size_t i; + argstuple = PyTuple_New((Py_ssize_t)nargs); + if (unlikely(!argstuple)) return NULL; + for (i = 0; i < nargs; i++) { + Py_INCREF(args[i]); + PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]); + } + result = __Pyx_PyObject_Call(func, argstuple, kwargs); + Py_DECREF(argstuple); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { + Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); +#if CYTHON_COMPILING_IN_CPYTHON + if (nargs == 0 && kwargs == NULL) { +#if defined(__Pyx_CyFunction_USED) && defined(NDEBUG) + if (__Pyx_IsCyOrPyCFunction(func)) #else - value1 = PyTuple_GET_ITEM(tuple, 0); Py_INCREF(value1); - value2 = PyTuple_GET_ITEM(tuple, 1); Py_INCREF(value2); + if (PyCFunction_Check(func)) #endif - if (decref_tuple) { - Py_DECREF(tuple); + { + if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) { + return __Pyx_PyObject_CallMethO(func, NULL); + } + } + } + else if (nargs == 1 && kwargs == NULL) { + if (PyCFunction_Check(func)) + { + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, args[0]); + } + } } - *pvalue1 = value1; - *pvalue2 = value2; - return 0; -#if CYTHON_COMPILING_IN_PYPY -bad: - Py_XDECREF(value1); - Py_XDECREF(value2); - if (decref_tuple) { Py_XDECREF(tuple); } - return -1; #endif + #if PY_VERSION_HEX < 0x030800B1 + #if CYTHON_FAST_PYCCALL + if (PyCFunction_Check(func)) { + if (kwargs) { + return _PyCFunction_FastCallDict(func, args, nargs, kwargs); + } else { + return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); + } + } + #if PY_VERSION_HEX >= 0x030700A1 + if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { + return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); + } + #endif + #endif + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); + } + #endif + #endif + #if CYTHON_VECTORCALL + vectorcallfunc f = _PyVectorcall_Function(func); + if (f) { + return f(func, args, (size_t)nargs, kwargs); + } + #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL + if (__Pyx_CyFunction_CheckExact(func)) { + __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); + if (f) return f(func, args, (size_t)nargs, kwargs); + } + #endif + if (nargs == 0) { + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); + } + return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); } -static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, - int has_known_size, int decref_tuple) { - Py_ssize_t index; - PyObject *value1 = NULL, *value2 = NULL, *iter = NULL; - iternextfunc iternext; - iter = PyObject_GetIter(tuple); - if (unlikely(!iter)) goto bad; - if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; } - iternext = Py_TYPE(iter)->tp_iternext; - value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; } - value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; } - if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad; - Py_DECREF(iter); - *pvalue1 = value1; - *pvalue2 = value2; + +/* RaiseUnexpectedTypeError */ +static int +__Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj) +{ + __Pyx_TypeName obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, "Expected %s, got " __Pyx_FMT_TYPENAME, + expected, obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); return 0; -unpacking_failed: - if (!has_known_size && __Pyx_IterFinish() == 0) - __Pyx_RaiseNeedMoreValuesError(index); -bad: - Py_XDECREF(iter); - Py_XDECREF(value1); - Py_XDECREF(value2); - if (decref_tuple) { Py_XDECREF(tuple); } - return -1; } -/* dict_iter */ -static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name, - Py_ssize_t* p_orig_length, int* p_source_is_dict) { - is_dict = is_dict || likely(PyDict_CheckExact(iterable)); - *p_source_is_dict = is_dict; - if (is_dict) { -#if !CYTHON_COMPILING_IN_PYPY - *p_orig_length = PyDict_Size(iterable); - Py_INCREF(iterable); - return iterable; -#elif PY_MAJOR_VERSION >= 3 - static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL; - PyObject **pp = NULL; - if (method_name) { - const char *name = PyUnicode_AsUTF8(method_name); - if (strcmp(name, "iteritems") == 0) pp = &py_items; - else if (strcmp(name, "iterkeys") == 0) pp = &py_keys; - else if (strcmp(name, "itervalues") == 0) pp = &py_values; - if (pp) { - if (!*pp) { - *pp = PyUnicode_FromString(name + 4); - if (!*pp) - return NULL; +/* CIntToDigits */ +static const char DIGIT_PAIRS_10[2*10*10+1] = { + "00010203040506070809" + "10111213141516171819" + "20212223242526272829" + "30313233343536373839" + "40414243444546474849" + "50515253545556575859" + "60616263646566676869" + "70717273747576777879" + "80818283848586878889" + "90919293949596979899" +}; +static const char DIGIT_PAIRS_8[2*8*8+1] = { + "0001020304050607" + "1011121314151617" + "2021222324252627" + "3031323334353637" + "4041424344454647" + "5051525354555657" + "6061626364656667" + "7071727374757677" +}; +static const char DIGITS_HEX[2*16+1] = { + "0123456789abcdef" + "0123456789ABCDEF" +}; + +/* BuildPyUnicode */ +static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, char* chars, int clength, + int prepend_sign, char padding_char) { + PyObject *uval; + Py_ssize_t uoffset = ulength - clength; +#if CYTHON_USE_UNICODE_INTERNALS + Py_ssize_t i; +#if CYTHON_PEP393_ENABLED + void *udata; + uval = PyUnicode_New(ulength, 127); + if (unlikely(!uval)) return NULL; + udata = PyUnicode_DATA(uval); +#else + Py_UNICODE *udata; + uval = PyUnicode_FromUnicode(NULL, ulength); + if (unlikely(!uval)) return NULL; + udata = PyUnicode_AS_UNICODE(uval); +#endif + if (uoffset > 0) { + i = 0; + if (prepend_sign) { + __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, 0, '-'); + i++; + } + for (; i < uoffset; i++) { + __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, i, padding_char); + } + } + for (i=0; i < clength; i++) { + __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, uoffset+i, chars[i]); + } +#else + { + PyObject *sign = NULL, *padding = NULL; + uval = NULL; + if (uoffset > 0) { + prepend_sign = !!prepend_sign; + if (uoffset > prepend_sign) { + padding = PyUnicode_FromOrdinal(padding_char); + if (likely(padding) && uoffset > prepend_sign + 1) { + PyObject *tmp; + PyObject *repeat = PyInt_FromSsize_t(uoffset - prepend_sign); + if (unlikely(!repeat)) goto done_or_error; + tmp = PyNumber_Multiply(padding, repeat); + Py_DECREF(repeat); + Py_DECREF(padding); + padding = tmp; } - method_name = *pp; + if (unlikely(!padding)) goto done_or_error; + } + if (prepend_sign) { + sign = PyUnicode_FromOrdinal('-'); + if (unlikely(!sign)) goto done_or_error; } } -#endif + uval = PyUnicode_DecodeASCII(chars, clength, NULL); + if (likely(uval) && padding) { + PyObject *tmp = PyNumber_Add(padding, uval); + Py_DECREF(uval); + uval = tmp; + } + if (likely(uval) && sign) { + PyObject *tmp = PyNumber_Add(sign, uval); + Py_DECREF(uval); + uval = tmp; + } +done_or_error: + Py_XDECREF(padding); + Py_XDECREF(sign); } - *p_orig_length = 0; - if (method_name) { - PyObject* iter; - iterable = __Pyx_PyObject_CallMethod0(iterable, method_name); - if (!iterable) - return NULL; -#if !CYTHON_COMPILING_IN_PYPY - if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable)) - return iterable; #endif - iter = PyObject_GetIter(iterable); - Py_DECREF(iterable); - return iter; - } - return PyObject_GetIter(iterable); + return uval; } -static CYTHON_INLINE int __Pyx_dict_iter_next( - PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos, - PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) { - PyObject* next_item; -#if !CYTHON_COMPILING_IN_PYPY - if (source_is_dict) { - PyObject *key, *value; - if (unlikely(orig_length != PyDict_Size(iter_obj))) { - PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration"); - return -1; - } - if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) { - return 0; + +/* CIntToPyUnicode */ +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_int(int value, Py_ssize_t width, char padding_char, char format_char) { + char digits[sizeof(int)*3+2]; + char *dpos, *end = digits + sizeof(int)*3+2; + const char *hex_digits = DIGITS_HEX; + Py_ssize_t length, ulength; + int prepend_sign, last_one_off; + int remaining; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (format_char == 'X') { + hex_digits += 16; + format_char = 'x'; + } + remaining = value; + last_one_off = 0; + dpos = end; + do { + int digit_pos; + switch (format_char) { + case 'o': + digit_pos = abs((int)(remaining % (8*8))); + remaining = (int) (remaining / (8*8)); + dpos -= 2; + memcpy(dpos, DIGIT_PAIRS_8 + digit_pos * 2, 2); + last_one_off = (digit_pos < 8); + break; + case 'd': + digit_pos = abs((int)(remaining % (10*10))); + remaining = (int) (remaining / (10*10)); + dpos -= 2; + memcpy(dpos, DIGIT_PAIRS_10 + digit_pos * 2, 2); + last_one_off = (digit_pos < 10); + break; + case 'x': + *(--dpos) = hex_digits[abs((int)(remaining % 16))]; + remaining = (int) (remaining / 16); + break; + default: + assert(0); + break; } - if (pitem) { - PyObject* tuple = PyTuple_New(2); - if (unlikely(!tuple)) { - return -1; - } - Py_INCREF(key); - Py_INCREF(value); - PyTuple_SET_ITEM(tuple, 0, key); - PyTuple_SET_ITEM(tuple, 1, value); - *pitem = tuple; + } while (unlikely(remaining != 0)); + assert(!last_one_off || *dpos == '0'); + dpos += last_one_off; + length = end - dpos; + ulength = length; + prepend_sign = 0; + if (!is_unsigned && value <= neg_one) { + if (padding_char == ' ' || width <= length + 1) { + *(--dpos) = '-'; + ++length; } else { - if (pkey) { - Py_INCREF(key); - *pkey = key; - } - if (pvalue) { - Py_INCREF(value); - *pvalue = value; - } + prepend_sign = 1; } - return 1; - } else if (PyTuple_CheckExact(iter_obj)) { - Py_ssize_t pos = *ppos; - if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0; - *ppos = pos + 1; - next_item = PyTuple_GET_ITEM(iter_obj, pos); - Py_INCREF(next_item); - } else if (PyList_CheckExact(iter_obj)) { - Py_ssize_t pos = *ppos; - if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0; - *ppos = pos + 1; - next_item = PyList_GET_ITEM(iter_obj, pos); - Py_INCREF(next_item); - } else + ++ulength; + } + if (width > ulength) { + ulength = width; + } + if (ulength == 1) { + return PyUnicode_FromOrdinal(*dpos); + } + return __Pyx_PyUnicode_BuildFromAscii(ulength, dpos, (int) length, prepend_sign, padding_char); +} + +/* CIntToPyUnicode */ +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_Py_ssize_t(Py_ssize_t value, Py_ssize_t width, char padding_char, char format_char) { + char digits[sizeof(Py_ssize_t)*3+2]; + char *dpos, *end = digits + sizeof(Py_ssize_t)*3+2; + const char *hex_digits = DIGITS_HEX; + Py_ssize_t length, ulength; + int prepend_sign, last_one_off; + Py_ssize_t remaining; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" #endif - { - next_item = PyIter_Next(iter_obj); - if (unlikely(!next_item)) { - return __Pyx_IterFinish(); + const Py_ssize_t neg_one = (Py_ssize_t) -1, const_zero = (Py_ssize_t) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (format_char == 'X') { + hex_digits += 16; + format_char = 'x'; + } + remaining = value; + last_one_off = 0; + dpos = end; + do { + int digit_pos; + switch (format_char) { + case 'o': + digit_pos = abs((int)(remaining % (8*8))); + remaining = (Py_ssize_t) (remaining / (8*8)); + dpos -= 2; + memcpy(dpos, DIGIT_PAIRS_8 + digit_pos * 2, 2); + last_one_off = (digit_pos < 8); + break; + case 'd': + digit_pos = abs((int)(remaining % (10*10))); + remaining = (Py_ssize_t) (remaining / (10*10)); + dpos -= 2; + memcpy(dpos, DIGIT_PAIRS_10 + digit_pos * 2, 2); + last_one_off = (digit_pos < 10); + break; + case 'x': + *(--dpos) = hex_digits[abs((int)(remaining % 16))]; + remaining = (Py_ssize_t) (remaining / 16); + break; + default: + assert(0); + break; + } + } while (unlikely(remaining != 0)); + assert(!last_one_off || *dpos == '0'); + dpos += last_one_off; + length = end - dpos; + ulength = length; + prepend_sign = 0; + if (!is_unsigned && value <= neg_one) { + if (padding_char == ' ' || width <= length + 1) { + *(--dpos) = '-'; + ++length; + } else { + prepend_sign = 1; } + ++ulength; } - if (pitem) { - *pitem = next_item; - } else if (pkey && pvalue) { - if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1)) - return -1; - } else if (pkey) { - *pkey = next_item; - } else { - *pvalue = next_item; + if (width > ulength) { + ulength = width; } - return 1; + if (ulength == 1) { + return PyUnicode_FromOrdinal(*dpos); + } + return __Pyx_PyUnicode_BuildFromAscii(ulength, dpos, (int) length, prepend_sign, padding_char); +} + +/* JoinPyUnicode */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char) { +#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyObject *result_uval; + int result_ukind, kind_shift; + Py_ssize_t i, char_pos; + void *result_udata; + CYTHON_MAYBE_UNUSED_VAR(max_char); +#if CYTHON_PEP393_ENABLED + result_uval = PyUnicode_New(result_ulength, max_char); + if (unlikely(!result_uval)) return NULL; + result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND; + kind_shift = (result_ukind == PyUnicode_4BYTE_KIND) ? 2 : result_ukind - 1; + result_udata = PyUnicode_DATA(result_uval); +#else + result_uval = PyUnicode_FromUnicode(NULL, result_ulength); + if (unlikely(!result_uval)) return NULL; + result_ukind = sizeof(Py_UNICODE); + kind_shift = (result_ukind == 4) ? 2 : result_ukind - 1; + result_udata = PyUnicode_AS_UNICODE(result_uval); +#endif + assert(kind_shift == 2 || kind_shift == 1 || kind_shift == 0); + char_pos = 0; + for (i=0; i < value_count; i++) { + int ukind; + Py_ssize_t ulength; + void *udata; + PyObject *uval = PyTuple_GET_ITEM(value_tuple, i); + if (unlikely(__Pyx_PyUnicode_READY(uval))) + goto bad; + ulength = __Pyx_PyUnicode_GET_LENGTH(uval); + if (unlikely(!ulength)) + continue; + if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - ulength < char_pos)) + goto overflow; + ukind = __Pyx_PyUnicode_KIND(uval); + udata = __Pyx_PyUnicode_DATA(uval); + if (!CYTHON_PEP393_ENABLED || ukind == result_ukind) { + memcpy((char *)result_udata + (char_pos << kind_shift), udata, (size_t) (ulength << kind_shift)); + } else { + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030300F0 || defined(_PyUnicode_FastCopyCharacters) + _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength); + #else + Py_ssize_t j; + for (j=0; j < ulength; j++) { + Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j); + __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar); + } + #endif + } + char_pos += ulength; + } + return result_uval; +overflow: + PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string"); +bad: + Py_DECREF(result_uval); + return NULL; +#else + CYTHON_UNUSED_VAR(max_char); + CYTHON_UNUSED_VAR(result_ulength); + CYTHON_UNUSED_VAR(value_count); + return PyUnicode_Join(__pyx_empty_unicode, value_tuple); +#endif +} + +/* GetAttr */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { +#if CYTHON_USE_TYPE_SLOTS +#if PY_MAJOR_VERSION >= 3 + if (likely(PyUnicode_Check(n))) +#else + if (likely(PyString_Check(n))) +#endif + return __Pyx_PyObject_GetAttrStr(o, n); +#endif + return PyObject_GetAttr(o, n); } /* GetItemInt */ static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { PyObject *r; - if (!j) return NULL; + if (unlikely(!j)) return NULL; r = PyObject_GetItem(o, j); Py_DECREF(j); return r; @@ -45861,2293 +52319,3006 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize if (wraparound & unlikely(i < 0)) { wrapped_i += PyTuple_GET_SIZE(o); } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_subscript) { + PyObject *r, *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return NULL; + r = mm->mp_subscript(o, key); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return sm->sq_item(o, i); + } + } +#else + if (is_list || PySequence_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* PyObjectCallOneArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *args[2] = {NULL, arg}; + return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* ObjectGetItem */ +#if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) { + PyObject *runerr = NULL; + Py_ssize_t key_value; + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + __Pyx_TypeName index_type_name = __Pyx_PyType_GetName(Py_TYPE(index)); + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, + "cannot fit '" __Pyx_FMT_TYPENAME "' into an index-sized integer", index_type_name); + __Pyx_DECREF_TypeName(index_type_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *key) { + __Pyx_TypeName obj_type_name; + if (likely(PyType_Check(obj))) { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(obj, __pyx_n_s_class_getitem); + if (meth) { + PyObject *result = __Pyx_PyObject_CallOneArg(meth, key); + Py_DECREF(meth); + return result; + } + } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' object is not subscriptable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) { + PyTypeObject *tp = Py_TYPE(obj); + PyMappingMethods *mm = tp->tp_as_mapping; + PySequenceMethods *sm = tp->tp_as_sequence; + if (likely(mm && mm->mp_subscript)) { + return mm->mp_subscript(obj, key); + } + if (likely(sm && sm->sq_item)) { + return __Pyx_PyObject_GetIndex(obj, key); + } + return __Pyx_PyObject_GetItem_Slow(obj, key); +} +#endif + +/* KeywordStringCheck */ +static int __Pyx_CheckKeywordStrings( + PyObject *kw, + const char* function_name, + int kw_allowed) +{ + PyObject* key = 0; + Py_ssize_t pos = 0; +#if CYTHON_COMPILING_IN_PYPY + if (!kw_allowed && PyDict_Next(kw, &pos, &key, 0)) + goto invalid_keyword; + return 1; +#else + if (CYTHON_METH_FASTCALL && likely(PyTuple_Check(kw))) { + if (unlikely(PyTuple_GET_SIZE(kw) == 0)) + return 1; + if (!kw_allowed) { + key = PyTuple_GET_ITEM(kw, 0); + goto invalid_keyword; + } +#if PY_VERSION_HEX < 0x03090000 + for (pos = 0; pos < PyTuple_GET_SIZE(kw); pos++) { + key = PyTuple_GET_ITEM(kw, pos); + if (unlikely(!PyUnicode_Check(key))) + goto invalid_keyword_type; + } +#endif + return 1; + } + while (PyDict_Next(kw, &pos, &key, 0)) { + #if PY_MAJOR_VERSION < 3 + if (unlikely(!PyString_Check(key))) + #endif + if (unlikely(!PyUnicode_Check(key))) + goto invalid_keyword_type; + } + if (!kw_allowed && unlikely(key)) + goto invalid_keyword; + return 1; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + return 0; +#endif +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif + return 0; +} + +/* DivInt[Py_ssize_t] */ +static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ssize_t b) { + Py_ssize_t q = a / b; + Py_ssize_t r = a - q*b; + q -= ((r != 0) & ((r ^ b) < 0)); + return q; +} + +/* GetAttr3 */ +static PyObject *__Pyx_GetAttr3Default(PyObject *d) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + return NULL; + __Pyx_PyErr_Clear(); + Py_INCREF(d); + return d; +} +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { + PyObject *r; +#if CYTHON_USE_TYPE_SLOTS + if (likely(PyString_Check(n))) { + r = __Pyx_PyObject_GetAttrStrNoError(o, n); + if (unlikely(!r) && likely(!PyErr_Occurred())) { + r = __Pyx_NewRef(d); + } + return r; + } +#endif + r = PyObject_GetAttr(o, n); + return (likely(r)) ? r : __Pyx_GetAttr3Default(d); +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); - if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { - PyObject *r = PyList_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; } - else if (PyTuple_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (!PyErr_ExceptionMatches(PyExc_OverflowError)) - return NULL; - PyErr_Clear(); - } - } - return m->sq_item(o, i); - } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); } +#endif #else - if (is_list || PySequence_Check(o)) { - return PySequence_GetItem(o, i); + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); } + PyErr_Clear(); #endif - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); + return __Pyx_GetBuiltinName(name); +} + +/* RaiseTooManyValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* RaiseNeedMoreValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* RaiseNoneIterError */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); } /* ExtTypeTest */ static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + __Pyx_TypeName obj_type_name; + __Pyx_TypeName type_name; if (unlikely(!type)) { PyErr_SetString(PyExc_SystemError, "Missing type object"); return 0; } if (likely(__Pyx_TypeCheck(obj, type))) return 1; - PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", - Py_TYPE(obj)->tp_name, type->tp_name); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + type_name = __Pyx_PyType_GetName(type); + PyErr_Format(PyExc_TypeError, + "Cannot convert " __Pyx_FMT_TYPENAME " to " __Pyx_FMT_TYPENAME, + obj_type_name, type_name); + __Pyx_DECREF_TypeName(obj_type_name); + __Pyx_DECREF_TypeName(type_name); return 0; } -/* IsLittleEndian */ -static CYTHON_INLINE int __Pyx_Is_Little_Endian(void) +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) { - union { - uint32_t u32; - uint8_t u8[4]; - } S; - S.u32 = 0x01020304; - return S.u8[0] == 4; + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; } +#endif -/* BufferFormatCheck */ -static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, - __Pyx_BufFmt_StackElem* stack, - __Pyx_TypeInfo* type) { - stack[0].field = &ctx->root; - stack[0].parent_offset = 0; - ctx->root.type = type; - ctx->root.name = "buffer dtype"; - ctx->root.offset = 0; - ctx->head = stack; - ctx->head->field = &ctx->root; - ctx->fmt_offset = 0; - ctx->head->parent_offset = 0; - ctx->new_packmode = '@'; - ctx->enc_packmode = '@'; - ctx->new_count = 1; - ctx->enc_count = 0; - ctx->enc_type = 0; - ctx->is_complex = 0; - ctx->is_valid_array = 0; - ctx->struct_alignment = 0; - while (type->typegroup == 'S') { - ++ctx->head; - ctx->head->field = type->fields; - ctx->head->parent_offset = 0; - type = type->fields->type; - } -} -static int __Pyx_BufFmt_ParseNumber(const char** ts) { - int count; - const char* t = *ts; - if (*t < '0' || *t > '9') { - return -1; +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; } else { - count = *t++ - '0'; - while (*t >= '0' && *t <= '9') { - count *= 10; - count += *t++ - '0'; - } - } - *ts = t; - return count; -} -static int __Pyx_BufFmt_ExpectNumber(const char **ts) { - int number = __Pyx_BufFmt_ParseNumber(ts); - if (number == -1) - PyErr_Format(PyExc_ValueError,\ - "Does not understand character buffer dtype format string ('%c')", **ts); - return number; -} -static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { - PyErr_Format(PyExc_ValueError, - "Unexpected format string character: '%c'", ch); -} -static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { - switch (ch) { - case '?': return "'bool'"; - case 'c': return "'char'"; - case 'b': return "'signed char'"; - case 'B': return "'unsigned char'"; - case 'h': return "'short'"; - case 'H': return "'unsigned short'"; - case 'i': return "'int'"; - case 'I': return "'unsigned int'"; - case 'l': return "'long'"; - case 'L': return "'unsigned long'"; - case 'q': return "'long long'"; - case 'Q': return "'unsigned long long'"; - case 'f': return (is_complex ? "'complex float'" : "'float'"); - case 'd': return (is_complex ? "'complex double'" : "'double'"); - case 'g': return (is_complex ? "'complex long double'" : "'long double'"); - case 'T': return "a struct"; - case 'O': return "Python object"; - case 'P': return "a pointer"; - case 's': case 'p': return "a string"; - case 0: return "end"; - default: return "unparseable format string"; - } -} -static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { - switch (ch) { - case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; - case 'h': case 'H': return 2; - case 'i': case 'I': case 'l': case 'L': return 4; - case 'q': case 'Q': return 8; - case 'f': return (is_complex ? 8 : 4); - case 'd': return (is_complex ? 16 : 8); - case 'g': { - PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); - return 0; - } - case 'O': case 'P': return sizeof(void*); - default: - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #endif } -static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { - switch (ch) { - case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; - case 'h': case 'H': return sizeof(short); - case 'i': case 'I': return sizeof(int); - case 'l': case 'L': return sizeof(long); - #ifdef HAVE_LONG_LONG - case 'q': case 'Q': return sizeof(PY_LONG_LONG); +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; #endif - case 'f': return sizeof(float) * (is_complex ? 2 : 1); - case 'd': return sizeof(double) * (is_complex ? 2 : 1); - case 'g': return sizeof(long double) * (is_complex ? 2 : 1); - case 'O': case 'P': return sizeof(void*); - default: { - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; - } - } + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); + #endif } -typedef struct { char c; short x; } __Pyx_st_short; -typedef struct { char c; int x; } __Pyx_st_int; -typedef struct { char c; long x; } __Pyx_st_long; -typedef struct { char c; float x; } __Pyx_st_float; -typedef struct { char c; double x; } __Pyx_st_double; -typedef struct { char c; long double x; } __Pyx_st_longdouble; -typedef struct { char c; void *x; } __Pyx_st_void_p; -#ifdef HAVE_LONG_LONG -typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; #endif -static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) { - switch (ch) { - case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; - case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); - case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); - case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); -#ifdef HAVE_LONG_LONG - case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); + +/* GetException */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) #endif - case 'f': return sizeof(__Pyx_st_float) - sizeof(float); - case 'd': return sizeof(__Pyx_st_double) - sizeof(double); - case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); - case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); - default: - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; +{ + PyObject *local_type = NULL, *local_value, *local_tb = NULL; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if PY_VERSION_HEX >= 0x030C00A6 + local_value = tstate->current_exception; + tstate->current_exception = 0; + if (likely(local_value)) { + local_type = (PyObject*) Py_TYPE(local_value); + Py_INCREF(local_type); + local_tb = PyException_GetTraceback(local_value); } -} -/* These are for computing the padding at the end of the struct to align - on the first member of the struct. This will probably the same as above, - but we don't have any guarantees. - */ -typedef struct { short x; char c; } __Pyx_pad_short; -typedef struct { int x; char c; } __Pyx_pad_int; -typedef struct { long x; char c; } __Pyx_pad_long; -typedef struct { float x; char c; } __Pyx_pad_float; -typedef struct { double x; char c; } __Pyx_pad_double; -typedef struct { long double x; char c; } __Pyx_pad_longdouble; -typedef struct { void *x; char c; } __Pyx_pad_void_p; -#ifdef HAVE_LONG_LONG -typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; + #else + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + #endif +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); #endif -static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) { - switch (ch) { - case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; - case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); - case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); - case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); -#ifdef HAVE_LONG_LONG - case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE && PY_VERSION_HEX >= 0x030C00A6 + if (unlikely(tstate->current_exception)) +#elif CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) #endif - case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); - case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); - case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); - case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); - default: - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; } -} -static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { - switch (ch) { - case 'c': - return 'H'; - case 'b': case 'h': case 'i': - case 'l': case 'q': case 's': case 'p': - return 'I'; - case '?': case 'B': case 'H': case 'I': case 'L': case 'Q': - return 'U'; - case 'f': case 'd': case 'g': - return (is_complex ? 'C' : 'R'); - case 'O': - return 'O'; - case 'P': - return 'P'; - default: { - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + #if PY_VERSION_HEX >= 0x030B00a4 + tmp_value = exc_info->exc_value; + exc_info->exc_value = local_value; + tmp_type = NULL; + tmp_tb = NULL; + Py_XDECREF(local_type); + Py_XDECREF(local_tb); + #else + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + #endif } - } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; } -static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { - if (ctx->head == NULL || ctx->head->field == &ctx->root) { - const char* expected; - const char* quote; - if (ctx->head == NULL) { - expected = "end"; - quote = ""; + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_value = exc_info->exc_value; + exc_info->exc_value = *value; + if (tmp_value == NULL || tmp_value == Py_None) { + Py_XDECREF(tmp_value); + tmp_value = NULL; + tmp_type = NULL; + tmp_tb = NULL; } else { - expected = ctx->head->field->type->name; - quote = "'"; + tmp_type = (PyObject*) Py_TYPE(tmp_value); + Py_INCREF(tmp_type); + #if CYTHON_COMPILING_IN_CPYTHON + tmp_tb = ((PyBaseExceptionObject*) tmp_value)->traceback; + Py_XINCREF(tmp_tb); + #else + tmp_tb = PyException_GetTraceback(tmp_value); + #endif } - PyErr_Format(PyExc_ValueError, - "Buffer dtype mismatch, expected %s%s%s but got %s", - quote, expected, quote, - __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); - } else { - __Pyx_StructField* field = ctx->head->field; - __Pyx_StructField* parent = (ctx->head - 1)->field; - PyErr_Format(PyExc_ValueError, - "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", - field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), - parent->type->name, field->name); - } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = *type; + exc_info->exc_value = *value; + exc_info->exc_traceback = *tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = *type; + tstate->exc_value = *value; + tstate->exc_traceback = *tb; + #endif + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; } -static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { - char group; - size_t size, offset, arraysize = 1; - if (ctx->enc_type == 0) return 0; - if (ctx->head->field->type->arraysize[0]) { - int i, ndim = 0; - if (ctx->enc_type == 's' || ctx->enc_type == 'p') { - ctx->is_valid_array = ctx->head->field->type->ndim == 1; - ndim = 1; - if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { - PyErr_Format(PyExc_ValueError, - "Expected a dimension of size %zu, got %zu", - ctx->head->field->type->arraysize[0], ctx->enc_count); - return -1; - } +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* Import */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *module = 0; + PyObject *empty_dict = 0; + PyObject *empty_list = 0; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (unlikely(!py_import)) + goto bad; + if (!from_list) { + empty_list = PyList_New(0); + if (unlikely(!empty_list)) + goto bad; + from_list = empty_list; } - if (!ctx->is_valid_array) { - PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", - ctx->head->field->type->ndim, ndim); - return -1; + #endif + empty_dict = PyDict_New(); + if (unlikely(!empty_dict)) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { + #if CYTHON_COMPILING_IN_LIMITED_API + module = PyImport_ImportModuleLevelObject( + name, empty_dict, empty_dict, from_list, 1); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, 1); + #endif + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (unlikely(!py_level)) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + #if CYTHON_COMPILING_IN_LIMITED_API + module = PyImport_ImportModuleLevelObject( + name, empty_dict, empty_dict, from_list, level); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, level); + #endif + #endif + } } - for (i = 0; i < ctx->head->field->type->ndim; i++) { - arraysize *= ctx->head->field->type->arraysize[i]; +bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + return module; +} + +/* ImportDottedModule */ +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) { + PyObject *partial_name = NULL, *slice = NULL, *sep = NULL; + if (unlikely(PyErr_Occurred())) { + PyErr_Clear(); } - ctx->is_valid_array = 0; - ctx->enc_count = 1; - } - group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); - do { - __Pyx_StructField* field = ctx->head->field; - __Pyx_TypeInfo* type = field->type; - if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { - size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); + if (likely(PyTuple_GET_SIZE(parts_tuple) == count)) { + partial_name = name; } else { - size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); - } - if (ctx->enc_packmode == '@') { - size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); - size_t align_mod_offset; - if (align_at == 0) return -1; - align_mod_offset = ctx->fmt_offset % align_at; - if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; - if (ctx->struct_alignment == 0) - ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, - ctx->is_complex); - } - if (type->size != size || type->typegroup != group) { - if (type->typegroup == 'C' && type->fields != NULL) { - size_t parent_offset = ctx->head->parent_offset + field->offset; - ++ctx->head; - ctx->head->field = type->fields; - ctx->head->parent_offset = parent_offset; - continue; - } - if ((type->typegroup == 'H' || group == 'H') && type->size == size) { - } else { - __Pyx_BufFmt_RaiseExpected(ctx); - return -1; - } + slice = PySequence_GetSlice(parts_tuple, 0, count); + if (unlikely(!slice)) + goto bad; + sep = PyUnicode_FromStringAndSize(".", 1); + if (unlikely(!sep)) + goto bad; + partial_name = PyUnicode_Join(sep, slice); } - offset = ctx->head->parent_offset + field->offset; - if (ctx->fmt_offset != offset) { - PyErr_Format(PyExc_ValueError, - "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", - (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); - return -1; + PyErr_Format( +#if PY_MAJOR_VERSION < 3 + PyExc_ImportError, + "No module named '%s'", PyString_AS_STRING(partial_name)); +#else +#if PY_VERSION_HEX >= 0x030600B1 + PyExc_ModuleNotFoundError, +#else + PyExc_ImportError, +#endif + "No module named '%U'", partial_name); +#endif +bad: + Py_XDECREF(sep); + Py_XDECREF(slice); + Py_XDECREF(partial_name); + return NULL; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) { + PyObject *imported_module; +#if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + return NULL; + imported_module = __Pyx_PyDict_GetItemStr(modules, name); + Py_XINCREF(imported_module); +#else + imported_module = PyImport_GetModule(name); +#endif + return imported_module; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple) { + Py_ssize_t i, nparts; + nparts = PyTuple_GET_SIZE(parts_tuple); + for (i=1; i < nparts && module; i++) { + PyObject *part, *submodule; +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + part = PyTuple_GET_ITEM(parts_tuple, i); +#else + part = PySequence_ITEM(parts_tuple, i); +#endif + submodule = __Pyx_PyObject_GetAttrStrNoError(module, part); +#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(part); +#endif + Py_DECREF(module); + module = submodule; } - ctx->fmt_offset += size; - if (arraysize) - ctx->fmt_offset += (arraysize - 1) * size; - --ctx->enc_count; - while (1) { - if (field == &ctx->root) { - ctx->head = NULL; - if (ctx->enc_count != 0) { - __Pyx_BufFmt_RaiseExpected(ctx); - return -1; - } - break; - } - ctx->head->field = ++field; - if (field->type == NULL) { - --ctx->head; - field = ctx->head->field; - continue; - } else if (field->type->typegroup == 'S') { - size_t parent_offset = ctx->head->parent_offset + field->offset; - if (field->type->fields->type == NULL) continue; - field = field->type->fields; - ++ctx->head; - ctx->head->field = field; - ctx->head->parent_offset = parent_offset; - break; - } else { - break; - } + if (unlikely(!module)) { + return __Pyx__ImportDottedModule_Error(name, parts_tuple, i); } - } while (ctx->enc_count); - ctx->enc_type = 0; - ctx->is_complex = 0; - return 0; + return module; } -static PyObject * -__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) -{ - const char *ts = *tsp; - int i = 0, number, ndim; - ++ts; - if (ctx->new_count != 1) { - PyErr_SetString(PyExc_ValueError, - "Cannot handle repeated arrays in format string"); +#endif +static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if PY_MAJOR_VERSION < 3 + PyObject *module, *from_list, *star = __pyx_n_s__3; + CYTHON_UNUSED_VAR(parts_tuple); + from_list = PyList_New(1); + if (unlikely(!from_list)) return NULL; + Py_INCREF(star); + PyList_SET_ITEM(from_list, 0, star); + module = __Pyx_Import(name, from_list, 0); + Py_DECREF(from_list); + return module; +#else + PyObject *imported_module; + PyObject *module = __Pyx_Import(name, NULL, 0); + if (!parts_tuple || unlikely(!module)) + return module; + imported_module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(imported_module)) { + Py_DECREF(module); + return imported_module; } - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ndim = ctx->head->field->type->ndim; - while (*ts && *ts != ')') { - switch (*ts) { - case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue; - default: break; + PyErr_Clear(); + return __Pyx_ImportDottedModule_WalkParts(module, name, parts_tuple); +#endif +} +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030400B1 + PyObject *module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(module)) { + PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_n_s_spec); + if (likely(spec)) { + PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_n_s_initializing); + if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) { + Py_DECREF(spec); + spec = NULL; + } + Py_XDECREF(unsafe); } - number = __Pyx_BufFmt_ExpectNumber(&ts); - if (number == -1) return NULL; - if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) - return PyErr_Format(PyExc_ValueError, - "Expected a dimension of size %zu, got %d", - ctx->head->field->type->arraysize[i], number); - if (*ts != ',' && *ts != ')') - return PyErr_Format(PyExc_ValueError, - "Expected a comma in format string, got '%c'", *ts); - if (*ts == ',') ts++; - i++; + if (likely(!spec)) { + PyErr_Clear(); + return module; + } + Py_DECREF(spec); + Py_DECREF(module); + } else if (PyErr_Occurred()) { + PyErr_Clear(); } - if (i != ndim) - return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", - ctx->head->field->type->ndim, i); - if (!*ts) { - PyErr_SetString(PyExc_ValueError, - "Unexpected end of format string, expected ')'"); - return NULL; +#endif + return __Pyx__ImportDottedModule(name, parts_tuple); +} + +/* ssize_strlen */ +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; } - ctx->is_valid_array = 1; - ctx->new_count = 1; - *tsp = ++ts; - return Py_None; + return (Py_ssize_t) len; } -static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { - int got_Z = 0; - while (1) { - switch(*ts) { - case 0: - if (ctx->enc_type != 0 && ctx->head == NULL) { - __Pyx_BufFmt_RaiseExpected(ctx); - return NULL; - } - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - if (ctx->head != NULL) { - __Pyx_BufFmt_RaiseExpected(ctx); - return NULL; - } - return ts; - case ' ': - case '\r': - case '\n': - ++ts; - break; - case '<': - if (!__Pyx_Is_Little_Endian()) { - PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); - return NULL; - } - ctx->new_packmode = '='; - ++ts; - break; - case '>': - case '!': - if (__Pyx_Is_Little_Endian()) { - PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); - return NULL; - } - ctx->new_packmode = '='; - ++ts; - break; - case '=': - case '@': - case '^': - ctx->new_packmode = *ts++; - break; - case 'T': - { - const char* ts_after_sub; - size_t i, struct_count = ctx->new_count; - size_t struct_alignment = ctx->struct_alignment; - ctx->new_count = 1; - ++ts; - if (*ts != '{') { - PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); - return NULL; - } - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ctx->enc_type = 0; - ctx->enc_count = 0; - ctx->struct_alignment = 0; - ++ts; - ts_after_sub = ts; - for (i = 0; i != struct_count; ++i) { - ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); - if (!ts_after_sub) return NULL; - } - ts = ts_after_sub; - if (struct_alignment) ctx->struct_alignment = struct_alignment; - } - break; - case '}': - { - size_t alignment = ctx->struct_alignment; - ++ts; - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ctx->enc_type = 0; - if (alignment && ctx->fmt_offset % alignment) { - ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); - } - } - return ts; - case 'x': - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ctx->fmt_offset += ctx->new_count; - ctx->new_count = 1; - ctx->enc_count = 0; - ctx->enc_type = 0; - ctx->enc_packmode = ctx->new_packmode; - ++ts; - break; - case 'Z': - got_Z = 1; - ++ts; - if (*ts != 'f' && *ts != 'd' && *ts != 'g') { - __Pyx_BufFmt_RaiseUnexpectedChar('Z'); - return NULL; - } - CYTHON_FALLTHROUGH; - case '?': case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': - case 'l': case 'L': case 'q': case 'Q': - case 'f': case 'd': case 'g': - case 'O': case 'p': - if ((ctx->enc_type == *ts) && (got_Z == ctx->is_complex) && - (ctx->enc_packmode == ctx->new_packmode) && (!ctx->is_valid_array)) { - ctx->enc_count += ctx->new_count; - ctx->new_count = 1; - got_Z = 0; - ++ts; - break; - } - CYTHON_FALLTHROUGH; - case 's': - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ctx->enc_count = ctx->new_count; - ctx->enc_packmode = ctx->new_packmode; - ctx->enc_type = *ts; - ctx->is_complex = got_Z; - ++ts; - ctx->new_count = 1; - got_Z = 0; - break; - case ':': - ++ts; - while(*ts != ':') ++ts; - ++ts; - break; - case '(': - if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL; - break; - default: - { - int number = __Pyx_BufFmt_ExpectNumber(&ts); - if (number == -1) return NULL; - ctx->new_count = (size_t)number; + +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; } + return 0; } - } + return __Pyx_InBases(a, b); } - -/* BufferGetAndValidate */ - static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { - if (unlikely(info->buf == NULL)) return; - if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; - __Pyx_ReleaseBuffer(info); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); } -static void __Pyx_ZeroBuffer(Py_buffer* buf) { - buf->buf = NULL; - buf->obj = NULL; - buf->strides = __Pyx_zeros; - buf->shape = __Pyx_zeros; - buf->suboffsets = __Pyx_minusones; +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; } -static int __Pyx__GetBufferAndValidate( - Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, - int nd, int cast, __Pyx_BufFmt_StackElem* stack) -{ - buf->buf = NULL; - if (unlikely(__Pyx_GetBuffer(obj, buf, flags) == -1)) { - __Pyx_ZeroBuffer(buf); - return -1; - } - if (unlikely(buf->ndim != nd)) { - PyErr_Format(PyExc_ValueError, - "Buffer has wrong number of dimensions (expected %d, got %d)", - nd, buf->ndim); - goto fail; - } - if (!cast) { - __Pyx_BufFmt_Context ctx; - __Pyx_BufFmt_Init(&ctx, stack, dtype); - if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; - } - if (unlikely((size_t)buf->itemsize != dtype->size)) { - PyErr_Format(PyExc_ValueError, - "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)", - buf->itemsize, (buf->itemsize > 1) ? "s" : "", - dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); - goto fail; - } - if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; - return 0; -fail:; - __Pyx_SafeReleaseBuffer(buf); - return -1; +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } } - -/* PyIntBinop */ - #if !CYTHON_COMPILING_IN_PYPY -static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) { - (void)inplace; - (void)zerodivision_check; - #if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(op1))) { - const long b = intval; - long x; - long a = PyInt_AS_LONG(op1); - x = (long)((unsigned long)a + b); - if (likely((x^a) >= 0 || (x^b) >= 0)) - return PyInt_FromLong(x); - return PyLong_Type.tp_as_number->nb_add(op1, op2); +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; iob_digit; - const Py_ssize_t size = Py_SIZE(op1); - if (likely(__Pyx_sst_abs(size) <= 1)) { - a = likely(size) ? digits[0] : 0; - if (size == -1) a = -a; + for (i=0; i 2 * PyLong_SHIFT) { - a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; -#ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { - lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; -#endif - } - CYTHON_FALLTHROUGH; - case 2: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; -#ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { - lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; -#endif - } - CYTHON_FALLTHROUGH; - case -3: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; -#ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { - lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; -#endif - } - CYTHON_FALLTHROUGH; - case 3: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; -#ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { - lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; -#endif - } - CYTHON_FALLTHROUGH; - case -4: - if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; -#ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { - lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; -#endif - } - CYTHON_FALLTHROUGH; - case 4: - if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; -#ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { - lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; + } + } + return 0; +} +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject* exc_type) { + if (likely(err == exc_type)) return 1; + if (likely(PyExceptionClass_Check(err))) { + if (likely(PyExceptionClass_Check(exc_type))) { + return __Pyx_inner_PyErr_GivenExceptionMatches2(err, NULL, exc_type); + } else if (likely(PyTuple_Check(exc_type))) { + return __Pyx_PyErr_GivenExceptionMatchesTuple(err, exc_type); + } else { + } + } + return PyErr_GivenExceptionMatches(err, exc_type); +} +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) { + assert(PyExceptionClass_Check(exc_type1)); + assert(PyExceptionClass_Check(exc_type2)); + if (likely(err == exc_type1 || err == exc_type2)) return 1; + if (likely(PyExceptionClass_Check(err))) { + return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2); + } + return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2)); +} #endif - } - CYTHON_FALLTHROUGH; - default: return PyLong_Type.tp_as_number->nb_add(op1, op2); + +/* PySequenceMultiply */ +static PyObject* __Pyx_PySequence_Multiply_Generic(PyObject *seq, Py_ssize_t mul) { + PyObject *result, *pymul = PyInt_FromSsize_t(mul); + if (unlikely(!pymul)) + return NULL; + result = PyNumber_Multiply(seq, pymul); + Py_DECREF(pymul); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PySequence_Multiply(PyObject *seq, Py_ssize_t mul) { +#if CYTHON_USE_TYPE_SLOTS + PyTypeObject *type = Py_TYPE(seq); + if (likely(type->tp_as_sequence && type->tp_as_sequence->sq_repeat)) { + return type->tp_as_sequence->sq_repeat(seq, mul); + } else +#endif + { + return __Pyx_PySequence_Multiply_Generic(seq, mul); + } +} + +/* SetItemInt */ +static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) { + int r; + if (unlikely(!j)) return -1; + r = PyObject_SetItem(o, j, v); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list, + CYTHON_NCP_UNUSED int wraparound, CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o)); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o)))) { + PyObject* old = PyList_GET_ITEM(o, n); + Py_INCREF(v); + PyList_SET_ITEM(o, n, v); + Py_DECREF(old); + return 1; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_ass_subscript) { + int r; + PyObject *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return -1; + r = mm->mp_ass_subscript(o, key, v); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_ass_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return -1; + PyErr_Clear(); + } } + return sm->sq_ass_item(o, i, v); } - x = a + b; - return PyLong_FromLong(x); -#ifdef HAVE_LONG_LONG - long_long: - llx = lla + llb; - return PyLong_FromLongLong(llx); -#endif - - } - #endif - if (PyFloat_CheckExact(op1)) { - const long b = intval; - double a = PyFloat_AS_DOUBLE(op1); - double result; - PyFPE_START_PROTECT("add", return NULL) - result = ((double)a) + (double)b; - PyFPE_END_PROTECT(result) - return PyFloat_FromDouble(result); +#else +#if CYTHON_COMPILING_IN_PYPY + if (is_list || (PySequence_Check(o) && !PyDict_Check(o))) +#else + if (is_list || PySequence_Check(o)) +#endif + { + return PySequence_SetItem(o, i, v); } - return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); -} #endif + return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v); +} -/* None */ - static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { +/* RaiseUnboundLocalError */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); } -/* None */ - static void __Pyx_RaiseUnboundMemoryviewSliceNogil(const char *varname) { - #ifdef WITH_THREAD - PyGILState_STATE gilstate = PyGILState_Ensure(); - #endif - __Pyx_RaiseUnboundLocalError(varname); - #ifdef WITH_THREAD - PyGILState_Release(gilstate); - #endif +/* DivInt[long] */ +static CYTHON_INLINE long __Pyx_div_long(long a, long b) { + long q = a / b; + long r = a - q*b; + q -= ((r != 0) & ((r ^ b) < 0)); + return q; } -/* PyObjectFormatAndDecref */ - static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatSimpleAndDecref(PyObject* s, PyObject* f) { - if (unlikely(!s)) return NULL; - if (likely(PyUnicode_CheckExact(s))) return s; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_CheckExact(s))) { - PyObject *result = PyUnicode_FromEncodedObject(s, NULL, "strict"); - Py_DECREF(s); - return result; +/* ImportFrom */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + const char* module_name_str = 0; + PyObject* module_name = 0; + PyObject* module_dot = 0; + PyObject* full_name = 0; + PyErr_Clear(); + module_name_str = PyModule_GetName(module); + if (unlikely(!module_name_str)) { goto modbad; } + module_name = PyUnicode_FromString(module_name_str); + if (unlikely(!module_name)) { goto modbad; } + module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__2); + if (unlikely(!module_dot)) { goto modbad; } + full_name = PyUnicode_Concat(module_dot, name); + if (unlikely(!full_name)) { goto modbad; } + #if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + { + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + goto modbad; + value = PyObject_GetItem(modules, full_name); + } + #else + value = PyImport_GetModule(full_name); + #endif + modbad: + Py_XDECREF(full_name); + Py_XDECREF(module_dot); + Py_XDECREF(module_name); } - #endif - return __Pyx_PyObject_FormatAndDecref(s, f); + if (unlikely(!value)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; } -static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatAndDecref(PyObject* s, PyObject* f) { - PyObject *result = PyObject_Format(s, f); - Py_DECREF(s); - return result; + +/* HasAttr */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { + PyObject *r; + if (unlikely(!__Pyx_PyBaseString_Check(n))) { + PyErr_SetString(PyExc_TypeError, + "hasattr(): attribute name must be string"); + return -1; + } + r = __Pyx_GetAttr(o, n); + if (!r) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; + } } -/* PyObjectFormat */ - #if CYTHON_USE_UNICODE_WRITER -static PyObject* __Pyx_PyObject_Format(PyObject* obj, PyObject* format_spec) { - int ret; - _PyUnicodeWriter writer; - if (likely(PyFloat_CheckExact(obj))) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x03040000 - _PyUnicodeWriter_Init(&writer, 0); -#else - _PyUnicodeWriter_Init(&writer); +/* PyObjectSetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_setattro)) + return tp->tp_setattro(obj, attr_name, value); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_setattr)) + return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); #endif - ret = _PyFloat_FormatAdvancedWriter( - &writer, - obj, - format_spec, 0, PyUnicode_GET_LENGTH(format_spec)); - } else if (likely(PyLong_CheckExact(obj))) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x03040000 - _PyUnicodeWriter_Init(&writer, 0); -#else - _PyUnicodeWriter_Init(&writer); + return PyObject_SetAttr(obj, attr_name, value); +} #endif - ret = _PyLong_FormatAdvancedWriter( - &writer, - obj, - format_spec, 0, PyUnicode_GET_LENGTH(format_spec)); - } else { - return PyObject_Format(obj, format_spec); + +/* IterFinish */ +static CYTHON_INLINE int __Pyx_IterFinish(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (unlikely(exc_type)) { + if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) + return -1; + __Pyx_PyErr_Clear(); + return 0; } - if (unlikely(ret == -1)) { - _PyUnicodeWriter_Dealloc(&writer); - return NULL; + return 0; +} + +/* UnpackItemEndCheck */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { + if (unlikely(retval)) { + Py_DECREF(retval); + __Pyx_RaiseTooManyValuesError(expected); + return -1; } - return _PyUnicodeWriter_Finish(&writer); + return __Pyx_IterFinish(); } -#endif -/* JoinPyUnicode */ - static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, - CYTHON_UNUSED Py_UCS4 max_char) { -#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - PyObject *result_uval; - int result_ukind; - Py_ssize_t i, char_pos; - void *result_udata; -#if CYTHON_PEP393_ENABLED - result_uval = PyUnicode_New(result_ulength, max_char); - if (unlikely(!result_uval)) return NULL; - result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND; - result_udata = PyUnicode_DATA(result_uval); -#else - result_uval = PyUnicode_FromUnicode(NULL, result_ulength); - if (unlikely(!result_uval)) return NULL; - result_ukind = sizeof(Py_UNICODE); - result_udata = PyUnicode_AS_UNICODE(result_uval); -#endif - char_pos = 0; - for (i=0; i < value_count; i++) { - int ukind; - Py_ssize_t ulength; - void *udata; - PyObject *uval = PyTuple_GET_ITEM(value_tuple, i); - if (unlikely(__Pyx_PyUnicode_READY(uval))) - goto bad; - ulength = __Pyx_PyUnicode_GET_LENGTH(uval); - if (unlikely(!ulength)) - continue; - if (unlikely(char_pos + ulength < 0)) - goto overflow; - ukind = __Pyx_PyUnicode_KIND(uval); - udata = __Pyx_PyUnicode_DATA(uval); - if (!CYTHON_PEP393_ENABLED || ukind == result_ukind) { - memcpy((char *)result_udata + char_pos * result_ukind, udata, (size_t) (ulength * result_ukind)); - } else { - #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030300F0 || defined(_PyUnicode_FastCopyCharacters) - _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength); - #else - Py_ssize_t j; - for (j=0; j < ulength; j++) { - Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j); - __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar); +/* DictGetItem */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); } - #endif } - char_pos += ulength; + return NULL; } - return result_uval; -overflow: - PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string"); -bad: - Py_DECREF(result_uval); - return NULL; -#else - result_ulength++; - value_count++; - return PyUnicode_Join(__pyx_empty_unicode, value_tuple); + Py_INCREF(value); + return value; +} #endif + +/* UnicodeAsUCS4 */ +static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject* x) { + Py_ssize_t length; + #if CYTHON_PEP393_ENABLED + length = PyUnicode_GET_LENGTH(x); + if (likely(length == 1)) { + return PyUnicode_READ_CHAR(x, 0); + } + #else + length = PyUnicode_GET_SIZE(x); + if (likely(length == 1)) { + return PyUnicode_AS_UNICODE(x)[0]; + } + #if Py_UNICODE_SIZE == 2 + else if (PyUnicode_GET_SIZE(x) == 2) { + Py_UCS4 high_val = PyUnicode_AS_UNICODE(x)[0]; + if (high_val >= 0xD800 && high_val <= 0xDBFF) { + Py_UCS4 low_val = PyUnicode_AS_UNICODE(x)[1]; + if (low_val >= 0xDC00 && low_val <= 0xDFFF) { + return 0x10000 + (((high_val & ((1<<10)-1)) << 10) | (low_val & ((1<<10)-1))); + } + } + } + #endif + #endif + PyErr_Format(PyExc_ValueError, + "only single character unicode strings can be converted to Py_UCS4, " + "got length %" CYTHON_FORMAT_SSIZE_T "d", length); + return (Py_UCS4)-1; } -/* MemviewSliceInit */ - static int -__Pyx_init_memviewslice(struct __pyx_memoryview_obj *memview, - int ndim, - __Pyx_memviewslice *memviewslice, - int memview_is_new_reference) -{ - __Pyx_RefNannyDeclarations - int i, retval=-1; - Py_buffer *buf = &memview->view; - __Pyx_RefNannySetupContext("init_memviewslice", 0); - if (unlikely(memviewslice->memview || memviewslice->data)) { - PyErr_SetString(PyExc_ValueError, - "memviewslice is already initialized!"); - goto fail; - } - if (buf->strides) { - for (i = 0; i < ndim; i++) { - memviewslice->strides[i] = buf->strides[i]; - } - } else { - Py_ssize_t stride = buf->itemsize; - for (i = ndim - 1; i >= 0; i--) { - memviewslice->strides[i] = stride; - stride *= buf->shape[i]; +/* object_ord */ +static long __Pyx__PyObject_Ord(PyObject* c) { + Py_ssize_t size; + if (PyBytes_Check(c)) { + size = PyBytes_GET_SIZE(c); + if (likely(size == 1)) { + return (unsigned char) PyBytes_AS_STRING(c)[0]; } - } - for (i = 0; i < ndim; i++) { - memviewslice->shape[i] = buf->shape[i]; - if (buf->suboffsets) { - memviewslice->suboffsets[i] = buf->suboffsets[i]; - } else { - memviewslice->suboffsets[i] = -1; +#if PY_MAJOR_VERSION < 3 + } else if (PyUnicode_Check(c)) { + return (long)__Pyx_PyUnicode_AsPy_UCS4(c); +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + } else if (PyByteArray_Check(c)) { + size = PyByteArray_GET_SIZE(c); + if (likely(size == 1)) { + return (unsigned char) PyByteArray_AS_STRING(c)[0]; } +#endif + } else { + __Pyx_TypeName c_type_name = __Pyx_PyType_GetName(Py_TYPE(c)); + PyErr_Format(PyExc_TypeError, + "ord() expected string of length 1, but " __Pyx_FMT_TYPENAME " found", + c_type_name); + __Pyx_DECREF_TypeName(c_type_name); + return (long)(Py_UCS4)-1; } - memviewslice->memview = memview; - memviewslice->data = (char *)buf->buf; - if (__pyx_add_acquisition_count(memview) == 0 && !memview_is_new_reference) { - Py_INCREF(memview); + PyErr_Format(PyExc_TypeError, + "ord() expected a character, but string of length %zd found", size); + return (long)(Py_UCS4)-1; +} + +/* memoryview_get_from_buffer */ +#if !CYTHON_COMPILING_IN_LIMITED_API || CYTHON_LIMITED_API >= 0x030b0000 +#else +static Py_ssize_t __Pyx_PyMemoryView_Get_itemsize(PyObject *obj) { + Py_ssize_t result; + PyObject *attr = PyObject_GetAttr(obj, __pyx_n_s_itemsize); + if (!attr) { + goto bad; } - retval = 0; - goto no_fail; -fail: - memviewslice->memview = 0; - memviewslice->data = 0; - retval = -1; -no_fail: - __Pyx_RefNannyFinishContext(); - return retval; + result = PyLong_AsSsize_t(attr); + Py_DECREF(attr); + return result; + bad: + Py_XDECREF(attr); + return -1; } -#ifndef Py_NO_RETURN -#define Py_NO_RETURN #endif -static void __pyx_fatalerror(const char *fmt, ...) Py_NO_RETURN { - va_list vargs; - char msg[200]; -#ifdef HAVE_STDARG_PROTOTYPES - va_start(vargs, fmt); + +/* memoryview_get_from_buffer */ +#if !CYTHON_COMPILING_IN_LIMITED_API || CYTHON_LIMITED_API >= 0x030b0000 #else - va_start(vargs); -#endif - vsnprintf(msg, 200, fmt, vargs); - va_end(vargs); - Py_FatalError(msg); -} -static CYTHON_INLINE int -__pyx_add_acquisition_count_locked(__pyx_atomic_int *acquisition_count, - PyThread_type_lock lock) -{ +static int __Pyx_PyMemoryView_Get_ndim(PyObject *obj) { int result; - PyThread_acquire_lock(lock, 1); - result = (*acquisition_count)++; - PyThread_release_lock(lock); + PyObject *attr = PyObject_GetAttr(obj, __pyx_n_s_ndim); + if (!attr) { + goto bad; + } + result = PyLong_AsLong(attr); + Py_DECREF(attr); return result; + bad: + Py_XDECREF(attr); + return -1; } -static CYTHON_INLINE int -__pyx_sub_acquisition_count_locked(__pyx_atomic_int *acquisition_count, - PyThread_type_lock lock) -{ - int result; - PyThread_acquire_lock(lock, 1); - result = (*acquisition_count)--; - PyThread_release_lock(lock); - return result; +#endif + +/* PyObjectCallNoArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { + PyObject *arg = NULL; + return __Pyx_PyObject_FastCall(func, (&arg)+1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); } -static CYTHON_INLINE void -__Pyx_INC_MEMVIEW(__Pyx_memviewslice *memslice, int have_gil, int lineno) -{ - int first_time; - struct __pyx_memoryview_obj *memview = memslice->memview; - if (unlikely(!memview || (PyObject *) memview == Py_None)) - return; - if (unlikely(__pyx_get_slice_count(memview) < 0)) - __pyx_fatalerror("Acquisition count is %d (line %d)", - __pyx_get_slice_count(memview), lineno); - first_time = __pyx_add_acquisition_count(memview) == 0; - if (unlikely(first_time)) { - if (have_gil) { - Py_INCREF((PyObject *) memview); - } else { - PyGILState_STATE _gilstate = PyGILState_Ensure(); - Py_INCREF((PyObject *) memview); - PyGILState_Release(_gilstate); - } + +/* PyObjectGetMethod */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + __Pyx_TypeName type_name; + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; } -} -static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *memslice, - int have_gil, int lineno) { - int last_time; - struct __pyx_memoryview_obj *memview = memslice->memview; - if (unlikely(!memview || (PyObject *) memview == Py_None)) { - memslice->memview = NULL; - return; + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; } - if (unlikely(__pyx_get_slice_count(memview) <= 0)) - __pyx_fatalerror("Acquisition count is %d (line %d)", - __pyx_get_slice_count(memview), lineno); - last_time = __pyx_sub_acquisition_count(memview) == 1; - memslice->data = NULL; - if (unlikely(last_time)) { - if (have_gil) { - Py_CLEAR(memslice->memview); + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR + if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) +#elif PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif +#endif + { + meth_found = 1; } else { - PyGILState_STATE _gilstate = PyGILState_Ensure(); - Py_CLEAR(memslice->memview); - PyGILState_Release(_gilstate); + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } } - } else { - memslice->memview = NULL; } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (likely(descr != NULL)) { + *method = descr; + return 0; + } + type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; + } +#endif + *method = attr; + return 0; } -/* PyObjectCallMethod1 */ - static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { - PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); - Py_DECREF(method); - return result; -} -static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { - PyObject *method = NULL, *result; +/* PyObjectCallMethod0 */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { + PyObject *method = NULL, *result = NULL; int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); if (likely(is_method)) { - result = __Pyx_PyObject_Call2Args(method, obj, arg); + result = __Pyx_PyObject_CallOneArg(method, obj); Py_DECREF(method); return result; } - if (unlikely(!method)) return NULL; - return __Pyx__PyObject_CallMethod1(method, arg); + if (unlikely(!method)) goto bad; + result = __Pyx_PyObject_CallNoArg(method); + Py_DECREF(method); +bad: + return result; } -/* append */ - static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x) { - if (likely(PyList_CheckExact(L))) { - if (unlikely(__Pyx_PyList_Append(L, x) < 0)) return -1; +/* UnpackTupleError */ +static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { + if (t == Py_None) { + __Pyx_RaiseNoneNotIterableError(); + } else if (PyTuple_GET_SIZE(t) < index) { + __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t)); } else { - PyObject* retval = __Pyx_PyObject_CallMethod1(L, __pyx_n_s_append, x); - if (unlikely(!retval)) - return -1; - Py_DECREF(retval); + __Pyx_RaiseTooManyValuesError(index); } - return 0; } -/* ObjectGetItem */ - #if CYTHON_USE_TYPE_SLOTS -static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) { - PyObject *runerr; - Py_ssize_t key_value; - PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence; - if (unlikely(!(m && m->sq_item))) { - PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name); - return NULL; - } - key_value = __Pyx_PyIndex_AsSsize_t(index); - if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { - return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); - } - if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { - PyErr_Clear(); - PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name); +/* UnpackTuple2 */ +static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( + PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) { + PyObject *value1 = NULL, *value2 = NULL; +#if CYTHON_COMPILING_IN_PYPY + value1 = PySequence_ITEM(tuple, 0); if (unlikely(!value1)) goto bad; + value2 = PySequence_ITEM(tuple, 1); if (unlikely(!value2)) goto bad; +#else + value1 = PyTuple_GET_ITEM(tuple, 0); Py_INCREF(value1); + value2 = PyTuple_GET_ITEM(tuple, 1); Py_INCREF(value2); +#endif + if (decref_tuple) { + Py_DECREF(tuple); } - return NULL; + *pvalue1 = value1; + *pvalue2 = value2; + return 0; +#if CYTHON_COMPILING_IN_PYPY +bad: + Py_XDECREF(value1); + Py_XDECREF(value2); + if (decref_tuple) { Py_XDECREF(tuple); } + return -1; +#endif } -static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) { - PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping; - if (likely(m && m->mp_subscript)) { - return m->mp_subscript(obj, key); - } - return __Pyx_PyObject_GetIndex(obj, key); +static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, + int has_known_size, int decref_tuple) { + Py_ssize_t index; + PyObject *value1 = NULL, *value2 = NULL, *iter = NULL; + iternextfunc iternext; + iter = PyObject_GetIter(tuple); + if (unlikely(!iter)) goto bad; + if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; } + iternext = __Pyx_PyObject_GetIterNextFunc(iter); + value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; } + value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; } + if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad; + Py_DECREF(iter); + *pvalue1 = value1; + *pvalue2 = value2; + return 0; +unpacking_failed: + if (!has_known_size && __Pyx_IterFinish() == 0) + __Pyx_RaiseNeedMoreValuesError(index); +bad: + Py_XDECREF(iter); + Py_XDECREF(value1); + Py_XDECREF(value2); + if (decref_tuple) { Py_XDECREF(tuple); } + return -1; } -#endif -/* PyIntBinop */ - #if !CYTHON_COMPILING_IN_PYPY -static PyObject* __Pyx_PyInt_AddCObj(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) { - (void)inplace; - (void)zerodivision_check; - #if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(op2))) { - const long a = intval; - long x; - long b = PyInt_AS_LONG(op2); - x = (long)((unsigned long)a + b); - if (likely((x^a) >= 0 || (x^b) >= 0)) - return PyInt_FromLong(x); - return PyLong_Type.tp_as_number->nb_add(op1, op2); +/* dict_iter */ +static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name, + Py_ssize_t* p_orig_length, int* p_source_is_dict) { + is_dict = is_dict || likely(PyDict_CheckExact(iterable)); + *p_source_is_dict = is_dict; + if (is_dict) { +#if !CYTHON_COMPILING_IN_PYPY + *p_orig_length = PyDict_Size(iterable); + Py_INCREF(iterable); + return iterable; +#elif PY_MAJOR_VERSION >= 3 + static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL; + PyObject **pp = NULL; + if (method_name) { + const char *name = PyUnicode_AsUTF8(method_name); + if (strcmp(name, "iteritems") == 0) pp = &py_items; + else if (strcmp(name, "iterkeys") == 0) pp = &py_keys; + else if (strcmp(name, "itervalues") == 0) pp = &py_values; + if (pp) { + if (!*pp) { + *pp = PyUnicode_FromString(name + 4); + if (!*pp) + return NULL; + } + method_name = *pp; + } + } +#endif } - #endif - #if CYTHON_USE_PYLONG_INTERNALS - if (likely(PyLong_CheckExact(op2))) { - const long a = intval; - long b, x; -#ifdef HAVE_LONG_LONG - const PY_LONG_LONG lla = intval; - PY_LONG_LONG llb, llx; + *p_orig_length = 0; + if (method_name) { + PyObject* iter; + iterable = __Pyx_PyObject_CallMethod0(iterable, method_name); + if (!iterable) + return NULL; +#if !CYTHON_COMPILING_IN_PYPY + if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable)) + return iterable; #endif - const digit* digits = ((PyLongObject*)op2)->ob_digit; - const Py_ssize_t size = Py_SIZE(op2); - if (likely(__Pyx_sst_abs(size) <= 1)) { - b = likely(size) ? digits[0] : 0; - if (size == -1) b = -b; + iter = PyObject_GetIter(iterable); + Py_DECREF(iterable); + return iter; + } + return PyObject_GetIter(iterable); +} +static CYTHON_INLINE int __Pyx_dict_iter_next( + PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos, + PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) { + PyObject* next_item; +#if !CYTHON_COMPILING_IN_PYPY + if (source_is_dict) { + PyObject *key, *value; + if (unlikely(orig_length != PyDict_Size(iter_obj))) { + PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration"); + return -1; + } + if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) { + return 0; + } + if (pitem) { + PyObject* tuple = PyTuple_New(2); + if (unlikely(!tuple)) { + return -1; + } + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(tuple, 0, key); + PyTuple_SET_ITEM(tuple, 1, value); + *pitem = tuple; } else { - switch (size) { - case -2: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - b = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; -#ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { - llb = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; -#endif - } - CYTHON_FALLTHROUGH; - case 2: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - b = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; -#ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { - llb = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; -#endif - } - CYTHON_FALLTHROUGH; - case -3: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - b = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; -#ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { - llb = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; -#endif - } - CYTHON_FALLTHROUGH; - case 3: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - b = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; -#ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { - llb = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; -#endif - } - CYTHON_FALLTHROUGH; - case -4: - if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - b = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; -#ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { - llb = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; -#endif - } - CYTHON_FALLTHROUGH; - case 4: - if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - b = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; -#ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { - llb = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; -#endif - } - CYTHON_FALLTHROUGH; - default: return PyLong_Type.tp_as_number->nb_add(op1, op2); + if (pkey) { + Py_INCREF(key); + *pkey = key; + } + if (pvalue) { + Py_INCREF(value); + *pvalue = value; } } - x = a + b; - return PyLong_FromLong(x); -#ifdef HAVE_LONG_LONG - long_long: - llx = lla + llb; - return PyLong_FromLongLong(llx); + return 1; + } else if (PyTuple_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyTuple_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else if (PyList_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyList_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else #endif - - + { + next_item = PyIter_Next(iter_obj); + if (unlikely(!next_item)) { + return __Pyx_IterFinish(); + } } - #endif - if (PyFloat_CheckExact(op2)) { - const long a = intval; - double b = PyFloat_AS_DOUBLE(op2); - double result; - PyFPE_START_PROTECT("add", return NULL) - result = ((double)a) + (double)b; - PyFPE_END_PROTECT(result) - return PyFloat_FromDouble(result); + if (pitem) { + *pitem = next_item; + } else if (pkey && pvalue) { + if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1)) + return -1; + } else if (pkey) { + *pkey = next_item; + } else { + *pvalue = next_item; } - return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); + return 1; } -#endif -/* PyIntBinop */ - #if !CYTHON_COMPILING_IN_PYPY -static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) { - (void)inplace; - (void)zerodivision_check; - #if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(op1))) { - const long b = intval; - long x; - long a = PyInt_AS_LONG(op1); - x = (long)((unsigned long)a - b); - if (likely((x^a) >= 0 || (x^~b) >= 0)) - return PyInt_FromLong(x); - return PyLong_Type.tp_as_number->nb_subtract(op1, op2); - } +/* UnpackUnboundCMethod */ +static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject *args, PyObject *kwargs) { + PyObject *selfless_args = PyTuple_GetSlice(args, 1, PyTuple_Size(args)); + if (unlikely(!selfless_args)) return NULL; + PyObject *result = PyObject_Call(method, selfless_args, kwargs); + Py_DECREF(selfless_args); + return result; +} +static PyMethodDef __Pyx_UnboundCMethod_Def = { + "CythonUnboundCMethod", + __PYX_REINTERPRET_FUNCION(PyCFunction, __Pyx_SelflessCall), + METH_VARARGS | METH_KEYWORDS, + NULL +}; +static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) { + PyObject *method; + method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name); + if (unlikely(!method)) + return -1; + target->method = method; +#if CYTHON_COMPILING_IN_CPYTHON + #if PY_MAJOR_VERSION >= 3 + if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type))) + #else + if (likely(!PyCFunction_Check(method))) #endif - #if CYTHON_USE_PYLONG_INTERNALS - if (likely(PyLong_CheckExact(op1))) { - const long b = intval; - long a, x; -#ifdef HAVE_LONG_LONG - const PY_LONG_LONG llb = intval; - PY_LONG_LONG lla, llx; + { + PyMethodDescrObject *descr = (PyMethodDescrObject*) method; + target->func = descr->d_method->ml_meth; + target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS); + } else #endif - const digit* digits = ((PyLongObject*)op1)->ob_digit; - const Py_ssize_t size = Py_SIZE(op1); - if (likely(__Pyx_sst_abs(size) <= 1)) { - a = likely(size) ? digits[0] : 0; - if (size == -1) a = -a; - } else { - switch (size) { - case -2: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; -#ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { - lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; +#if defined(CYTHON_COMPILING_IN_PYPY) +#elif PY_VERSION_HEX >= 0x03090000 + if (PyCFunction_CheckExact(method)) +#else + if (PyCFunction_Check(method)) #endif - } - CYTHON_FALLTHROUGH; - case 2: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; -#ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { - lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; + { + PyObject *self; + int self_found; +#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY + self = PyObject_GetAttrString(method, "__self__"); + if (!self) { + PyErr_Clear(); + } +#else + self = PyCFunction_GET_SELF(method); #endif - } - CYTHON_FALLTHROUGH; - case -3: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; -#ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { - lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; + self_found = (self && self != Py_None); +#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY + Py_XDECREF(self); #endif - } - CYTHON_FALLTHROUGH; - case 3: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; + if (self_found) { + PyObject *unbound_method = PyCFunction_New(&__Pyx_UnboundCMethod_Def, method); + if (unlikely(!unbound_method)) return -1; + Py_DECREF(method); + target->method = unbound_method; + } + } + return 0; +} + +/* CallUnboundCMethod0 */ +static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self) { + PyObject *args, *result = NULL; + if (unlikely(!cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL; +#if CYTHON_ASSUME_SAFE_MACROS + args = PyTuple_New(1); + if (unlikely(!args)) goto bad; + Py_INCREF(self); + PyTuple_SET_ITEM(args, 0, self); +#else + args = PyTuple_Pack(1, self); + if (unlikely(!args)) goto bad; +#endif + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); + Py_DECREF(args); +bad: + return result; +} + +/* py_dict_values */ +static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d) { + if (PY_MAJOR_VERSION >= 3) + return __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyDict_Type_values, d); + else + return PyDict_Values(d); +} + +/* IsLittleEndian */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void) +{ + union { + uint32_t u32; + uint8_t u8[4]; + } S; + S.u32 = 0x01020304; + return S.u8[0] == 4; +} + +/* BufferFormatCheck */ +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type) { + stack[0].field = &ctx->root; + stack[0].parent_offset = 0; + ctx->root.type = type; + ctx->root.name = "buffer dtype"; + ctx->root.offset = 0; + ctx->head = stack; + ctx->head->field = &ctx->root; + ctx->fmt_offset = 0; + ctx->head->parent_offset = 0; + ctx->new_packmode = '@'; + ctx->enc_packmode = '@'; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->is_complex = 0; + ctx->is_valid_array = 0; + ctx->struct_alignment = 0; + while (type->typegroup == 'S') { + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = 0; + type = type->fields->type; + } +} +static int __Pyx_BufFmt_ParseNumber(const char** ts) { + int count; + const char* t = *ts; + if (*t < '0' || *t > '9') { + return -1; + } else { + count = *t++ - '0'; + while (*t >= '0' && *t <= '9') { + count *= 10; + count += *t++ - '0'; + } + } + *ts = t; + return count; +} +static int __Pyx_BufFmt_ExpectNumber(const char **ts) { + int number = __Pyx_BufFmt_ParseNumber(ts); + if (number == -1) + PyErr_Format(PyExc_ValueError,\ + "Does not understand character buffer dtype format string ('%c')", **ts); + return number; +} +static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { + PyErr_Format(PyExc_ValueError, + "Unexpected format string character: '%c'", ch); +} +static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { + switch (ch) { + case '?': return "'bool'"; + case 'c': return "'char'"; + case 'b': return "'signed char'"; + case 'B': return "'unsigned char'"; + case 'h': return "'short'"; + case 'H': return "'unsigned short'"; + case 'i': return "'int'"; + case 'I': return "'unsigned int'"; + case 'l': return "'long'"; + case 'L': return "'unsigned long'"; + case 'q': return "'long long'"; + case 'Q': return "'unsigned long long'"; + case 'f': return (is_complex ? "'complex float'" : "'float'"); + case 'd': return (is_complex ? "'complex double'" : "'double'"); + case 'g': return (is_complex ? "'complex long double'" : "'long double'"); + case 'T': return "a struct"; + case 'O': return "Python object"; + case 'P': return "a pointer"; + case 's': case 'p': return "a string"; + case 0: return "end"; + default: return "unparsable format string"; + } +} +static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return 2; + case 'i': case 'I': case 'l': case 'L': return 4; + case 'q': case 'Q': return 8; + case 'f': return (is_complex ? 8 : 4); + case 'd': return (is_complex ? 16 : 8); + case 'g': { + PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); + return 0; + } + case 'O': case 'P': return sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(short); + case 'i': case 'I': return sizeof(int); + case 'l': case 'L': return sizeof(long); + #ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(PY_LONG_LONG); + #endif + case 'f': return sizeof(float) * (is_complex ? 2 : 1); + case 'd': return sizeof(double) * (is_complex ? 2 : 1); + case 'g': return sizeof(long double) * (is_complex ? 2 : 1); + case 'O': case 'P': return sizeof(void*); + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +typedef struct { char c; short x; } __Pyx_st_short; +typedef struct { char c; int x; } __Pyx_st_int; +typedef struct { char c; long x; } __Pyx_st_long; +typedef struct { char c; float x; } __Pyx_st_float; +typedef struct { char c; double x; } __Pyx_st_double; +typedef struct { char c; long double x; } __Pyx_st_longdouble; +typedef struct { char c; void *x; } __Pyx_st_void_p; #ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { - lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; +typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; #endif - } - CYTHON_FALLTHROUGH; - case -4: - if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; +static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, int is_complex) { + CYTHON_UNUSED_VAR(is_complex); + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); #ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { - lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; + case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); #endif - } - CYTHON_FALLTHROUGH; - case 4: - if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; + case 'f': return sizeof(__Pyx_st_float) - sizeof(float); + case 'd': return sizeof(__Pyx_st_double) - sizeof(double); + case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +/* These are for computing the padding at the end of the struct to align + on the first member of the struct. This will probably the same as above, + but we don't have any guarantees. + */ +typedef struct { short x; char c; } __Pyx_pad_short; +typedef struct { int x; char c; } __Pyx_pad_int; +typedef struct { long x; char c; } __Pyx_pad_long; +typedef struct { float x; char c; } __Pyx_pad_float; +typedef struct { double x; char c; } __Pyx_pad_double; +typedef struct { long double x; char c; } __Pyx_pad_longdouble; +typedef struct { void *x; char c; } __Pyx_pad_void_p; #ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { - lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; +typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; #endif - } - CYTHON_FALLTHROUGH; - default: return PyLong_Type.tp_as_number->nb_subtract(op1, op2); - } - } - x = a - b; - return PyLong_FromLong(x); +static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, int is_complex) { + CYTHON_UNUSED_VAR(is_complex); + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); #ifdef HAVE_LONG_LONG - long_long: - llx = lla - llb; - return PyLong_FromLongLong(llx); + case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); #endif - - + case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); + case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); + case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; } - #endif - if (PyFloat_CheckExact(op1)) { - const long b = intval; - double a = PyFloat_AS_DOUBLE(op1); - double result; - PyFPE_START_PROTECT("subtract", return NULL) - result = ((double)a) - (double)b; - PyFPE_END_PROTECT(result) - return PyFloat_FromDouble(result); +} +static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { + switch (ch) { + case 'c': + return 'H'; + case 'b': case 'h': case 'i': + case 'l': case 'q': case 's': case 'p': + return 'I'; + case '?': case 'B': case 'H': case 'I': case 'L': case 'Q': + return 'U'; + case 'f': case 'd': case 'g': + return (is_complex ? 'C' : 'R'); + case 'O': + return 'O'; + case 'P': + return 'P'; + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; } - return (inplace ? PyNumber_InPlaceSubtract : PyNumber_Subtract)(op1, op2); + } } -#endif - -/* SliceObject */ - static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj, - Py_ssize_t cstart, Py_ssize_t cstop, - PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, - int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) { -#if CYTHON_USE_TYPE_SLOTS - PyMappingMethods* mp; -#if PY_MAJOR_VERSION < 3 - PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; - if (likely(ms && ms->sq_slice)) { - if (!has_cstart) { - if (_py_start && (*_py_start != Py_None)) { - cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); - if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; - } else - cstart = 0; +static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { + if (ctx->head == NULL || ctx->head->field == &ctx->root) { + const char* expected; + const char* quote; + if (ctx->head == NULL) { + expected = "end"; + quote = ""; + } else { + expected = ctx->head->field->type->name; + quote = "'"; + } + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected %s%s%s but got %s", + quote, expected, quote, + __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); + } else { + __Pyx_StructField* field = ctx->head->field; + __Pyx_StructField* parent = (ctx->head - 1)->field; + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", + field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), + parent->type->name, field->name); + } +} +static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { + char group; + size_t size, offset, arraysize = 1; + if (ctx->enc_type == 0) return 0; + if (ctx->head->field->type->arraysize[0]) { + int i, ndim = 0; + if (ctx->enc_type == 's' || ctx->enc_type == 'p') { + ctx->is_valid_array = ctx->head->field->type->ndim == 1; + ndim = 1; + if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { + PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %zu", + ctx->head->field->type->arraysize[0], ctx->enc_count); + return -1; } - if (!has_cstop) { - if (_py_stop && (*_py_stop != Py_None)) { - cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); - if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; - } else - cstop = PY_SSIZE_T_MAX; + } + if (!ctx->is_valid_array) { + PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", + ctx->head->field->type->ndim, ndim); + return -1; + } + for (i = 0; i < ctx->head->field->type->ndim; i++) { + arraysize *= ctx->head->field->type->arraysize[i]; + } + ctx->is_valid_array = 0; + ctx->enc_count = 1; + } + group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); + do { + __Pyx_StructField* field = ctx->head->field; + __Pyx_TypeInfo* type = field->type; + if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { + size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); + } else { + size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); + } + if (ctx->enc_packmode == '@') { + size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); + size_t align_mod_offset; + if (align_at == 0) return -1; + align_mod_offset = ctx->fmt_offset % align_at; + if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; + if (ctx->struct_alignment == 0) + ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, + ctx->is_complex); + } + if (type->size != size || type->typegroup != group) { + if (type->typegroup == 'C' && type->fields != NULL) { + size_t parent_offset = ctx->head->parent_offset + field->offset; + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = parent_offset; + continue; + } + if ((type->typegroup == 'H' || group == 'H') && type->size == size) { + } else { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + } + offset = ctx->head->parent_offset + field->offset; + if (ctx->fmt_offset != offset) { + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", + (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); + return -1; + } + ctx->fmt_offset += size; + if (arraysize) + ctx->fmt_offset += (arraysize - 1) * size; + --ctx->enc_count; + while (1) { + if (field == &ctx->root) { + ctx->head = NULL; + if (ctx->enc_count != 0) { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; } - if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { - Py_ssize_t l = ms->sq_length(obj); - if (likely(l >= 0)) { - if (cstop < 0) { - cstop += l; - if (cstop < 0) cstop = 0; - } - if (cstart < 0) { - cstart += l; - if (cstart < 0) cstart = 0; - } - } else { - if (!PyErr_ExceptionMatches(PyExc_OverflowError)) - goto bad; - PyErr_Clear(); - } + break; + } + ctx->head->field = ++field; + if (field->type == NULL) { + --ctx->head; + field = ctx->head->field; + continue; + } else if (field->type->typegroup == 'S') { + size_t parent_offset = ctx->head->parent_offset + field->offset; + if (field->type->fields->type == NULL) continue; + field = field->type->fields; + ++ctx->head; + ctx->head->field = field; + ctx->head->parent_offset = parent_offset; + break; + } else { + break; + } + } + } while (ctx->enc_count); + ctx->enc_type = 0; + ctx->is_complex = 0; + return 0; +} +static PyObject * +__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) +{ + const char *ts = *tsp; + int i = 0, number, ndim; + ++ts; + if (ctx->new_count != 1) { + PyErr_SetString(PyExc_ValueError, + "Cannot handle repeated arrays in format string"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ndim = ctx->head->field->type->ndim; + while (*ts && *ts != ')') { + switch (*ts) { + case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue; + default: break; } - return ms->sq_slice(obj, cstart, cstop); + number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) + return PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %d", + ctx->head->field->type->arraysize[i], number); + if (*ts != ',' && *ts != ')') + return PyErr_Format(PyExc_ValueError, + "Expected a comma in format string, got '%c'", *ts); + if (*ts == ',') ts++; + i++; } -#endif - mp = Py_TYPE(obj)->tp_as_mapping; - if (likely(mp && mp->mp_subscript)) -#endif - { - PyObject* result; - PyObject *py_slice, *py_start, *py_stop; - if (_py_slice) { - py_slice = *_py_slice; - } else { - PyObject* owned_start = NULL; - PyObject* owned_stop = NULL; - if (_py_start) { - py_start = *_py_start; - } else { - if (has_cstart) { - owned_start = py_start = PyInt_FromSsize_t(cstart); - if (unlikely(!py_start)) goto bad; - } else - py_start = Py_None; - } - if (_py_stop) { - py_stop = *_py_stop; - } else { - if (has_cstop) { - owned_stop = py_stop = PyInt_FromSsize_t(cstop); - if (unlikely(!py_stop)) { - Py_XDECREF(owned_start); - goto bad; - } - } else - py_stop = Py_None; - } - py_slice = PySlice_New(py_start, py_stop, Py_None); - Py_XDECREF(owned_start); - Py_XDECREF(owned_stop); - if (unlikely(!py_slice)) goto bad; + if (i != ndim) + return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", + ctx->head->field->type->ndim, i); + if (!*ts) { + PyErr_SetString(PyExc_ValueError, + "Unexpected end of format string, expected ')'"); + return NULL; + } + ctx->is_valid_array = 1; + ctx->new_count = 1; + *tsp = ++ts; + return Py_None; +} +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { + int got_Z = 0; + while (1) { + switch(*ts) { + case 0: + if (ctx->enc_type != 0 && ctx->head == NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; } -#if CYTHON_USE_TYPE_SLOTS - result = mp->mp_subscript(obj, py_slice); -#else - result = PyObject_GetItem(obj, py_slice); -#endif - if (!_py_slice) { - Py_DECREF(py_slice); + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + if (ctx->head != NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + return ts; + case ' ': + case '\r': + case '\n': + ++ts; + break; + case '<': + if (!__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '>': + case '!': + if (__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '=': + case '@': + case '^': + ctx->new_packmode = *ts++; + break; + case 'T': + { + const char* ts_after_sub; + size_t i, struct_count = ctx->new_count; + size_t struct_alignment = ctx->struct_alignment; + ctx->new_count = 1; + ++ts; + if (*ts != '{') { + PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + ctx->enc_count = 0; + ctx->struct_alignment = 0; + ++ts; + ts_after_sub = ts; + for (i = 0; i != struct_count; ++i) { + ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); + if (!ts_after_sub) return NULL; + } + ts = ts_after_sub; + if (struct_alignment) ctx->struct_alignment = struct_alignment; + } + break; + case '}': + { + size_t alignment = ctx->struct_alignment; + ++ts; + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + if (alignment && ctx->fmt_offset % alignment) { + ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); + } + } + return ts; + case 'x': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->fmt_offset += ctx->new_count; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->enc_packmode = ctx->new_packmode; + ++ts; + break; + case 'Z': + got_Z = 1; + ++ts; + if (*ts != 'f' && *ts != 'd' && *ts != 'g') { + __Pyx_BufFmt_RaiseUnexpectedChar('Z'); + return NULL; + } + CYTHON_FALLTHROUGH; + case '?': case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': + case 'l': case 'L': case 'q': case 'Q': + case 'f': case 'd': case 'g': + case 'O': case 'p': + if ((ctx->enc_type == *ts) && (got_Z == ctx->is_complex) && + (ctx->enc_packmode == ctx->new_packmode) && (!ctx->is_valid_array)) { + ctx->enc_count += ctx->new_count; + ctx->new_count = 1; + got_Z = 0; + ++ts; + break; + } + CYTHON_FALLTHROUGH; + case 's': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_count = ctx->new_count; + ctx->enc_packmode = ctx->new_packmode; + ctx->enc_type = *ts; + ctx->is_complex = got_Z; + ++ts; + ctx->new_count = 1; + got_Z = 0; + break; + case ':': + ++ts; + while(*ts != ':') ++ts; + ++ts; + break; + case '(': + if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL; + break; + default: + { + int number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + ctx->new_count = (size_t)number; } - return result; } - PyErr_Format(PyExc_TypeError, - "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name); -bad: - return NULL; + } +} + +/* BufferGetAndValidate */ + static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { + if (unlikely(info->buf == NULL)) return; + if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; + __Pyx_ReleaseBuffer(info); +} +static void __Pyx_ZeroBuffer(Py_buffer* buf) { + buf->buf = NULL; + buf->obj = NULL; + buf->strides = __Pyx_zeros; + buf->shape = __Pyx_zeros; + buf->suboffsets = __Pyx_minusones; +} +static int __Pyx__GetBufferAndValidate( + Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, + int nd, int cast, __Pyx_BufFmt_StackElem* stack) +{ + buf->buf = NULL; + if (unlikely(__Pyx_GetBuffer(obj, buf, flags) == -1)) { + __Pyx_ZeroBuffer(buf); + return -1; + } + if (unlikely(buf->ndim != nd)) { + PyErr_Format(PyExc_ValueError, + "Buffer has wrong number of dimensions (expected %d, got %d)", + nd, buf->ndim); + goto fail; + } + if (!cast) { + __Pyx_BufFmt_Context ctx; + __Pyx_BufFmt_Init(&ctx, stack, dtype); + if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; + } + if (unlikely((size_t)buf->itemsize != dtype->size)) { + PyErr_Format(PyExc_ValueError, + "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)", + buf->itemsize, (buf->itemsize > 1) ? "s" : "", + dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); + goto fail; + } + if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; + return 0; +fail:; + __Pyx_SafeReleaseBuffer(buf); + return -1; } /* PyIntBinop */ #if !CYTHON_COMPILING_IN_PYPY -static PyObject* __Pyx_PyInt_SubtractCObj(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) { - (void)inplace; - (void)zerodivision_check; +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); #if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(op2))) { - const long a = intval; + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; long x; - long b = PyInt_AS_LONG(op2); - x = (long)((unsigned long)a - b); - if (likely((x^a) >= 0 || (x^~b) >= 0)) + long a = PyInt_AS_LONG(op1); + + x = (long)((unsigned long)a + (unsigned long)b); + if (likely((x^a) >= 0 || (x^b) >= 0)) return PyInt_FromLong(x); - return PyLong_Type.tp_as_number->nb_subtract(op1, op2); + return PyLong_Type.tp_as_number->nb_add(op1, op2); } #endif #if CYTHON_USE_PYLONG_INTERNALS - if (likely(PyLong_CheckExact(op2))) { - const long a = intval; - long b, x; + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; #ifdef HAVE_LONG_LONG - const PY_LONG_LONG lla = intval; - PY_LONG_LONG llb, llx; + const PY_LONG_LONG llb = intval; + PY_LONG_LONG lla, llx; #endif - const digit* digits = ((PyLongObject*)op2)->ob_digit; - const Py_ssize_t size = Py_SIZE(op2); - if (likely(__Pyx_sst_abs(size) <= 1)) { - b = likely(size) ? digits[0] : 0; - if (size == -1) b = -b; + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op2); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); switch (size) { case -2: if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - b = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { - llb = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 2: if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - b = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { - llb = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case -3: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - b = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { - llb = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 3: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - b = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { - llb = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case -4: if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - b = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { - llb = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 4: if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - b = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { - llb = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; - default: return PyLong_Type.tp_as_number->nb_subtract(op1, op2); + default: return PyLong_Type.tp_as_number->nb_add(op1, op2); } } - x = a - b; + x = a + b; return PyLong_FromLong(x); #ifdef HAVE_LONG_LONG long_long: - llx = lla - llb; + llx = lla + llb; return PyLong_FromLongLong(llx); #endif } #endif - if (PyFloat_CheckExact(op2)) { - const long a = intval; - double b = PyFloat_AS_DOUBLE(op2); - double result; - PyFPE_START_PROTECT("subtract", return NULL) - result = ((double)a) - (double)b; - PyFPE_END_PROTECT(result) - return PyFloat_FromDouble(result); - } - return (inplace ? PyNumber_InPlaceSubtract : PyNumber_Subtract)(op1, op2); -} -#endif - -/* SliceObject */ - static CYTHON_INLINE int __Pyx_PyObject_SetSlice(PyObject* obj, PyObject* value, - Py_ssize_t cstart, Py_ssize_t cstop, - PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, - int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) { -#if CYTHON_USE_TYPE_SLOTS - PyMappingMethods* mp; -#if PY_MAJOR_VERSION < 3 - PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; - if (likely(ms && ms->sq_ass_slice)) { - if (!has_cstart) { - if (_py_start && (*_py_start != Py_None)) { - cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); - if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; - } else - cstart = 0; - } - if (!has_cstop) { - if (_py_stop && (*_py_stop != Py_None)) { - cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); - if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; - } else - cstop = PY_SSIZE_T_MAX; - } - if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { - Py_ssize_t l = ms->sq_length(obj); - if (likely(l >= 0)) { - if (cstop < 0) { - cstop += l; - if (cstop < 0) cstop = 0; - } - if (cstart < 0) { - cstart += l; - if (cstart < 0) cstart = 0; - } - } else { - if (!PyErr_ExceptionMatches(PyExc_OverflowError)) - goto bad; - PyErr_Clear(); - } - } - return ms->sq_ass_slice(obj, cstart, cstop, value); - } -#endif - mp = Py_TYPE(obj)->tp_as_mapping; - if (likely(mp && mp->mp_ass_subscript)) -#endif - { - int result; - PyObject *py_slice, *py_start, *py_stop; - if (_py_slice) { - py_slice = *_py_slice; - } else { - PyObject* owned_start = NULL; - PyObject* owned_stop = NULL; - if (_py_start) { - py_start = *_py_start; - } else { - if (has_cstart) { - owned_start = py_start = PyInt_FromSsize_t(cstart); - if (unlikely(!py_start)) goto bad; - } else - py_start = Py_None; - } - if (_py_stop) { - py_stop = *_py_stop; - } else { - if (has_cstop) { - owned_stop = py_stop = PyInt_FromSsize_t(cstop); - if (unlikely(!py_stop)) { - Py_XDECREF(owned_start); - goto bad; - } - } else - py_stop = Py_None; - } - py_slice = PySlice_New(py_start, py_stop, Py_None); - Py_XDECREF(owned_start); - Py_XDECREF(owned_stop); - if (unlikely(!py_slice)) goto bad; - } -#if CYTHON_USE_TYPE_SLOTS - result = mp->mp_ass_subscript(obj, py_slice, value); -#else - result = value ? PyObject_SetItem(obj, py_slice, value) : PyObject_DelItem(obj, py_slice); -#endif - if (!_py_slice) { - Py_DECREF(py_slice); - } - return result; - } - PyErr_Format(PyExc_TypeError, - "'%.200s' object does not support slice %.10s", - Py_TYPE(obj)->tp_name, value ? "assignment" : "deletion"); -bad: - return -1; -} - -/* GetTopmostException */ - #if CYTHON_USE_EXC_INFO_STACK -static _PyErr_StackItem * -__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) -{ - _PyErr_StackItem *exc_info = tstate->exc_info; - while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) && - exc_info->previous_item != NULL) - { - exc_info = exc_info->previous_item; - } - return exc_info; -} -#endif - -/* SaveResetException */ - #if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); - *type = exc_info->exc_type; - *value = exc_info->exc_value; - *tb = exc_info->exc_traceback; - #else - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; - #endif - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); -} -static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = type; - exc_info->exc_value = value; - exc_info->exc_traceback = tb; - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; - #endif - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} -#endif - -/* PyErrExceptionMatches */ - #if CYTHON_FAST_THREAD_STATE -static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; icurexc_type; - if (exc_type == err) return 1; - if (unlikely(!exc_type)) return 0; - if (unlikely(PyTuple_Check(err))) - return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); - return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); -} -#endif - -/* GetException */ - #if CYTHON_FAST_THREAD_STATE -static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) -#else -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) -#endif -{ - PyObject *local_type, *local_value, *local_tb; -#if CYTHON_FAST_THREAD_STATE - PyObject *tmp_type, *tmp_value, *tmp_tb; - local_type = tstate->curexc_type; - local_value = tstate->curexc_value; - local_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(&local_type, &local_value, &local_tb); -#endif - PyErr_NormalizeException(&local_type, &local_value, &local_tb); -#if CYTHON_FAST_THREAD_STATE - if (unlikely(tstate->curexc_type)) -#else - if (unlikely(PyErr_Occurred())) -#endif - goto bad; - #if PY_MAJOR_VERSION >= 3 - if (local_tb) { - if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) - goto bad; - } - #endif - Py_XINCREF(local_tb); - Py_XINCREF(local_type); - Py_XINCREF(local_value); - *type = local_type; - *value = local_value; - *tb = local_tb; -#if CYTHON_FAST_THREAD_STATE - #if CYTHON_USE_EXC_INFO_STACK - { - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = local_type; - exc_info->exc_value = local_value; - exc_info->exc_traceback = local_tb; - } - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = local_type; - tstate->exc_value = local_value; - tstate->exc_traceback = local_tb; - #endif - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(local_type, local_value, local_tb); -#endif - return 0; -bad: - *type = 0; - *value = 0; - *tb = 0; - Py_XDECREF(local_type); - Py_XDECREF(local_value); - Py_XDECREF(local_tb); - return -1; -} - -/* ArgTypeTest */ - static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) -{ - if (unlikely(!type)) { - PyErr_SetString(PyExc_SystemError, "Missing type object"); - return 0; - } - else if (exact) { - #if PY_MAJOR_VERSION == 2 - if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; - #endif - } - else { - if (likely(__Pyx_TypeCheck(obj, type))) return 1; - } - PyErr_Format(PyExc_TypeError, - "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", - name, type->tp_name, Py_TYPE(obj)->tp_name); - return 0; -} - -/* BytesEquals */ - static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result; -#if CYTHON_USE_UNICODE_INTERNALS - Py_hash_t hash1, hash2; - hash1 = ((PyBytesObject*)s1)->ob_shash; - hash2 = ((PyBytesObject*)s2)->ob_shash; - if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { - return (equals == Py_NE); - } -#endif - result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -#endif -} - -/* UnicodeEquals */ - static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); #else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; -#endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) - return -1; - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } -#if CYTHON_USE_UNICODE_INTERNALS - { - Py_hash_t hash1, hash2; - #if CYTHON_PEP393_ENABLED - hash1 = ((PyASCIIObject*)s1)->hash; - hash2 = ((PyASCIIObject*)s2)->hash; - #else - hash1 = ((PyUnicodeObject*)s1)->hash; - hash2 = ((PyUnicodeObject*)s2)->hash; - #endif - if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { - goto return_ne; - } - } -#endif - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, (size_t)(length * kind)); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; + double a = PyFloat_AS_DOUBLE(op1); +#endif + double result; + + PyFPE_START_PROTECT("add", return NULL) + result = ((double)a) + (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); + return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); +} +#endif + +/* RaiseUnboundMemoryviewSliceNogil */ + static void __Pyx_RaiseUnboundMemoryviewSliceNogil(const char *varname) { + #ifdef WITH_THREAD + PyGILState_STATE gilstate = PyGILState_Ensure(); #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); + __Pyx_RaiseUnboundLocalError(varname); + #ifdef WITH_THREAD + PyGILState_Release(gilstate); #endif - return (equals == Py_NE); -#endif } -/* None */ - static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ssize_t b) { - Py_ssize_t q = a / b; - Py_ssize_t r = a - q*b; - q -= ((r != 0) & ((r ^ b) < 0)); - return q; +/* ErrOccurredWithGIL */ + static CYTHON_INLINE int __Pyx_ErrOccurredWithGIL(void) { + int err; + #ifdef WITH_THREAD + PyGILState_STATE _save = PyGILState_Ensure(); + #endif + err = !!PyErr_Occurred(); + #ifdef WITH_THREAD + PyGILState_Release(_save); + #endif + return err; } -/* GetAttr */ - static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { -#if CYTHON_USE_TYPE_SLOTS -#if PY_MAJOR_VERSION >= 3 - if (likely(PyUnicode_Check(n))) +/* PyObjectFormatAndDecref */ + static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatSimpleAndDecref(PyObject* s, PyObject* f) { + if (unlikely(!s)) return NULL; + if (likely(PyUnicode_CheckExact(s))) return s; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_CheckExact(s))) { + PyObject *result = PyUnicode_FromEncodedObject(s, NULL, "strict"); + Py_DECREF(s); + return result; + } + #endif + return __Pyx_PyObject_FormatAndDecref(s, f); +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatAndDecref(PyObject* s, PyObject* f) { + PyObject *result = PyObject_Format(s, f); + Py_DECREF(s); + return result; +} + +/* PyObjectFormat */ + #if CYTHON_USE_UNICODE_WRITER +static PyObject* __Pyx_PyObject_Format(PyObject* obj, PyObject* format_spec) { + int ret; + _PyUnicodeWriter writer; + if (likely(PyFloat_CheckExact(obj))) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x03040000 + _PyUnicodeWriter_Init(&writer, 0); #else - if (likely(PyString_Check(n))) + _PyUnicodeWriter_Init(&writer); #endif - return __Pyx_PyObject_GetAttrStr(o, n); + ret = _PyFloat_FormatAdvancedWriter( + &writer, + obj, + format_spec, 0, PyUnicode_GET_LENGTH(format_spec)); + } else if (likely(PyLong_CheckExact(obj))) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x03040000 + _PyUnicodeWriter_Init(&writer, 0); +#else + _PyUnicodeWriter_Init(&writer); #endif - return PyObject_GetAttr(o, n); -} - -/* decode_c_string */ - static CYTHON_INLINE PyObject* __Pyx_decode_c_string( - const char* cstring, Py_ssize_t start, Py_ssize_t stop, - const char* encoding, const char* errors, - PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { - Py_ssize_t length; - if (unlikely((start < 0) | (stop < 0))) { - size_t slen = strlen(cstring); - if (unlikely(slen > (size_t) PY_SSIZE_T_MAX)) { - PyErr_SetString(PyExc_OverflowError, - "c-string too long to convert to Python"); - return NULL; - } - length = (Py_ssize_t) slen; - if (start < 0) { - start += length; - if (start < 0) - start = 0; - } - if (stop < 0) - stop += length; - } - if (unlikely(stop <= start)) - return __Pyx_NewRef(__pyx_empty_unicode); - length = stop - start; - cstring += start; - if (decode_func) { - return decode_func(cstring, length, errors); + ret = _PyLong_FormatAdvancedWriter( + &writer, + obj, + format_spec, 0, PyUnicode_GET_LENGTH(format_spec)); } else { - return PyUnicode_Decode(cstring, length, encoding, errors); + return PyObject_Format(obj, format_spec); } -} - -/* GetAttr3 */ - static PyObject *__Pyx_GetAttr3Default(PyObject *d) { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + if (unlikely(ret == -1)) { + _PyUnicodeWriter_Dealloc(&writer); return NULL; - __Pyx_PyErr_Clear(); - Py_INCREF(d); - return d; + } + return _PyUnicodeWriter_Finish(&writer); } -static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { - PyObject *r = __Pyx_GetAttr(o, n); - return (likely(r)) ? r : __Pyx_GetAttr3Default(d); +#endif + +/* PyObjectCall2Args */ + static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args[3] = {NULL, arg1, arg2}; + return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); } -/* SwapException */ - #if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = *type; - exc_info->exc_value = *value; - exc_info->exc_traceback = *tb; - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = *type; - tstate->exc_value = *value; - tstate->exc_traceback = *tb; - #endif - *type = tmp_type; - *value = tmp_value; - *tb = tmp_tb; +/* PyObjectCallMethod1 */ + static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { + PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); + Py_DECREF(method); + return result; } -#else -static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); - PyErr_SetExcInfo(*type, *value, *tb); - *type = tmp_type; - *value = tmp_value; - *tb = tmp_tb; +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { + PyObject *method = NULL, *result; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_Call2Args(method, obj, arg); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) return NULL; + return __Pyx__PyObject_CallMethod1(method, arg); } -#endif -/* Import */ - static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; +/* append */ + static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x) { + if (likely(PyList_CheckExact(L))) { + if (unlikely(__Pyx_PyList_Append(L, x) < 0)) return -1; + } else { + PyObject* retval = __Pyx_PyObject_CallMethod1(L, __pyx_n_s_append, x); + if (unlikely(!retval)) + return -1; + Py_DECREF(retval); + } + return 0; +} + +/* PyIntBinop */ + #if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddCObj(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); #if PY_MAJOR_VERSION < 3 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; + if (likely(PyInt_CheckExact(op2))) { + const long a = intval; + long x; + long b = PyInt_AS_LONG(op2); + + x = (long)((unsigned long)a + (unsigned long)b); + if (likely((x^a) >= 0 || (x^b) >= 0)) + return PyInt_FromLong(x); + return PyLong_Type.tp_as_number->nb_add(op1, op2); } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op2))) { + const long a = intval; + long b, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG lla = intval; + PY_LONG_LONG llb, llx; +#endif + if (unlikely(__Pyx_PyLong_IsZero(op2))) { + return __Pyx_NewRef(op1); } - #endif - if (!module) { - #if PY_MAJOR_VERSION < 3 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif + if (likely(__Pyx_PyLong_IsCompact(op2))) { + b = __Pyx_PyLong_CompactValue(op2); + } else { + const digit* digits = __Pyx_PyLong_Digits(op2); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op2); + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + b = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + llb = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + b = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + llb = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + b = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + llb = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + b = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + llb = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + b = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + llb = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + b = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + llb = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_add(op1, op2); + } } + x = a + b; + return PyLong_FromLong(x); +#ifdef HAVE_LONG_LONG + long_long: + llx = lla + llb; + return PyLong_FromLongLong(llx); +#endif + + } -bad: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(py_import); #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; + if (PyFloat_CheckExact(op2)) { + const long a = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double b = __pyx_PyFloat_AsDouble(op2); +#else + double b = PyFloat_AS_DOUBLE(op2); +#endif + double result; + + PyFPE_START_PROTECT("add", return NULL) + result = ((double)a) + (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); + } + return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); } +#endif -/* FastTypeChecks */ - #if CYTHON_COMPILING_IN_CPYTHON -static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { - while (a) { - a = a->tp_base; - if (a == b) - return 1; +/* PyIntBinop */ + #if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long x; + long a = PyInt_AS_LONG(op1); + + x = (long)((unsigned long)a - (unsigned long)b); + if (likely((x^a) >= 0 || (x^~b) >= 0)) + return PyInt_FromLong(x); + return PyLong_Type.tp_as_number->nb_subtract(op1, op2); } - return b == &PyBaseObject_Type; -} -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { - PyObject *mro; - if (a == b) return 1; - mro = a->tp_mro; - if (likely(mro)) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(mro); - for (i = 0; i < n; i++) { - if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) - return 1; + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG llb = intval; + PY_LONG_LONG lla, llx; +#endif + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return PyLong_FromLong(-intval); } - return 0; + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); + } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_subtract(op1, op2); + } + } + x = a - b; + return PyLong_FromLong(x); +#ifdef HAVE_LONG_LONG + long_long: + llx = lla - llb; + return PyLong_FromLongLong(llx); +#endif + + } - return __Pyx_InBases(a, b); + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + double result; + + PyFPE_START_PROTECT("subtract", return NULL) + result = ((double)a) - (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); + } + return (inplace ? PyNumber_InPlaceSubtract : PyNumber_Subtract)(op1, op2); } -#if PY_MAJOR_VERSION == 2 -static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { - PyObject *exception, *value, *tb; - int res; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&exception, &value, &tb); - res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; +#endif + +/* SliceObject */ + static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj, + Py_ssize_t cstart, Py_ssize_t cstop, + PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, + int has_cstart, int has_cstop, int wraparound) { + __Pyx_TypeName obj_type_name; +#if CYTHON_USE_TYPE_SLOTS + PyMappingMethods* mp; +#if PY_MAJOR_VERSION < 3 + PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; + if (likely(ms && ms->sq_slice)) { + if (!has_cstart) { + if (_py_start && (*_py_start != Py_None)) { + cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); + if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; + } else + cstart = 0; + } + if (!has_cstop) { + if (_py_stop && (*_py_stop != Py_None)) { + cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); + if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; + } else + cstop = PY_SSIZE_T_MAX; + } + if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { + Py_ssize_t l = ms->sq_length(obj); + if (likely(l >= 0)) { + if (cstop < 0) { + cstop += l; + if (cstop < 0) cstop = 0; + } + if (cstart < 0) { + cstart += l; + if (cstart < 0) cstart = 0; + } + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + goto bad; + PyErr_Clear(); + } + } + return ms->sq_slice(obj, cstart, cstop); } - if (!res) { - res = PyObject_IsSubclass(err, exc_type2); - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; +#else + CYTHON_UNUSED_VAR(wraparound); +#endif + mp = Py_TYPE(obj)->tp_as_mapping; + if (likely(mp && mp->mp_subscript)) +#else + CYTHON_UNUSED_VAR(wraparound); +#endif + { + PyObject* result; + PyObject *py_slice, *py_start, *py_stop; + if (_py_slice) { + py_slice = *_py_slice; + } else { + PyObject* owned_start = NULL; + PyObject* owned_stop = NULL; + if (_py_start) { + py_start = *_py_start; + } else { + if (has_cstart) { + owned_start = py_start = PyInt_FromSsize_t(cstart); + if (unlikely(!py_start)) goto bad; + } else + py_start = Py_None; + } + if (_py_stop) { + py_stop = *_py_stop; + } else { + if (has_cstop) { + owned_stop = py_stop = PyInt_FromSsize_t(cstop); + if (unlikely(!py_stop)) { + Py_XDECREF(owned_start); + goto bad; + } + } else + py_stop = Py_None; + } + py_slice = PySlice_New(py_start, py_stop, Py_None); + Py_XDECREF(owned_start); + Py_XDECREF(owned_stop); + if (unlikely(!py_slice)) goto bad; } - } - __Pyx_ErrRestore(exception, value, tb); - return res; -} +#if CYTHON_USE_TYPE_SLOTS + result = mp->mp_subscript(obj, py_slice); #else -static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { - int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; - if (!res) { - res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + result = PyObject_GetItem(obj, py_slice); +#endif + if (!_py_slice) { + Py_DECREF(py_slice); + } + return result; } - return res; + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' object is unsliceable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); +bad: + return NULL; } -#endif -static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - assert(PyExceptionClass_Check(exc_type)); - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; i= 0 || (x^~b) >= 0)) + return PyInt_FromLong(x); + return PyLong_Type.tp_as_number->nb_subtract(op1, op2); } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op2))) { + const long a = intval; + long b, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG lla = intval; + PY_LONG_LONG llb, llx; #endif - for (i=0; i 2 * PyLong_SHIFT) { + b = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + llb = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + b = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + llb = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + b = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + llb = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + b = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + llb = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + b = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + llb = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + b = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + llb = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_subtract(op1, op2); + } } + x = a - b; + return PyLong_FromLong(x); +#ifdef HAVE_LONG_LONG + long_long: + llx = lla - llb; + return PyLong_FromLongLong(llx); +#endif + + } - return PyErr_GivenExceptionMatches(err, exc_type); -} -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) { - assert(PyExceptionClass_Check(exc_type1)); - assert(PyExceptionClass_Check(exc_type2)); - if (likely(err == exc_type1 || err == exc_type2)) return 1; - if (likely(PyExceptionClass_Check(err))) { - return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2); - } - return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2)); -} + #endif + if (PyFloat_CheckExact(op2)) { + const long a = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double b = __pyx_PyFloat_AsDouble(op2); +#else + double b = PyFloat_AS_DOUBLE(op2); #endif - -/* None */ - static CYTHON_INLINE long __Pyx_div_long(long a, long b) { - long q = a / b; - long r = a - q*b; - q -= ((r != 0) & ((r ^ b) < 0)); - return q; -} - -/* ImportFrom */ - static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif + double result; + + PyFPE_START_PROTECT("subtract", return NULL) + result = ((double)a) - (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); } - return value; + return (inplace ? PyNumber_InPlaceSubtract : PyNumber_Subtract)(op1, op2); } +#endif -/* HasAttr */ - static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { - PyObject *r; - if (unlikely(!__Pyx_PyBaseString_Check(n))) { - PyErr_SetString(PyExc_TypeError, - "hasattr(): attribute name must be string"); - return -1; +/* SliceObject */ + static CYTHON_INLINE int __Pyx_PyObject_SetSlice(PyObject* obj, PyObject* value, + Py_ssize_t cstart, Py_ssize_t cstop, + PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, + int has_cstart, int has_cstop, int wraparound) { + __Pyx_TypeName obj_type_name; +#if CYTHON_USE_TYPE_SLOTS + PyMappingMethods* mp; +#if PY_MAJOR_VERSION < 3 + PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; + if (likely(ms && ms->sq_ass_slice)) { + if (!has_cstart) { + if (_py_start && (*_py_start != Py_None)) { + cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); + if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; + } else + cstart = 0; + } + if (!has_cstop) { + if (_py_stop && (*_py_stop != Py_None)) { + cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); + if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; + } else + cstop = PY_SSIZE_T_MAX; + } + if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { + Py_ssize_t l = ms->sq_length(obj); + if (likely(l >= 0)) { + if (cstop < 0) { + cstop += l; + if (cstop < 0) cstop = 0; + } + if (cstart < 0) { + cstart += l; + if (cstart < 0) cstart = 0; + } + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + goto bad; + PyErr_Clear(); + } + } + return ms->sq_ass_slice(obj, cstart, cstop, value); } - r = __Pyx_GetAttr(o, n); - if (unlikely(!r)) { - PyErr_Clear(); - return 0; - } else { - Py_DECREF(r); - return 1; +#else + CYTHON_UNUSED_VAR(wraparound); +#endif + mp = Py_TYPE(obj)->tp_as_mapping; + if (likely(mp && mp->mp_ass_subscript)) +#else + CYTHON_UNUSED_VAR(wraparound); +#endif + { + int result; + PyObject *py_slice, *py_start, *py_stop; + if (_py_slice) { + py_slice = *_py_slice; + } else { + PyObject* owned_start = NULL; + PyObject* owned_stop = NULL; + if (_py_start) { + py_start = *_py_start; + } else { + if (has_cstart) { + owned_start = py_start = PyInt_FromSsize_t(cstart); + if (unlikely(!py_start)) goto bad; + } else + py_start = Py_None; + } + if (_py_stop) { + py_stop = *_py_stop; + } else { + if (has_cstop) { + owned_stop = py_stop = PyInt_FromSsize_t(cstop); + if (unlikely(!py_stop)) { + Py_XDECREF(owned_start); + goto bad; + } + } else + py_stop = Py_None; + } + py_slice = PySlice_New(py_start, py_stop, Py_None); + Py_XDECREF(owned_start); + Py_XDECREF(owned_stop); + if (unlikely(!py_slice)) goto bad; + } +#if CYTHON_USE_TYPE_SLOTS + result = mp->mp_ass_subscript(obj, py_slice, value); +#else + result = value ? PyObject_SetItem(obj, py_slice, value) : PyObject_DelItem(obj, py_slice); +#endif + if (!_py_slice) { + Py_DECREF(py_slice); + } + return result; } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' object does not support slice %.10s", + obj_type_name, value ? "assignment" : "deletion"); + __Pyx_DECREF_TypeName(obj_type_name); +bad: + return -1; } /* PyObject_GenericGetAttrNoDict */ #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + __Pyx_TypeName type_name = __Pyx_PyType_GetName(tp); PyErr_Format(PyExc_AttributeError, #if PY_MAJOR_VERSION >= 3 - "'%.50s' object has no attribute '%U'", - tp->tp_name, attr_name); + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, attr_name); #else - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, PyString_AS_STRING(attr_name)); + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(attr_name)); #endif + __Pyx_DECREF_TypeName(type_name); return NULL; } static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { @@ -48187,16 +55358,213 @@ static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_nam } #endif +/* FixUpExtensionType */ + #if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* ValidateBasesTuple */ + #if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) { + Py_ssize_t i, n = PyTuple_GET_SIZE(bases); + for (i = 1; i < n; i++) + { + PyObject *b0 = PyTuple_GET_ITEM(bases, i); + PyTypeObject *b; +#if PY_MAJOR_VERSION < 3 + if (PyClass_Check(b0)) + { + PyErr_Format(PyExc_TypeError, "base class '%.200s' is an old-style class", + PyString_AS_STRING(((PyClassObject*)b0)->cl_name)); + return -1; + } +#endif + b = (PyTypeObject*) b0; + if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE)) + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name); + __Pyx_DECREF_TypeName(b_name); + return -1; + } + if (dictoffset == 0 && b->tp_dictoffset) + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "extension type '%.200s' has no __dict__ slot, " + "but base type '" __Pyx_FMT_TYPENAME "' has: " + "either add 'cdef dict __dict__' to the extension type " + "or add '__slots__ = [...]' to the base type", + type_name, b_name); + __Pyx_DECREF_TypeName(b_name); + return -1; + } + } + return 0; +} +#endif + +/* PyType_Ready */ + static int __Pyx_PyType_Ready(PyTypeObject *t) { +#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION) + (void)__Pyx_PyObject_CallMethod0; +#if CYTHON_USE_TYPE_SPECS + (void)__Pyx_validate_bases_tuple; +#endif + return PyType_Ready(t); +#else + int r; + PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*); + if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1)) + return -1; +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + { + int gc_was_enabled; + #if PY_VERSION_HEX >= 0x030A00b1 + gc_was_enabled = PyGC_Disable(); + (void)__Pyx_PyObject_CallMethod0; + #else + PyObject *ret, *py_status; + PyObject *gc = NULL; + #if PY_VERSION_HEX >= 0x030700a1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) + gc = PyImport_GetModule(__pyx_kp_u_gc); + #endif + if (unlikely(!gc)) gc = PyImport_Import(__pyx_kp_u_gc); + if (unlikely(!gc)) return -1; + py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_isenabled); + if (unlikely(!py_status)) { + Py_DECREF(gc); + return -1; + } + gc_was_enabled = __Pyx_PyObject_IsTrue(py_status); + Py_DECREF(py_status); + if (gc_was_enabled > 0) { + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_disable); + if (unlikely(!ret)) { + Py_DECREF(gc); + return -1; + } + Py_DECREF(ret); + } else if (unlikely(gc_was_enabled == -1)) { + Py_DECREF(gc); + return -1; + } + #endif + t->tp_flags |= Py_TPFLAGS_HEAPTYPE; +#if PY_VERSION_HEX >= 0x030A0000 + t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE; +#endif +#else + (void)__Pyx_PyObject_CallMethod0; +#endif + r = PyType_Ready(t); +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE; + #if PY_VERSION_HEX >= 0x030A00b1 + if (gc_was_enabled) + PyGC_Enable(); + #else + if (gc_was_enabled) { + PyObject *tp, *v, *tb; + PyErr_Fetch(&tp, &v, &tb); + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_enable); + if (likely(ret || r == -1)) { + Py_XDECREF(ret); + PyErr_Restore(tp, v, tb); + } else { + Py_XDECREF(tp); + Py_XDECREF(v); + Py_XDECREF(tb); + r = -1; + } + } + Py_DECREF(gc); + #endif + } +#endif + return r; +#endif +} + /* SetVTable */ - static int __Pyx_SetVtable(PyObject *dict, void *vtable) { -#if PY_VERSION_HEX >= 0x02070000 + static int __Pyx_SetVtable(PyTypeObject *type, void *vtable) { PyObject *ob = PyCapsule_New(vtable, 0, 0); + if (unlikely(!ob)) + goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(PyObject_SetAttr((PyObject *) type, __pyx_n_s_pyx_vtable, ob) < 0)) #else - PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); + if (unlikely(PyDict_SetItem(type->tp_dict, __pyx_n_s_pyx_vtable, ob) < 0)) #endif - if (!ob) - goto bad; - if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) goto bad; Py_DECREF(ob); return 0; @@ -48205,33 +55573,85 @@ static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_nam return -1; } -/* PyObjectGetAttrStrNoError */ - static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) - __Pyx_PyErr_Clear(); -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { - return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); - } +/* GetVTable */ + static void* __Pyx_GetVtable(PyTypeObject *type) { + void* ptr; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *ob = PyObject_GetAttr((PyObject *)type, __pyx_n_s_pyx_vtable); +#else + PyObject *ob = PyObject_GetItem(type->tp_dict, __pyx_n_s_pyx_vtable); #endif - result = __Pyx_PyObject_GetAttrStr(obj, attr_name); - if (unlikely(!result)) { - __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + if (!ob) + goto bad; + ptr = PyCapsule_GetPointer(ob, 0); + if (!ptr && !PyErr_Occurred()) + PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type"); + Py_DECREF(ob); + return ptr; +bad: + Py_XDECREF(ob); + return NULL; +} + +/* MergeVTables */ + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_MergeVtables(PyTypeObject *type) { + int i; + void** base_vtables; + __Pyx_TypeName tp_base_name; + __Pyx_TypeName base_name; + void* unknown = (void*)-1; + PyObject* bases = type->tp_bases; + int base_depth = 0; + { + PyTypeObject* base = type->tp_base; + while (base) { + base_depth += 1; + base = base->tp_base; + } + } + base_vtables = (void**) malloc(sizeof(void*) * (size_t)(base_depth + 1)); + base_vtables[0] = unknown; + for (i = 1; i < PyTuple_GET_SIZE(bases); i++) { + void* base_vtable = __Pyx_GetVtable(((PyTypeObject*)PyTuple_GET_ITEM(bases, i))); + if (base_vtable != NULL) { + int j; + PyTypeObject* base = type->tp_base; + for (j = 0; j < base_depth; j++) { + if (base_vtables[j] == unknown) { + base_vtables[j] = __Pyx_GetVtable(base); + base_vtables[j + 1] = unknown; + } + if (base_vtables[j] == base_vtable) { + break; + } else if (base_vtables[j] == NULL) { + goto bad; + } + base = base->tp_base; + } + } } - return result; + PyErr_Clear(); + free(base_vtables); + return 0; +bad: + tp_base_name = __Pyx_PyType_GetName(type->tp_base); + base_name = __Pyx_PyType_GetName((PyTypeObject*)PyTuple_GET_ITEM(bases, i)); + PyErr_Format(PyExc_TypeError, + "multiple bases have vtable conflict: '" __Pyx_FMT_TYPENAME "' and '" __Pyx_FMT_TYPENAME "'", tp_base_name, base_name); + __Pyx_DECREF_TypeName(tp_base_name); + __Pyx_DECREF_TypeName(base_name); + free(base_vtables); + return -1; } +#endif /* SetupReduce */ - static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { int ret; PyObject *name_attr; - name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name_2); + name_attr = __Pyx_PyObject_GetAttrStrNoError(meth, __pyx_n_s_name_2); if (likely(name_attr)) { ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); } else { @@ -48247,17 +55667,35 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, P static int __Pyx_setup_reduce(PyObject* type_obj) { int ret = 0; PyObject *object_reduce = NULL; + PyObject *object_getstate = NULL; PyObject *object_reduce_ex = NULL; PyObject *reduce = NULL; PyObject *reduce_ex = NULL; PyObject *reduce_cython = NULL; PyObject *setstate = NULL; PyObject *setstate_cython = NULL; + PyObject *getstate = NULL; +#if CYTHON_USE_PYTYPE_LOOKUP + getstate = _PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate); +#else + getstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_getstate); + if (!getstate && PyErr_Occurred()) { + goto __PYX_BAD; + } +#endif + if (getstate) { #if CYTHON_USE_PYTYPE_LOOKUP - if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; + object_getstate = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_getstate); #else - if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; + object_getstate = __Pyx_PyObject_GetAttrStrNoError((PyObject*)&PyBaseObject_Type, __pyx_n_s_getstate); + if (!object_getstate && PyErr_Occurred()) { + goto __PYX_BAD; + } #endif + if (object_getstate != getstate) { + goto __PYX_GOOD; + } + } #if CYTHON_USE_PYTYPE_LOOKUP object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; #else @@ -48279,7 +55717,7 @@ static int __Pyx_setup_reduce(PyObject* type_obj) { } else if (reduce == object_reduce || PyErr_Occurred()) { goto __PYX_BAD; } - setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate); + setstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate); if (!setstate) PyErr_Clear(); if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython); @@ -48295,13 +55733,20 @@ static int __Pyx_setup_reduce(PyObject* type_obj) { } goto __PYX_GOOD; __PYX_BAD: - if (!PyErr_Occurred()) - PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); + if (!PyErr_Occurred()) { + __Pyx_TypeName type_obj_name = + __Pyx_PyType_GetName((PyTypeObject*)type_obj); + PyErr_Format(PyExc_RuntimeError, + "Unable to initialize pickling for " __Pyx_FMT_TYPENAME, type_obj_name); + __Pyx_DECREF_TypeName(type_obj_name); + } ret = -1; __PYX_GOOD: #if !CYTHON_USE_PYTYPE_LOOKUP Py_XDECREF(object_reduce); Py_XDECREF(object_reduce_ex); + Py_XDECREF(object_getstate); + Py_XDECREF(getstate); #endif Py_XDECREF(reduce); Py_XDECREF(reduce_ex); @@ -48310,18 +55755,21 @@ static int __Pyx_setup_reduce(PyObject* type_obj) { Py_XDECREF(setstate_cython); return ret; } +#endif /* TypeImport */ - #ifndef __PYX_HAVE_RT_ImportType -#define __PYX_HAVE_RT_ImportType -static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, - size_t size, enum __Pyx_ImportType_CheckSize check_size) + #ifndef __PYX_HAVE_RT_ImportType_3_0_0 +#define __PYX_HAVE_RT_ImportType_3_0_0 +static PyTypeObject *__Pyx_ImportType_3_0_0(PyObject *module, const char *module_name, const char *class_name, + size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_0 check_size) { PyObject *result = 0; char warning[200]; Py_ssize_t basicsize; -#ifdef Py_LIMITED_API + Py_ssize_t itemsize; +#if CYTHON_COMPILING_IN_LIMITED_API PyObject *py_basicsize; + PyObject *py_itemsize; #endif result = PyObject_GetAttrString(module, class_name); if (!result) @@ -48332,8 +55780,9 @@ static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, module_name, class_name); goto bad; } -#ifndef Py_LIMITED_API +#if !CYTHON_COMPILING_IN_LIMITED_API basicsize = ((PyTypeObject *)result)->tp_basicsize; + itemsize = ((PyTypeObject *)result)->tp_itemsize; #else py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); if (!py_basicsize) @@ -48343,22 +55792,38 @@ static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, py_basicsize = 0; if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) goto bad; + py_itemsize = PyObject_GetAttrString(result, "__itemsize__"); + if (!py_itemsize) + goto bad; + itemsize = PyLong_AsSsize_t(py_itemsize); + Py_DECREF(py_itemsize); + py_itemsize = 0; + if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; #endif - if ((size_t)basicsize < size) { + if (itemsize) { + if (size % alignment) { + alignment = size % alignment; + } + if (itemsize < (Py_ssize_t)alignment) + itemsize = (Py_ssize_t)alignment; + } + if ((size_t)(basicsize + itemsize) < size) { PyErr_Format(PyExc_ValueError, "%.200s.%.200s size changed, may indicate binary incompatibility. " "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); + module_name, class_name, size, basicsize+itemsize); goto bad; } - if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) { + if (check_size == __Pyx_ImportType_CheckSize_Error_3_0_0 && + ((size_t)basicsize > size || (size_t)(basicsize + itemsize) < size)) { PyErr_Format(PyExc_ValueError, "%.200s.%.200s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); + "Expected %zd from C header, got %zd-%zd from PyObject", + module_name, class_name, size, basicsize, basicsize+itemsize); goto bad; } - else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) { + else if (check_size == __Pyx_ImportType_CheckSize_Warn_3_0_0 && (size_t)basicsize > size) { PyOS_snprintf(warning, sizeof(warning), "%s.%s size changed, may indicate binary incompatibility. " "Expected %zd from C header, got %zd from PyObject", @@ -48372,6 +55837,74 @@ static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, } #endif +/* Py3UpdateBases */ + static PyObject* +__Pyx_PEP560_update_bases(PyObject *bases) +{ + Py_ssize_t i, j, size_bases; + PyObject *base, *meth, *new_base, *result, *new_bases = NULL; + size_bases = PyTuple_GET_SIZE(bases); + for (i = 0; i < size_bases; i++) { + base = PyTuple_GET_ITEM(bases, i); + if (PyType_Check(base)) { + if (new_bases) { + if (PyList_Append(new_bases, base) < 0) { + goto error; + } + } + continue; + } + meth = __Pyx_PyObject_GetAttrStrNoError(base, __pyx_n_s_mro_entries); + if (!meth && PyErr_Occurred()) { + goto error; + } + if (!meth) { + if (new_bases) { + if (PyList_Append(new_bases, base) < 0) { + goto error; + } + } + continue; + } + new_base = __Pyx_PyObject_CallOneArg(meth, bases); + Py_DECREF(meth); + if (!new_base) { + goto error; + } + if (!PyTuple_Check(new_base)) { + PyErr_SetString(PyExc_TypeError, + "__mro_entries__ must return a tuple"); + Py_DECREF(new_base); + goto error; + } + if (!new_bases) { + if (!(new_bases = PyList_New(i))) { + goto error; + } + for (j = 0; j < i; j++) { + base = PyTuple_GET_ITEM(bases, j); + PyList_SET_ITEM(new_bases, j, base); + Py_INCREF(base); + } + } + j = PyList_GET_SIZE(new_bases); + if (PyList_SetSlice(new_bases, j, j, new_base) < 0) { + goto error; + } + Py_DECREF(new_base); + } + if (!new_bases) { + Py_INCREF(bases); + return bases; + } + result = PyList_AsTuple(new_bases); + Py_DECREF(new_bases); + return result; +error: + Py_XDECREF(new_bases); + return NULL; +} + /* CalculateMetaclass */ static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases); @@ -48411,56 +55944,193 @@ static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, return (PyObject*) metaclass; } +/* FetchSharedCythonModule */ + static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + PyObject *abi_module = PyImport_AddModule((char*) __PYX_ABI_MODULE_NAME); + if (unlikely(!abi_module)) return NULL; + Py_INCREF(abi_module); + return abi_module; +} + /* FetchCommonType */ - static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { - PyObject* fake_module; - PyTypeObject* cached_type = NULL; - fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI); - if (!fake_module) return NULL; - Py_INCREF(fake_module); - cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name); + static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; + } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); if (cached_type) { - if (!PyType_Check((PyObject*)cached_type)) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s is not a type object", - type->tp_name); + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { goto bad; } - if (cached_type->tp_basicsize != type->tp_basicsize) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s has the wrong size, try recompiling", - type->tp_name); + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; +#endif + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { goto bad; } - } else { - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; - PyErr_Clear(); - if (PyType_Ready(type) < 0) goto bad; - if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) - goto bad; - Py_INCREF(type); - cached_type = type; + goto done; } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; done: - Py_DECREF(fake_module); - return cached_type; + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; bad: Py_XDECREF(cached_type); cached_type = NULL; goto done; } +#endif + +/* PyVectorcallFastCallDict */ + #if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); +} +#endif /* CythonFunctionShared */ - #include + static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#endif +} static PyObject * -__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) { + CYTHON_UNUSED_VAR(closure); if (unlikely(op->func_doc == NULL)) { - if (op->func.m_ml->ml_doc) { + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { #if PY_MAJOR_VERSION >= 3 - op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); #else - op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); #endif if (unlikely(op->func_doc == NULL)) return NULL; @@ -48473,25 +56143,25 @@ __Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure return op->func_doc; } static int -__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) { - PyObject *tmp = op->func_doc; + CYTHON_UNUSED_VAR(context); if (value == NULL) { value = Py_None; } Py_INCREF(value); - op->func_doc = value; - Py_XDECREF(tmp); + __Pyx_Py_XDECREF_SET(op->func_doc, value); return 0; } static PyObject * -__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); if (unlikely(op->func_name == NULL)) { #if PY_MAJOR_VERSION >= 3 - op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); #else - op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); #endif if (unlikely(op->func_name == NULL)) return NULL; @@ -48500,9 +56170,9 @@ __Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *contex return op->func_name; } static int -__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) { - PyObject *tmp; + CYTHON_UNUSED_VAR(context); #if PY_MAJOR_VERSION >= 3 if (unlikely(value == NULL || !PyUnicode_Check(value))) #else @@ -48513,22 +56183,21 @@ __Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UN "__name__ must be set to a string object"); return -1; } - tmp = op->func_name; Py_INCREF(value); - op->func_name = value; - Py_XDECREF(tmp); + __Pyx_Py_XDECREF_SET(op->func_name, value); return 0; } static PyObject * -__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); Py_INCREF(op->func_qualname); return op->func_qualname; } static int -__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) { - PyObject *tmp; + CYTHON_UNUSED_VAR(context); #if PY_MAJOR_VERSION >= 3 if (unlikely(value == NULL || !PyUnicode_Check(value))) #else @@ -48539,25 +56208,14 @@ __Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, CYTHO "__qualname__ must be set to a string object"); return -1; } - tmp = op->func_qualname; Py_INCREF(value); - op->func_qualname = value; - Py_XDECREF(tmp); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); return 0; } static PyObject * -__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) -{ - PyObject *self; - self = m->func_closure; - if (self == NULL) - self = Py_None; - Py_INCREF(self); - return self; -} -static PyObject * -__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); if (unlikely(op->func_dict == NULL)) { op->func_dict = PyDict_New(); if (unlikely(op->func_dict == NULL)) @@ -48567,9 +56225,9 @@ __Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *contex return op->func_dict; } static int -__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) { - PyObject *tmp; + CYTHON_UNUSED_VAR(context); if (unlikely(value == NULL)) { PyErr_SetString(PyExc_TypeError, "function's dictionary may not be deleted"); @@ -48580,28 +56238,30 @@ __Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UN "setting function's dictionary to a non-dict"); return -1; } - tmp = op->func_dict; Py_INCREF(value); - op->func_dict = value; - Py_XDECREF(tmp); + __Pyx_Py_XDECREF_SET(op->func_dict, value); return 0; } static PyObject * -__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); Py_INCREF(op->func_globals); return op->func_globals; } static PyObject * -__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); Py_INCREF(Py_None); return Py_None; } static PyObject * -__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) { PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); Py_INCREF(result); return result; } @@ -48628,27 +56288,28 @@ __Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { return result; } static int -__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { - PyObject* tmp; +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); if (!value) { value = Py_None; - } else if (value != Py_None && !PyTuple_Check(value)) { + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { PyErr_SetString(PyExc_TypeError, "__defaults__ must be set to a tuple object"); return -1; } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); Py_INCREF(value); - tmp = op->defaults_tuple; - op->defaults_tuple = value; - Py_XDECREF(tmp); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); return 0; } static PyObject * -__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); if (unlikely(!result)) { if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; result = op->defaults_tuple; } else { result = Py_None; @@ -48658,27 +56319,28 @@ __Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *co return result; } static int -__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { - PyObject* tmp; +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); if (!value) { value = Py_None; - } else if (value != Py_None && !PyDict_Check(value)) { + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { PyErr_SetString(PyExc_TypeError, "__kwdefaults__ must be set to a dict object"); return -1; } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); Py_INCREF(value); - tmp = op->defaults_kwdict; - op->defaults_kwdict = value; - Py_XDECREF(tmp); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); return 0; } static PyObject * -__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); if (unlikely(!result)) { if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; result = op->defaults_kwdict; } else { result = Py_None; @@ -48688,24 +56350,23 @@ __Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void * return result; } static int -__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { - PyObject* tmp; +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); if (!value || value == Py_None) { value = NULL; - } else if (!PyDict_Check(value)) { + } else if (unlikely(!PyDict_Check(value))) { PyErr_SetString(PyExc_TypeError, "__annotations__ must be set to a dict object"); return -1; } Py_XINCREF(value); - tmp = op->func_annotations; - op->func_annotations = value; - Py_XDECREF(tmp); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); return 0; } static PyObject * -__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); if (unlikely(!result)) { result = PyDict_New(); if (unlikely(!result)) return NULL; @@ -48714,13 +56375,42 @@ __Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, CYTHON_UNUSED void Py_INCREF(result); return result; } +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); + PyList_SET_ITEM(fromlist, 0, marker); + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); + } +ignore: + PyErr_Clear(); + } +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} static PyGetSetDef __pyx_CyFunction_getsets[] = { {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, - {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, @@ -48733,20 +56423,37 @@ static PyGetSetDef __pyx_CyFunction_getsets[] = { {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, {0, 0, 0, 0, 0} }; static PyMemberDef __pyx_CyFunction_members[] = { - {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), PY_WRITE_RESTRICTED, 0}, + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif {0, 0, 0, 0, 0} }; static PyObject * -__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) { + CYTHON_UNUSED_VAR(args); #if PY_MAJOR_VERSION >= 3 Py_INCREF(m->func_qualname); return m->func_qualname; #else - return PyString_FromString(m->func.m_ml->ml_name); + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); #endif } static PyMethodDef __pyx_CyFunction_methods[] = { @@ -48756,26 +56463,31 @@ static PyMethodDef __pyx_CyFunction_methods[] = { #if PY_VERSION_HEX < 0x030500A0 #define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) #else -#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func.m_weakreflist) +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) #endif static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyCFunctionObject *cf = (PyCFunctionObject*) op; if (unlikely(op == NULL)) return NULL; op->flags = flags; __Pyx_CyFunction_weakreflist(op) = NULL; - op->func.m_ml = ml; - op->func.m_self = (PyObject *) op; + cf->m_ml = ml; + cf->m_self = (PyObject *) op; Py_XINCREF(closure); op->func_closure = closure; Py_XINCREF(module); - op->func.m_module = module; + cf->m_module = module; op->func_dict = NULL; op->func_name = NULL; Py_INCREF(qualname); op->func_qualname = qualname; op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif op->func_globals = globals; Py_INCREF(op->func_globals); Py_XINCREF(code); @@ -48787,23 +56499,56 @@ static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef * op->defaults_kwdict = NULL; op->defaults_getter = NULL; op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; + } +#endif return (PyObject *) op; } static int __Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) { Py_CLEAR(m->func_closure); - Py_CLEAR(m->func.m_module); + Py_CLEAR(((PyCFunctionObject*)m)->m_module); Py_CLEAR(m->func_dict); Py_CLEAR(m->func_name); Py_CLEAR(m->func_qualname); Py_CLEAR(m->func_doc); Py_CLEAR(m->func_globals); Py_CLEAR(m->func_code); - Py_CLEAR(m->func_classobj); +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); + } +#endif Py_CLEAR(m->defaults_tuple); Py_CLEAR(m->defaults_kwdict); Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); if (m->defaults) { PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); int i; @@ -48819,7 +56564,7 @@ static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) if (__Pyx_CyFunction_weakreflist(m) != NULL) PyObject_ClearWeakRefs((PyObject *) m); __Pyx_CyFunction_clear(m); - PyObject_GC_Del(m); + __Pyx_PyHeapTypeObject_GC_Del(m); } static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) { @@ -48829,16 +56574,17 @@ static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) { Py_VISIT(m->func_closure); - Py_VISIT(m->func.m_module); + Py_VISIT(((PyCFunctionObject*)m)->m_module); Py_VISIT(m->func_dict); Py_VISIT(m->func_name); Py_VISIT(m->func_qualname); Py_VISIT(m->func_doc); Py_VISIT(m->func_globals); Py_VISIT(m->func_code); - Py_VISIT(m->func_classobj); + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); Py_VISIT(m->defaults_tuple); Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); if (m->defaults) { PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); int i; @@ -48847,24 +56593,6 @@ static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, } return 0; } -static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) -{ -#if PY_MAJOR_VERSION < 3 - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { - Py_INCREF(func); - return func; - } - if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { - if (type == NULL) - type = (PyObject *)(Py_TYPE(obj)); - return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type))); - } - if (obj == Py_None) - obj = NULL; -#endif - return __Pyx_PyMethod_New(func, obj, type); -} static PyObject* __Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) { @@ -48921,9 +56649,7 @@ static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, Py } break; default: - PyErr_SetString(PyExc_SystemError, "Bad call flags in " - "__Pyx_CyFunction_Call. METH_OLDARGS is no " - "longer supported!"); + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); return NULL; } PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", @@ -48936,6 +56662,17 @@ static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *a static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { PyObject *result; __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); +#endif + } +#endif if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { Py_ssize_t argc; PyObject *new_args; @@ -48947,6 +56684,14 @@ static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, P self = PyTuple_GetItem(args, 0); if (unlikely(!self)) { Py_DECREF(new_args); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif return NULL; } result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); @@ -48956,13 +56701,175 @@ static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, P } return result; } +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; + } + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + return ret; +} +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else static PyTypeObject __pyx_CyFunctionType_type = { PyVarObject_HEAD_INIT(0, 0) - "cython_function_or_method", + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", sizeof(__pyx_CyFunctionObject), 0, (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif 0, 0, #if PY_MAJOR_VERSION < 3 @@ -48980,7 +56887,13 @@ static PyTypeObject __pyx_CyFunctionType_type = { 0, 0, 0, - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#ifdef _Py_TPFLAGS_HAVE_VECTORCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, 0, (traverseproc) __Pyx_CyFunction_traverse, (inquiry) __Pyx_CyFunction_clear, @@ -48997,7 +56910,7 @@ static PyTypeObject __pyx_CyFunctionType_type = { __pyx_CyFunction_getsets, 0, 0, - __Pyx_CyFunction_descr_get, + __Pyx_PyMethod_New, 0, offsetof(__pyx_CyFunctionObject, func_dict), 0, @@ -49015,15 +56928,27 @@ static PyTypeObject __pyx_CyFunctionType_type = { #if PY_VERSION_HEX >= 0x030400a1 0, #endif -#if PY_VERSION_HEX >= 0x030800b1 +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 0, #endif -#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, #endif }; -static int __pyx_CyFunction_init(void) { +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); +#endif if (unlikely(__pyx_CyFunctionType == NULL)) { return -1; } @@ -49082,7 +57007,6 @@ __pyx_FusedFunction_New(PyMethodDef *ml, int flags, if (likely(op)) { __pyx_FusedFunctionObject *fusedfunc = (__pyx_FusedFunctionObject *) op; fusedfunc->__signatures__ = NULL; - fusedfunc->type = NULL; fusedfunc->self = NULL; PyObject_GC_Track(op); } @@ -49093,7 +57017,6 @@ __pyx_FusedFunction_dealloc(__pyx_FusedFunctionObject *self) { PyObject_GC_UnTrack(self); Py_CLEAR(self->self); - Py_CLEAR(self->type); Py_CLEAR(self->__signatures__); __Pyx__CyFunction_dealloc((__pyx_CyFunctionObject *) self); } @@ -49103,7 +57026,6 @@ __pyx_FusedFunction_traverse(__pyx_FusedFunctionObject *self, void *arg) { Py_VISIT(self->self); - Py_VISIT(self->type); Py_VISIT(self->__signatures__); return __Pyx_CyFunction_traverse((__pyx_CyFunctionObject *) self, visit, arg); } @@ -49111,7 +57033,6 @@ static int __pyx_FusedFunction_clear(__pyx_FusedFunctionObject *self) { Py_CLEAR(self->self); - Py_CLEAR(self->type); Py_CLEAR(self->__signatures__); return __Pyx_CyFunction_clear((__pyx_CyFunctionObject *) self); } @@ -49126,6 +57047,12 @@ __pyx_FusedFunction_descr_get(PyObject *self, PyObject *obj, PyObject *type) } if (obj == Py_None) obj = NULL; + if (func->func.flags & __Pyx_CYFUNCTION_CLASSMETHOD) + obj = type; + if (obj == NULL) { + Py_INCREF(self); + return self; + } meth = (__pyx_FusedFunctionObject *) __pyx_FusedFunction_New( ((PyCFunctionObject *) func)->m_ml, ((__pyx_CyFunctionObject *) func)->flags, @@ -49134,14 +57061,15 @@ __pyx_FusedFunction_descr_get(PyObject *self, PyObject *obj, PyObject *type) ((PyCFunctionObject *) func)->m_module, ((__pyx_CyFunctionObject *) func)->func_globals, ((__pyx_CyFunctionObject *) func)->func_code); - if (!meth) + if (unlikely(!meth)) return NULL; if (func->func.defaults) { PyObject **pydefaults; int i; - if (!__Pyx_CyFunction_InitDefaults((PyObject*)meth, - func->func.defaults_size, - func->func.defaults_pyobjects)) { + if (unlikely(!__Pyx_CyFunction_InitDefaults( + (PyObject*)meth, + func->func.defaults_size, + func->func.defaults_pyobjects))) { Py_XDECREF((PyObject*)meth); return NULL; } @@ -49150,27 +57078,28 @@ __pyx_FusedFunction_descr_get(PyObject *self, PyObject *obj, PyObject *type) for (i = 0; i < meth->func.defaults_pyobjects; i++) Py_XINCREF(pydefaults[i]); } - Py_XINCREF(func->func.func_classobj); - meth->func.func_classobj = func->func.func_classobj; + __Pyx_CyFunction_SetClassObj(meth, __Pyx_CyFunction_GetClassObj(func)); Py_XINCREF(func->__signatures__); meth->__signatures__ = func->__signatures__; - Py_XINCREF(type); - meth->type = type; Py_XINCREF(func->func.defaults_tuple); meth->func.defaults_tuple = func->func.defaults_tuple; - if (func->func.flags & __Pyx_CYFUNCTION_CLASSMETHOD) - obj = type; Py_XINCREF(obj); meth->self = obj; return (PyObject *) meth; } static PyObject * -_obj_to_str(PyObject *obj) +_obj_to_string(PyObject *obj) { - if (PyType_Check(obj)) + if (PyUnicode_CheckExact(obj)) + return __Pyx_NewRef(obj); +#if PY_MAJOR_VERSION == 2 + else if (PyString_Check(obj)) + return PyUnicode_FromEncodedObject(obj, NULL, "strict"); +#endif + else if (PyType_Check(obj)) return PyObject_GetAttr(obj, __pyx_n_s_name_2); else - return PyObject_Str(obj); + return PyObject_Unicode(obj); } static PyObject * __pyx_FusedFunction_getitem(__pyx_FusedFunctionObject *self, PyObject *idx) @@ -49178,55 +57107,45 @@ __pyx_FusedFunction_getitem(__pyx_FusedFunctionObject *self, PyObject *idx) PyObject *signature = NULL; PyObject *unbound_result_func; PyObject *result_func = NULL; - if (self->__signatures__ == NULL) { + if (unlikely(self->__signatures__ == NULL)) { PyErr_SetString(PyExc_TypeError, "Function is not fused"); return NULL; } if (PyTuple_Check(idx)) { - PyObject *list = PyList_New(0); Py_ssize_t n = PyTuple_GET_SIZE(idx); - PyObject *sep = NULL; + PyObject *list = PyList_New(n); int i; if (unlikely(!list)) return NULL; for (i = 0; i < n; i++) { - int ret; PyObject *string; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS PyObject *item = PyTuple_GET_ITEM(idx, i); #else PyObject *item = PySequence_ITEM(idx, i); if (unlikely(!item)) goto __pyx_err; #endif - string = _obj_to_str(item); + string = _obj_to_string(item); #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) Py_DECREF(item); #endif if (unlikely(!string)) goto __pyx_err; - ret = PyList_Append(list, string); - Py_DECREF(string); - if (unlikely(ret < 0)) goto __pyx_err; - } - sep = PyUnicode_FromString("|"); - if (likely(sep)) - signature = PyUnicode_Join(sep, list); -__pyx_err: -; + PyList_SET_ITEM(list, i, string); + } + signature = PyUnicode_Join(__pyx_kp_u__17, list); +__pyx_err:; Py_DECREF(list); - Py_XDECREF(sep); } else { - signature = _obj_to_str(idx); + signature = _obj_to_string(idx); } - if (!signature) + if (unlikely(!signature)) return NULL; unbound_result_func = PyObject_GetItem(self->__signatures__, signature); - if (unbound_result_func) { - if (self->self || self->type) { + if (likely(unbound_result_func)) { + if (self->self) { __pyx_FusedFunctionObject *unbound = (__pyx_FusedFunctionObject *) unbound_result_func; - Py_CLEAR(unbound->func.func_classobj); - Py_XINCREF(self->func.func_classobj); - unbound->func.func_classobj = self->func.func_classobj; + __Pyx_CyFunction_SetClassObj(unbound, __Pyx_CyFunction_GetClassObj(self)); result_func = __pyx_FusedFunction_descr_get(unbound_result_func, - self->self, self->type); + self->self, self->self); } else { result_func = unbound_result_func; Py_INCREF(result_func); @@ -49242,7 +57161,7 @@ __pyx_FusedFunction_callfunction(PyObject *func, PyObject *args, PyObject *kw) __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; int static_specialized = (cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD && !((__pyx_FusedFunctionObject *) func)->__signatures__); - if (cyfunc->flags & __Pyx_CYFUNCTION_CCLASS && !static_specialized) { + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !static_specialized) { return __Pyx_CyFunction_CallAsMethod(func, args, kw); } else { return __Pyx_CyFunction_Call(func, args, kw); @@ -49256,20 +57175,17 @@ __pyx_FusedFunction_call(PyObject *func, PyObject *args, PyObject *kw) PyObject *new_args = NULL; __pyx_FusedFunctionObject *new_func = NULL; PyObject *result = NULL; - PyObject *self = NULL; int is_staticmethod = binding_func->func.flags & __Pyx_CYFUNCTION_STATICMETHOD; - int is_classmethod = binding_func->func.flags & __Pyx_CYFUNCTION_CLASSMETHOD; if (binding_func->self) { + PyObject *self; Py_ssize_t i; new_args = PyTuple_New(argc + 1); - if (!new_args) + if (unlikely(!new_args)) return NULL; self = binding_func->self; -#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) - Py_INCREF(self); -#endif Py_INCREF(self); PyTuple_SET_ITEM(new_args, 0, self); + self = NULL; for (i = 0; i < argc; i++) { #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS PyObject *item = PyTuple_GET_ITEM(args, i); @@ -49280,33 +57196,7 @@ __pyx_FusedFunction_call(PyObject *func, PyObject *args, PyObject *kw) PyTuple_SET_ITEM(new_args, i + 1, item); } args = new_args; - } else if (binding_func->type) { - if (argc < 1) { - PyErr_SetString(PyExc_TypeError, "Need at least one argument, 0 given."); - return NULL; - } -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - self = PyTuple_GET_ITEM(args, 0); -#else - self = PySequence_ITEM(args, 0); if (unlikely(!self)) return NULL; -#endif } - if (self && !is_classmethod && !is_staticmethod) { - int is_instance = PyObject_IsInstance(self, binding_func->type); - if (unlikely(!is_instance)) { - PyErr_Format(PyExc_TypeError, - "First argument should be of type %.200s, got %.200s.", - ((PyTypeObject *) binding_func->type)->tp_name, - Py_TYPE(self)->tp_name); - goto bad; - } else if (unlikely(is_instance == -1)) { - goto bad; - } - } -#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) - Py_XDECREF(self); - self = NULL; -#endif if (binding_func->__signatures__) { PyObject *tup; if (is_staticmethod && binding_func->func.flags & __Pyx_CYFUNCTION_CCLASS) { @@ -49326,16 +57216,11 @@ __pyx_FusedFunction_call(PyObject *func, PyObject *args, PyObject *kw) Py_DECREF(tup); if (unlikely(!new_func)) goto bad; - Py_XINCREF(binding_func->func.func_classobj); - Py_CLEAR(new_func->func.func_classobj); - new_func->func.func_classobj = binding_func->func.func_classobj; + __Pyx_CyFunction_SetClassObj(new_func, __Pyx_CyFunction_GetClassObj(binding_func)); func = (PyObject *) new_func; } result = __pyx_FusedFunction_callfunction(func, args, kw); bad: -#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) - Py_XDECREF(self); -#endif Py_XDECREF(new_args); Py_XDECREF((PyObject *) new_func); return result; @@ -49346,8 +57231,33 @@ static PyMemberDef __pyx_FusedFunction_members[] = { offsetof(__pyx_FusedFunctionObject, __signatures__), READONLY, 0}, + {(char *) "__self__", T_OBJECT_EX, offsetof(__pyx_FusedFunctionObject, self), READONLY, 0}, {0, 0, 0, 0, 0}, }; +static PyGetSetDef __pyx_FusedFunction_getsets[] = { + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {0, 0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_FusedFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__pyx_FusedFunction_dealloc}, + {Py_tp_call, (void *)__pyx_FusedFunction_call}, + {Py_tp_traverse, (void *)__pyx_FusedFunction_traverse}, + {Py_tp_clear, (void *)__pyx_FusedFunction_clear}, + {Py_tp_members, (void *)__pyx_FusedFunction_members}, + {Py_tp_getset, (void *)__pyx_FusedFunction_getsets}, + {Py_tp_descr_get, (void *)__pyx_FusedFunction_descr_get}, + {Py_mp_subscript, (void *)__pyx_FusedFunction_getitem}, + {0, 0}, +}; +static PyType_Spec __pyx_FusedFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "fused_cython_function", + sizeof(__pyx_FusedFunctionObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_FusedFunctionType_slots +}; +#else static PyMappingMethods __pyx_FusedFunction_mapping_methods = { 0, (binaryfunc) __pyx_FusedFunction_getitem, @@ -49355,7 +57265,7 @@ static PyMappingMethods __pyx_FusedFunction_mapping_methods = { }; static PyTypeObject __pyx_FusedFunctionType_type = { PyVarObject_HEAD_INIT(0, 0) - "fused_cython_function", + __PYX_TYPE_MODULE_PREFIX "fused_cython_function", sizeof(__pyx_FusedFunctionObject), 0, (destructor) __pyx_FusedFunction_dealloc, @@ -49387,7 +57297,7 @@ static PyTypeObject __pyx_FusedFunctionType_type = { 0, 0, __pyx_FusedFunction_members, - __pyx_CyFunction_getsets, + __pyx_FusedFunction_getsets, &__pyx_CyFunctionType_type, 0, __pyx_FusedFunction_descr_get, @@ -49408,41 +57318,76 @@ static PyTypeObject __pyx_FusedFunctionType_type = { #if PY_VERSION_HEX >= 0x030400a1 0, #endif -#if PY_VERSION_HEX >= 0x030800b1 +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 0, #endif -#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, #endif }; -static int __pyx_FusedFunction_init(void) { +#endif +static int __pyx_FusedFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + PyObject *bases = PyTuple_Pack(1, __pyx_CyFunctionType); + if (unlikely(!bases)) { + return -1; + } + __pyx_FusedFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_FusedFunctionType_spec, bases); + Py_DECREF(bases); +#else + CYTHON_UNUSED_VAR(module); __pyx_FusedFunctionType_type.tp_base = __pyx_CyFunctionType; __pyx_FusedFunctionType = __Pyx_FetchCommonType(&__pyx_FusedFunctionType_type); - if (__pyx_FusedFunctionType == NULL) { +#endif + if (unlikely(__pyx_FusedFunctionType == NULL)) { return -1; } return 0; } +/* PyObjectLookupSpecial */ + #if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) { + PyObject *res; + PyTypeObject *tp = Py_TYPE(obj); +#if PY_MAJOR_VERSION < 3 + if (unlikely(PyInstance_Check(obj))) + return with_error ? __Pyx_PyObject_GetAttrStr(obj, attr_name) : __Pyx_PyObject_GetAttrStrNoError(obj, attr_name); +#endif + res = _PyType_Lookup(tp, attr_name); + if (likely(res)) { + descrgetfunc f = Py_TYPE(res)->tp_descr_get; + if (!f) { + Py_INCREF(res); + } else { + res = f(res, obj, (PyObject *)tp); + } + } else if (with_error) { + PyErr_SetObject(PyExc_AttributeError, attr_name); + } + return res; +} +#endif + /* Py3ClassCreate */ static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { PyObject *ns; if (metaclass) { - PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare); + PyObject *prep = __Pyx_PyObject_GetAttrStrNoError(metaclass, __pyx_n_s_prepare); if (prep) { - PyObject *pargs = PyTuple_Pack(2, name, bases); - if (unlikely(!pargs)) { - Py_DECREF(prep); - return NULL; - } - ns = PyObject_Call(prep, pargs, mkw); + PyObject *pargs[3] = {NULL, name, bases}; + ns = __Pyx_PyObject_FastCallDict(prep, pargs+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, mkw); Py_DECREF(prep); - Py_DECREF(pargs); } else { - if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError))) + if (unlikely(PyErr_Occurred())) return NULL; - PyErr_Clear(); ns = PyDict_New(); } } else { @@ -49451,18 +57396,153 @@ static int __pyx_FusedFunction_init(void) { if (unlikely(!ns)) return NULL; if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; +#if PY_VERSION_HEX >= 0x03030000 if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; +#else + CYTHON_MAYBE_UNUSED_VAR(qualname); +#endif if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; return ns; bad: Py_DECREF(ns); return NULL; } +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS +static int __Pyx_SetNamesPEP487(PyObject *type_obj) { + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *names_to_set, *key, *value, *set_name, *tmp; + Py_ssize_t i = 0; +#if CYTHON_USE_TYPE_SLOTS + names_to_set = PyDict_Copy(type->tp_dict); +#else + { + PyObject *d = PyObject_GetAttr(type_obj, __pyx_n_s_dict); + names_to_set = NULL; + if (likely(d)) { + PyObject *names_to_set = PyDict_New(); + int ret = likely(names_to_set) ? PyDict_Update(names_to_set, d) : -1; + Py_DECREF(d); + if (unlikely(ret < 0)) + Py_CLEAR(names_to_set); + } + } +#endif + if (unlikely(names_to_set == NULL)) + goto bad; + while (PyDict_Next(names_to_set, &i, &key, &value)) { + set_name = __Pyx_PyObject_LookupSpecialNoError(value, __pyx_n_s_set_name); + if (unlikely(set_name != NULL)) { + tmp = __Pyx_PyObject_Call2Args(set_name, type_obj, key); + Py_DECREF(set_name); + if (unlikely(tmp == NULL)) { + __Pyx_TypeName value_type_name = + __Pyx_PyType_GetName(Py_TYPE(value)); + __Pyx_TypeName type_name = __Pyx_PyType_GetName(type); + PyErr_Format(PyExc_RuntimeError, +#if PY_MAJOR_VERSION >= 3 + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %R " "in '" __Pyx_FMT_TYPENAME "'", + value_type_name, key, type_name); +#else + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %.100s in '" __Pyx_FMT_TYPENAME "'", + value_type_name, + PyString_Check(key) ? PyString_AS_STRING(key) : "?", + type_name); +#endif + goto bad; + } else { + Py_DECREF(tmp); + } + } + else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } + Py_DECREF(names_to_set); + return 0; +bad: + Py_XDECREF(names_to_set); + return -1; +} +static PyObject *__Pyx_InitSubclassPEP487(PyObject *type_obj, PyObject *mkw) { +#if CYTHON_USE_TYPE_SLOTS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *mro = type->tp_mro; + Py_ssize_t i, nbases; + if (unlikely(!mro)) goto done; + (void) &__Pyx_GetBuiltinName; + Py_INCREF(mro); + nbases = PyTuple_GET_SIZE(mro); + assert(PyTuple_GET_ITEM(mro, 0) == type_obj); + for (i = 1; i < nbases-1; i++) { + PyObject *base, *dict, *meth; + base = PyTuple_GET_ITEM(mro, i); + dict = ((PyTypeObject *)base)->tp_dict; + meth = __Pyx_PyDict_GetItemStrWithError(dict, __pyx_n_s_init_subclass); + if (unlikely(meth)) { + descrgetfunc f = Py_TYPE(meth)->tp_descr_get; + PyObject *res; + Py_INCREF(meth); + if (likely(f)) { + res = f(meth, NULL, type_obj); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + meth = res; + } + res = __Pyx_PyObject_FastCallDict(meth, NULL, 0, mkw); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + Py_DECREF(res); + goto done; + } else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } +done: + Py_XDECREF(mro); + return type_obj; +bad: + Py_XDECREF(mro); + Py_DECREF(type_obj); + return NULL; +#else + PyObject *super_type, *super, *func, *res; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + super_type = __Pyx_GetBuiltinName(__pyx_n_s_super); +#else + super_type = (PyObject*) &PySuper_Type; + (void) &__Pyx_GetBuiltinName; +#endif + super = likely(super_type) ? __Pyx_PyObject_Call2Args(super_type, type_obj, type_obj) : NULL; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + Py_XDECREF(super_type); +#endif + if (unlikely(!super)) { + Py_CLEAR(type_obj); + goto done; + } + func = __Pyx_PyObject_GetAttrStrNoError(super, __pyx_n_s_init_subclass); + Py_DECREF(super); + if (likely(!func)) { + if (unlikely(PyErr_Occurred())) + Py_CLEAR(type_obj); + goto done; + } + res = __Pyx_PyObject_FastCallDict(func, NULL, 0, mkw); + Py_DECREF(func); + if (unlikely(!res)) + Py_CLEAR(type_obj); + Py_XDECREF(res); +done: + return type_obj; +#endif +} +#endif static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass) { - PyObject *result, *margs; + PyObject *result; PyObject *owned_metaclass = NULL; + PyObject *margs[4] = {NULL, name, bases, dict}; if (allow_py2_metaclass) { owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); if (owned_metaclass) { @@ -49480,25 +57560,37 @@ static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObj return NULL; owned_metaclass = metaclass; } - margs = PyTuple_Pack(3, name, bases, dict); - if (unlikely(!margs)) { - result = NULL; - } else { - result = PyObject_Call(metaclass, margs, mkw); - Py_DECREF(margs); - } + result = __Pyx_PyObject_FastCallDict(metaclass, margs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, +#if PY_VERSION_HEX < 0x030600A4 + (metaclass == (PyObject*)&PyType_Type) ? NULL : mkw +#else + mkw +#endif + ); Py_XDECREF(owned_metaclass); +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS + if (likely(result) && likely(PyType_Check(result))) { + if (unlikely(__Pyx_SetNamesPEP487(result) < 0)) { + Py_CLEAR(result); + } else { + result = __Pyx_InitSubclassPEP487(result, mkw); + } + } +#else + (void) &__Pyx_GetBuiltinName; +#endif return result; } /* CLineInTraceback */ #ifndef CYTHON_CLINE_IN_TRACEBACK -static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) { +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { PyObject *use_cline; PyObject *ptype, *pvalue, *ptraceback; #if CYTHON_COMPILING_IN_CPYTHON PyObject **cython_runtime_dict; #endif + CYTHON_MAYBE_UNUSED_VAR(tstate); if (unlikely(!__pyx_cython_runtime)) { return c_line; } @@ -49512,7 +57604,7 @@ static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int } else #endif { - PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); if (use_cline_obj) { use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; Py_DECREF(use_cline_obj); @@ -49523,7 +57615,7 @@ static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int } if (!use_cline) { c_line = 0; - PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); } else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { c_line = 0; @@ -49534,7 +57626,8 @@ static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int #endif /* CodeObjectCache */ - static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { int start = 0, mid = 0, end = count - 1; if (end >= 0 && code_line > entries[end].code_line) { return count; @@ -49612,44 +57705,63 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { __pyx_code_cache.count++; Py_INCREF(code_object); } +#endif /* AddTraceback */ #include "compile.h" #include "frameobject.h" #include "traceback.h" +#if PY_VERSION_HEX >= 0x030b00a6 + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + _PyTraceback_Add(funcname, filename, py_line); +} +#else static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( const char *funcname, int c_line, int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; + PyCodeObject *py_code = NULL; + PyObject *py_funcname = NULL; #if PY_MAJOR_VERSION < 3 + PyObject *py_srcfile = NULL; py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif if (!py_srcfile) goto bad; + #endif if (c_line) { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; #else py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + funcname = PyUnicode_AsUTF8(py_funcname); + if (!funcname) goto bad; #endif } else { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); + if (!py_funcname) goto bad; #endif } - if (!py_funcname) goto bad; + #if PY_MAJOR_VERSION < 3 py_code = __Pyx_PyCode_New( 0, 0, 0, 0, 0, + 0, __pyx_empty_bytes, /*PyObject *code,*/ __pyx_empty_tuple, /*PyObject *consts,*/ __pyx_empty_tuple, /*PyObject *names,*/ @@ -49662,11 +57774,16 @@ static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( __pyx_empty_bytes /*PyObject *lnotab*/ ); Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); + #else + py_code = PyCode_NewEmpty(filename, funcname, py_line); + #endif + Py_XDECREF(py_funcname); // XDECREF since it's only set on Py3 if cline return py_code; bad: - Py_XDECREF(py_srcfile); Py_XDECREF(py_funcname); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_srcfile); + #endif return NULL; } static void __Pyx_AddTraceback(const char *funcname, int c_line, @@ -49674,14 +57791,24 @@ static void __Pyx_AddTraceback(const char *funcname, int c_line, PyCodeObject *py_code = 0; PyFrameObject *py_frame = 0; PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject *ptype, *pvalue, *ptraceback; if (c_line) { c_line = __Pyx_CLineForTraceback(tstate, c_line); } py_code = __pyx_find_code_object(c_line ? -c_line : py_line); if (!py_code) { + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); py_code = __Pyx_CreateCodeObjectForTraceback( funcname, c_line, py_line, filename); - if (!py_code) goto bad; + if (!py_code) { + /* If the code object creation fails, then we should clear the + fetched exception references and propagate the new exception */ + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + goto bad; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); } py_frame = PyFrame_New( @@ -49697,13 +57824,19 @@ static void __Pyx_AddTraceback(const char *funcname, int c_line, Py_XDECREF(py_code); Py_XDECREF(py_frame); } +#endif #if PY_MAJOR_VERSION < 3 static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + __Pyx_TypeName obj_type_name; if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); if (__Pyx_TypeCheck(obj, __pyx_array_type)) return __pyx_array_getbuffer(obj, view, flags); if (__Pyx_TypeCheck(obj, __pyx_memoryview_type)) return __pyx_memoryview_getbuffer(obj, view, flags); - PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_name); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' does not have the buffer interface", + obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); return -1; } static void __Pyx_ReleaseBuffer(Py_buffer *view) { @@ -49778,19 +57911,6 @@ __pyx_slices_overlap(__Pyx_memviewslice *slice1, return (start1 < end2) && (start2 < end1); } -/* Capsule */ - static CYTHON_INLINE PyObject * -__pyx_capsule_create(void *p, CYTHON_UNUSED const char *sig) -{ - PyObject *cobj; -#if PY_VERSION_HEX >= 0x02070000 - cobj = PyCapsule_New(p, sig, NULL); -#else - cobj = PyCObject_FromVoidPtr(p, NULL); -#endif - return cobj; -} - /* TypeInfoCompare */ static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b) @@ -49887,8 +58007,9 @@ __pyx_check_strides(Py_buffer *buf, int dim, int ndim, int spec) return 0; } static int -__pyx_check_suboffsets(Py_buffer *buf, int dim, CYTHON_UNUSED int ndim, int spec) +__pyx_check_suboffsets(Py_buffer *buf, int dim, int ndim, int spec) { + CYTHON_UNUSED_VAR(ndim); if (spec & __Pyx_MEMVIEW_DIRECT) { if (unlikely(buf->suboffsets && buf->suboffsets[dim] >= 0)) { PyErr_Format(PyExc_ValueError, @@ -50197,7 +58318,7 @@ static int __Pyx_ValidateAndInit_memviewslice( } /* Declarations */ - #if CYTHON_CCOMPLEX + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #ifdef __cplusplus static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { return ::std::complex< float >(x, y); @@ -50217,7 +58338,7 @@ static int __Pyx_ValidateAndInit_memviewslice( #endif /* Arithmetic */ - #if CYTHON_CCOMPLEX + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #else static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { return (a.real == b.real) && (a.imag == b.imag); @@ -50325,7 +58446,7 @@ static int __Pyx_ValidateAndInit_memviewslice( if (a.imag == 0) { if (a.real == 0) { return a; - } else if (b.imag == 0) { + } else if ((b.imag == 0) && (a.real >= 0)) { z.real = powf(a.real, b.real); z.imag = 0; return z; @@ -50351,7 +58472,7 @@ static int __Pyx_ValidateAndInit_memviewslice( #endif /* Declarations */ - #if CYTHON_CCOMPLEX + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #ifdef __cplusplus static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { return ::std::complex< double >(x, y); @@ -50371,7 +58492,7 @@ static int __Pyx_ValidateAndInit_memviewslice( #endif /* Arithmetic */ - #if CYTHON_CCOMPLEX + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #else static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { return (a.real == b.real) && (a.imag == b.imag); @@ -50479,7 +58600,7 @@ static int __Pyx_ValidateAndInit_memviewslice( if (a.imag == 0) { if (a.real == 0) { return a; - } else if (b.imag == 0) { + } else if ((b.imag == 0) && (a.real >= 0)) { z.real = pow(a.real, b.real); z.imag = 0; return z; @@ -50571,6 +58692,141 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, return new_mvs; } +/* MemviewSliceInit */ + static int +__Pyx_init_memviewslice(struct __pyx_memoryview_obj *memview, + int ndim, + __Pyx_memviewslice *memviewslice, + int memview_is_new_reference) +{ + __Pyx_RefNannyDeclarations + int i, retval=-1; + Py_buffer *buf = &memview->view; + __Pyx_RefNannySetupContext("init_memviewslice", 0); + if (unlikely(memviewslice->memview || memviewslice->data)) { + PyErr_SetString(PyExc_ValueError, + "memviewslice is already initialized!"); + goto fail; + } + if (buf->strides) { + for (i = 0; i < ndim; i++) { + memviewslice->strides[i] = buf->strides[i]; + } + } else { + Py_ssize_t stride = buf->itemsize; + for (i = ndim - 1; i >= 0; i--) { + memviewslice->strides[i] = stride; + stride *= buf->shape[i]; + } + } + for (i = 0; i < ndim; i++) { + memviewslice->shape[i] = buf->shape[i]; + if (buf->suboffsets) { + memviewslice->suboffsets[i] = buf->suboffsets[i]; + } else { + memviewslice->suboffsets[i] = -1; + } + } + memviewslice->memview = memview; + memviewslice->data = (char *)buf->buf; + if (__pyx_add_acquisition_count(memview) == 0 && !memview_is_new_reference) { + Py_INCREF(memview); + } + retval = 0; + goto no_fail; +fail: + memviewslice->memview = 0; + memviewslice->data = 0; + retval = -1; +no_fail: + __Pyx_RefNannyFinishContext(); + return retval; +} +#ifndef Py_NO_RETURN +#define Py_NO_RETURN +#endif +static void __pyx_fatalerror(const char *fmt, ...) Py_NO_RETURN { + va_list vargs; + char msg[200]; +#if PY_VERSION_HEX >= 0x030A0000 || defined(HAVE_STDARG_PROTOTYPES) + va_start(vargs, fmt); +#else + va_start(vargs); +#endif + vsnprintf(msg, 200, fmt, vargs); + va_end(vargs); + Py_FatalError(msg); +} +static CYTHON_INLINE int +__pyx_add_acquisition_count_locked(__pyx_atomic_int_type *acquisition_count, + PyThread_type_lock lock) +{ + int result; + PyThread_acquire_lock(lock, 1); + result = (*acquisition_count)++; + PyThread_release_lock(lock); + return result; +} +static CYTHON_INLINE int +__pyx_sub_acquisition_count_locked(__pyx_atomic_int_type *acquisition_count, + PyThread_type_lock lock) +{ + int result; + PyThread_acquire_lock(lock, 1); + result = (*acquisition_count)--; + PyThread_release_lock(lock); + return result; +} +static CYTHON_INLINE void +__Pyx_INC_MEMVIEW(__Pyx_memviewslice *memslice, int have_gil, int lineno) +{ + __pyx_nonatomic_int_type old_acquisition_count; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) { + return; + } + old_acquisition_count = __pyx_add_acquisition_count(memview); + if (unlikely(old_acquisition_count <= 0)) { + if (likely(old_acquisition_count == 0)) { + if (have_gil) { + Py_INCREF((PyObject *) memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_INCREF((PyObject *) memview); + PyGILState_Release(_gilstate); + } + } else { + __pyx_fatalerror("Acquisition count is %d (line %d)", + old_acquisition_count+1, lineno); + } + } +} +static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, + int have_gil, int lineno) { + __pyx_nonatomic_int_type old_acquisition_count; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) { + memslice->memview = NULL; + return; + } + old_acquisition_count = __pyx_sub_acquisition_count(memview); + memslice->data = NULL; + if (likely(old_acquisition_count > 1)) { + memslice->memview = NULL; + } else if (likely(old_acquisition_count == 1)) { + if (have_gil) { + Py_CLEAR(memslice->memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_CLEAR(memslice->memview); + PyGILState_Release(_gilstate); + } + } else { + __pyx_fatalerror("Acquisition count is %d (line %d)", + old_acquisition_count-1, lineno); + } +} + /* CIntFromPy */ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC @@ -50584,7 +58840,7 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { + if ((sizeof(int) < sizeof(long))) { __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); @@ -50598,40 +58854,45 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { - return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { - return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { - return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } } - } - break; + break; + } } #endif -#if CYTHON_COMPILING_IN_CPYTHON +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 if (unlikely(Py_SIZE(x) < 0)) { goto raise_neg_overflow; } @@ -50644,109 +58905,181 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, goto raise_neg_overflow; } #endif - if (sizeof(int) <= sizeof(unsigned long)) { + if ((sizeof(int) <= sizeof(unsigned long))) { __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) - case -2: - if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case -3: - if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case -4: - if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; + break; + } } #endif - if (sizeof(int) <= sizeof(long)) { + if ((sizeof(int) <= sizeof(long))) { __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else int val; PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 +#if PY_MAJOR_VERSION < 3 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } - #endif +#endif if (likely(v)) { + int ret = -1; +#if !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); + ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + long idigit; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (unlikely(!PyLong_CheckExact(v))) { + PyObject *tmp = v; + v = PyNumber_Long(v); + assert(PyLong_CheckExact(v)); + Py_DECREF(tmp); + if (unlikely(!v)) return (int) -1; + } +#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(x) == 0) + return (int) 0; + is_negative = Py_SIZE(x) < 0; +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + is_negative = result == 1; + } +#endif + if (is_unsigned && unlikely(is_negative)) { + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = __Pyx_NewRef(v); + } + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + val |= ((int) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(stepval) == 0) + goto unpacking_done; + #endif + } + idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + unpacking_done: + #endif + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif Py_DECREF(v); if (likely(!ret)) return val; } -#endif return (int) -1; } } else { @@ -50818,7 +59151,7 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { + if ((sizeof(long) < sizeof(long))) { __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); @@ -50832,40 +59165,45 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { - return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { - return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { - return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } } - } - break; + break; + } } #endif -#if CYTHON_COMPILING_IN_CPYTHON +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 if (unlikely(Py_SIZE(x) < 0)) { goto raise_neg_overflow; } @@ -50878,109 +59216,181 @@ __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, goto raise_neg_overflow; } #endif - if (sizeof(long) <= sizeof(unsigned long)) { + if ((sizeof(long) <= sizeof(unsigned long))) { __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) - case -2: - if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case -3: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case -4: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; + break; + } } #endif - if (sizeof(long) <= sizeof(long)) { + if ((sizeof(long) <= sizeof(long))) { __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else long val; PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 +#if PY_MAJOR_VERSION < 3 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } - #endif +#endif if (likely(v)) { + int ret = -1; +#if !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); + ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + long idigit; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (unlikely(!PyLong_CheckExact(v))) { + PyObject *tmp = v; + v = PyNumber_Long(v); + assert(PyLong_CheckExact(v)); + Py_DECREF(tmp); + if (unlikely(!v)) return (long) -1; + } +#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(x) == 0) + return (long) 0; + is_negative = Py_SIZE(x) < 0; +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + is_negative = result == 1; + } +#endif + if (is_unsigned && unlikely(is_negative)) { + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = __Pyx_NewRef(v); + } + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + val |= ((long) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(stepval) == 0) + goto unpacking_done; + #endif + } + idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + unpacking_done: + #endif + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif Py_DECREF(v); if (likely(!ret)) return val; } -#endif return (long) -1; } } else { @@ -51085,7 +59495,7 @@ static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) { const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if (sizeof(char) < sizeof(long)) { + if ((sizeof(char) < sizeof(long))) { __PYX_VERIFY_RETURN_INT(char, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); @@ -51099,40 +59509,45 @@ static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) { if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (char) 0; - case 1: __PYX_VERIFY_RETURN_INT(char, digit, digits[0]) - case 2: - if (8 * sizeof(char) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) >= 2 * PyLong_SHIFT) { - return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(char, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) >= 2 * PyLong_SHIFT)) { + return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } } - } - break; - case 3: - if (8 * sizeof(char) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) >= 3 * PyLong_SHIFT) { - return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + break; + case 3: + if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) >= 3 * PyLong_SHIFT)) { + return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } } - } - break; - case 4: - if (8 * sizeof(char) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) >= 4 * PyLong_SHIFT) { - return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + break; + case 4: + if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) >= 4 * PyLong_SHIFT)) { + return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } } - } - break; + break; + } } #endif -#if CYTHON_COMPILING_IN_CPYTHON +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 if (unlikely(Py_SIZE(x) < 0)) { goto raise_neg_overflow; } @@ -51145,109 +59560,181 @@ static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) { goto raise_neg_overflow; } #endif - if (sizeof(char) <= sizeof(unsigned long)) { + if ((sizeof(char) <= sizeof(unsigned long))) { __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) { + } else if ((sizeof(char) <= sizeof(unsigned PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (char) 0; - case -1: __PYX_VERIFY_RETURN_INT(char, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(char, digit, +digits[0]) - case -2: - if (8 * sizeof(char) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { - return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(char, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(char) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) { + return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } } - } - break; - case 2: - if (8 * sizeof(char) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { - return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + break; + case 2: + if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) { + return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } } - } - break; - case -3: - if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { - return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + break; + case -3: + if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) { + return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } } - } - break; - case 3: - if (8 * sizeof(char) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { - return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + break; + case 3: + if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) { + return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } } - } - break; - case -4: - if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) - 1 > 4 * PyLong_SHIFT) { - return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + break; + case -4: + if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) { + return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } } - } - break; - case 4: - if (8 * sizeof(char) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(char) - 1 > 4 * PyLong_SHIFT) { - return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + break; + case 4: + if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) { + return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } } - } - break; + break; + } } #endif - if (sizeof(char) <= sizeof(long)) { + if ((sizeof(char) <= sizeof(long))) { __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) { + } else if ((sizeof(char) <= sizeof(PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else char val; PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 +#if PY_MAJOR_VERSION < 3 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } - #endif +#endif if (likely(v)) { + int ret = -1; +#if !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); + ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + long idigit; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (unlikely(!PyLong_CheckExact(v))) { + PyObject *tmp = v; + v = PyNumber_Long(v); + assert(PyLong_CheckExact(v)); + Py_DECREF(tmp); + if (unlikely(!v)) return (char) -1; + } +#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(x) == 0) + return (char) 0; + is_negative = Py_SIZE(x) < 0; +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (char) -1; + is_negative = result == 1; + } +#endif + if (is_unsigned && unlikely(is_negative)) { + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + if (unlikely(!stepval)) + return (char) -1; + } else { + stepval = __Pyx_NewRef(v); + } + val = (char) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + val |= ((char) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(stepval) == 0) + goto unpacking_done; + #endif + } + idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((char) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + unpacking_done: + #endif + if (!is_unsigned) { + if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif Py_DECREF(v); if (likely(!ret)) return val; } -#endif return (char) -1; } } else { @@ -51268,15 +59755,52 @@ static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) { return (char) -1; } +/* FormatTypeName */ + #if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name_2); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XSETREF(name, __Pyx_NewRef(__pyx_n_s__58)); + } + return name; +} +#endif + /* CheckBinaryVersion */ static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { + char ctversion[5]; + int same=1, i, found_dot; + const char* rt_from_call = Py_GetVersion(); + PyOS_snprintf(ctversion, 5, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); + found_dot = 0; + for (i = 0; i < 4; i++) { + if (!ctversion[i]) { + same = (rt_from_call[i] < '0' || rt_from_call[i] > '9'); + break; + } + if (rt_from_call[i] != ctversion[i]) { + same = 0; + break; + } + } + if (!same) { + char rtversion[5] = {'\0'}; char message[200]; + for (i=0; i<4; ++i) { + if (rt_from_call[i] == '.') { + if (found_dot) break; + found_dot = 1; + } else if (rt_from_call[i] < '0' || rt_from_call[i] > '9') { + break; + } + rtversion[i] = rt_from_call[i]; + } PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " + "compile time version %s of module '%.100s' " "does not match runtime version %s", ctversion, __Pyx_MODULE_NAME, rtversion); return PyErr_WarnEx(NULL, message, 1); @@ -51285,9 +59809,9 @@ static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) { } /* FunctionImport */ - #ifndef __PYX_HAVE_RT_ImportFunction -#define __PYX_HAVE_RT_ImportFunction -static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig) { + #ifndef __PYX_HAVE_RT_ImportFunction_3_0_0 +#define __PYX_HAVE_RT_ImportFunction_3_0_0 +static int __Pyx_ImportFunction_3_0_0(PyObject *module, const char *funcname, void (**f)(void), const char *sig) { PyObject *d = 0; PyObject *cobj = 0; union { @@ -51304,7 +59828,6 @@ static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (** PyModule_GetName(module), funcname); goto bad; } -#if PY_VERSION_HEX >= 0x02070000 if (!PyCapsule_IsValid(cobj, sig)) { PyErr_Format(PyExc_TypeError, "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)", @@ -51312,21 +59835,6 @@ static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (** goto bad; } tmp.p = PyCapsule_GetPointer(cobj, sig); -#else - {const char *desc, *s1, *s2; - desc = (const char *)PyCObject_GetDesc(cobj); - if (!desc) - goto bad; - s1 = desc; s2 = sig; - while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; } - if (*s1 != *s2) { - PyErr_Format(PyExc_TypeError, - "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)", - PyModule_GetName(module), funcname, sig, desc); - goto bad; - } - tmp.p = PyCObject_AsVoidPtr(cobj);} -#endif *f = tmp.fp; if (!(*f)) goto bad; @@ -51339,9 +59847,31 @@ static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (** #endif /* InitStrings */ - static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + #if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { while (t->p) { - #if PY_MAJOR_VERSION < 3 + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else if (t->is_unicode) { *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); } else if (t->intern) { @@ -51349,23 +59879,11 @@ static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (** } else { *t->p = PyString_FromStringAndSize(t->s, t->n - 1); } - #else - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif if (!*t->p) return -1; if (PyObject_Hash(*t->p) == -1) return -1; + #endif ++t; } return 0; @@ -51427,7 +59945,7 @@ static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ return __Pyx_PyUnicode_AsStringAndSize(o, length); } else #endif -#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) if (PyByteArray_Check(o)) { *length = PyByteArray_GET_SIZE(o); return PyByteArray_AS_STRING(o); @@ -51456,22 +59974,26 @@ static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { return retval; } static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); #if PY_MAJOR_VERSION >= 3 if (PyLong_Check(result)) { if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, - "__int__ returned non-int (type %.200s). " - "The ability to return an instance of a strict subclass of int " - "is deprecated, and may be removed in a future version of Python.", - Py_TYPE(result)->tp_name)) { + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); Py_DECREF(result); return NULL; } + __Pyx_DECREF_TypeName(result_type_name); return result; } #endif PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - type_name, type_name, Py_TYPE(result)->tp_name); + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); Py_DECREF(result); return NULL; } @@ -51537,13 +60059,11 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { #endif if (likely(PyLong_CheckExact(b))) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)b)->ob_digit; - const Py_ssize_t size = Py_SIZE(b); - if (likely(__Pyx_sst_abs(size) <= 1)) { - ival = likely(size) ? digits[0] : 0; - if (size == -1) ival = -ival; - return ival; + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); switch (size) { case 2: if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { @@ -51586,6 +60106,23 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { Py_DECREF(x); return ival; } +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { + if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { + return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o); +#if PY_MAJOR_VERSION < 3 + } else if (likely(PyInt_CheckExact(o))) { + return PyInt_AS_LONG(o); +#endif + } else { + Py_ssize_t ival; + PyObject *x; + x = PyNumber_Index(o); + if (!x) return -1; + ival = PyInt_AsLong(x); + Py_DECREF(x); + return ival; + } +} static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); } @@ -51594,4 +60131,12 @@ static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { } +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ #endif /* Py_PYTHON_H */ diff --git a/cornac/models/efm/recom_efm.pyx b/cornac/models/efm/recom_efm.pyx index d38120aa9..4ec755e79 100644 --- a/cornac/models/efm/recom_efm.pyx +++ b/cornac/models/efm/recom_efm.pyx @@ -370,9 +370,9 @@ class EFM(Recommender): map_uid.append(uid) map_iid.append(iid) - ratings = np.asarray(ratings, dtype=np.float).flatten() - map_uid = np.asarray(map_uid, dtype=np.int).flatten() - map_iid = np.asarray(map_iid, dtype=np.int).flatten() + ratings = np.asarray(ratings, dtype=np.float32).flatten() + map_uid = np.asarray(map_uid, dtype=np.int32).flatten() + map_iid = np.asarray(map_iid, dtype=np.int32).flatten() A = sp.csr_matrix((ratings, (map_uid, map_iid)), shape=(self.train_set.num_users, self.train_set.num_items)) @@ -390,9 +390,9 @@ class EFM(Recommender): map_uid.append(uid) map_aspect_id.append(aid) - attention_scores = np.asarray(attention_scores, dtype=np.float).flatten() - map_uid = np.asarray(map_uid, dtype=np.int).flatten() - map_aspect_id = np.asarray(map_aspect_id, dtype=np.int).flatten() + attention_scores = np.asarray(attention_scores, dtype=np.float32).flatten() + map_uid = np.asarray(map_uid, dtype=np.int32).flatten() + map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() X = sp.csr_matrix((attention_scores, (map_uid, map_aspect_id)), shape=(self.train_set.num_users, sentiment.num_aspects)) @@ -419,9 +419,9 @@ class EFM(Recommender): avg_sentiment = total_sentiment / item_aspect_count[aid] quality_scores.append(self._compute_quality_score(avg_sentiment)) - quality_scores = np.asarray(quality_scores, dtype=np.float).flatten() - map_iid = np.asarray(map_iid, dtype=np.int).flatten() - map_aspect_id = np.asarray(map_aspect_id, dtype=np.int).flatten() + quality_scores = np.asarray(quality_scores, dtype=np.float32).flatten() + map_iid = np.asarray(map_iid, dtype=np.int32).flatten() + map_aspect_id = np.asarray(map_aspect_id, dtype=np.int32).flatten() Y = sp.csr_matrix((quality_scores, (map_iid, map_aspect_id)), shape=(self.train_set.num_items, sentiment.num_aspects)) @@ -488,16 +488,24 @@ class EFM(Recommender): most_cared_X_ = X_[most_cared_aspects_indices] most_cared_Y_ = self.U2.dot(self.V[most_cared_aspects_indices, :].T) explicit_scores = most_cared_X_.dot(most_cared_Y_.T) / (self.num_most_cared_aspects * self.rating_scale) - item_scores = self.alpha * explicit_scores + (1 - self.alpha) * self.score(user_idx) + known_item_scores = self.alpha * explicit_scores + (1 - self.alpha) * self.score(user_idx) + # check if the returned scores also cover unknown items + # if not, all unknown items will be given the MIN score + if len(known_item_scores) == self.train_set.total_items: + all_item_scores = known_item_scores + else: + all_item_scores = np.ones(self.train_set.total_items) * np.min( + known_item_scores + ) + all_item_scores[: self.train_set.num_items] = known_item_scores + + # rank items based on their scores if item_indices is None: - item_scores = item_scores + item_scores = all_item_scores[: self.train_set.num_items] item_rank = item_scores.argsort()[::-1] else: - num_items = max(self.train_set.num_items, max(item_indices) + 1) - item_scores = np.ones(num_items) * np.min(item_scores) - item_scores[:self.train_set.num_items] = item_scores - item_rank = item_scores.argsort()[::-1] - item_rank = intersects(item_rank, item_indices, assume_unique=True) - item_scores = item_scores[item_indices] + item_scores = all_item_scores[item_indices] + item_rank = np.array(item_indices)[item_scores.argsort()[::-1]] + return item_rank, item_scores